저는 yocto를 기반으로 임베디드 Linux를 개발 중입니다. 시스템은 읽기 전용으로 설치되었으며 systemd를 사용하여 데이터 파티션의 opkg에 의해 설치된 응용 프로그램을 관리하고 싶습니다.
이를 위해 대상을 만들고 default.target 링크를 내 대상을 가리키도록 변경했습니다. 이것은 작동하며 /etc/systemd/system/ 폴더에 설치된 서비스를 실행할 수 있습니다.
다음 단계는 /data/etc/systemd/system/과 같은 폴더에 설치된 서비스를 실행하는 것입니다.
systemd 문서에서 SYSTEMD_UNIT_PATH 변수를 설정하여 systemd가 서비스를 찾는 폴더를 확장할 수 있다는 것을 발견했습니다. 그러나 많은 테스트 후에도 이 변수를 올바르게 설정하는 방법을 찾지 못했고 systemd는 내 서비스를 찾지 못했습니다.
이 문제를 해결하는 데 도움을 주실 수 있나요?
편집: 커널 명령줄에 추가하지 않고 이를 수행할 수 있는 방법이 있다면 완벽할 것입니다.
감사해요.
답변1
AFAIK는 변수 가 처음 나타나는 경우 에만 SYSTEMD_UNIT_PATH
변수를 따릅니다.systemd
시작systemctl set-environment
그러면 나중에 명령을 통해 변경 하더라도 더 이상 그렇지 않습니다 .
또한 이 변수는 실제로 서비스 파일을 찾기 위한 추가 경로를 제공하지 않지만 표준 경로를 완전히 재정의합니다. 즉, systemd
해당 환경에 이 변수가 설정된 인스턴스를 시작하면 인스턴스는 일반 경로와 우선순위가 낮은 다른 모든 경로를 systemd
무시하고 해당 경로의 서비스 파일만 찾습니다 ./etc/systemd
기술적으로 귀하의 상황에 맞는 몇 가지 또는 세 가지 복잡한(그리고 복잡한) 솔루션이 있을 수 있지만 지금까지 가장 좋고 간단한 솔루션은 배포 공급업체가 했던 것처럼 수행하는 것입니다. 서비스 파일을 첨부합니다. /lib/systemd/
경로 안이나 아래에 놓습니다. 기본적으로 경로는 해당 /etc/systemd
경로를 반영하며 공급업체가 자신의 경로를 배치할 수 있도록 정확하게 설계되었습니다. systemd
유닛 파일. 결국, Yocto 프로젝트의 경우예배포판 공급자.
답변2
맨 시스템에서
$SYSTEMD_UNIT_PATH, $SYSTEMD_GENERATOR_PATH, $SYSTEMD_ENVIRONMENT_GENERATOR_PATH systemd가 유닛 파일과 생성기를 찾는 위치를 제어합니다. 이러한 변수에는 콜론(":")으로 구분된 경로 목록이 포함될 수 있습니다. 설정 시 목록이 빈 구성 요소("...:")로 끝나는 경우 목록은 일반적인 경로 집합 앞에 추가됩니다. 그렇지 않으면 지정된 목록이 일반적인 경로 집합을 대체합니다.
따라서 systemd가 시작되기 전에 내보내는 경우 예를 들면 다음과 같습니다.
export SYSTEMD_UNIT_PATH="/mypath:"
/mypath가 앞에 추가되고 여기에 시스템 파일을 저장할 수 있습니다.