自定义LVM+LUKS并安装LD
Tofloor
poster avatar
MattD
deepin
2014-02-28 08:55
Author
本菜刚用LD没多久,觉得LD相当好用,但是美中不足的是安装器的自定义程度不足,难以满足某些高级分区方案的需求。刚好之前搜索论坛的时候发现有人写过了将LD安装到自定义btrfs+subvolume的教程:http://www.linuxdeepin.com/forum/25/16324

受此教程启发,我就试着将LD安装到自定义的LVM+LUKS加密分区。还好一次就成功了,因此写下本帖,希望能给其他人提供帮助。

本帖部分步骤将直接照搬以上教程的内容,还望@woodelf莫怪。但是我加入了许多LVM+LUKS的特有步骤。如有错误或疏漏,万望指出并纠正。

本帖所用的安装介质为LD 2013的amd64版本ISO,应当同样适用于i386。

除非特殊说明,本帖中采用的命令都需要root权限。好了,让我们正式开始:

首先,启动LiveCD,打开终端,安装一些必要的工具:
  1. apt-get install gdisk lvm2 squashfs-tools
Copy the Code
LD的LiveCD自带了LUKS加密工具和文件系统工具,因此我们只需要这三个工具就够了。我采用的是全盘GPT,共三个分区,sda1为BIOS兼容分区,sda2为/boot,采用ext4,sda3就是我们要用到的LVM+LUKS分区。

准备工作完成后,开始设置LVM+LUKS的分区规划。在这里,我把加密分区命名为dmcrypt_root,VG命名为deepin。当然,你也可以自己指定加密算法或者生成一份密钥文件:
  1. cryptsetup --cipher aes-xts-plain64 luksFormat /dev/sda3 # 之后需要输入大写的YES进行确认,并设置加密密钥
  2. cryptsetup luksOpen /dev/sda3 dmcrypt_root # 之后需要输入刚刚设置的密钥
  3. pvcreate /dev/mapper/dmcrypt_root
  4. vgcreate deepin /dev/mapper/dmcrypt_root
  5. lvcreate -L10G --name rootfs deepin         
  6. lvcreate -L4G --name swap deepin
  7. lvcreate -L20G --name usr deepin
  8. lvcreate -L20G --name var deepin
  9. lvcreate -l 100%FREE --name home deepin
Copy the Code
接着,在各个分区和LV上创建新的文件系统。为了实验不同文件系统的支持,我采用了ext4、reiserfs和xfs三种文件系统,各位可以根据需要自行调整:
  1. mkfs.ext4 /dev/sda2
  2. mkswap /dev/mapper/deepin-swap
  3. mkfs.ext4 /dev/mapper/deepin-rootfs
  4. mkfs.ext4 /dev/mapper/deepin-usr
  5. mkfs.reiserfs /dev/mapper/deepin-var
  6. mkfs.xfs /dev/mapper/deepin-home
Copy the Code
将所有的分区和LV挂载到/mnt:
  1. mount /dev/mapper/deepin-rootfs /mnt
  2. mkdir /mnt/{boot,home,usr,var}
  3. mount /dev/mapper/deepin-home /mnt/home
  4. mount /dev/mapper/deepin-usr /mnt/usr
  5. mount /dev/mapper/deepin-var /mnt/var
  6. mount /dev/sda2 /mnt/boot
Copy the Code
把光驱挂载到/mnt2,以便稍后安装系统:
  1. mkdir /mnt2
  2. mount /dev/sr0 /mnt2
Copy the Code
开始“安装”LD,即把filesystem.squashfs解压到/mnt:
  1. unsquashfs -f -d /mnt /mnt2/casper/filesystem.squashfs
Copy the Code
等待解压完成,然后我们需要chroot到安装好的系统里面去,进行一些必要的配置:
  1. cd /mnt
  2. mount --bind /dev dev
  3. mount --bind /dev/pts dev/pts
  4. mount --bind /proc proc
  5. mount --bind /sys sys
  6. chroot /mnt /bin/bash
Copy the Code
先来配置/etc/fstab,通常按照我的这一份来即可,也可以自己定义一些选项:
  1. # UNCONFIGURED FSTAB FOR BASE SYSTEM
  2. /dev/sda2    /boot    ext4    defaults    1 2
  3. /dev/mapper/deepin-rootfs    /    ext4    defaults    0 1
  4. /dev/mapper/deepin-swap    none    swap    sw    0 0
  5. /dev/mapper/deepin-home    /home    xfs    defaults    0 0
  6. /dev/mapper/deepin-usr    /usr    ext4    defaults    0 0
  7. /dev/mapper/deepin-var    /var    reiserfs    defaults    0 0
