chroot 내에서 시스템 서비스 시작 서비스를 실행할 수 있습니다. 그러나

init 스크립트 (또는 openrc)를 사용하면 항상 다른 설치 루트에서 서비스를 실행할 수 있습니다.
그러나 내가 달릴 때 나는 chroot /somepath/to_root /usr/bin/systemctl start someservice얻었다 :

Running in chroot, ignoring request.

systemd 서비스를 강제로 실행하는 방법이 있습니까?

업데이트 :
호스트 시스템이 init 스크립트 또는 openrc를 실행하지만 시스템이 작동하지 않는다는 것을 잊어 버렸습니다 .chroot를 사용하여 최소 쉘을 시작할 수없는 Unix 시스템에 문제를 일으킨다는 것을 잊었습니다.



답변

시스템 배포판에서 잘 알려진 문제 (Arch Linux, OpenSUSE, Fedora).

Systemd는 sysvinit을 대체하며 이보다 큰 이점을 제공합니다. sysvinit에서 서비스 시작을 요청하면 환경 변수, ulimits 등을 포함하여 스크립트를 호출하는 사람의 실행 컨텍스트를 상속합니다. Systemd는 환경이 항상 동일하기 때문에 서비스가 잘 정의되고 건강하며 일정한 환경에서 서비스를 시작하는 데몬에게 알림을 제공함으로써 이와 반대로 개선합니다.

이것은 chroot 내에서 systemctl을 호출 할 때 chroot 내부와 관련이 없으며 상속 될 환경은 여전히 ​​내 현재 환경이 아닌 PID 1의 환경이라는 것을 의미합니다. 그러나 이것보다 더 나빠집니다 : 통신 소켓이 / run / systemd 안에 있기 때문에 chroot의 프로세스는 init 시스템과 통신 할 수 없습니다!

그렇다면 시스템 배포판에서 chroot를 어떻게 사용합니까?

  1. Linux 컨테이너가 있으면 이 Arch Wiki 페이지 에서으로 인해 30 초 이내에 Linux 컨테이너를 설정하는 방법을 알려줍니다 systemd-nspawn.

  2. 만약 당신이 chroot 환경을 정말로 원한다면, 이 아름답고 맑은 웹 페이지 는 두 가지 작업 솔루션을 제공 할 것입니다 (두 번째는 지점 # 1에서 제공되는 것의 수정 된 버전입니다).


답변

systemd “서비스”만 무시하므로 데몬 명령을 수동으로 실행하면됩니다.

그래서 대신

service sshd start

나는 사용한다

/usr/sbin/sshd -D &

답변

몇 년 후 나는 대부분의 체계적인 실제 문제에 대한 단 하나의 해결책이 있음을 인정해야한다. 오류는 Systemd 자체이므로

Upstart 또는 Openrc와 같은 문제에 직면하지 않은 문제가 있었기 때문에 Systemd에 정말로 빠져 있습니다.

  • 24Mb의 램만 있고 쓰기 가능한 스토리지가없는 내장형 시스템의 경우에도 cgroup 지원이 필요한 커널 (옵션 파일 대신 구성 파일 내에서 기본적으로 활성화되어 있음) 이 적용됩니다 .
  • 모듈 식이라는 주장에도 불구하고, 런타임에 의존성 지옥은 그것을 강력한 신의 대상으로 만듭니다. 단일 reiser4 rootfs를 통해 부팅하고 싶습니까? 많은 프로그램이 필요하기 때문에 그것은 불가능 systemd-udevd요구하는 systemd-init요구하는 systemd-boot것보다 동시에 설치할 수없는 패키지 grub2도 아니고 Reiser4와 파티션에서 커널 이미지를 읽을 수 있습니다.
  • 블루투스 전화 접속을 통해 인터넷에 연결하고 싶습니까? Samsung java me 전화에서 작동하지 않으면 이전에 수동으로 작동했던 스크립트 및 명령 줄 소프트웨어를 실행할 수 없습니다 networkd.
  • 가장 큰 문제는 Linux 배포판을 빌드하고 유지 관리하는 경우입니다. systemd init 모듈 자체에는 종속성이 너무 커서 다른 설치 패키지를 통해 다른 init 시스템을 선택할 것을 제안 할 수 없습니다.
  • 시스템에서 chroot 할 수 없거나 libdb4.8에서 업그레이드 한 경우 로그를 보는 것이 좋습니다 (최소한 경우 최악의 경우 Microsoft는 xml 형식의 로그 파일을 가지고 있음) .

유일한 해결책 :

Systemd는 ossv4 대신 alsa와 같은 문제를 해결하기위한 비 재적입니다. 따라서 systemd를 사용하는 것이 있으면 모든 데이터를 지우십시오.

dd if=/dev/urandom of=/dev/dm−0 bs=1M

Openrc의 Gentoo와 같은 SysV Init의 문제를 해결하면서 전혀 사용하지 않는 것을 설치하십시오.
내 질문 systemd에 관해서는 Windows® 레지스트리와 같은 것들을 만듭니다. 일부 문제가 해결되면 끝났습니다.


답변

서비스는 systemctl이 아닌 systemd (pid 1)에 의해 실행되며 (시작 요청 만 전송 함) systemd는 chroot 외부에서 실행되므로 서비스도 마찬가지입니다.

기술적으로는 (systemctl을 루트에 systemd로 전달하여) 구현할 수 있지만 이미 전체 컨테이너를 만드는 도구가 있기 때문에 발생할 가능성은 거의 없습니다 ( systemd-nspawn /somepath/to_root). 그래도 항상 메일 링리스트에 연락 할 수 있습니다.


답변

이 문제는 한 번 chroot의 네트워크 구성을 사용하여 복구 모드에서 네트워크를 시작하려고 시도했습니다. 마지막으로 이것은 나를 위해 작동합니다.

service --skip-redirect <service> restart

또는:

SYSTEMCTL_SKIP_REDIRECT=_ /etc/init.d/<service> restart

답변

소켓 활성화로 inetd 스타일 서비스를 시작하는 경우 chroot와 바이너리를 모두 inetd 스타일 실행 대상으로 지정하는 구성 파일을 사용하여 stunnel을 시작하는 것이 좋습니다.

SELINUX 문제가있을 수 있습니다. Oracle Linux 7.1 시스템에서는 stunnel이 읽어야하는 모든 파일에서 “chcon -v –type = stunnel_etc_t”를 사용해야했습니다.

소켓의 클라이언트 쪽에서 TLS 암호화를 사용해야합니다 (예 : 구성에서 “client = yes”가있는 다른 기절). 이에 대한 자세한 내용은 알려주세요.


답변

nohupchroot에서 서비스를 시작 하기 위해 명령을 사용할 수 있습니다 . httpd예를 들어 서비스 를 시작하려면 다음과 같이하십시오.

nohup httpd /dev/null &

멈추다 pkill httpd