RHEL, SuSE(SLE[DS]) 및 특정 Ubuntu LTS 버전을 공식적으로 지원하는 타사 소프트웨어를 사용해야 합니다.
불행히도 저는 모든 시스템에서 데비안을 사용합니다.
이 소프트웨어에 대한 설치 프로그램 스크립트를 실행하면 오류 메시지("배포가 지원되지 않음")와 함께 종료되고 설치되지 않습니다.
설치 다운로드에는 .deb
Ubuntu에서 실제로 작동하는 패키지가 함께 제공됩니다. .deb
설치 프로그램 스크립트는 Ubuntu 버전이 포함된 경우에만 이 파일을 설치합니다(간단한 문자열 확인) . /etc/os-release
하지만 좋은 소식은 파일 이름을 찾아 .deb
데비안에 수동으로 설치하기 만 dpkg -i
하면 설치된 소프트웨어가 완벽하게 작동한다는 것입니다. :)
내가 만족하지 못하는 단 한 가지가 있습니다. 소프트웨어의 자동 업데이트 기능은 위에서 언급한 설치 프로그램 스크립트를 사용하는데, 이는 데비안을 좋아하지 않습니다. 따라서 저는 이 응용 프로그램의 무인 업그레이드를 수행하지 않을 것입니다. 업데이트 프로세스에서 .deb
파일이 포함된 새 버전을 성공적으로 다운로드했지만 파일을 설치하는 대신 마지못해 설치 프로그램 스크립트를 시작했습니다 .deb
. 설치 프로그램이 오류와 함께 종료됩니다. 업데이트가 실패. :((왜 공급업체가 /etc/apt/sources.list.d
이 소름 끼치는 사용자 정의 업데이트 메커니즘을 만드는 대신 URL만 제공하지 않았는지 모르겠습니다 .)
새 버전을 수동으로 다운로드하고 *.deb 파일을 추출한 후 다시 설치해야 했습니다.
이에 대해 어떤 생각이나 제안이 있으신가요?
/etc/os-release
"Debian" 대신 "Ubuntu"를 표시하도록 텍스트 파일을 편집하면 됩니다 . 그러면 문제가 해결될 것입니다. 그러나 이것이 시스템에 문제와 같은 부작용을 가져올까요 apt-get update && apt-get upgrade
?
아니면 /etc/os-release
시스템 서비스 단위에 대한 가짜 파일을 "마운트"할 수 있습니까? 그렇다면 이 서비스만이 Debian이 아닌 Ubuntu에서 실행되고 있다고 생각합니까? 아마도 chroot와 같은 것일까요? 하지만 chroot 디렉토리에 있는 전체 시스템 복사본을 수동으로 최신 상태로 유지해야 합니까?
답변1
아니면 시스템 서비스 단위에 대한 가짜 /etc/os-release 파일을 "마운트"할 수 있습니까?
이것이 바로 systemd BindPaths
와 BindReadOnlyPaths
옵션의 용도입니다(문서):
BindPaths=
,BindReadOnlyPaths=
셀별 번들 마운트를 구성합니다. 바인드 마운트를 사용하면 파일 시스템의 셀 보기의 다른 곳에서 특정 파일이나 디렉터리를 사용할 수 있습니다. 이 옵션을 사용하여 생성된 바인드 마운트는 해당 장치에만 적용되며 호스트의 마운트 테이블에 표시되지 않습니다. 이 옵션에는 공백으로 구분된 바인드 마운트 정의 목록이 필요합니다. 각 정의는 소스 경로, 대상 경로 및 옵션 문자열의 콜론으로 구분된 세 쌍으로 구성되며, 마지막 두 개는 선택 사항입니다. 소스 경로만 지정한 경우 소스와 대상이 동일한 것으로 간주됩니다. 옵션 문자열은 재귀적 또는 비재귀적 바인드 마운트를 구성하는 "rbind" 또는 "norbind"일 수 있습니다. 대상 경로가 생략되면 옵션 문자열도 생략되어야 합니다. 각 바인드 마운트 정의에는 "-" 접두사가 붙을 수 있으며, 이 경우 해당 소스 경로가 존재하지 않으면 무시됩니다.
BindPaths=
일반 쓰기 가능 바인드 마운트를 생성하고(소스 파일 시스템 마운트가 읽기 전용으로 표시되지 않은 경우)BindReadOnlyPaths=
읽기 전용 바인드 마운트도 생성합니다. 이러한 설정은 여러 번 사용할 수 있으며 각 사용은 장치의 번들 설치 목록에 추가됩니다. 빈 문자열이 이 두 옵션 중 하나에 할당되면 이전에 정의된 바인드 마운트의 전체 목록이 재설정됩니다. 이 경우 두 설정 중 어느 설정이 사용되는지에 관계없이 읽기 전용 및 일반 바인드 마운트가 모두 재설정됩니다.
다음 디렉토리를 가리키는 웹 서버를 실행하는 간단한 서비스를 생각해 보세요 /etc
.
[Service]
Type=exec
ExecStart=/usr/sbin/darkhttpd /etc --port 8080
이 서비스를 실행하고 http://localhost:8080/os-release를 방문하면 Fedora 호스트의 파일 내용이 표시됩니다.
$ curl -s http://localhost:8080/os-release
NAME="Fedora Linux"
VERSION="39 (Workstation Edition)"
ID=fedora
VERSION_ID=39
VERSION_CODENAME=""
...
os-release
가짜 파일을 해당 위치에 바인딩 하도록 서비스를 수정할 수 있습니다 . 먼저 /tmp/fake-osrelease
다음을 만듭니다 .
NAME="I reall am Ubuntu"
그런 다음 BindReadOnlyPaths
서비스 단위에 옵션을 추가합니다.
[Service]
Type=exec
ExecStart=/usr/sbin/darkhttpd /etc --port 8080
BindReadOnlyPaths=/tmp/fake-osrelease:/etc/os-release
이제 시스템을 다시 로드하고 서비스를 다시 시작하면 다음과 같습니다.
systemctl daemon-reload
systemctl restart fakeosrelease.service
파일을 검사할 때 가짜 콘텐츠가 표시됩니다 os-release
.
$ curl -s http://localhost:8080/os-release
NAME="I am really Ubuntu"
이 변화오직서비스 자체에 영향을 미칩니다. 이렇게 해도 cat /etc/os-release
원본 콘텐츠가 계속 표시됩니다.