[Failed] 记一次失败的 IPMI 下无盘安装 Debian + 启用 LUKS 加密

我不知道这个教程哪里错了,请不要使用于正常安装。如果您发现了错误,请在评论区指出。

I don’t know why this installation failed. If you know then plz leave a comment below. DO NOT INSTALL USING THIS METHOD.

0x00 Why

想试试全盘 LUKS 加密,结果商家不支持挂载 iso 安装…… 于是只好自己倒腾了。

0x01 Get Started

0x02 Installation Process

一切的前提是有 root 权限。

从其它介质启动

我的这个配置没有提供挂载 iso 的方法,但是商家提供了 Ubuntu 和 FreeBSD ,甚至还有 Windows PE 的救援系统启动方式,这里以 Ubuntu 为例。

分区

首先我 1TB 的硬盘,我打算分 100MB 的 /boot, 1GB 的 swap, 100GB 的 /,然后剩下的全部给了 /home。 这里打算的是除了 /boot 分区,剩下的都加密处理。

首先 fdisk 创建两个大分区, /dev/sda1 和 /dev/sda2。 不要忘记设置 boot 哦(

# mkfs.ext4 /dev/sda1

因为 /dev/sda2 是我需要加密处理的,所以 partition type 选择的是 8e,即 Linux LVM。

然后开始为加密做准备:

# cryptsetup -c aes-xts-plain64 -y --use-random luksFormat /dev/sda2
# cryptsetup luksOpen /dev/sda2 luks

注意: cryptsetup 的时候让你输入 yes 是大写的 YES!

然后创建加密分区:

# pvcreate /dev/mapper/luks
# vgcreate vg0 /dev/mapper/luks
# lvcreate --size 1G vg0 --name swap
# lvcreate --size 100G vg0 --name root
# lvcreate -l +100%FREE vg0 --name home

下面开始给他们创建文件系统:

# mkfs.ext4 /dev/mapper/vg0-root
# mkfs.ext4 /dev/mapper/vg0-home
# mkswap /dev/mapper/vg0-swap
# sync

下面要装载了:

# mkdir /mnt/debinst
# mount /dev/mapper/vg0-root /mnt/debinst
# swapon /dev/mapper/vg0-swap
# mkdir /mnt/debinst/boot
# mount /dev/sda1 /mnt/debinst/boot
# mkdir /mnt/debinst/home
# mount /dev/mapper/vg0-home /mnt/debinst/home

安装

还好,有一个 debootstrap 的官方工具可以命令行安装。

# cd ~
# mkdir install
# cd install

然后下载最新的 debootstrap :

# wget http://ftp.debian.org/debian/pool/main/d/debootstrap/debootstrap_1.0.97_all.deb
# ar -x debootstrap_1.0.97_all.deb
# cd /
# zcat /full-path-to-install/install/data.tar.gz | tar xv

然后就可以开始安装啦:

# /usr/sbin/debootstrap --arch amd64 stretch \
     /mnt/debinst http://ftp.cn.debian.org/debian

安装之后,要 bind mount /proc , /dev 和 /sys:

# mount --bind /proc /mnt/debinst/proc
# mount --bind /dev /mnt/debinst/dev
# mount --bind /sys /mnt/debinst/sys

现在我们可以进入系统了!

# LANG=en_US.UTF-8 chroot /mnt/debinst /bin/bash

接下来创建设备文件:

# apt install makedev
# cd /dev
# MAKEDEV generic # 创建 Device Files

接下来是 /etc/fstab:

# UNCONFIGURED FSTAB FOR BASE SYSTEM
#
# file system           mount point     type    options         dump    pass
/dev/mapper/vg0-root    /               ext4    defaults        0       1
/dev/sda1               /boot           ext4    ro,nosuid,nodev 0       1
/dev/mapper/vg0-home    /home           ext4    rw,nosuid,nodev 0       1

配置其它

时间

# nano /etc/adjtime

写入

0.0 0 0.0
0
UTC

然后设置自己的时区:

# dpkg-reconfigure tzdata

网络

我们需要更改4个文件, /etc/network/interfaces, /etc/resolv.conf, /etc/hostname, /etc/hosts,接下来一个一个写。

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.4.13
    netmask 255.255.255.0
    gateway 192.168.4.1

nameserver 8.8.8.8
nameserver 8.8.4.4

echo TEST > /etc/hostname

127.0.0.1 localhost
# 192.168.4.13 TEST

# The Following lines are disirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Apt

向 /etc/apt/sources.list 内写入这些:

deb-src http://ftp.us.debian.org/debian stretch main

deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main

语言

# apt install locales
# dpkg-reconfigure locales

安装内核 & 引导

因为我们要启动这个系统,需要安装内核和 boot loader:

# apt search linux-image
# apt install linux-image-4.9.0-6-amd64
# apt install grub-pc
# grub-install /dev/sda

然后编辑 /etc/default/grub,更改 GRUB_CMDLINE_LINUX 成:

...
GRUB_CMDLINE_LINUX="cryptdevice=/dev/sda2:luks:allow-discards"
...

然后再来一次:

# update-grub

如果你不用 grub 的话,你也可以用 /etc/lilo.conf:

boot=/dev/sda1 root=/dev/mapper/vg0-root install=menu delay=20 lba32 image=/vmlinuz initrd=/initrd.img label=Debian

设置 bootloader

# apt install grub-pc
# grub-install /dev/sda

设置 ssh

# apt install ssh
# passwd

然后开始编辑 /etc/ssh/sshd_config

# nano /etc/ssh/sshd_config

找到 PermitRootLogin:

PermitRootLogin yes

我想你肯定需要启用 ssh key 登录:

# mkdir /root/.ssh
# cat << EOF > /root/.ssh/authorized_keys
ssh-rsa ....
EOF

然后你肯定不会用 root 来控制机子的,对吧?

# adduser misaka00251

要结束啦

安装一些必备的软件包:

# tasksel install standard

你可能会发现有很多软件包堆积在 /var/cache/apt/archives/ ,可以清理一下空间:

# apt clean

不要忘记安装 cryptsetup!

# apt install cryptsetup lvm2

然后需要编辑 /etc/cryptsetup-initramfs/conf-hook:

...
CRYPTSETUP=y
...

然后重新配置:

# dpkg-reconfigure initramfs-tools

最后再写一下 /etc/crypttab:

# <target name> <source device> <keyfile> <options>
root_crypt /dev/sda2 none luks
home_crypt /dev/sda2 none luks
swap_crypt /dev/sda2 none swap

0x03 References

0x04 Questions

我遇到了 I have no name!

如果用 whoami 的话,你会发现系统提示这个

whoami: cannot find name for user ID 0

这时候需要写入一个 /etc/passwd

root:x:0:0:root:/root:/bin/bash

apt/wget/curl/ssh 什么的都是 command not found!

请在安装之后再 bind mount /proc /dev /sys,否则 debootstrap 的安装会不完整, 而且会生成一个 /debootstrap/debootstrap.log,里面极有可能看到这种错误:

ln: failed to create symbolic link '/mnt/debinst/dev/fd/fd': no such file of directory

0x05 Other Unnecessary Notes


如果喜欢本文,欢迎点击下方的「鼓掌」按钮!

如果上面没有加载出任何东西,可以点击这里。