-1. Wybór dysku:
- $(lsblk | grep 'disk' | awk '{printf $1" "}')
- disk=(dysk np. sda)
-2. Określenie trybu instalacji:
- ( [ -d /sys/firmware/efivars ] || $(sudo efibootmgr > /dev/null 2>&1))
- # a = BIOS
+# 1. Wybór dysku:
+ diskList=$(lsblk | grep 'disk' | awk '{printf $1" "}');
+ select target in $diskList; do disk=$target; break; done
+# 2. Określenie trybu instalacji:
+ [ -d /sys/firmware/efivars ] || $(sudo efibootmgr > /dev/null 2>&1)
+ # Jeśli powyższy warunek jest prawdziwy to:
+ mode='efi'
# b = EFI
-3. Sposób partycjonowania:
- ( [auto] || manual )
+ # W przeciwnym wypadku:
+ mode='bios'
+ # a = BIOS
+# 3. Sposób partycjonowania:
+ while true; do
+ select scheme in 'auto' 'manual'; do partScheme=$scheme; break; done
# c = auto
# d = manual
-4ac. Partycjonowanie automatyczne:
- 4ac.1. Wyzerowanie pierwszego megabajtu dysku:
- ( dd if=/dev/zero bs=1M of=/dev/$disk count=1 )
- 4ac.2. Określenie tablicy partycji:
+ [ "$partScheme" = "manual" ]
+ # Jeśli tak to:
+ break;
+# 4c. Partycjonowanie automatyczne:
+ # 4c.1. Wyzerowanie pierwszego megabajtu dysku:
+ dd if=/dev/zero bs=1M of=/dev/$disk count=1
+ # 4c.2. Określenie tablicy partycji:
disksize=$(lsblk | grep "$disk" | awk '{printf $4}');
$(echo $diskSize | grep -Eq "T$|P$")
- Jeśli tak to:
+ # Jeśli tak to:
diskSize=$(echo $diskSize | grep -o '[0-9]\.[0-9]' | sed 's/\.//')
[ $diskSize -gt $(echo "1.8" | sed 's/\.//') ]
- Jeśli tak: to diskScheme="gpt";
- # e = GPT
- jeśli nie: to diskScheme="msdos";
- # f = MSDOS
- jeśli nie to:
- diskScheme="msdos";
+ # Jeśli tak to:
+ diskScheme="gpt";
+ # e = GPT
+ # Jeśli nie to:
+ diskScheme="msdos";
+ # f = MSDOS
+ # Jeśli nie to:
+ # To jeśli flaga 'mode' jest ustawiona i posiada wartość 'efi' to:
+ diskScheme="gpt";
+ # W przeciwnym wypadku:
+ diskScheme="msdos";
# f = MSDOS
- 4acf.3. Utworzenie odpowiedniej tablicy partycji:
+ # 4c.3. Utworzenie odpowiedniej tablicy partycji:
parted /dev/${disk} mklabel $diskScheme
- 4acf.4. Partycjonowanie:
- 4acf.4.1. Zapytanie czy rootfs ma być szyfrowany?
- ( yes || [no] )
- # g = encypted
- # h = non-encrypted
- #Tryb h:
- 4acfh.4.2. Utworzenie partycji przestrzeni wymiany:
+ # 4c.4. Partycjonowanie:
+ # 4c.4.1. Zapytanie czy rootfs ma być szyfrowany?
+ select yesno in 'yes' 'no'; do encrypt=$yesno; break; done
+ # g = encypted
+ # h = non-encrypted
+ [ "$diskScheme" = "msdos" ]
+ # Jeśli tak to:
+ # 4cfh.4.2. Utworzenie partycji przestrzeni wymiany:
parted /dev/${disk} mkpart primary 1 1G
- swapPart="${disk}1"
- 4acfh.4.3. Utworzenie partycji dla rootfs:
+ # 4cfh.4.3. Utworzenie partycji dla rootfs:
parted /dev/${disk} mkpart primary 1G 100%Free
- rootfsPart="${disk}2"
- 4acfh.4.4. Wyświetlenie tablicy partycji:
+ # 4cfh.4.4. Ustawienie flagi partycji rozruchowej:
+ parted /dev/${disk} set 2 boot on;
+ # Jeśli nie to:
+ [ "$encrypt" = "no" ]
+ # Jeśli tak to:
+ [ "$mode" = "efi" ]
+ # Jeśli tak to:
+ # 4bceh.4.2. Utworzenie partycji partycji rozruchowej EFI:
+ parted /dev/${disk} mkpart primary EFI 1 512M
+ # 4bceh.4.3. Utworzenie partycji przestrzeni wymiany:
+ parted /dev/${disk} mkpart primary swap 512M 1G
+ # 4bceh.4.4. Utworzenie partycji dla rootfs:
+ parted /dev/${disk} mkpart primary rootfs 1G 100%Free
+ # 4bceh.4.5. Ustawienie odpowiedniej flagi dla partycji EFI:
+ parted /dev/${disk} set 1 esp on;
+ # Jeśli nie to:
+ # 4aceh.4.2. Utworzenie partycji przestrzeni wymiany:
+ parted /dev/${disk} mkpart primary swap 1 1G
+ # 4aceh.4.3. Utworzenie partycji dla rootfs:
+ parted /dev/${disk} mkpart primary rootfs 1G 100%Free
+ # Jeśli nie to:
+ # 4ceg.4.2. Utworzenie partycji dla jądra
+ parted /dev/${disk} mkpart primary boot 1 1G
+ # 4ceg.4.2. Utworzenie partycji LUKS dla LVM
+ parted /dev/${disk} mkpart primary luks 1G 100%Free
+
+ [ "$encrypt" = "no" ]
+ # Jeśli tak to:
+ # Tryb h:
+ [ "$mode" = "efi" ]
+ # Jeśli tak to:
+ efiPart="${disk}1";
+ swapPart="${disk}2";
+ rootfsPart="${disk}3";
+ # Jeśli nie to:
+ swapPart="${disk}1";
+ rootfsPart="${disk}2";
+ # 4ac.4.4. Wyświetlenie tablicy partycji:
parted /dev/${disk} print
- 4acfh.4.5. Zapytanie czy taki układ partycji odpowiada użytkownikowi:
- ( [yes] || no )
- Jeśli tak to:
- 4acfh.4.5.1. Ustawienie flagi partycji rozruchowej:
- parted /dev/vda set 2 boot on
- Jeśli nie to idz do: 3
- 4acfh.4.6. Instalacja systemu plików:
- 4acfh.4.6.1. Instalacja systemu plików rootfs:
- mkfs.ext4 /dev/${rootfsPart}
- 4acfh.4.6.2. Instalacja instalacja przetrzenii wymiany na partycji:
- mkswap /dev/${swapPart}
- #Tryb g (dodać pakiet: lvm2 do obrazu płyty):
- 4acfg.4.2. Utworzenie partycji dla jądra
- parted /dev/${disk} mkpart primary 1 1G
- bootPart="${disk}1"
- 4acfg.4.2. Utworzenie partycji LUKS dla LVM
- parted /dev/${disk} mkpart primary 1G 100%Free
- luksPart="${disk}2"
- 4acfg.4.3. Zainstalowanie luks2 na utworzonym wcześniej dysku (dodać pakiet: cryptsetup do obrazu płyty)
+ # 4ac.4.5. Zapytanie czy taki układ partycji odpowiada użytkownikowi:
+ select yesno in 'yes' 'no'; do partsAreOk=$yesno; break; done
+ [ "$partsAreOk" = "yes" ]
+ # Jeśli tak to:
+ break;
+ # Jeśli nie to:
+ # Wróć do 3
+ continue;
+ # W przeciwnym wypadku
+ # Tryb g:
+ bootPart="${disk}1"
+ [ "$mode" = "efi" ]
+ #Jesli tak to:
+ efiPart=$bootPart;
+ luksPart="${disk}2"
+ # 4cg.4.3. Zainstalowanie luks2 na utworzonym wcześniej dysku:
cryptsetup -y -v luksFormat --type luks2 /dev/${luksPart}
- 4acfg.4.4. Odblokowanie partycji LUKS
+ # 4cg.4.4. Odblokowanie partycji LUKS
crypsetup open /dev/${luksPart} luksPart
- 4acfg.4.5. Utworzenie z partycji LUKS woluminu fizycznego LVM
+ # 4cg.4.5. Utworzenie z partycji LUKS woluminu fizycznego LVM
pvcreate /dev/mapper/luksPart
- 4acfg.4.6. Utworzenie na podstawie woluminu fizycznego grupy woluminów
+ # 4cg.4.6. Utworzenie na podstawie woluminu fizycznego grupy woluminów
vgcreate luks_vg-gOS /dev/mapper/luksPart
- 4acfg.4.7. Wydobycie ilości dostępnych PE w grupie woluminów
+ # 4cg.4.7. Utworzenie woluminu logicznego ze swapem.
+ lvcreate -L 1G -n swap luks_vg-gOS
+ # 4cg.4.8. Wydobycie ilości dostępnych PE w grupie woluminów
freePE=$(vgdisplay luks_vg-gOS | grep 'Free PE' | awk '{printf $5}')
-5. Montowanie systemów plików:
- 5.1. Montowanie głównego systemu plików:
+ # 4cg.4.9. Utworzenie woluminu logicznego ze rootfs.
+ lvcreate -l $freePE -n rootfs luks_vg-gOS
+ rootPart="luks_vg-gOS/rootfs"
+ swapPart="luks_vg-gOS/swap"
+# 4d. Partycjonowanie ręczne
+ # 4d.1. Wyzerowanie pierwszego megabajtu dysku:
+ dd if=/dev/zero bs=1M of=/dev/$disk count=1
+ # 4d.2. Wyświetlenie informacji o wymaganych partycjach
+ # 4d.3. Uruchomienie programu partcjonującego
+ fdisk /dev/$disk
+ # 4d.4. Przypisanie punktów montowania do utworzonych partycji:
+ while true; do
+ partList=$(lsblk | grep 'part' | awk '{print $1}' | grep '[a-z]*[0-9]*' | awk '{printf $1" "}')
+ select partition in $partList; do
+ echo -n "Mount point for $partition: ";
+ read mountPoint;
+ partitionList="$partitionList ${partition}=${mountPoint}";
+ done
+ # 4d.5. Wyświetlenie zdefiniowanych przez użytkowwnika przypisań:
+ for partMP in partitionList; do
+ echo "/dev/${partMP}" | sed 's,=,:\ ,g'
+ done
+ # 4d.6. Zapytanie czy przypisania są w porządku
+ select yesno in 'yes' 'no'; do assignsAreOk=$yesno; done
+ [ "$assignsAreOk" = "yes" ]
+ # Jeśli tak to:
+ break;
+ # Jeśli nie to:
+ continue;
+ # 4d.7. Określenie urządzenia dla partycji katalogu głównego:
+ rootfsPart=$(echo $partitionList | grep -Eo "${disk}[0-9]\=\/ |${disk}[0-9]\=\/$" | cut -d "=" -f1)
+ # 4d.8. Określenie urządzenia dla przetrzeni wymiany:
+ swapPart=$(echo $partitionList | grep -o "${disk}[0-9]\=swap" | cut -d "=" -f1)
+5. Instalacja systemu plików:
+ 5.1. Instalacja systemu plików rootfs:
+ mkfs.ext4 /dev/${rootfsPart}
+ [ "$mode" = "efi" ]
+ # Jeśli tak to:
+ 5.2bgh. Instalacja odpowiedniego systemu plików dla partycji EFI:
+ mkfs.fat -F 32 /dev/${efiPart};
+ # Jeśli nie to:
+ 5.2ag. Instalacja odpowiedniego systemu plików dla partycji /boot:
+ mkfs.ext4 /dev/${bootPart};
+ 5.2d. Instalacja systemu plików na pozostałych partycjach:
+ partitionList=$(echo $partitionList | sed -e "s/${disk}[0-9]=\/\ //g" -e "s/${disk}[0-9]=\/$//g"
+ partitionList=$(echo $partitionList | sed -e "s/${disk}[0-9]=swap\ //g" -e "s/${disk}[0-9]=swap$//g"
+ for partMP in $partitionList; do
+ device=$(echo $partMP | cut -d "=" -f1)
+ mkfs.ext4 /dev/${device}
+ done
+6. Montowanie systemów plików:
+ 6.1. Montowanie głównego systemu plików:
mount /dev/${rootPart} /mnt
- 5d...
+ 6.2. Montowanie partycji wewnątrz katalogu głównego:
+ 6.2.1abgh. Utworzenie punktu montowania partycji boot wewnątrz partycji rootfs:
+ mkdir /mnt/boot
+ 6.2.2d. Tworzenie punktów montowania dla innych partycji wewnątrz rootfs:
+ partitionList=$(echo $partitionList | sed -e "s/${disk}[0-9]=/boot\ //g" -e "s/${disk}[0-9]=/boot$//g"
+ for partMP in $partitionList; do
+ mountPoint=$(echo $partMP | cut -d "=" -f2)
+ mkdir /mnt/${mountPoint}
+ done
+ 6.2.2abgh. Podmontowanie partycji boot wewnątrz rootfs:
+ mount /dev/${bootPart} /mnt/boot