Copy the Code
然后修改/etc/hostname,改为自己喜欢的主机名。另外,修改下默认的locale。方法是创建/etc/default/locale文件,写入以下内容:
  1. LANG="zh_CN.UTF-8"
  2. LANGUAGE="zh_CN.UTF-8:zh_CN
Copy the Code
修改/etc/default/useradd文件,把SHELL=/bin/sh改为SHELL=/bin/bash。

创建新用户,按照我的示例即可:
  1. useradd -m -G disk,cdrom,audio,video,plugdev,games,users,bluetooth YOURUSERNAME
Copy the Code
别忘了设置root和用户密码:
  1. passwd
  2. passwd YOURUSERNAME
Copy the Code
通过visudo命令,把你的用户加入sudoer,在root ALL=(ALL:ALL) ALL下面添加一行:
  1. YOURUSERNAME ALL=(ALL:ALL) ALL
Copy the Code
然后,我们需要修改几个配置文件,以便initramfs能包含所有必要的模块。先是修改/etc/modules配置文件,用命令或文本编辑器添加指定模块即可:
  1. echo "dm-crypt" >> /etc/modules
Copy the Code
然后是修改/etc/initramfs-tools/modules文件,用命令或文本编辑器添加指定模块即可:
  1. echo "aes" >> /etc/initramfs-tools/modules
  2. echo "aes_x86_64" >> /etc/initramfs-tools/modules
  3. echo "aes_generic" >> /etc/initramfs-tools/modules
  4. echo "dm-crypt" >> /etc/initramfs-tools/modules
  5. echo "dm-mod" >> /etc/initramfs-tools/modules
  6. echo "sha256" >> /etc/initramfs-tools/modules
  7. echo "sha256_generic" >> /etc/initramfs-tools/modules
  8. echo "lrw" >> /etc/initramfs-tools/modules
  9. echo "xts" >> /etc/initramfs-tools/modules
  10. echo "crypto_blkcipher" >> /etc/initramfs-tools/modules
  11. echo "gf128mul" >> /etc/initramfs-tools/modules
Copy the Code
另外需要复制两个文件:
  1. cp /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks/cryptroot
  2. cp /usr/share/initramfs-tools/scripts/local-top/cryptroot /etc/initramfs-tools/scripts/local-top/cryptroot
Copy the Code
接着,用blkid命令查看下/dev/sda3的UUID:
  1. blkid /dev/sda3
Copy the Code
配置/etc/initramfs-tools/conf.d/cryptroot文件,用命令或文本编辑器添加指定模块即可:
  1. echo "CRYPTOPTS=target=lvm,source=UUID=YOUR_UUID,lvm=deepin-rootfs" > /etc/initramfs-tools/conf.d/cryptroot
Copy the Code
这里的YOUR_UUID就是上一步查看的UUID。然后,删掉一个不需要的文件,否则会导致更新的initramfs有问题:
  1. rm /etc/crypttab
Copy the Code
然后我们更新一下initramfs,使其包含所有必要的模块:
  1. update-initramfs -u -k all
Copy the Code
好了,现在可以安装grub2,并生成配置文件了:
  1. grub-install /dev/sda
  2. update-grub
Copy the Code
生成的grub.cfg就已经是一份可启动的配置文件了,无需额外修改。

然后删除ubiquity安装程序,因为我们是直接把LiveCD解压过去的,因此系统中还有这个拖油瓶:
  1. apt-get remove ubiquity
  2. apt-get autoremove
Copy the Code
完成!可以重新启动进入你的LD了。启动过程中会出现以下界面,提示你输入密钥来解密根分区,否则是无法启动的:
2.png
解密成功:
3.png
我的分区规划情况:
4.png
好了,本教程到此结束,如有疑问,欢迎提出。 :mrgreen:
Reply Favorite View the author
All Replies
woodelf
deepin
2014-03-01 00:50
#1
其实我以前也测试过,还是在LD 12.12的时候,那个版本有问题,会导致系统无法启动。
看来LD2013修复了那个问题。
Reply View the author
xliang9550
deepin
2014-03-01 23:50
#2
12.12版在GPT磁盘上安装的时候立即崩溃,12.12.1就修复了。
本人菜鸟目前没有那么研究深入,安装系统仍以GPT磁盘上的简单卷为主。至于LVM什么的暂时还只敢在虚拟机上尝试。
Reply View the author
呆了个呆
deepin
2014-08-16 00:05
#3
参照此帖成功安装 lvm deepin 2014,不过设置多多,问题也多多,慢慢更改修正。留足
Reply View the author
Ldeepin
deepin
2015-02-17 07:30
#4
           学习了!         :D  :D赞!
Reply View the author