저는 집에 Debian Linux를 실행하는 컴퓨터가 몇 대 있고 패키지 시스템의 부분 이미지를 만들고 싶었습니다. 전체 미러를 만드는 것을 고려했지만 대부분의 패키지를 사용하지 않습니다. 그러나 내가 찾은 대부분의 부분 미러링 솔루션에서는 패키지를 구성 파일에 수동으로 넣어야 합니다. 클라이언트에 패키지를 설치할 때 로컬 서버가 패키지를 다운로드/업데이트할 수 있도록 부분 미러를 사용하는 방법이 있습니까?
또한 Ubuntu를 지원할 수도 있습니다(일부 Ubuntu VM이 있습니다).
감사해요!
답변1
해야 할 일이 몇 가지 있지만 데비안의 전체 미러를 만들고 싶지 않다는 것을 이해합니다. 물론 그들은 전체 이미지를 모든 아키텍처와 모든 버전으로 정의합니다.
더 작은 하위 집합을 사용하되 여전히 원하는 것보다 더 큽니다 apt-mirror
. 이렇게 하면 필요에 따라 단일 버전과 아키텍처로 조정할 수 있습니다. https://apt-mirror.github.io/
하지만 실제로 원하는 것은 패키지를 처음 다운로드할 때 캐시하여 네트워크의 모든 컴퓨터에서 사용할 수 있도록 하는 것입니다. 클라이언트와 미러 서버 사이에 프록시를 배치하여 이를 수행할 수 있으며 apt-cacher-ng
로컬 Debian/Ubuntu/Mint/etc 시스템을 가리킬 수 있는 프록시/웹 서버 콤보가 있습니다(글쎄, 최신 버전도 몇 개 있습니다). 여기에.http://xmodulo.com/apt-caching-server-ubuntu-debian.html
답변2
저는 전문가는 아니지만 비슷한 일을 해본 적이 있습니다. 완전 자동은 아니지만 몇 가지 명령만 입력하면 됩니다.
먼저 사용 중인 목록을 가져옵니다(모든 시스템이 동일한 아키텍처를 가지고 있다고 가정).
$ apt list --installed > install.list
그런 다음 사람이 읽을 수 있는 형식으로 변환합니다.
$ sed -r 's/ \[.*?\]//g' install.list | sed -r 's/(^.*?)\/.*?[ ](.*?)[ ](.*?)$/\1:\3=\2/g' > install.list.to.dl
그런 다음 현재 패키지 버전을 다운로드합니다.
$ xargs apt download < install.list.to.dl
그러면 현재 설치된 모든 debs가 현재 디렉터리에 다운로드됩니다.
이 폴더를 apt의 소스로 추가하려면 Packages.gz 파일을 생성해야 합니다. 예를 들어
$ cd ~/deb_server/debs/
$ dpkg-scanpackages -m . /dev/null | gzip -9c > Packages.gz
편집: dpkg-scanpackages 경로는 상대 경로여야 합니다. 그렇지 않으면 나중에 다운로드 프로세스가 중단됩니다.
(-m을 사용하면 여러 버전을 가질 수 있습니다. 최신 버전을 원하면 -m을 제거하세요.)
이제 파일 서버(예: apache2)를 시작하고 파일을 색인화하도록 구성해야 합니다.
/etc/apache2/sites-enabled/000-debserver.conf
포함하다:
DocumentRoot /var/www
<Directory /var/www/>
Options +Indexes +FollowSymLinks
Require all granted
</Directory>
마지막으로 deb 폴더를 /var/www에 심볼릭 링크해야 합니다. (또는 현재 deb 다운로드 위치로 서버를 구성하십시오.) 예를 들어
$ ln -s ~/deb_server/debs/ /var/www/repo
마지막 작업은 서버 시스템을 각 대상 시스템에 대한 적절한 업데이트의 유일한 소스로 추가하는 것입니다.
$ deb [trusted=yes] http://deb_server_ip/repo /
패키지를 업데이트하려면 apt download를 다시 실행하여 목록을 표시해야 하지만 버전은 표시되지 않습니다.
$ sed -r 's/ \[.*?\]//g' install.list | sed -r 's/(^.*?)\/.*?[ ](.*?)[ ](.*?)$/\1:\3/g' > install.list.for.update
$ apt update && xargs apt download < install.list.for.update
Packages.gz를 업데이트하세요.
이것이 최선의 접근 방식인지는 확실하지 않지만 저에게는 효과적입니다.
답변3
저는 여러 컴퓨터에 똑같은 콘텐츠를 배포할 수 있도록 적절한 저장소에서 패키지와 종속성을 제어하는 솔루션을 찾고 있었습니다. 나는 이것이 클라이언트와 서버를 동기화 상태로 유지하려는 상황과 비슷하다고 생각합니다.
우연히 만났어요 (https://www.aptly.info/) 전체 저장소를 미러링하지 않고 패키지의 하위 집합과 사용자가 지정한 종속성만 미러링하여 정확한 문제를 해결하는 것으로 보입니다.
아직 테스트하지는 않았지만 유망해 보입니다.