Pencatatan Anaconda

Yohaan Vakil, Frank Sträter, Ben Cotton Versi unspecified Last review: 2022-05-04

Pendahuluan

Anaconda melacak semua aktivitasnya dalam log. Ini termasuk:

  • mengubah langkah-langkah instalasi (yang secara kasar sesuai dengan layar yang berbeda dalam penginstal grafis)

  • deteksi dan manipulasi perangkat penyimpanan

  • deteksi media instalasi

  • inisialisasi jaringan

  • pesan kernel

  • panggilan ke metode kritis dalam anaconda

  • panggilan ke program eksternal

Masuk ke sistem diinstal

Selama instalasi, log disimpan dalam direktori /tmp:

Berkas log

/tmp/anaconda.log

informasi pemasangan umum, terutama perubahan langkah-langkah.

/tmp/storage.log

pemindaian dan manipulasi perangkat penyimpanan (hard drive, partisi, LVM, RAID), partisi

/tmp/program.log

panggilan ke program eksternal, keluarannya

/tmp/packaging.log

DNF pesan instalasi paket

/tmp/syslog

pesan sistem terkait perangkat keras

Pesan log tertentu juga ditulis ke terminal:

Perangkat TTY

/dev/tty3

pesan dari anaconda.log, storage.log dan packaging.log.

/dev/tty4

sama dengan syslog

/dev/tty5

stdout dan stderr dari program eksternal

tty3 dan tty4 merefleksikan berkas log tertentu. Berkas log selalu berisi pesan dari semua loglevel, termasuk debug, tetapi loglevel minimal pada terminal dapat dikontrol dengan opsi baris perintah loglevel.

Terdapat dua berkas log lain yang dibuat pada sistem berkas target, pada direktori /root, yang juga dapat diakses pada /mnt/sysimage/root pada saat proses instalasi:

/mnt/sysimage/root/install.log

log dari proses instalasi paket.

/mnt/sysimage/root/install.log.syslog

pesan dari chroot instalasi yang dicatat melalui syslog sistem.

Sebagian besar informasi tentang pengguna dan grup yang dibuat selama instalasi paket dnf penginstal.

Format log

Dalam berkas, format pesan log adalah sebagai berikut:

 H:M:S,ms LOGLEVEL facility:message

di mana:

  • H:M:S adalah stempel waktu pesan

  • ms adalah bagian milidetik dari stempel waktu. Perhatikan bahwa ini biasanya akan menjadi nol pada syslog jarak jauh.

  • LOGLEVEL adalah loglevel pesan. Secara teori, karena pesan kernel adalah bagian dari log anaconda, semua loglevel yang didefinisikan di rsyslog dapat muncul di logfile. Namun, Anaconda sendiri hanya akan mencatat pada loglevel berikut:

    • DEBUG

    • INFO

    • WARN

    • ERR

    • CRIT

  • facility adalah program atau komponen yang membuat pesan. Misalnya, kernel, anaconda, storage, atau yang serupa.

  • message adalah pesan log itu sendiri.

Untuk log yang berjalan di terminal, formatnya sederhana saja:

 Fasilitas LOGLEVEL: pesan

Pencatatan jarak jauh melalui TCP

Anaconda mendukung pencatatan jarak jauh yang ditangani melalui daemon rsyslog yang berjalan pada sistem yang diinstal. Dapat dikonfigurasi untuk meneruskan lognya melalui TCP ke mesin sembarang dalam jaringan yang juga menjalankan daemon syslog. Hal ini dikontrol dengan opsi baris perintah syslog.

Jangan lupa untuk mengaktifkan port tempat Anda menjalankan daemon syslog lokal di firewall Anda.

Apa yang dicatat dari jarak jauh

Segala sesuatu yang dicatat secara langsung oleh anaconda juga akan muncul dalam log jarak jauh. Ini termasuk pesan yang dipancarkan oleh pemuat dan subsistem penyimpanan. Semua traceback anaconda (/tmp/anaconda-tb-xyz) digabungkan ke dalam satu berkas /tmp/anaconda-tb-all.log dan kemudian ditransfer. Juga, /tmp/x.log ditransfer.

