Created on 2018-04-13
開発機のセットアップ方法。 久々にやったら、割とトラブったのでメモ。
改めて書き出してみると、TUIのインストーラをポチポチしながらやったほうが早いなって思った。
ubuntuのインストーラは/home
を暗号化するか聞いてくる場面があったような気がするけど、debianはどうなんだろう。
sda (ssd, OS用)
sda1: EF02 BIOS boot partition :
sda2: 8304 Linux x86-64 root : /
sdb (ssd, データ用)
sdb1: 8300 Linux filesystem : /var, /srv
sdc (hdd, データ用)
sdc1: 8300 Linux filesystem : /home
# 適当なlive usbでマシンを起動するか、既存のlinuxマシンにssdとhddを接続する。
# 鍵を生成
dd if=/dev/random bs=1 count=8192 of=/tmp/key
# ターゲットパーティションを初期化
# sd{a,b,c}をGPTで初期化。
# sdaの34~2047セクタにBIOS boot partionを作成しておくこと。
gdisk /dev/sda
gdisk /dev/sdb
gdisk /dev/sdc
# 暗号化しておく
cryptsetup luksFormat /dev/sdb1 /tmp/keys/sdb1
cryptsetup luksFormat /dev/sdc1 /tmp/keys/sdc1
cryptsetup open /dev/sdb1 sdb1luks --key-file /tmp/key
cryptsetup open /dev/sdc1 sdc1luks --key-file /tmp/key
# filesystemを作成
mkfs.btrfs /dev/sda2
mkfs.btrfs /dev/mapper/sdb1luks
mkfs.btrfs /dev/mapper/sdc1luks
# btrfs subvolumesを作成する。
mkdir /mnt/sd{a2,b1,c1}
mount /dev/sda2 /mnt/sda2
mount /dev/mapper/sdb1luks /mnt/sdb1luks
mount /dev/mapper/sdc1luks /mnt/sdc1luks
btrfs subvolume /mnt/sda2/root
btrfs subvolume /mnt/sdb1luks/var
btrfs subvolume /mnt/sdb1luks/srv
btrfs subvolume /mnt/sdc1luks/home
umount -r /mnt
rmdir /mnt/*
# /mnt に新しいシステムのディレクトリをマウントする。
mount /dev/sda2 /mnt -o noatime,nodiratime,subvol=root
mkdir /mnt/{var,srv,home}
mount /dev/sdb1 /mnt/var -o noatime,nodiratime,subvol=var
mount /dev/sdb1 /mnt/srv -o noatime,nodiratime,subvol=srv
mount /dev/sdc1 /mnt/home -o noatime,nodiratime,subvol=home
# 鍵を保存する
# これ忘れるとマウントできなくる....
mkdir /mnt/boot
cp -a /tmp/key /mnt/boot/key
chmod -w /mnt/boot/key
chattr +i /mnt/boot/key
# base packagesをインストールする。
# --arch引数を忘れずに。
debootstrap --arch amd64 /mnt sid http://debian-mirror.sakura.ne.jp/
# chrootする
mkdir -p /mnt/{dev,proc,sys}
mount -o bind /dev /mnt/dev
mount -t proc proc /mnt/proc
mount -t sysfs sysfs /mnt/sys
chroot /mnt /bin/bash
##############################
# これ以降は、chrootの内部
##############################
# rootユーザのパスワード設定
# これ設定しておかないと、再起動後、ログインできずに詰む。
passwd
# マウント出来るようにする
cat >/etc/fstab <<EOS
# <source device> <mount point> <type> <options>
UUID=xxxx / btrfs noatime,nodiratime,ssd,subvol=root 0 1
UUID=xxxx /var btrfs noatime,nodiratime,ssd,subvol=var 0 2
UUID=xxxx /srv btrfs noatime,nodiratime,ssd,subvol=srv 0 2
UUID=xxxx /home btrfs noatime,nodiratime,subvol=home 0 2
EOS
cat >/etc/crypttab <<EOS
# <target name> <source device> <key file> <options>
ssd-var UUID=xxxx /boot/key
hdd-home UUID=xxxx /boot/key
EOS
# ネットワーク周りの設定
echo -n hostname >/etc/hostname
hostname -F /etc/hostname
vi /etc/hosts
vi /etc/resolv.conf
vi /etc/network/interfaces
# contribとnon-freeを使えるようにしておく
vi /etc/apt/sources.list
apt update
# kernel, grub, firmware
apt install linux-image-amd64 grub-pc firmware-linux-nonfree
# グラボが刺さってる場合は、ドライバを入れておく。
# これ忘れると、画面が付かないからめんどくさい
apt install firmware-amd-graphics
apt install nvidia-detect
# 多分要らないと思うけど、念の為・・・
# 起動してくれないとめんどくさいし・・・
grub-install /dev/sda
update-grub
update-initramfs -u -k all
# 設定の不備がないことを祈りながら再起動。
##############################
# これ以降は、新規インストールしたOSにrootでログインした状態
##############################
# 異常がないか確認
lsblk
mount
ip a
journalctl -b0
systemctl list-units
# timezoneを変更
dpkg-reconfigure tzdata
# localsを変更
# 初めから en_US.UTF-8 になっていると思うので、これは要らないはず。
dpkg-reconfigure locales
# 最低限必要なパッケージをインストール
apt install rsync openssh-{client,server} xorg xutils i3 tmux zsh vim-gtk3 \
git make python3-pip htop iotop snapper
# snapperの設定
vi /etc/snapper/configs/{root,var,home}
# ユーザを作る
# dotfilesを配置
# ~/.local/lib/ にいくつかのソフトウェアをインストール