Tại sao không tên máy chủ lưu trữ --fqd1 hoạt động trên máy tính Ubuntu của tôi?


10

Tôi đang sử dụng Ubuntu 10.04 LTS và khi tôi gõ lệnh hostname --fqdn, tôi nhận được thông báo : hostname: Name or service not known.

Do đó, tôi không thể cài đặt globalthành công và gặp lỗi sau khi thử:

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)

Của tôi /etc/nsswitch.confở dưới

# /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

Có ai có bất kỳ ý tưởng về điều này có nghĩa là gì và làm thế nào tôi có thể khắc phục điều này?


1
Tại sao bạn muốn có một FQDN? Nếu bạn phải hỏi, có lẽ bạn không muốn một hoặc không thể sử dụng một hoặc cả hai.
msw

Câu trả lời:


11

Bạn có thể cung cấp nội dung của /etc/nsswitch.conf?

Có vẻ như /etc/nsswitch.conf có giá trị xấu cho dòng "máy chủ". Nó bắt đầu với "tập tin"?

Mặt khác, FQDN được đặt bằng cách chỉnh sửa / etc / hosts và đặt FQDN trên dòng nơi tên máy chủ xuất hiện. Giả sử bạn có tên máy chủ "foo" và bạn tìm thấy một dòng:

127.0.0.1 foo

Bạn sẽ chỉnh sửa nó như thế này:

127.0.0.1 foo.localdomain foo

foo.localdomain sẽ là FQDN mới của bạn.


Tôi đã bao gồm các nội dung của tập tin đó như bạn yêu cầu! Cảm ơn vi đa trả lơi!! :)
RadiantHex

@Rapael Tôi đã thay đổi tệp / etc / hosts nhưng nó bắt đầu khiến tôi tạm thời thất bại trong việc phân giải tên. Bất kỳ ý tưởng tại sao nó xảy ra?
Muhammad Adeel Zahid

6

chỉnh sửa / etc / hosts để thêm FQDN của bạn

Thông tin về cú pháp được đặt tại đây: http://www.faqs.org/docs/securing/chap9sec95.html

cập nhật: đọc lại câu hỏi của bạn một lần nữa có vẻ như bạn không đặt đúng đường dẫn của mình hoặc có gì đó không đúng với chương trình tên máy chủ.

làm 'tên máy chủ nào'

nó sẽ trở lại với đường dẫn '/ bin / tên máy chủ'

Nếu nó hoạt động hãy thử lại lệnh như thế nào,

'/ bin / tên máy chủ --fqdn'


Cảm ơn!!! Xin lỗi nếu tôi hỏi điều này, nhưng làm cách nào để tìm ra FQDN của tôi?
RadiantHex

1
ồ, cái này là viết tắt của super Tên miền đủ điều kiện ' superuser.com là một FQDN. Nếu bạn sở hữu một tên miền, bạn có thể sử dụng nó, nếu không bạn chỉ có thể tạo ra một cái gì đó nếu bạn đang ở trên một mạng nội bộ.
Mudfly

1
Cảm ơn @Mudfly! Tôi đã thử hướng dẫn của bạn, các lệnh cuối cùng trả về "tên máy chủ: Tên hoặc dịch vụ không được biết" một lần nữa!
RadiantHex

Không có thêm thông tin, thật khó để biết các điều kiện của vấn đề của bạn. EG: đây có phải là cài đặt cục bộ không, bạn đã đăng nhập qua ssh, bạn đang sử dụng tài khoản người dùng hoặc đăng nhập root? Bạn có thể muốn truy cập ubuntuforums.org và tìm kiếm những người khác đã giải quyết các vấn đề tương tự.
Mudfly

