Instalasi Kickstart memungkinkan kami dengan mudah membuat skrip dan mereplikasi instalasi Fedora, Red Hat Enterprise Linux, atau CentOS tanpa pengawasan atau semi-tanpa pengawasan. Instruksi yang diperlukan untuk menginstal sistem operasi ditentukan, dengan sintaks khusus, di dalam file Kickstart yang diteruskan ke penginstal Anaconda. Dalam tutorial ini kita akan melihat cara menggunakan kembali LUKS
yang sudah ada (Linux Unified Keys Setup) wadah saat melakukan instalasi Kickstart:ini adalah sesuatu yang tidak dapat dicapai hanya dengan instruksi Kickstart dan memerlukan beberapa langkah tambahan.
Dalam tutorial ini Anda akan mempelajari:
- Cara menggunakan wadah LUKS yang ada saat melakukan instalasi Kickstart Fedora, RHEL atau CentOS
- Cara membuat dan menggunakan file update.img untuk digunakan dengan penginstal Anaconda.
Cara menginstal Fedora/RHEL/CentOS melalui kickstart pada perangkat LUKS yang ada
Persyaratan dan Konvensi Perangkat Lunak yang Digunakan
Kategori | Persyaratan, Konvensi, atau Versi Perangkat Lunak yang Digunakan |
---|---|
Sistem | Fedora/Rhel/CentOS |
Perangkat Lunak | Tidak diperlukan perangkat lunak khusus untuk mengikuti tutorial ini. |
Lainnya |
|
Konvensi | # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah$ – membutuhkan perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa |
Pengantar
Kickstart memungkinkan kami dengan mudah mereplikasi dan menyesuaikan instalasi sistem operasi dengan cara yang tidak mungkin dicapai dari penginstal grafis Anaconda. Kita dapat, misalnya, mendeklarasikan paket atau grup paket apa yang harus diinstal pada sistem dan apa yang harus dikecualikan.
Kami juga memiliki kesempatan untuk menjalankan perintah khusus sebelum atau setelah penginstalan dilakukan, dengan menetapkannya di dalam %pre
khusus dan %post
bagian dari file Kickstart masing-masing. Kami akan memanfaatkan fitur yang disebutkan terakhir ini untuk menggunakan LUKS
yang sudah ada perangkat selama proses instalasi.
Enkripsi dengan sintaks Kickstart asli
Membuat container LUKS cukup mudah, dan dapat dilakukan hanya dengan menggunakan instruksi awal yang asli. Ini contohnya:
part pv.01 --ondisk=sda --encrypted --luks-type=luks1 --cipher=aes-xts-plain64 --pbkdf-time=5000 --passphrase=secretpassphrase
Pada contoh di atas, dengan menggunakan part
instruksi, kami membuat lvm
terenkripsi volume fisik pada /dev/sda
disk. Kami menentukan LUKS
versi yang akan digunakan (luks1 dalam hal ini – setidaknya dalam versi terbaru Fedora luks2 telah menjadi default), cipher
, dan waktu, yang dinyatakan dalam milidetik, yang dihabiskan untuk PBKDF
(Fungsi Derivasi Kunci Berbasis Kata Sandi) pemrosesan frasa sandi (sama dengan menggunakan --iter-time
opsi cryptsetup
).
Meskipun itu bukan kebiasaan yang aman, kami juga menggunakan --passphrase
untuk memberikan frasa sandi enkripsi:tanpa opsi ini, proses penginstalan akan terganggu, dan kami akan diminta untuk memberikannya secara interaktif.
Kami dapat dengan jelas melihat bagaimana, dengan menggunakan Kickstart, kami mendapatkan lebih banyak fleksibilitas dibandingkan dengan instalasi tradisional; mengapa kita perlu melakukan langkah-langkah ekstra, lalu? Masih ada beberapa tugas yang tidak dapat kami capai hanya dengan menggunakan sintaks Kickstart standar. Antara lain, kami tidak dapat membuat LUKS
container pada perangkat mentah (hanya pada partisi) atau tentukan algoritme hashing yang akan digunakan untuk LUKS
pengaturan kunci, yang secara default diatur ke sha256
(tidak ada yang salah dengan itu).
Untuk alasan ini kami mungkin ingin membuat pengaturan partisi kami sebelum melakukan instalasi, baik secara manual atau dengan menggunakan alat seperti parted di dalam %pre
bagian dari file kickstart itu sendiri. Kami mungkin juga hanya memiliki LUKS
pengaturan yang tidak ingin kami hancurkan. Dalam semua kasus ini, kita harus melakukan langkah ekstra yang akan kita lihat sebentar lagi.
Bagian awal %pra
%pre
bagian dari file kickstart adalah yang pertama diurai saat file diambil. Ini digunakan untuk menjalankan perintah khusus sebelum penginstalan dimulai dan harus ditutup secara eksplisit dengan %end
instruksi.
Di %pre
, penerjemah bash shell digunakan secara default, tetapi yang lain dapat ditentukan melalui --interpreter
opsi (untuk menggunakan python kita akan menulis %pre --interpreter /usr/bin/python
). Kita dapat menggunakan bagian ini untuk menjalankan perintah yang diperlukan untuk membuka LUKS
. yang ada wadah. Berikut yang dapat kami tulis:
%pre
iotty="$(tty)"
exec > "${iotty}" 2> "${iotty}"
while true; do
cryptsetup luksOpen /dev/sda1 cryptroot - && break
done
%end
Mari kita lihat kode di atas. Pertama-tama, kita simpan hasil dari tty
perintah, yang mencetak nama file terminal yang terhubung ke input standar, ke dalam iotty
variabel.
Dengan exec> "${iotty}" 2> "${iotty}"
perintah kami mengarahkan output standar dan kesalahan standar ke terminal yang sama:
dengan cara ini kami akan dapat memasukkan kata sandi wadah ketika crytpsetup luksOpen
perintah akan dijalankan dan prompt akan ditampilkan di layar. Perintah diluncurkan dalam loop tak terbatas yang terputus hanya jika LUKS
penampung berhasil dibuka.
Jika kita ingin menjalankan instalasi tanpa pengawasan, kita harus meneruskan frasa sandi langsung ke cryptsetup (sekali lagi, ini tidak disarankan). Kami akan menulis:
%pre echo -n "ourverysecretpassphrase" | cryptsetup luksOpen /dev/sda1 cryptroot - %end
Pada contoh di atas, kami meneruskan frasa sandi ke input standar dari perintah cryptsetup melalui pipa |
:kami menggunakan echo
perintah dengan -n
opsi untuk menghindari karakter baris baru ditambahkan di akhir frasa sandi.
Menambal pemasang anaconda Fedora 31
Jika kami mencoba menggunakan wadah LUKS yang tidak terkunci saat menginstal Fedora 31 melalui Kickstart, kami akan menerima
pesan berikut, dan prosesnya akan dibatalkan:
Perangkat LUKS yang tidak terkunci yang ada tidak dapat digunakan untuk penginstalan tanpa kunci enkripsi yang ditentukan untuk
perangkat ini. Harap pindai ulang penyimpanan.
Ini terjadi karena komit ini diperkenalkan di versi Fedora 31 dari penginstal Anaconda. Kode pada dasarnya memeriksa bahwa perangkat LUKS yang ada memiliki kunci terdaftar, jika tidak, instalasi dibatalkan. Masalahnya adalah blivet
, pustaka python yang digunakan oleh Anaconda untuk mengelola partisi memperoleh kunci hanya jika wadah dibuka olehnya:ini dapat dilakukan dari penginstal grafis tetapi tidak, pada saat penulisan, instruksi Kickstart untuk membuka kunci
Membuat file update.img
Saat ini satu-satunya solusi (yang saya tahu) adalah menambal kode sumber Anaconda, mengomentari baris yang menjalankan kontrol yang diperkenalkan dengan komit yang kami sebutkan di atas. Kabar baiknya adalah pengoperasiannya sangat mudah.
Sebagai hal pertama, kita perlu mengkloning repositori git Anaconda, khususnya f31-release
cabang:
$ git clone https://github.com/rhinstaller/anaconda -b f31-release
Setelah repo dikloning, kita masukkan anaconda
direktori dan ubah pyanaconda/storage/checker.py
file:yang harus kita lakukan adalah mengomentari baris 619
:
def set_default_checks(self):
"""Set the default checks."""
self.checks = list()
self.add_check(verify_root)
self.add_check(verify_s390_constraints)
self.add_check(verify_partition_formatting)
self.add_check(verify_partition_sizes)
self.add_check(verify_partition_format_sizes)
self.add_check(verify_bootloader)
self.add_check(verify_gpt_biosboot)
self.add_check(verify_swap)
self.add_check(verify_swap_uuid)
self.add_check(verify_mountpoints_on_linuxfs)
self.add_check(verify_mountpoints_on_root)
#self.add_check(verify_unlocked_devices_have_key)
self.add_check(verify_luks_devices_have_key)
self.add_check(verify_luks2_memory_requirements)
self.add_check(verify_mounted_partitions)
Kami menyimpan modifikasi dan, dari root repositori, kami meluncurkan makeupdates
skrip yang ditemukan di scripts
direktori. Untuk skrip yang akan dieksekusi kita harus memiliki python2
terpasang:
$ ./scripts/makeupdates
Script akan menghasilkan updates.img
file yang akan berisi modifikasi kami. Untuk mengecek isinya kita bisa menggunakan lsinitrd
perintah:
$ lsinitrd updates.img Image: updates.img: 8.0K ======================================================================== Version: Arguments: dracut modules: ======================================================================== drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 . drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install/updates drwxr-xr-x 3 egdoc egdoc 0 Jan 30 09:29 run/install/updates/pyanaconda drwxr-xr-x 2 egdoc egdoc 0 Jan 30 09:29 run/install/updates/pyanaconda/storage -rw-r--r-- 1 egdoc egdoc 25443 Jan 30 09:29 run/install/updates/pyanaconda/storage/checker.py ========================================================================
Kami akan menggunakan file ini untuk "menambal" penginstal Fedora 31.
Menerapkan patch
Untuk menerapkan modifikasi yang terkandung dalam file yang baru saja kita buat, kita perlu menempatkannya di suatu tempat di mana kita dapat dengan mudah mengaksesnya, mungkin melalui ftp atau http, atau bahkan pada perangkat blok lokal, dan menggunakan inst.updates
parameter untuk merujuknya dari gambar penginstal Fedora. Dari menu grub kami menyorot entri menu “Instal Fedora”:
Menu penginstal Fedora 31
Setelah baris menu dipilih, kami menekan tombol Tab:baris perintah kernel yang terkait dengan entri ditampilkan di bagian bawah layar:
Baris perintah kernel yang digunakan oleh entri "Instal Fedora" Yang harus kita lakukan sekarang adalah menambahkan
inst.updates
instruksi dan berikan jalur ke updates.img
file yang kita buat. Misalkan file Kickstart dan update.img dapat diakses melalui http pada server lokal dengan ip 192.168.0.37, kita akan menulis:vmlinuz initrd=initrd.img inst.stage2=hd:LABEL=Fedora-S-dvd-x86_31-31 quiet inst.updates=http://192.168.0.37/updates.img inst.ks=http://192.168.0.37/ks.cfg
Pada titik ini kita dapat menekan enter untuk boot. Dengan modifikasi di atas, penginstal tidak akan mengeluh lagi tentangLUKS
yang tidak terkunci perangkat, dan penginstalan akan dilanjutkan tanpa masalah.
Kesimpulan
Dalam artikel ini kita melihat cara menyetel instalasi kickstart untuk menggunakan kembali LUKS
yang sudah ada perangkat, membukanya di %pre
bagian dari file kickstart, dan cara menerapkan solusi kecil ke penginstal Fedora 31 Anaconda yang jika tidak, akan gagal ketika jenis penginstalan tersebut dicoba. Jika Anda penasaran dengan sintaks Kickstart, silakan lihat dokumentasi online.