Tiny pxe网络启动–远程安装、维护系统

Tiny pxe网络启动–远程安装、维护系统

原文链接:
https://blog.csdn.net/qq_24841037/article/details/117082305

Tiny PXE Server是一款小巧而功能强大的网络系统启动软件,支持DHCP/TFTP/HTTP/BINL/DNS等多个协议,支持grub4dos,pxelinux,ipxe等多个引导器,支持从PXE/gPXE/IPXE启动,支持http协议启动或传输文件。

Tiny PXE Server下载地址:http://erwan.labalec.fr/tinypxeserver/pxesrv.zip

启动PXE服务端

下载解压后直接运行pxesrv.exe,点击”Online“即可运行服务端,终止运行点击”Offline“。

配置说明

在这里插入图片描述

说明:

  1. ProxyDhcp:是Dhcp代理服务

    勾选:在局域网已有Dhcp服务的情况下,建议勾选,不会与现有Dhcp服务冲突,但它能传递Next-Server等选项,传统Dhcp服务不一定能传递参数和选项;

    不勾选:如果局域网没有Dhcp服务,可使用此软件的Dhcp服务,就不勾选,客户端会得到该软件分配的IP。

  2. HTTPd:开启本机的httpd服务,即web服务,可通过httpd服务来启动系统,浏览器可访问。

  3. SMB:文件共享协议,勾选并启动后主机会把当前目录下的files目录共享出去,共享名为PXE,可通过命令:net share查看主机共享出去的目录,如:

    C:\Users\wzy>net share
    
    共享名       资源                            注解
    
    -------------------------------------------------------------------------------
    C$           C:\                             默认共享
    D$           D:\                             默认共享
    E$           E:\                             默认共享
    IPC$                                         远程 IPC
    ADMIN$       C:\Windows                      远程管理
    PXE          E:\pxe网络启动\pxesrv\files
    命令成功完成。
  4. Option:有多个Option项,在不启动ProxyDhcp时,它会让主机充当DHCP服务器,分配IP地址及这些选项都能生效,启动ProxyDhcp时,这里设定的ip地址/子网/DNS等选项被忽略,由主Dhcp来分配,其它选项(比如Next-server)可以被分配。

  5. Boot File:启动文件,可选择files目录下的各种启动文件,默认ipxe.pxe适合BIOS/UEFI等多种启动,在有些情况下也有选择pxelinux.0等的,一般保持默认。

  6. Filename if user-class=gPXE or iPXE:选择ipxe或gpxe启动菜单文件,默认menu.ipxe,在files目录下,可以根据这个模板生成自己的菜单文件。

  7. More:更多选项(略)

  8. TFTP服务:面板上没有体现的服务,其实Tftp服务是pxe启动的根本,运行这个软件时,Tftp服务自动启动。没有tftp服务,就没有pxe在启动之初下载文件的能力,Httpd或Smb服务虽然能下载文件,但客户端pxe没有启动前是不能使用的;

    Tftp服务适合传输小文件,大文件传输太慢,旧的pxe仅基于tftp来传输,不适合安装大系统;

    检测服务启动是否成功,在命令行下运行,可以看到UDP:69端口在侦听:

    C:\Users\wzy>netstat -an | find "69"
     UDP    172.16.6.36:69         *:*
  9. Tftpboot目录:即Tftp服务启动的根目录,它存放pxe启动文件和菜单文件,在软件里这个目录是files目录,我们可以在files下创建各系统的子目录,但目录结构要与menu.ipxe启动菜单内核和安装包文件对应一致。

  10. 日志:在软件面板中上部,有一块区域显示日志,客户端启动时获取IP,下载文件,执行启动等都会有日志显示在上面,这里可以在出错时给我们分析排除错误很大的帮助。

iPxe启动菜单配置文件

这个菜单文件才是重点,系统提供了多个菜单文件,扩展名为.ipxe的都是,但它并非只能叫这个扩展名,.txt或者别的扩展名也是可以的,只要它是纯文件文件,符合ipxe的语法规则就可以。

