Điều gì cần thiết cho một boot systemd tối thiểu để khởi chạy getty trên bảng điều khiển ảo?


21

Đối với SysV init, tôi cần /etc/inittabrespawning mục getty, các /sbin/initnhị phân, nhị phân và các thư viện chia sẻ cho vỏ, loginthì getty, các PAM / security / shadow thứ, và một vài tập tin thiết bị.

Đối với upstarttôi cần khá nhiều yêu cầu giống nhau, nhưng thay vào đó /etc/inittab, tôi có một vài *.conftệp trong /etc/init: one * .conf start on startupđặt một runlevel với telinit, và một * .conf cho mỗi tty bắt đầu / hồi sinh gettytrên tty đó trên các đường chạy phù hợp .

Tôi cần cấu hình và nhị phân nào systemd init?

Tất cả các tài liệu tôi thấy dường như tập trung vào cách sử dụng một hệ thống đã được cài đặt để bắt đầu và dừng dịch vụ.

Một danh sách tối thiểu các tệp cần sao chép (ngoại trừ kernel / initrd) từ bản cài đặt Arch hoặc fedora đang chạy sẽ hoạt động tốt, nhưng tôi dường như không thể tìm thấy loại thông tin đó systemd.


Những gì tôi muốn biết là, vì systemd, những tập tin nào được yêu cầu và những gì chúng phải chứa, để bắt đầu một vỏ đăng nhập sau khi một initramfs thực hiện nó switch_rootgọi đến systemd /sbin/init.


Ví dụ cho upstart, tệp nhị phân và hai *.conftệp:

Tập tin /etc/init/whatever.conf:

bắt đầu khởi nghiệp
phát ra runlevel
bài tập
kịch bản
  telinit 2
kịch bản kết thúc

Tập tin /etc/init/tty1.conf:

bắt đầu trên runlevel [12345]
hồi sinh
exec / sbin / agetty -8 --noclear 38400 tty1 linux

Ví dụ cho sysvinit, tệp nhị phân và 1 tệp conf có tên /etc/inittab:

id: 2: initdefault:
c1: 12345: hồi sinh: / sbin / agetty 38400 tty1 linux

Bây giờ tôi sau khi systemdtương đương.

Tôi giả sử ít nhất 1 *.servicetệp là cần thiết ở đâu đó, với một [Service]mục chứa ExecStart=-/sbin/agetty --noclear %I linuxRestart=always, nhưng cái gì khác là cần thiết?


Bây giờ có một bài viết cơ sở kiến ​​thức RedHat gần đây (754933) mô tả khởi động systemd tại URL này: Tổng quan về systemd cho RHEL 7
MattBianco

Thật là chán nản khi thấy mọi người thổi tung một dòng cấu hình duy nhất vào một mớ hỗn độn lớn và gọi nó là cải tiến.
ceving

Câu trả lời:


17

Trước hết, systemdkhông phải là một unix truyền thống init. Systemd là rất nhiều, vì vậy thật không công bằng khi so sánh hai.

Để trả lời câu hỏi, những gì có vẻ cần thiết là một số nhị phân và các tệp cấu hình sau:

/usr/lib/systemd/system/default.target
/usr/lib/systemd/system/basic.target
/usr/lib/systemd/system/sysinit.target
/usr/lib/systemd/system/getty.target
/usr/lib/systemd/system/getty@.service
/usr/lib/systemd/system/console-getty.service

ban hành systemctl enable console-getty.service getty@tty2.servicesau đó tạo ra các liên kết tượng trưng này:

/etc/systemd/system/default.target.wants/getty@tty2.service -> / lib / systemd / system / getty @ dịch vụ
/etc/systemd/system/getty.target.wants/console-getty.service -> /lib/systemd/system/console-getty.service

LƯU Ý : Để sử dụng systemdcác tính năng đặc biệt để bắt đầu linh hoạt agetty, theo yêu cầu khi nhấn Alt+ F3, v.v., có vẻ như bạn cũng phải có ít nhất hai tệp này:

/etc/systemd/logind.conf
/lib/systemd/system/autovt@.service

nơi autovt@.servicelà một liên kết tượng trưng đến getty@.service.

Nội dung của tập tin cấu hình:

Các default.target, getty.target, sysinit.targettập tin có thể được sản phẩm nào ngoại trừ [Unit]thẻ và (có thể) Description=xxx.

basic.target cũng chứa thông tin phụ thuộc:

[Đơn vị]
Mô tả = Hệ thống cơ bản
Yêu cầu = sysinit.target
Muốn = sockets.target timers.target path.target slices.target
After = sysinit.target sockets.target timers.target path.target slices.target

