나는 그것을 사용하고 있다커널 매개 systemd.run
변수Manjaro ARM을 처음 시작할 때 호스트 이름 설정, 기본 사용자 추가 등 일부 자동 구성 작업을 적용하고 패키지 설치를 제외하고는 모든 것이 잘 작동합니다 pacman
. pacman
예를 들어, 모든 패키지를 업데이트하고 vim을 설치하려고 합니다.
pacman -Syu --noconfirm
pacman -S --noconfirm vim
예를 들어 이렇게 하면 각 이미지에 대해 여러 가지 오류가 발생합니다.
+ pacman -Syu --noconfirm
:: Synchronizing package databases...
core downloading...
extra downloading...
community downloading...
error: failed retrieving file 'core.db' from manjaro.mirrors.lavatech.top : Could not resolve host: manjaro.mirrors.lavatech.top
warning: too many errors from manjaro.mirrors.lavatech.top, skipping for the remainder of this transaction
error: failed retrieving file 'extra.db' from manjaro.mirrors.lavatech.top : Could not resolve host: manjaro.mirrors.lavatech.top
error: failed retrieving file 'community.db' from manjaro.mirrors.lavatech.top : Could not resolve host: manjaro.mirrors.lavatech.top
error: failed retrieving file 'core.db' from ftp.nluug.nl : Could not resolve host: ftp.nluug.nl
로컬 서버와 인터넷 도메인에 대해 ping을 시도했습니다.
+ ping -c1 192.168.0.19
ping: connect: Network is unreachable
따라서 스크립트가 실행 중일 때 네트워크 연결이 설정되지 않은 것 같습니다. 나는 노력했다systemd.wants
하지만 여전히 작동하지 않습니다. 네트워크를 사용할 수 없습니다. 또한 다음 systemd.wants
과 같은 다른 단위를 사용해 보았습니다 cmdline.txt
.
systemd.wants=systemd-networkd.service
systemd.wants=systemd-networkd-wait-online.service
systemd.wants=network-online.target
systemd.wants=dhcpcd.service
systemd 지시문 /boot/cmdline.txt
:
systemd.run=/boot/my_init_wrapper.sh systemd.run_success_action=reboot systemd.unit=kernel-command-line.target systemd.wants=systemd-networkd.service
~부터systemd-run-generator
run
세 가지 옵션( , run_success_action
및 ) 만 언급했는데 run_failture_action
첫 번째 문서를 잘못 이해한 것 같아서 이를 알아낼 수 없는 것 같습니다 systemd.run.generator
. systemd 단위 자체가 다양한 유형의 종속성을 지정할 수 있기 때문에 이 점을 알고 싶습니다. 커널에서 이를 지정하는 다른 방법이 있습니까 cmdline.txt
?
라즈베리 파이 4에서 시도해 보고 있습니다. 하지만 이 질문은 systemd에만 관련되어 있으므로 pi에서 실행 중인지 systemd가 있는 다른 시스템에서 실행 중인지는 중요하지 않습니다. 그래서 저는 이것을 RPI 플랫폼이 아닌 일반적인 Linux 질문으로 여기에 게시합니다.
답변1
이 경우에는 전달하지 않고 최소한 부품에 대해서는 systemd.run
일반 서비스로 사용하는 것이 더 낫다고 생각합니다 .ConditionFirstBoot=yes
pacman
~에 따르면수동, 그러한 단위를 참조하는 것이 더 좋습니다first-boot-complete.target
[Unit]
Description="Update packages & install vim"
ConditionFirstBoot=yes
Wants=first-boot-complete.target
Before=first-boot-complete.target
Wants=network-online.target
After=network-online.target
[Service]
#optional ping test
#ExecCondition=/usr/bin/ping -c 2 -w 2 manjaro.org
#not running arch - adapt pacman path if need be:
ExecStart=/usr/bin/pacman -Syu --noconfirm
ExecStart=/usr/bin/pacman -S --noconfirm vim
[Install]
WantedBy=default.target
핑 테스트는 흥미로울 수 있습니다.'온라인'의 의미에 대한 불확실성.
첫 번째 시작 조건은 매뉴얼에서 인용됩니다.
첫 번째 시작 조건 =
부울 매개변수를 사용합니다. 이 조건은 시스템이 처음으로 시작되는지 여부에 따라 장치의 상태를 결정하는 데 사용할 수 있습니다. 이는 대략
/etc/
채워지지 않음을 의미합니다(자세한 내용은 참고자료의 "첫 번째 부팅 의미" 참조machine-id(5)
). 이는/etc/
공장 재설정 후 첫 번째 부팅 시 또는 새 시스템 인스턴스의 첫 번째 부팅 시 채우는 데 사용할 수 있습니다 .견고성을 위해 유닛은
ConditionFirstBoot=yes
먼저 스스로 명령을 내리고first-boot-complete.target
이 수동 목표를 끌어당겨야 합니다Wants=
. 이렇게 하면 첫 번째 부팅이 중단된 경우 다음 시스템 부팅 중에 해당 장치가 다시 실행됩니다.이 옵션이 커널 명령줄에 지정 되면
systemd.condition-first-boot=
(부울 값 사용) 이 조건부 확인 결과를 무시하고/etc/machine-id
존재 확인보다 우선합니다.