具体的ipxe语法和案例可参考:https://ipxe.org/官方的文档

我们打开一个menu.ipxe的文档来看看:

#!ipxe

#set boot-url http://${proxydhcp}/next-server
set boot-url http://${next-server}
set iscsi-server ${next-server}
set iqn iqn.2008-08.com.starwindsoftware:target1
set iscsi-target iscsi:${iscsi-server}::::${iqn}
set nfs-server ${next-server}
set cifs-server //${next-server}

# Setup some basic convenience variables
set menu-timeout 5000
set submenu-timeout ${menu-timeout}

# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit

######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
#item bootsan    Boot On San (${iscsi-target})
item bootaoe    Boot On AOE (e0.0)
#item iscsi setup, sanhook or sanboot iscsi
item iscsi  Boot On San
item pxelinux    pxelinux
item grub4dos    grub4dos
item grub2    grub2
#item grub_cd       boot to dvd (via grub4dos)
#item grub_startrom     boot to startrom.0 (via grub4dos)
item grub_floppy        boot floppy (via grub4dos)
item grub_hd0       boot to hd0 (via grub4dos)
item hdt    hdt
#item netbootme Netboot.Me
#item undi_dos    undi_dos
item disk_util Disk Utilities
item winpe Live Systemes
item linux Install Linux Distros
item --gap -- ------------------------------ Advanced ---------------------------------
item config       Configure settings
item shell      Enter iPXE shell
item reboot     Reboot
item exit       Exit (boot local disk)
choose --default exit --timeout 30000 target && goto ${target}

########## UTILITY ITEMS ####################
:shell
echo Type exit to get the back to the menu
shell
set menu-timeout 0
goto start

:failed
echo Booting failed, dropping to shell
goto shell

:reboot
reboot

:exit
exit

:cancel
echo You cancelled the menu, dropping you to a shell

:config
config
goto start

:back
set submenu-timeout 0
clear submenu-default
goto start
......

整个菜单文件篇幅太大,我们后面省略,它有一级、二级、三级等多级菜单,很多小系统工具我们平时用不上,我们能根据模板编写一级菜单就基本够用了。

ipxe语法规则:

首行:

#!ipxe

这行是必须的,就像Linux的脚本文件前面的 #!/bin/bash 一样,类似于指定命令解释程序。

除了首行#号有特殊意义,后面的#都表示注释

变量设置:

set boot-url http://${next-server}
set iscsi-server ${next-server}
set iqn iqn.2008-08.com.starwindsoftware:target1
set iscsi-target iscsi:${iscsi-server}::::${iqn}
set nfs-server ${next-server}
set cifs-server //${next-server}

# Setup some basic convenience variables
set menu-timeout 5000
set submenu-timeout ${menu-timeout}

# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit

设置变量:一般把全局变量定义在前面,作用于下面所有启动项。

语法:set <变量名> <变量值>

$<变量名>:调用前面已经定义过的变量

${next-server}:是指调用在Tiny pxe server面板上指定的next-server值,通常我们把它指定为pxesrv本机

isset ${menu-default} || set menu-default exit:||表示执行前面的命令,如果前面执行结果为假,则执行后面的命令,

启动菜单设置:

案例:

1.安装windows7
2.安装windows10
3.启动再生龙系统
4.启动Debian10的系统安装

实现:

######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
item win7        Install Windows 7
item win10       Install Windows 10
item winpe       Winpe
item clonezilla  Boot clonezilla
item debian      Install Debian 10
item --gap -- ------------------------------ Advanced ---------------------------------
item --key r reboot [R] Reboot the Computer
item --key x exit   [X] Exit (boot local disk)
choose --default exit --timeout 60000 target && goto ${target}

:(冒号):这个冒号表示一段代码,到下一个冒号前,这段代码都是一个整体,会按照顺序执行,除非遇到goto跳转到其它冒号的代码段。

