Hei! Saat ini saya sedang mengerjakan sistem non-lfs dari awal dengan busybox sebagai bintangnya. Sekarang, login saya mengatakan:
(none) login:
Oleh karena itu, nama host saya rusak. hostname
membawakan saya (none)
juga.
Panduan yang saya ikuti mengatakan kepada saya untuk membuang nama host ke /etc/HOSTNAME
. Saya juga sudah mencoba /etc/hostname
. Tidak peduli apa yang saya lakukan, hostname
mengembalikan (none)
– kecuali saya menjalankan hostname <thename>
atau hostname -F /etc/hostname
. Sekarang jelas, saya tidak ingin ini dilakukan setiap kali seseorang baru saja menginstal distro — jadi apa file default sebenarnya, jika bukan /etc/hostname
?
Terima kasih sebelumnya!
Jawaban yang Diterima:
hostname
perintah di perangkat umum, termasuk BusyBox, tidak kembali ke file saat menanyakan nama host.
Mereka hanya melaporkan apa yang dikembalikan kernel kepada mereka sebagai nama host dari panggilan sistem, yang diinisialisasi kernel ke string seperti “ (none)”, dapat diubah dengan mengkonfigurasi ulang dan membangun kembali kernel.
(Dalam terminologi systemd ini adalah nama host dinamis , alias nama host sementara; yang sebenarnya dilaporkan oleh Linux, kernel.)
Tidak ada “file default”.
Biasanya ada layanan single-shot yang berjalan saat startup sistem, cukup awal, yang mencari di berbagai file ini, mengeluarkan nama host, dan menginisialisasi nama host kernel dengannya.
(Dalam terminologi systemd, string konfigurasi ini adalah nama host statis .)
Misalnya:
- Dalam perangkat saya, saya memberikan
hostname
"awal" layanan yang menjalankanset-dynamic-hostname
dari perangkat ini perintah setelah sistem file lokal dipasang dan sebelum layanan login pengguna. Pekerjaan dibagi menjadi hal-hal yang dilakukan (hanya) ketika seseorang membuat perubahan konfigurasi, dan hal-hal yang dilakukan pada (setiap) bootstrap sistem:- Mekanisme impor konfigurasi eksternal membaca
/etc/hostname
dan/etc/HOSTNAME
, di antara sumber-sumber lain (karena sistem operasi yang berbeda mengonfigurasi ini dengan cara yang berbeda), dan membuatrc.conf
gabungan . - Mekanisme impor konfigurasi eksternal menggunakan gabungan
rc.conf
untuk mengonfigurasihostname
layanan ini variabel lingkungan. - Saat layanan berjalan,
set-dynamic-hostname
tidak perlu mempedulikan semua kemungkinan sumber konfigurasi dan cukup mengambil variabel lingkungan, dari lingkungan yang dikonfigurasi untuk layanan, dan menyetel nama host dinamis darinya.
- Mekanisme impor konfigurasi eksternal membaca
- Dalam systemd ini adalah tindakan inisialisasi yang tertanam dalam kode
systemd
itu sendiri, yang berjalan bahkan sebelum manajemen layanan dimulai.systemd
program itu sendiri berjalan dan membaca/etc/hostname
(dan juga/proc/cmdline
, tapi tidak/etc/HOSTNAME
atau/etc/default/hostname
atau/etc/sysconfig/network
) dan meneruskannya ke kernel. - Di Void Linux ada skrip shell startup yang membaca nama host statis dari (hanya)
/etc/hostname
, dengan fallback ke variabel shell yang dibaca darirc.conf
, dan menyetel nama host dinamis dari nilainya.
Jika Anda sedang membangun sistem “dari awal”, maka Anda harus membuat layanan yang setara.
Alat BusyBox dan ToyBox untuk menyetel nama host dari file adalah hostname -F "${filename}"
, jadi Anda harus membuat layanan yang menjalankan perintah tersebut terhadap /etc/hostname
atau file semacam itu.
BusyBox hadir dengan perangkat manajemen layanan runit, dan layanan runit sederhana akan menjadi sesuatu seperti:
#!/bin/sh -e exec 2>&1 exec hostname -F /etc/hostname
Bacaan lebih lanjut
- Lennart Poettering dkk. (2016).
hostnamectl
. halaman manual systemd. Freedesktop.org. - Jonathan de Boyne Pollard (2017). “
set-dynamic-hostname
“. Manual perintah pengguna . perangkat lunak. Perangkat Lunak. - Jonathan de Boyne Pollard (2017). “
rc.conf
penggabungan". Panduan nosh . Perangkat Lunak. - Jonathan de Boyne Pollard (2015). "format eksternal". Panduan nosh . Perangkat Lunak.
- Rob Landley.
hostname
. Daftar perintah kotak mainan . landley.net. - https://unix.stackexchange.com/a/12832/5132