Tôi không chắc liệu các tham chiếu đến các mục tiêu không tồn tại dưới dạng tệp có cần thiết hay không. Chúng được mô tả trên systemd.special(7)trang người đàn ông.


console-getty.service: (Trường hợp đặc biệt cho agetty trên bàn điều khiển)

[Đơn vị]
Mô tả = Bảng điều khiển Getty
After = systemd-user-session.service plymouth-Thoát-Wait.service
Trước = getty.target

[Dịch vụ]
ExecStart = - / sbin / agetty --noclear --keep-baud console 115200,38400,9600 $ HẠN
Loại = nhàn rỗi
Khởi động lại = luôn
Khởi động lại = 0
UtmpIdentifier = khuyết điểm
TTYPath = / dev / bảng điều khiển
TTYReset = có
TTYVHangup = có
KillMode = tiến trình
Bỏ quaSIGPIPE = không
SendSIGHUP = có

[Cài đặt, dựng lên]
WantedBy = getty.target

getty@.service: (cấu hình chung cho tất cả các dịch vụ nhỏ ngoại trừ bảng điều khiển)

[Đơn vị]
Mô tả = Getty trên% I
After = systemd-user-session.service plymouth-Thoát-Wait.service
Trước = getty.target
Bỏ quaOnIsolate = có
Điều kiệnPathExists = / dev / tty0

[Dịch vụ]
ExecStart = - / sbin / agetty --noclear% I $ HẠN
Loại = nhàn rỗi
Khởi động lại = luôn
Khởi động lại = 0
UtmpIdentifier =% I
TTYPath = / dev /% I
TTYReset = có
TTYVHangup = có
TTYVTDisallocate = không
KillMode = tiến trình
Bỏ quaSIGPIPE = không
SendSIGHUP = có

[Cài đặt, dựng lên]
WantedBy = getty.target
Mặc địnhInstance = tty1

Cuối cùng, bạn có thể cần một vài trong số các nhị phân đặc biệt này (Tôi chưa thử cái nào là quan trọng):

/ lib / systemd / systemd (/ sbin / init thường chỉ ra điều này)
/ lib / systemd / systemd-logind
/ lib / systemd / systemd-cgroups-agent
/ lib / systemd / systemd-user-session
/ lib / systemd / systemd-vconsole-setup
/ lib / systemd / systemd-update-utmp
/ lib / systemd / systemd-ngủ
/ lib / systemd / systemd-sysctl
/ lib / systemd / systemd-initctl
/ lib / systemd / systemd-reply-password
/ lib / systemd / systemd-ac-power
/ lib / systemd / systemd-kích hoạt
/ lib / systemd / systemd-đèn nền
/ lib / systemd / systemd-binfmt
/ lib / systemd / systemd-bootchart
/ lib / systemd / systemd-bus-proxyd
/ lib / systemd / systemd-coredump
/ lib / systemd / systemd-cryptsetup
/ lib / systemd / systemd-fsck
/ lib / systemd / systemd-hostnamed
/ lib / systemd / systemd-journald
/ lib / systemd / systemd-tạp chí-gatewayd
/ lib / systemd / systemd-tạp chí-từ xa
/ lib / systemd / systemd-local
/ lib / systemd / systemd-machined
/ lib / systemd / systemd-module-load
/ lib / systemd / systemd-multi-seat-x
/ lib / systemd / systemd-networkd
/ lib / systemd / systemd-networkd-Wait-online
/ lib / systemd / systemd-quotacheck
/ lib / systemd / systemd-ngẫu nhiên-hạt giống
/ lib / systemd / systemd-readahead
/ lib / systemd / systemd-remount-fs
/ lib / systemd / systemd-giải quyết
/ lib / systemd / systemd-rfkill
/ lib / systemd / systemd-shutdown
/ lib / systemd / systemd-shutdownd
/ lib / systemd / systemd-socket-proxyd
/ lib / systemd / systemd-hẹn giờ
/ lib / systemd / systemd-timesyncd
/ lib / systemd / systemd-udevd
/ lib / systemd / systemd-update-thực hiện

Để tóm tắt quá trình bắt đầu systemd, tôi nghĩ rằng nó hoạt động như thế này:

  1. systemd định vị basic.target(hoặc tất cả *.targetcác tập tin?)
  2. phụ thuộc được giải quyết dựa trên WantedBy=, Wants=, Before=, After=... chỉ thị trong [Install]phần của *.service*.targetcấu hình tập tin.
  3. *.services nên bắt đầu (không phải là dịch vụ "đặc biệt"), có một [Service]phần có ExecStart=chỉ thị, chỉ ra việc thực thi để bắt đầu.