item:item [执行代码段名称] [代码段执行功能描述]

表示一个标题项,比如一个启动菜单项,一行一个标题,item和它后面的一个单词不显示,item后面第二个单词之后的会显示在屏幕上,比如item win7 Install windows 7,这行仅显示”Install windows 7“,后面要有:win7代码段,否则选择它也执行不了。

item –gap:此行用于分割一行,后面的内容显示在屏幕上,但它不能作为菜单项可选择,即调整光标时,它将跳过此行不能被选择。

item –key:item –key <快捷键字符> <执行代码段名称> [代码段执行功能描述]

item –key这行菜单可定义快捷键,即不将光标移动到此行,直接按一个快捷键就会立即执行。

choose –default: choose –default <执行代码段名称> –timeout <时间毫秒> target && goto ${target}

choose –default exit –timeout 60000 target && goto ${target},设置exit为默认选择项,可以修改成默认从硬盘启动或者重启皆可,&&表示执行前面的时间到期,就执行后面的语句。

程序代码段:

这里才是真正要执行的命令,代码段以:(冒号)开头,至下一个:(冒号)前截止,或者遇到goto跳转到其它代码段。

########## UTILITY ITEMS ####################
#执行错误返回到开始菜单项
:failed
echo Booting failed, dropping to shell
goto start

:reboot
reboot

:exit
exit

:win7
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows7/boot/bcd bcd || goto failed
initrd ${next-server}/windows7/boot/boot.sdi boot.sdi  || goto failed
#windows的boot.wim最好是用微软工具生成的winpe启动文件,win10的也一样,在此不赘述
initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start

:win10
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows10/boot/bcd bcd || goto failed
initrd ${next-server}/windows10/boot/boot.sdi boot.sdi  || goto failed
initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start

:winpe
sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed
goto start 

:clonezilla
initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed
kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed
boot || goto failed
goto start

:debian
cpuid --ext 29 && set arch amd64 || set arch i386
#sanboot http://ftp.fr.debian.org/debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso
sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed
boot || goto failed
goto start

上面的代码,每一个启动菜单项对应一段执行代码,每行命令执行都带了 || goto failed代码,可省略,但有它出错了它可以返回主菜单;

kernel:调用内核

initrd:调用img

sanboot:调用iso文件

以上启动过程中调用的文件,也可以调用httpd服务或者smb服务上的文件来启动,大文件不适合tftp服务来调用,速度非常慢,httpd和smb传输文件非常快,所以代码段执行的文件调用本例中我们都采用httpd路径来调取。

创建windows7/10等系统安装包存储的目录和文件

在files目录下创建,首先进入这个目录,在此用命令来创建,win的命令与linux有点类似

创建目录:

cd pxesrv\files
#创建windows7/10及其下的boot和sources子目录
#创建_ISO及其下的clonezilla子目录
mkdir windows7\boot,windows7\sources,windows10\boot,windows10\sources,_ISO\clonezilla

拷贝或解压win的启动内核文件和安装包,x为光盘驱动符号:

# windows7内核及wim安装包,加载win7的iso到x盘
copy x:\boot\bcd  pxesrv\files\windows7\boot\
copy x:\boot\boot.sdi  pxesrv\files\windows7\boot\
copy x:\sources\boot.wim  pxesrv\files\windows7\sources\

# windows10内核及wim安装包,加载win10的iso到x盘
copy x:\boot\bcd  pxesrv\files\windows10\boot\
copy x:\boot\boot.sdi  pxesrv\files\windows10\boot\
copy x:\sources\boot.wim  pxesrv\files\windows10\sources\

复制iso光盘镜像文件到指定路径,images存放iso文件:

copy e:\iso\winpe.iso pxesrv\files\images
copy e:\iso\debian-10.7.0-amd64-netinst.iso pxesrv\files\images

查下结果:

