0. Wstęp
W tej części wpisu „Instalacja Arch linuxa”, zajmiemy się od przygotowaniu dysków do pracy i instalacji minimalnej podstawy systemu, potrzebnej do odpalenia. Chcemy aby nasz system był mega bezpieczny, czyli żeby brał pod uwagę redundancje danych( ewentualny pad jednego z dysków), żeby samo FBI mogło sobie pomarzyć o grzebaniu w danych i jeszcze do tego, żeby jego budowa była w miarę elastyczna 🙂 Do tego użyjemy trzech narzędzi i system Archlinux:
mdadm– programowy raid1, czyli coś co bedzie kopiować wszystkie dane z dysku jeden na dysk drugi i umożliwiać odtworzenie danych na kolejny podmieniony dysk,
lvm – tworzy partycje logiczną na dysku.
cryptosetup -szyfruje zawartość dysku.
0.1 Jak wygląda proces rozruchu(MBR)?
- Uruchomienie komputera – Power-on self-test – procedury testowe.
- BIOS ładuje potrzebne komponenty – kontroler klawiatury, dysku …
- BIOS wczytuje pierwsze 440( pierwszy sektor 512 bajtów) Bajtów(MBR) pierwszego dysk z ustawień kolejności
- W tych pierwszych 440 bajtach znajduje sie skok( mały program) do bootloadera (grub)
- Bootloader ładuje jajko linuxa
- Bootloader ładuje jajko ramdisk
- Uruchamianie kernela
0.2 Kto ten Arch Linux
Prosty w konstrukcji system operacyjny, niby zarezerwowany do zaawansowanych użytkowników. Tworzony od roku 2002 od zera. Budowany w myśli trzech zasad:
- Prostota i „lekkość”, czyli generalnie podążanie za zasadą KISS.
- Graficzny interfejs jest mniej istotny, konsola FTW
- Każdy może dołożyć swoja cegiełke do budowy i rozwoju systemu
0.3 Co jest do roboty?
Zakładam, że mamy dwa dyski po 40GiB, na rysunku znajduje się mniej więcej to co chcemy stworzyć:
Użyte wersje oprogramowania:
- Archlinux 4.10.1-1-ARCH – live-cd 2016-12
- lvm 2.02.168(2) (2016-11-30)
- mdadm– v3.4 – 28th January 2016
- System x86_64
- bios bez UEFI (SeaBios – kvm na proxmoxie)
1. A więc do roboty 🙂
Włożyliśmy świeżo wypalona płytę z obrazem Archa ( ewentualnie usb, nie wnikam 😛 ) do napędu i po zbootowaniu powinno nas powitać takie menu:
Wybieramy pierwszą opcje (Boot Arch x86..)-> ENTER, Czekamy aż konsola będzie gotowa do użycia root@archiso.
2. Czyszczenie dysków, tworzenie partycji
Pierwszą rzeczą, którą musimy ogarnąć to tablica MBR na obu dyskach. Przed tą operacją, dobrze jest oczyścić dyski z metadanych ( ext4 to twardy skurcz.. 🙂 )
dd if=/dev/zero of=/dev/vda bs=1M
dd if=/dev/zero of=/dev/vdb bs=1M
### LUb bardziej ale długo !
shred --verbose --random-source=/dev/urandom --iterations=3 /dev/vda
shred --verbose --random-source=/dev/urandom --iterations=3 /dev/vdb
Tworzymy partycje za pomocą cfdisk i klonujemy to samo na drugi dysk(vdb):
cfdisk /dev/vda
# Slect label type : DOS
#/dev/vda1 : start= 2048, size= 409600, type=fd, bootable
#/dev/vda2 : start= 411648, size= 83474432, type=fd
sfdisk -d /dev/vda > table
sfdisk /dev/vdb < table
cfdisk,sfdisk – narzędzia do edycji głównej tablicy z informacja o partycjach –
MBR(dos).
3.Uruchomienie dwóch soft raidów 1
# Potrzebne moduły do jajka
modprobe dm-mod
modprobe dm_crypt
# Tworzymy sodt raid typu 1 składającego się z dwóch dysków
mdadm --create /dev/md0 --level=1 --raid-devices=2 --metadata=0.90 /dev/vda1 /dev/vdb1
mdadm --create /dev/md1 --level=1 --raid-devices=2 --metadata=0.90 /dev/vda2 /dev/vdb2
cat /proc/mdstat # czekamy na 100%
po wykonaniu czekamy na zakończenie synchronizacji ( może trochę potrwać )
4. Szyfrowanie soft radiu /dev/md1
Szyfrujemy dysk /dev/md1 za pomocą użycia hasła( podajemy go) i ponownie go otwieramy juz zaszyfrowany dysk używając podanego przez nas hasła:
cryptsetup --cipher=aes-xts-plain --verify-passphrase --key-size=512 luksFormat /dev/md1
#DUZE - YES
# podajemy hasełko
cryptsetup luksOpen /dev/md1 cryptdisk
# podajemy hasełko
5. Konfiguracja woluminów logicznych LVM
# stworzenie groupy vgSystem i woluminów lvRoot i lvHome do niej należących
pvcreate /dev/mapper/cryptdisk
vgcreate vgSystem /dev/mapper/cryptdisk
lvcreate --size 30G --name lvRoot vgSystem
lvcreate --size 9G --name lvHome vgSystem
lvcreate --extents +100%FREE --name lvSwap vgSystem
# stworzenie systemu plików
mkfs.ext4 -E discard /dev/mapper/vgSystem-lvRoot
mkfs.ext4 -E discard /dev/mapper/vgSystem-lvHome
mkfs.ext4 -E discard /dev/mapper/vgSystem-lvSwap
mkfs.ext2 /dev/md0
# motujemy na potrzeby instalacji systemu
mount /dev/mapper/vgSystem-lvRoot /mnt
mkdir /mnt/home
mount /dev/mapper/vgSystem-lvHome /mnt/home
mkswap /dev/mapper/vgSystem-lvSwap
swapon /dev/mapper/vgSystem-lvSwap
mkdir /mnt/boot
mount /dev/md0 /mnt/boot
# generuje prawidłowe dane do dwóch plików systemowych
# /etc/fstab - dzieki temu pliku, system wie co podmotowac w trakcie startu systemu
# /etc/mdstat - informacja o działających raidach
genfstab -p -U /mnt > /mnt/etc/fstab
mdadm --examine --scan > /mnt/etc/mdadm.conf
Wynik naszej pracy;
lsblk -o NAME,MOUNTPOINT,UUID,FSTYPE
NAME MOUNTPOINT UUID FSTYPE
vdb
├─vdb2 9f229efd-689c-ab12-5241-990451489ef3 linux_raid_member
│ └─md1 c1be7ef6-a742-459a-adfb-43359c16b2ee crypto_LUKS
│ └─cryptdisk TPZkru-5QRv-Sgut-twNd-ZjRt-DkpZ-TXRhdK LVM2_member
│ ├─vgSystem-lvRoot /mnt 4c5cb473-68c6-4794-a852-c6e155f4bb69 ext4
│ ├─vgSystem-lvHome /mnt/home 6fecc782-f7ff-415f-8dfa-bef0a99b62c9 ext4
│ └─vgSystem-lvSwap 0b1d6734-b394-4620-aac7-a60e8d4feda4 swap
└─vdb1 db156f41-9e8c-3dc6-5241-990451489ef3 linux_raid_member
└─md0 /mnt/boot 714dc8e3-76d5-4efa-a466-928eace0f80c ext2
sr0 /run/archiso/bootmnt 2016-11-01-11-13-14-00 iso9660
loop0 /run/archiso/sfs/airootfs squashfs
vda
├─vda2 9f229efd-689c-ab12-5241-990451489ef3 linux_raid_member
│ └─md1 c1be7ef6-a742-459a-adfb-43359c16b2ee crypto_LUKS
│ └─cryptdisk TPZkru-5QRv-Sgut-twNd-ZjRt-DkpZ-TXRhdK LVM2_member
│ ├─vgSystem-lvRoot /mnt 4c5cb473-68c6-4794-a852-c6e155f4bb69 ext4
│ ├─vgSystem-lvHome /mnt/home 6fecc782-f7ff-415f-8dfa-bef0a99b62c9 ext4
│ └─vgSystem-lvSwap 0b1d6734-b394-4620-aac7-a60e8d4feda4 swap
└─vda1 db156f41-9e8c-3dc6-5241-990451489ef3 linux_raid_member
└─md0 /mnt/boot 714dc8e3-76d5-4efa-a466-928eace0f80c ext2
6. Instalacja systemu – pacstrap
pacstrap – skrypt służy do instalacji grupy pakietów do wskazanego root Folderu. base – minimum potrzebne do działania systemu
pacman – główny menedżer pakietów
# dla połaczenia z internetem
# dynamiczne przydzielenie adresu ip - ethernet -kabel
dhcpcd
# Lub statyczne na przykład
echo "nameserver 8.8.8.8" > /etc/resolve.conf
ip addr add 100.100.100.100/24 dev ens19
ip link set ens19 up
ip route add default via 100.100.100.1 metric 1
# Aktualizacja listy repo
pacman -Sy
# Aktualizacja kluczy do pacmana
pacman -S archlinux-keyring
# czyszczenie cachu
pacman -Sc
# Instalacja
pacstrap /mnt base base-devel # zainstaluje okolo 144 pakietow
7. Grub i ramdisk
Grub – Program rozruchowy, który uruchamia nasz system operacyjny.
Przechodzimy na działanie/operacje w obrębie nowej instalacji i instalujemy potrzebne jeszcze pakiety:
arch-chroot /mnt
pacman -Sy
pacman -S grub vim
Edytujemy trzy pliczki potrzebne do stworzenia wczesnego jajka(ramdisk) i konfiguracji gruba:
vim /etc/mkinitcpio.conf
USERLVM="yes"
USEDMRAID="yes"
MODULES="dm_mod raid1"
BINARIES=""
FILES=""
HOOKS="base udev autodetect modconf block keyboard mdadm_udev encrypt lvm2 filesystems fsck"
UWAGA: w HOOKS cholernie jest ważna kolejność !
Konfiguracja potrzebna do instalacji GRUBA:
vim /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="cryptdevice=UUID=c1be7ef6-a742-459a-adfb-43359c16b2ee:cryptdisk root=/dev/mapper/vgSystem-lvRoot quit"
GRUB_CMDLINE_LINUX=""
GRUB_ENABLE_CRYPTODISK=y
GRUB_PRELOAD_MODULES="part_gpt part_msdos insmod modraid"
GRUB_TERMINAL_INPUT=console
GRUB_GFXMODE=auto
GRUB_GFXPAYLOAD_LINUX=keep
GRUB_DISABLE_RECOVERY=true
UWAGA: cryptdevice=UUID= ( podajemy UUID soft raidu, który został zaszyfrowany !) ,komenda do uzyskania UUID to np.: blkid.
UWAGA:root=(podajemy nasz główny wolumin)
Informacja co system ma zrobić z zaszyfrowanym dyskiem:
vim /etc/crypttab
cryptdisk UUID=c1be7ef6-a742-459a-adfb-43359c16b2ee none luks,timeout=180
cryptdisk – nazwa odszyfrowanego dysku z komendy cryptdevice ( patrz wyżej)
UUID – soft raid dysku, który został tam zaszyfrowany – /dev/md1
none luks,timeout=180 – hasło podawane przy starcie, czas 3 minuty
Robimy ramdisk-jajeczko i instalujemy gruba na dysk /dev/vda i bva
mkinitcpio -p linux
grub-mkconfig -o /boot/grub/grub.cfg
grub-install --target=i386-pc --recheck /dev/vda
grub-install --target=i386-pc --recheck /dev/vdb
vgchange -ay
exit
reboot
Github : Instalacja Archa Linuxa – cały plik z wpisu
Archinstall_LVM_GRUB_LUKS_MDADM.txt