在没有显示器和键盘的无头服务器上安装Debian

本文记录了用LAN+ssh远程安装Linux系统的过程及方法

基本原理就是ssh远程登录服务器+debootstrap安装Debian系统

本文记录的过程和命令比较简略,建议有一定linux基础的同学阅读

还有一种给服务器安装系统的方法是把系统装进服务器硬盘,再把硬盘装到服务器上,这里我没研究

所需工具及基本要求

  • 服务器有USB接口
  • 可以让服务器和电脑处于同一个局域网下,并且可以连接互联网
  • 电脑上安装了Linux系统,或者有虚拟机、wsl,因为需要定制debian live u盘
  • 至少2GB的u盘
  • 服务器支持uefi启动(我不会用BIOS模式引导系统..)

如果你的服务器硬盘上面有操作系统,而且BIOS里设置的是优先从硬盘启动而不是u盘,那你还是找一张亮机卡把服务器接到显示器上装系统吧。当然如果你的硬盘支持热拔插也可以先拔掉,在u盘里的live系统启动之后再插上。总之需要能从u盘启动

制作启动u盘

原版debian live镜像

方法一:去官方下载standard live iso,这里用standard版的原因是没有桌面环境,体积比较小方便操作
方法二:自己制作(比较麻烦):我自己研究的方法

修改原版镜像

下面这一部分和上面我写的另一篇文章非常像,就是多了ssh的配置,不懂的可以参考那个

  1. 解压iso文件(7z命令)
  2. 解压[iso文件解压目录]/live/filesystem.squashfs(unsquashfs命令)
  3. 挂载chroot需要的文件系统:
mount --bind /sys/ $chroot_dir/sys/ #$chroot_dir是解压之后的squashfs目录
mount --bind /proc/ $chroot_dir/proc/
mount --bind /dev/ $chroot_dir/dev/
mount --bind /dev/pts/ $chroot_dir/dev/pts/
  1. chroot进入解压的squashfs文件系统
  2. 换源,编辑解压的文件系统里的/etc/apt/sources.list
  3. 创建用户(/sbin/adduser,直接adduser不行因为root的环境变量里没有sbin),并visudo添加到sudoers,主要是因为root用户用起来太不方便了;创建完别忘了passwd修改密码,还有root密码最好也改一下
  4. su到刚才创建的用户
  5. apt update,然后apt install装系统必须的软件包:sudo network-manager openssh-server grub-efi debootstrap PS:理论上只安装network-manageropenssh-server,其他的到服务器上再安装也行
  6. 安装其他可选软件包(主要为了丰富启动u盘的功能)
neovim #编辑器
ntfs-3g #NTFS支持
btrfs-progs #Btrfs支持
smartctl #硬盘smart支持,我是用于检查机械硬盘损坏情况
pigz #多线程gz压缩
bash-completion #bash代码补全
htop #任务管理器
udisks2 #用来"弹出"u盘
  1. 安装linux内核镜像:比如我安装的是linux-image-amd64
  2. 复制initrd.imgvmlinuz到iso文件解压目录下面的live,替换掉原来的initrd和linux镜像
  3. 编辑[iso文件解压目录]/boot/grub/grub.cfg,在你需要的grub启动选项后面加上live-config.noautologin live-config.nocomponents=openssh-server,目的是阻止原版的live镜像自动登录,并且防止它禁用ssh密码登录
  4. mksquashfs打包filesystem.squashfs,替换掉原来的
  5. 在你的u盘里找(或者新建)一个fat32分区,把刚才修改好的iso文件内容复制进去,这样就可以当uefi启动u盘了,不用全部复制,我复制的文件如下
main@n960kp:/run/media/main/debssh$ ls -R
.:
boot  EFI  efi.img  live  tools

./boot:
grub

./boot/grub:
config.cfg  grub.cfg     install_start.cfg  loopback.cfg  theme.cfg
efi.img     install.cfg  live-theme         splash.png    unicode.pf2

./boot/grub/live-theme:
theme.txt

./EFI:
boot

./EFI/boot:
bootx64.efi  grubx64.efi

./live:
filesystem.squashfs  initrd.img  vmlinuz

./tools:
loadlin.exe  loadlin.txt

安装服务器系统

  1. 把u盘插服务器上,服务器用网线和路由器/光猫之类的连上,保证电脑能访问到它
  2. 在电脑上用ssh登录服务器系统

安装

具体安装过程比较长,可以类比Arch Linux的安装,我发现Debian也有官方教程,另外Arch Linux中文版安装教程

注意下面几点

  • debootstrap时选择国内镜像
  • 安装grub时别用Debian官方教程里的grub-pc,用刚才安装好的grub-efi,因为需要uefi启动,我用的安装grub的命令大概长这样grub-install --target=x86_64-efi --efi-directory=/boot/efi,记得chroot到服务器硬盘里的系统之前先mount一下EFI分区
  • 有的主板不会自动识别EFI分区下的.efi引导文件(比如我的),导致重启之后进不去系统,或者就是你有显示器的话在BIOS里找不到Debian启动选项,需要用efibootmgr手动创建uefi启动条目,我的命令大概长这样efibootmgr --create --label "Debian" --loader /EFI/debian/grubx64.efi,直接输入efibootmgr会列出当前主板保存的启动选项,创建之后就有了;这里注意,这个命令要在u盘的live系统里运行,我在chroot到硬盘里的系统之后运行会提示efivar不可用
  • 安装好系统之后别忘了安装并开启ssh服务
posted @ 2024-12-15 15:01  elight2  阅读(753)  评论(0)    收藏  举报