Mengapa “hostname --fqdn” tidak berfungsi di komputer Ubuntu saya?

10

Saya menggunakan Ubuntu 10.04 LTS, dan ketika saya ketik perintah hostname --fqdn, saya mendapatkan pesan: hostname: Name or service not known.

Karena itu, saya tidak dapat menginstal dengan globalsukses, dan mendapatkan kesalahan berikut ketika saya mencoba:

Setting up global (5.7.1-1) ...
hostname: Name or service not known
dpkg: error processing global (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 global
E: Sub-process /usr/bin/dpkg returned an error code (1)

Saya di /etc/nsswitch.confbawah.

# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.

passwd:         compat
group:          compat
shadow:         compat

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

Adakah yang punya ide tentang apa artinya ini dan bagaimana saya bisa memperbaikinya?

RadiantHex
sumber
1
Mengapa Anda menginginkan FQDN? Jika Anda harus bertanya, Anda mungkin tidak ingin satu atau tidak dapat menggunakan salah satu atau keduanya.
msw 8-10

Jawaban:

11

Bisakah Anda memberikan konten /etc/nsswitch.conf?

Sepertinya /etc/nsswitch.conf memiliki nilai buruk untuk baris "hosts". Apakah ini dimulai dengan "file"?

Kalau tidak, FQDN diatur dengan mengedit / etc / hosts dan meletakkan FQDN pada baris tempat nama host muncul. Misalkan Anda memiliki nama host "foo", dan Anda menemukan sebuah baris:

127.0.0.1 foo

Anda akan mengeditnya seperti ini:

127.0.0.1 foo.localdomain foo

foo.localdomain akan menjadi FQDN baru Anda.

Raphaël Hertzog
sumber
Saya telah memasukkan konten file itu seperti yang Anda minta! Terima kasih balasannya!! :)
RadiantHex
@Rapael Saya mengubah file / etc / hosts tapi itu mulai memberi saya kegagalan sementara dalam resolusi nama. Adakah ide mengapa ini terjadi?
Muhammad Adeel Zahid
6

edit / etc / hosts untuk menambahkan FQDN Anda

Informasi tentang sintaksis terletak di sini: http://www.faqs.org/docs/securing/chap9sec95.html

perbarui: membaca kembali pertanyaan Anda hampir kedengarannya seperti Anda tidak mengatur jalurnya dengan benar, atau ada yang salah dengan program hostname.

lakukan 'nama host mana'

harus kembali dengan path '/ bin / hostname'

jika itu berhasil coba perintah lagi seperti,

'/ bin / hostname --fqdn'

Lumpur
sumber
Terima kasih!!! Maaf jika saya menanyakan hal ini, tetapi bagaimana cara mengetahui FQDN saya?
RadiantHex
1
nah ini singkatan dari superuser.com 'Nama Domain Penuh' adalah FQDN. Jika Anda memiliki domain, Anda bisa menggunakannya, jika tidak, Anda bisa membuat sesuatu jika Anda berada di jaringan internal.
Mudfly
1
Terima kasih @flyfly! Saya mencoba instruksi Anda, perintah terakhir mengembalikan "nama host: Nama atau layanan tidak dikenal" lagi!
RadiantHex
Tanpa info lebih lanjut sulit untuk mengetahui kondisi masalah Anda. EG: apakah ini pemasangan lokal, apakah Anda login lebih dari ssh, apakah Anda menggunakan akun pengguna atau login root? Anda mungkin ingin mengunjungi ubuntuforums.org dan mencari orang lain yang telah memecahkan masalah serupa.
Mudfly
1
Ini adalah lompatan liar di sini tetapi, Ubuntu lebih suka menggunakan sudo daripada menggunakan root. Sangat mungkin bahwa shell tidak diatur dengan benar. Untuk menguji ini sangat sederhana. Pertama, Anda dapat melakukan 'ls -al / root /' dan melihat apakah Anda dapat melihat .bashrc Kedua jika Anda tidak memiliki .bashrc salin dari skel 'cp /etc/skel/.bashrc ./' Anda dapat melakukan ini bahkan jika Anda sudah memiliki file. Ketiga, lakukan '/ bin / bash' untuk memastikan Anda menjalankan bash. Akhirnya coba perintah asli Anda lagi, Anda harus menjalankan dalam bash shell yang sepenuhnya dikonfigurasi.
Mudfly
0