1
Đây là một bước nhảy vọt ở đây, nhưng Ubuntu thích sử dụng sudo hơn là sử dụng root. Hoàn toàn có khả năng shell không được thiết lập chính xác. Để kiểm tra điều này rất đơn giản. Trước tiên, bạn có thể thực hiện 'ls -al / root /' và xem liệu bạn có thể thấy .bashrc Thứ hai nếu bạn không có .bashrc sao chép nó từ skel 'cp /etc/skel/.bashrc ./' bạn có thể làm điều này ngay cả khi bạn đã có tập tin. Thứ ba làm '/ bin / bash' để đảm bảo bạn đang chạy bash. Cuối cùng thử lại lệnh ban đầu của bạn, bạn sẽ được chạy trong shell bash được cấu hình đầy đủ.
Mudfly

0

Không giống như cách hostnamegọi lệnh đơn giản, lệnh gọi hostname --fqdnsẽ cố gắng thực hiện một số điều nữa, điều này thường sẽ dẫn đến một số tra cứu DNS.

Lấy ví dụ như cách gọi (thành công) sau đây (đây là từ hộp Red Hat, nhưng tôi sẽ tưởng tượng nó sẽ giống với 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

Lưu ý các --verbosetùy chọn rất hữu ích .

Nói tóm lại, bất cứ điều gì khác hơn là đơn giản hostnamecó thể làm được nhiều hơn bạn mong đợi. Đây là một ví dụ khác:

# 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

Và làm tròn nó ra:

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

Lưu ý rằng tên máy chủ của một hệ thống (được trả về bởi gethostname) có thể cho tôi một tên máy chủ không đủ tiêu chuẩn, chẳng hạn như 'myserver'. Đây là lý do tại sao chương trình bạn muốn cài đặt sử dụng hostname --fqdnthay thế.

Thông báo lỗi hostname: Name or service not knownxuất phát từ các chức năng của trình phân giải : đây là các phần của thư viện hệ thống dịch giữa tên và địa chỉ (thường là tên DNS và địa chỉ IP).

Trên thực tế, trình phân giải không chỉ làm DNS (và nhiều hơn là chỉ dịch giữa tên máy chủ và địa chỉ IP); hành vi của nó được cấu hình một phần bởi tệp /etc/nsswitch.confvà thông thường nó sẽ tham khảo các mục sau, thường là theo thứ tự sau:

  • 'máy chủ' (trên Linux, phương tiện / etc / hosts)
  • (đôi khi) nscd (daemon bộ nhớ đệm dịch vụ tên)
  • 'dns'

(lưu ý, bạn cũng có thể có một máy chủ DNS lưu trữ, chẳng hạn như dnsmasqd --- cho điểm ở trên, vẫn nằm trong cơ chế 'dns').

Điều đáng nói là các công cụ như đào , máy chủnslookup đáng kính không tuân theo thứ tự này; chúng rõ ràng là các công cụ truy vấn DNS. Điều này có nghĩa là nếu bạn dựa vào chúng (ví dụ trong tập lệnh), bạn có thể sẽ nhận được một kết quả khác với những chương trình máy khách thông thường (sử dụng trình phân giải hệ thống). Vì lý do này, hãy sử dụng chương trình getent trong các tập lệnh, đặc biệt nếu bạn có một thành phần bộ đệm như nscd đang chạy.

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

Vì vậy, điểm mấu chốt ở đây là a) nếu bạn có / etc / hosts được cấu hình tốt với một mục nhập cho máy của riêng bạn và b) /etc/nsswitch.conf của bạn có cấu hình thông thường - hosts: files dnstheo thứ tự đó, sau đó c) nếu bạn không có DNS được cấu hình tốt trong môi trường của mình, thì nó hostname --fqdnsẽ hoạt động.

Trong một DNS được cấu hình tốt, bạn sẽ có một địa chỉ 'đảo ngược' ("bản ghi PTR") cung cấp tên 'chính tắc' cho máy chủ của bạn và tên đó cũng có thể được tìm kiếm (" Một bản ghi "cho IPv4).

Phiên bản ngắn: thêm --verbose; nó sẽ chỉ cho bạn những gì bạn đang thiếu.

Hy vọng rằng sẽ giúp bạn hiểu những gì đang xảy ra.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.