Pencatatan jarak jauh hanya bekerja ketika penginstal menginisialisasi jaringan. Setelah jaringan aktif, dibutuhkan beberapa menit bagi rsyslogd untuk menyadari hal ini. Rsyslog memiliki antrian untuk pesan yang tidak dapat diteruskan karena jaringan yang tidak dapat diakses dan pada akhirnya akan meneruskan semua pesan, dalam urutan yang benar.

Konfigurasi

Terserah Anda bagaimana daemon pencatatan jarak jauh dikonfigurasikan, misalnya, Anda bisa mencatat semua pesan yang masuk ke dalam satu berkas atau mengurutkannya ke dalam direktori sesuai dengan alamat IP sistem jarak jauh.

RPM anaconda menyediakan skrip analog, yang menghasilkan berkas konfigurasi rsyslogd yang sesuai berdasarkan beberapa parameter instalasi. Ia juga dapat menghasilkan perintah bash untuk menjalankan rsyslogd dengan konfigurasi yang dihasilkan. Dengan demikian Anda dapat melakukannya dari sebuah shell: $ eval scripts/analog -p 6080 -s -o ./someconf /home/akozumpl/remote_inst Ini akan memulai daemon rsyslog yang akan mendengarkan pada port 6080. Log dari mesin remote dengan IP 10.34.33.221 akan disimpan di bawah /home/akozumpl/remote_inst/10.34.33.221/, misalnya /home/akozumpl/remote_inst/10.34.33.221/anaconda.log.

Konfigurasi syslog jarak jauh mengeksploitasi beberapa karakteristik pesan log untuk dapat mengurutkannya ke dalam berkas yang benar: * IP pengirim pesan untuk mengetahui mesin mana yang membuat pesan dan direktori mana pesan tersebut berada. * anaconda.log, storage.log dan program.log memiliki nama yang disematkan di dalamnya sebagai programname. * Pesan syslog datang dari fasilitas kernel dan daemon, sama seperti yang terjadi pada sistem yang diinstal * install.log.syslog yang dibuat selama penginstal paket dicatat sebagai nama host khusus sysimage.

Jalankan analog tanpa opsi -o untuk melihat bagaimana tepatnya tampilan berkas konfigurasi yang sesuai. Perhatikan juga bahwa ia menggunakan format pesan yang sama untuk pencatatan jarak jauh seperti yang digunakan anaconda, tetapi Anda tentu saja dapat memodifikasi ini untuk menentukan format apa pun yang Anda inginkan.

Lihat juga

Pencatatan jarak jauh melalui virtio

QEMU/KVM di Fedora 13 dan seterusnya memungkinkan seseorang untuk membuat mesin virtual dengan beberapa perangkat virtio char yang diekspos ke mesin tamu. Salah satu perangkat tersebut dapat digunakan untuk meneruskan log anaconda ke mesin host. Dengan cara itu kita dapat meneruskan log secara real time, segera setelah subsistem pencatatan anaconda diinisialisasi (lebih awal) dan tidak perlu menunggu jaringan muncul. Selain itu, ini adalah satu-satunya cara untuk meneruskan log dalam pengaturan tanpa jaringan.

Konfigurasi Logging Jarak Jauh

Anaconda akan meneruskan log melalui virtio secara otomatis jika dapat menemukan port /dev/virtio-ports/org.fedoraproject.anaconda.log.0". Port ini dibuat menggunakan arahan XML libvirt yang menghubungkannya ke soket TCP di sisi host. Kemudian dimungkinkan untuk membaca log dari sana secara langsung, atau membuat instance rsyslog untuk mem-parsingnya dan mengarsipkannya ke dalam berkas masing-masing. Lihat bagan ascii di bawah ini untuk keseluruhan ansambel:

Anaconda--->rsyslog(guest)--->virtio(guest char device)--->kvm hypervisor--->virtio(TCP socket)
                                                                                |
                                                                                v
                                                      forwarded log files<---rsyslog(host)