E:\pxe网络启动>tree /f pxesrv\files\windows7
├─boot
│      bcd
│      boot.sdi
│
└─sources
        boot.wim

E:\pxe网络启动>tree /f pxesrv\files\windows10
├─boot
│      bcd
│      boot.sdi
│
└─sources
        boot.wim

E:\pxe网络启动>tree /f pxesrv\files\images
E:\PXE网络启动\PXESRV\FILES\IMAGES
    debian-10.7.0-amd64-netinst.iso
    winpe.iso
没有子文件夹

结果目标文件与menu.ipxe的路径一致。

最终测试

  1. 启动服务端:
    在这里插入图片描述

  2. 启动客户端:
    在这里插入图片描述

  3. 客户端启动过程:

在这里插入图片描述

最后附上完整的menu.ipxe内容

#!ipxe

set boot-url http://${next-server}

# Setup some basic convenience variables
set menu-timeout 5000

# Ensure we have menu-default set to something
isset ${menu-default} || set menu-default exit

######## MAIN MENU ###################
:start
menu Welcome to iPXE's Boot Menu
item
item --gap -- ------------------------- Utilities ------------------------------
item win7        Install Windows 7
item win10       Install Windows 10
item winpe       Winpe
item clonezilla  Boot clonezilla
item debian      Install Debian 10
item --gap -- ------------------------------ Advanced ---------------------------------
item --key r reboot [R] Reboot the Computer
item --key x exit   [X] Exit (boot local disk)
choose --default exit --timeout 60000 target && goto ${target}

########## UTILITY ITEMS ####################
:failed
echo Booting failed, dropping to shell
goto start

:reboot
reboot

:exit
exit

:win7
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows7/boot/bcd bcd || goto failed
initrd ${next-server}/windows7/boot/boot.sdi boot.sdi  || goto failed
#windows的boot.wim最好是用微软工具生成的winpe启动文件,win10的也一样,在此不赘述
initrd ${next-server}/windows7/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start

:win10
kernel ${next-server}/wimboot || goto failed
initrd ${next-server}/windows10/boot/bcd bcd || goto failed
initrd ${next-server}/windows10/boot/boot.sdi boot.sdi  || goto failed
initrd ${next-server}/windows10/sources/boot.wim boot.wim || goto failed
boot || goto failed
goto start

:winpe
sanboot --no-describe ${boot-url}/images/winpe.iso || goto failed
goto start 

:clonezilla
initrd ${boot-url}/_ISO/clonezilla/live/initrd.img || goto failed
kernel ${boot-url}/_ISO/clonezilla/live/vmlinuz boot=live config noswap nolocales edd=on nomodeset vga=788 nosplash noprompt fetch=${boot-url}/_ISO/clonezilla/live/filesystem.squashfs || goto failed
boot || goto failed
goto start

:debian
cpuid --ext 29 && set arch amd64 || set arch i386
#sanboot http://ftp.fr.debian.org/debian/dists/Debian9.1/main/installer-amd64/current/images/netboot/mini.iso
sanboot ${boot-url}/images/debian-10.7.0-amd64-netinst.iso || goto failed
boot || goto failed
goto start

参考文档:
http://labalec.fr/erwan/?page_id=958
https://ipxe.org/docs

Debian10安装Docker

参考文章:https://www.linux265.com/news/3787.html

前提条件

  1. debian 10系统一个
  2. 至少1G RAM

在Debian上安装Docker

01、安装通过HTTPS添加新存储库所需的软件包:

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common gnupg2

02、使用以下curl命令导入存储库的GPG密钥:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

成功后,命令将返回OK。

03、将稳定的Docker APT存储库添加到系统的软件存储库列表中:

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

$(lsb_release -cs)将返回Debian发行版的名称,如果是Debian10,将返回buster值。

04、更新apt软件包列表并安装最新版本的Docker CE(Community Edition):

sudo apt update
sudo apt install -y docker-ce

