From: xf0r3m Date: Sat, 9 Sep 2023 17:06:34 +0000 (+0200) Subject: Dalszy rozwój instalatora dla greenOS X-Git-Url: https://gitweb.morketsmerke.org/?a=commitdiff_plain;h=HEAD;p=greenOS.git Dalszy rozwój instalatora dla greenOS --- diff --git a/installation_greenOS2.txt b/installation_greenOS2.txt index 4d8ffbb..7203158 100644 --- a/installation_greenOS2.txt +++ b/installation_greenOS2.txt @@ -1,75 +1,183 @@ -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