Ikuti petunjuk langkah demi langkah untuk menyiapkan semuanya:

  1. Buat mesin virtual pengujian, misalnya dengan menggunakan Virtual Manager </li>

  2. Tambahkan port virtio-serial ke mesin virtual Anda, arahkan ke port TCP 6080 pada host. Mulailah dengan mengedit konfigurasi tamu: virsh edit <nama mesin>

  3. Pada editor tamu, tambahkan informasi berikut ini ke dalam bagian <devices>:

<channel type='tcp'>
  <source mode='connect' host='127.0.0.1' service='6080'/>
  <target type='virtio' name='org.fedoraproject.anaconda.log.0'/>
</channel>
  1. Mulai proses mendengarkan rsyslogd pada host, menggunakan skrip analog yang dijelaskan [[#Remote_logging_via_TCP|di atas]]:

eval `analog -p 6080 -o rsyslogd.conf -s /home/akozumpl/remote_inst`
  1. Mulai mesin virtual.

  2. Lanjutkan dengan instalasi. Segera setelah salam Anaconda ditampilkan, pesan log akan muncul di direktori yang diberikan untuk skrip analog, di subdirektori 127.0.0.1.

virt-install

Jika Anda menggunakan virt-install, Anda dapat mengonfigurasinya dengan opsi --channel:

--channel tcp,host=127.0.0.1:6080,mode=connect,target_type=virtio,name=org.fedoraproject.anaconda.log.0

Masalah dan pemecahan masalah yang diketahui

  • works in libvirt>=0.8.2

  • pesan syslog root dari /mnt/sysimage/root/install.log.syslog tidak diteruskan.

  • tidak mungkin untuk menghidupkan mesin kecuali ada sesuatu yang mendengarkan pada port TCP di mana virtio-serial terhubung.

  • jika Anda ingin menguji apakah koneksi virtio bekerja, daripada menggunakan analog dan rsyslog, biarkan utilitas netcat mendengarkan pada port yang diberikan, misalnya nc -l 0.0.0.0 6080. Anda akan mulai melihat log mentah pada terminal setelah mesin tamu mulai melakukan booting.

  • jika kedua pencatatan TCP jarak jauh melalui syslog= dan pencatatan virtio jarak jauh melalui virtiolog= ditentukan pada baris perintah, kita harus menyiapkan dua contoh rsyslogd di server/host untuk mendengarkan kedua koneksi tersebut, jika tidak, antrean rsyslog pengirim akan penuh dan penerusan akan terhenti.

Anaconda mencatat pada sistem yang sedang berjalan

Setelah setiap instalasi yang berhasil, log anaconda disalin ke dalam /var/log pada sistem yang baru saja Anda instal. Untuk menghindari bentrokan nama dengan berkas log lain di sana, log anaconda diganti namanya:

Nama selama menginstal Nama pada sistem target

/tmp/anaconda.log

/var/log/anaconda/anaconda.log

/tmp/program.log

/var/log/anaconda/program.log

/tmp/storage.log

/var/log/anaconda/storage.log

/tmp/packaging.log

/var/log/anaconda/packaging.log

Kiat-kiat pencatatan

Jika Anda diminta untuk menyediakan log untuk bugzilla, pilihan terbaik Anda adalah beralih dari GUI anaconda ke tty2 dan kemudian menggunakan scp untuk menyalin berkas ke komputer Anda, mis:

$ cd /tmp
$ scp anaconda.log aklap:/home/akozumpl/

Anda juga dapat membuat dump lengkap dari kondisi proses anaconda yang sedang berjalan (dump yang sama yang dikompilasi secara otomatis jika terjadi pengecualian yang tidak tertangani). Untuk melakukan hal ini, kirimkan proses anaconda utama SIGUSR2:

$ kill -USR2 `cat /var/run/anaconda.pid``

Ini membangun berkas /tmp/anaconda-tb-????? yang juga berisi anaconda.log, storage.log, dan syslog.

Jika Anda menggunakan mesin virtual KVM dan tidak ada scp yang tersedia (stage1), Anda dapat (setelah mengatur jaringan jika belum tersedia) mengalihkan ke berkas tcp khusus, pada host:

$ nc -l 4444 > syslog.log

pada tamu:

$ ifconfig eth0 10.0.2.10/24 up
$ grep "" /tmp/syslog > /dev/tcp/10.0.2.2/4444