05、安装完成后,Docker服务将自动启动。要验证它输入:

sudo systemctl status docker

输出类似如下:

● docker.service – Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-07-30 20:52:00 GMT; 1min 11s ago
  Docs: https://docs.docker.com

06、查看Docker的版本是:

docker -v

输出内容:

Docker version 19.03.1, build 74b1e89

在没有Sudo的情况下执行Docker命令

默认情况下,只有root 用户和具有sudo权限的用户才能执行Docker命令。

如果要在不预先添加的情况下执行Docker命令,则sudo需要将用户添加到在安装Docker CE软件包期间创建的docker组。为此,请输入:

sudo usermod -aG docker $USER

$USER是一个保存用户名的环境变量。

注销并重新登录,以便刷新组成员身份。

完成后,验证您可以运行docker不带sudo类型的命令:

docker container run hello-world

该命令将下载测试图像,在容器中运行,打印“Hello from Docker”消息并退出。输出应如下所示:

使用Docker

现在您已经在Debian 10上安装了,让我们来看看基本的docker概念和命令。

Docker 镜像

Docker镜像由一系列文件系统层组成,这些文件系统层表示构成可执行软件应用程序的图像Dockerfile中的指令。映像是一个不可变的二进制文件,包括应用程序和运行应用程序所需的所有其他依赖项,如库,二进制文件和指令。

Docker Hub上提供了大多数Docker镜像。它是一个基于云的注册服务,其中包括其他功能,用于将Docker镜像保存在公共或私有存储库中。

要从Docker Hub注册表中搜索图像,请使用该docker search命令。例如,要搜索Debian图像,您可以键入:

docker search debian

Docker容器

图像的实例称为容器。容器表示单个应用程序,进程或服务的运行时。

它可能不是最合适的比较,但如果您是程序员,您可以将Docker镜像视为类,将Docker容器视为类的实例。

要启动,停止,删除和管理容器,请使用该docker container命令。例如,以下命令将基于Debian映像启动Docker容器。如果您没有本地图像,将首先下载它:

docker container run debian

Debian容器将在启动后立即停止,因为它没有长时间运行的进程,也没有提供其他命令。容器启动,运行一个空命令,然后退出。

该开关-it允许您通过命令行与容器进行交互。要启动交互式容器类型:

docker container run -it debian /bin/bash

输出:

root@ee86c8c81b3b:/#

正如您在容器启动时从上面的输出中看到的那样,命令提示符已更改,这意味着您现在正在从容器内部工作:

要列出活动的Docker容器,请使用以下命令:

docker container ls

如果您没有任何正在运行的容器,则输出将为空。

要查看活动和非活动容器,带个参数-a

docker container ls -a

要删除一个或多个容器,只需复制容器ID(或ID)并在container rm命令后粘贴它们:

docker container rm c55680af670c

Docker国内镜像加速

阿里云容器 生成自己的加速地址

登录:https://cr.console.aliyun.com/

点击“创建我的容器镜像”,得到专属加速地址。

我的个人镜像加速器:

针对Docker客户端版本大于 1.10.0 的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://67a9qeng.mirror.aliyuncs.com"]
}
EOF

加载重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

写在最后

在Debian 10上安装Docker是一项相对简单的任务。Docker是容器技术的事实上的标准,它是DevOps工程师及其持续集成和交付管道的必备工具。

解决EDGE拦截IE程序

Windows以后要放弃IE浏览器了,将使用Edge浏览器代替IE。

但有时使用桌面上的IE浏览器主程序,它会默认打开Edge浏览器,这不是设置了默认为Edge,而是Edge浏览器的设置修改了IE程序的打开方式,把它指向了Edge程序,即拦截了IE程序的运行。

解决办法如下:

打开Edge浏览器,点击右上角的...图标,选择“设置”,点击左侧的“默认浏览器”,在右侧的“让 Internet Explorer 在 Microsoft Edge 中打开网站”项,选择右侧的“从不”选项,关闭即可。