1
AFAIK [Install]phần không được sử dụng bởi trình tự khởi động, chỉ bởi systemctl enable. Những gì khởi động nhìn vào là các liên kết tượng trưng /etc/systemd/system/basic.target.wants/, được tạo bởisystemctl enable .
Stefan Majewsky

6

systemdtự động tạo ra một getty khi bạn chuyển sang các thiết bị đầu cuối, lên đến một số lượng tối đa nhất định. Mặc định là 6 (vì vậy bạn sẽ tự động nhận được một getty cho alt + f1 đến alt + f6). Nếu bạn muốn thay đổi tham số này, bạn có thể chỉnh sửa /etc/systemd/logind.confđể thay đổi NAutoVTstham số thành một số khác (tối đa 12)

Nếu bạn muốn có một getty để đẻ trứng ngay cả khi bạn không tự chuyển bạn có thể thêm một liên kết tượng trưng để /usr/lib/systemd/system/getty@.servicevào /etc/systemd/system/getty.target.wants/thư mục:

ln -sf /usr/lib/systemd/system/getty@.service /etc/systemd/system/getty.target.wants/getty@tty9.service

điều này sẽ dẫn đến getty.targetyêu cầu thêm một getty@dịch vụ. Mục tiêu là một tập hợp các dịch vụ cần được sinh ra, thay thế các đường băng hỗ trợ các phụ thuộc. Mục tiêu mặc định phụ thuộc vàogetty.target

Xem tại systemd FAQ trong ArchWiki

chỉnh sửa: Tôi đã nghiên cứu thêm một chút trong tài liệu .

Khi khởi động systemd daemon tải tất cả các hệ thống trong defaultmục tiêu và các phụ thuộc của chúng. Một mục tiêu được xác định bởi các tập tin

/etc/systemd/system/default.target
/usr/lib/systemd/system/default.target

Một mục tiêu có một danh sách các dịch vụ đính kèm được chỉ định bởi các liên kết tượng trưng trong các thư mục

/etc/systemd/system/default.target.wants
/usr/lib/systemd/system/default.target.wants

Các /etc phiên bản sẽ ghi đè giá trị mặc định phân phối tại /usr/lib. Chỉ một trong các .targettệp được yêu cầu, trong khi không có thư mục nào được yêu cầu

gettychỉ là một trong những dịch vụ trong số các dịch vụ khác có thể được chạy bởi init script. Trong bản phân phối tôi đã kiểm tra (fedora, arch)getty được chạy theo hai cách khác nhau:

  1. Bắt đầu bằng các tập lệnh cụ thể cho từng thiết bị đầu cuối (liên kết đến /usr/lib/systemd/system/getty@.servicetệp trong đó tên tty được thay thế bằngsystemd từ tên tệp liên kết )
  2. Tự động đưa lên khi cần thiết logindkhi người dùng chuyển sang thiết bị đầu cuối ảo (tương tự như cách inetddịch vụ đưa lên cũ chỉ khi có yêu cầu đến). logindlà một daemon khác được phân phối systemdvà đọc cấu hình của nó từ/etc/systemd/logind.conf tệp.

Hy vọng điều này là thỏa mãn.


Tôi muốn biết những tập tin nào là cần thiết, và những gì chúng sẽ chứa. Bạn có thể tóm tắt câu trả lời của bạn với một danh sách các tệp được yêu cầu và nguyên nhân khiến chúng được đọc theo thứ tự nào? Tôi đang thiếu thông tin về những gì cần được tìm thấy trong thư mục đó. Tôi sẽ cố gắng xây dựng câu hỏi của tôi một chút. Cảm ơn!
MattBianco

@MattBianco bạn không cần phải thù địch systemd. Tôi đang nghiên cứu một chút về nó và nó trông khá đơn giản, một khi bạn hiểu cách thức hoạt động của công cụ
pqnet

1
Vâng, tôi hư hỏng bởi tài liệu từ các dự án nguồn mở khác. Tôi xin lỗi vì âm thanh thù địch. Thật khó chịu khi dường như không có tài liệu đơn giản nào giải thích quá trình khởi động. (Bây giờ tôi hiểu rằng đó là vì systemd không đơn giản.) Theo một cách hài hước, tôi muốn nhận xét rằng có lẽ systemdđó là sự thù địch, như khi thực hiện một sự tiếp quản thù địch theo cách một hệ thống mở bắt đầu. Nó biến GNU / Linux khỏi Unix. Không nói rằng đó là một điều xấu, nhưng nó rất khác với cách mọi thứ theo truyền thống. Và googling xung quanh một chút cho thấy rằng tôi không cô đơn.
MattBianco
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.