Reprepro 를 이용한 APT 저장소 구축
환경 구성
OS : HamoniKR SUN (ubuntu 18.04)
Server : Apache2
설정 경로 : /srv/repos/apt
준비
APT 저장소 구축 및 패키지 배포를 위해 아래 문서를 참고하여 GPG 키를 생성한다.
https://blog.lukehan.kr/entry/gpg-key-생성
아래 문서를 참고하여 배포할 패키지(deb)를 사전 준비한다.
https://blog.lukehan.kr/entry/deb-패키지-기본-파일-하모니카-30
설치
sudo apt-get install reprepro
설정
폴더 생성
sudo mkdir -p /srv/repos/apt/debian
배포 관리할 repository 폴더를 생성한다.
sudo mkdir -p /srv/repos/apt/debian/conf
sudo mkdir -p /srv/repos/apt/debian/db
reprepro 설정을 위해 위와 같이 입력하여 conf 폴더를 생성한다.
apache 설정
sudo vi /etc/apache2/conf.available/repos.conf
위와 같이 입력하여 apache 설정을 진행합니다.
Alias /repos/apt/debian /srv/repos/apt/debian
<Directory /srv/repos/ >
# We want the user to be able to browse the directory manually
Options Indexes FollowSymLinks Multiviews
Require all granted
</Directory>
# This syntax supports several repositories, e.g. one for Debian, one for Ubuntu.
# Replace * with debian, if you intend to support one distribution only.
<Directory "/srv/repos/apt/*/db/">
Require all denied
</Directory>
<Directory "/srv/repos/apt/*/conf/">
Require all denied
</Directory>
<Directory "/srv/repos/apt/*/incoming/">
Require all denied
</Directory>
위와 같이 내용을 입력하여 설정 합니다.
해당 문서에서는 /srv/repos/apt 를 경로로 사용하겠습니다.
작성이 완료 후 저장합니다.
sudo a2enconf repos
sudo apache2ctl configtest
sudo service apache2 reload
위와 같이 입력하여 apache2 설정 파일을 적용합니다.
apache2ctl configtest 입력 시 "Syntax OK" 메지시가 나오는 것을 확인합니다.
Reprepro 설정
gpg --list-secret-key --with-subkey-fingerprint
reprepro 설정을 위해 위와 같이 입력합니다.
pub rsa3072 2022-02-26 [SC] [expires: 2024-02-26]
E123D55E623D56323D65E123655E623D563D5831
uid [ultimate] lukehan <lukehan@example.com>
sub rsa3072 2022-02-26 [E] [expires: 2024-02-26]
F24957412415744F1495F149571F2495F2495714
명령어를 입력하면 위와 같이 OpenPGP 정보가 나옵니다.
설정을 위해 sub 에 있는 정보를 복사합니다.
sudo vi /srv/repos/apt/debian/conf/distributions
위와 같이 입력하여 distribution 설정 정보 입력을 진행합니다.
Origin: Your project name
Label: Your project name
Codename: bionic
Architectures: i386 amd64
Components: main
Description: Apt repository for project x
SignWith: F24957412415744F1495F149571F2495F2495714
위와 같이 입력하여 설정 적용 합니다.
Origin, Label 에 Repository 명을 입력하고 SigWith 에 앞에서 확인한 GPG 정보를 입력합니다.
sudo vi /srv/repos/apt/debian/conf/options
위와 같이 입력하여 option 설정 정보 입력을 진행합니다.
verbose
basedir /srv/repos/apt/debian
ask-passphrase
위와 같이 입력하여 설정 적용 합니다.
저장소에 패키지 추가하기
sudo reprepro -b $repository_path includedeb $os_code_name $package.deb
ex)
sudo reprepro -b /srv/repos/apt/debian/ includedeb bionic boot-select_1.0.2_all.deb
준비한 deb 파일이 있는 경로로 이동한 후 위와 같이 입력한 후 GPG 인증서 비밀번호를 입력하여 패키지를 추가합니다.
sudo reprepro -b $repository_path list $os_code_name
ex)
sudo reprepro -b /srv/repos/apt/debian/ list bionic
위와 같이 입력하여 추가한 패키지 목록을 확인합니다.
저장소에서 패키지 제거하기
sudo reprepro -b $repository_path remove $os_code_name $package_name
ex)
sudo reprepro -b /srv/repos/apt/debian/ remove bionic boot-select
위와 같이 입력하여 패키지를 제거합니다.
gpg.key 배포
생성한 저장소를 다른 사람들이 사용하기 위해선 public gpg key 가 필요합니다.
gpg --armor --output repository.gpg.key --export-options export-minimal --export F24957412415744F1495F149571F2495F2495714
위와 같이 입력하여 gpg key 를 생성합니다.
생성한 key 를 저장소(/srv/repos/apt/debian/)로 옮깁니다.
저장소 추가하기
sudo wget -O - http://www.example.com/repos/apt/debian/repository.gpg.key | sudo apt-key add -
저장소를 사용할 pc 에서 위의 명령어를 입력하여 GPG key 를 추가합니다.
도메인 연결이 되어 있지 않은 경우 ip로 진행 합니다.
명령어 입력 후 OK 메시지가 확인되었다면 저장소를 추가합니다.
sudo vi /etc/apt/sources.list.d/repository.list
위와 같이 입력하여 repository 를 추가 진행 합니다.
deb http://www.example.com/repos/apt/debian/ bionic main
위와 같이 작성한 후 저장합니다.
sudo apt-get update
위와 같이 입력하여 추가한 저장소를 시스템에 반영합니다.
참고
- https://wiki.debian.org/DebianRepository/Setup
- https://www.systutorials.com/docs/linux/man/1-reprepro/
- http://mirror.physics.ox.ac.uk/ubuntu/oxford-local-testing/reprepro/docs/manual.html
- https://linuxize.com/post/how-to-add-apt-repository-in-ubuntu/
- https://www.digitalocean.com/community/tutorials/how-to-use-reprepro-for-a-secure-package-repository-on-ubuntu-14-04