再次打开桌面的IE浏览器,系统就不会去打开Edge浏览器了。

Linux关闭笔记本盖不休眠

systemd 处理某些电源相关的 ACPI事件,可以通过从 /etc/systemd/logind.conf以下选项进行配置:

grep -r HandleLidSwitch /etc/systemd/logind.conf

HandlePowerKey按下电源键后的行为,默认power off

HandleSleepKey 按下挂起键后的行为,默认suspend

HandleHibernateKey 按下休眠键后的行为,默认hibernate

HandleLidSwitch 合上笔记本盖后的行为,默认suspend

触发的行为可以有

ignore、power off、reboot、halt、suspend、hibernate、hybrid-sleep、lock 或 exec。

如果要合盖不休眠只需要把HandleLidSwitch选项设置为如下即可:

HandleLidSwitch=lock

echo HandleLidSwitch=lock >> /etc/systemd/logind.conf

重启服务使之生效。

systemctl restart systemd-logind

原文链接:https://blog.csdn.net/sinat_34439107/article/details/70214289

让vi支持中文显示

在用户目录下创建.vimrc文件

cat << EOF > ~/.vimrc
set fileencodings=utf-8,gb2312,gbk,gb18030
set termencoding=utf-8
set fileformats=unix
set encoding=prc
EOF

debian没有此文件,直接添加即可。

Debian10修改时区和源

修改时区:

rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ls -l /etc/localtime
date

修改源:

cat << EOF > /etc/apt/sources.list
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
EOF

apt update

debian源

debian 9 源:

163源:

cat << EOF > /etc/apt/sources.list
deb http://mirrors.163.com/debian/ stretch main non-free contrib
deb http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ stretch-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.163.com/debian-security/ stretch/updates main non-free contrib
EOF

中科大源:

debcat << EOF > /etc/apt/sources.list
deb https://mirrors.ustc.edu.cn/debian/ stretch main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ stretch main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ stretch-updates main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ stretch-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ stretch-backports main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ stretch-backports main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security/ stretch/updates main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian-security/ stretch/updates main contrib non-free
EOF

阿里云源:

cat << EOF > /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch main non-free contrib
deb http://mirrors.aliyun.com/debian-security stretch/updates main
deb-src http://mirrors.aliyun.com/debian-security stretch/updates main
deb http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ stretch-backports main non-free contrib
EOF

debian 10 源:

163源:

cat << EOF > /etc/apt/sources.list
deb http://mirrors.163.com/debian/ buster main non-free contrib
deb http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib
EOF

中科大源:

deb https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free
cat << EOF > /etc/apt/sources.list
deb https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ buster-updates main contrib non-free
deb https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free
deb https://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ buster main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ buster-updates main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian/ buster-backports main contrib non-free
deb-src https://mirrors.ustc.edu.cn/debian-security/ buster/updates main contrib non-free
EOF

阿里云源:

cat << EOF > /etc/apt/sources.list
deb http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb http://mirrors.aliyun.com/debian-security buster/updates main
deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
deb-src http://mirrors.aliyun.com/debian-security buster/updates main
deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib
deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib
EOF

替换方法:

# 默认源替换为163源:
sed -i 's#http://deb.debian.org#http://mirrors.163.com#g' /etc/apt/sources.list

# 163替换为阿里云源:
sed -i 's#http://mirrors.163.com#https://mirrors.aliyun.com#g' /etc/apt/sources.list

# debian9替换为10源:
sed -i 's/stretch/buster/g' /etc/apt/sources.list

刷新源:

apt update

grep去除空行与注释行

不显示空行:

grep -v ^$ /etc/ssh/sshd_config

不显示注释行:

grep -v ^# /etc/ssh/sshd_config

不显示空行及注释行:

grep -v "^$\|^#" /etc/ssh/sshd_config

允许Debian使用root用户和密码ssh登录:

echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
systemctl restart sshd.service