Tidak seperti hostnamedoa perintah sederhana , doa hostname --fqdnakan mencoba melakukan beberapa hal lagi, yang sering kali menghasilkan beberapa pencarian DNS.

Ambil contoh doa (berhasil) berikut ini (ini dari kotak Red Hat, tapi saya kira itu harus sama untuk Ubuntu):

# hostname --fqdn --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
myserver.example.com

Perhatikan opsi yang sangat membantu --verbose.

Singkatnya, apa pun selain yang sederhana hostnamemungkin melakukan lebih dari yang Anda harapkan. Ini contoh lain:

# hostname --ip --verbose
gethostname()=`myserver.example.com'
Resolving `myserver.example.com' ...
Result: h_name=`myserver.example.com'
Result: h_addr_list=`10.1.2.3'
10.1.2.3

Dan untuk mengatasinya:

# hostname --verbose
gethostname()=`myserver.example.com'
myserver.example.com

Perhatikan bahwa nama host suatu sistem (seperti yang dikembalikan oleh gethostname) dapat saya nama host yang tidak memenuhi syarat, seperti hanya 'myserver'. Inilah sebabnya mengapa program yang ingin Anda instal menggunakan program tersebut hostname --fqdn.

Pesan kesalahan hostname: Name or service not knownberasal dari fungsi resolver : ini adalah bagian dari perpustakaan sistem yang menerjemahkan antara nama dan alamat (biasanya nama DNS dan alamat IP).

Sebenarnya, resolver melakukan lebih dari sekedar DNS (dan lebih dari sekadar menerjemahkan antara nama host dan alamat IP); perilakunya dikonfigurasikan sebagian oleh file /etc/nsswitch.conf, dan biasanya akan berkonsultasi dengan yang berikut, biasanya dalam urutan ini:

  • 'hosts' (di Linux, berarti / etc / hosts)
  • (Kadang-kadang) nscd (daemon caching layanan-nama)
  • 'dns'

(catatan, Anda juga dapat memiliki server DNS caching seperti dnsmasqd --- untuk poin di atas, itu masih di bawah mekanisme 'dns').

Perlu ditunjukkan bahwa alat-alat seperti menggali , host dan nslookup terhormat tidak mengikuti urutan ini; mereka secara eksplisit adalah alat query DNS. Ini berarti bahwa jika Anda mengandalkan mereka (dalam skrip misalnya) Anda mungkin mendapatkan hasil yang berbeda dari program klien biasa (yang menggunakan penyelesai sistem). Untuk alasan ini, gunakan program getent dalam skrip, terutama jika Anda memiliki komponen caching seperti nscd running.

# getent hosts myserver.example.com
10.1.2.3    myserver.example.com

Jadi kunci takeaway di sini adalah a) jika Anda memiliki / etc / hosts dikonfigurasikan dengan baik dengan entri untuk mesin Anda sendiri, dan b) /etc/nsswitch.conf Anda memiliki konfigurasi yang biasa - hosts: files dnsdalam urutan itu, maka c) bahkan jika Anda tidak memiliki DNS yang dikonfigurasi dengan baik di lingkungan Anda, maka itu hostname --fqdnakan berfungsi.

Dalam DNS yang dikonfigurasi dengan baik, Anda akan diharapkan memiliki satu alamat 'mundur' ("catatan PTR") yang memberikan nama 'kanonik' dari server Anda, dan nama itu juga harus dapat dilihat (" Catatan "untuk IPv4).

Versi singkat: tambahkan --verbose; itu akan mengarahkan Anda ke apa yang kurang dari Anda.

Harapan itu membantu Anda memahami apa yang sedang terjadi.

Cameron Kerr
sumber