[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 的方法,但是商家提供了 UbuntuFreeBSD ,甚至还有 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


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

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