애플리케이션이 데비안 대신 우분투에서 실행되는 것처럼 보이도록 하기 위한 가짜 /etc/os-release

애플리케이션이 데비안 대신 우분투에서 실행되는 것처럼 보이도록 하기 위한 가짜 /etc/os-release

RHEL, SuSE(SLE[DS]) 및 특정 Ubuntu LTS 버전을 공식적으로 지원하는 타사 소프트웨어를 사용해야 합니다.

불행히도 저는 모든 시스템에서 데비안을 사용합니다.

이 소프트웨어에 대한 설치 프로그램 스크립트를 실행하면 오류 메시지("배포가 지원되지 않음")와 함께 종료되고 설치되지 않습니다.

설치 다운로드에는 .debUbuntu에서 실제로 작동하는 패키지가 함께 제공됩니다. .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 BindPathsBindReadOnlyPaths옵션의 용도입니다(문서):

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원본 콘텐츠가 계속 표시됩니다.

관련 정보