데비안 저장소 만들기

Mon, Jun 8 2020 03:25:42

tian 을 편리하게 업데이트할 수 있도록 데비안 stable 저장소를 만들어보겠습니다.

저장소 구조

결론부터 말씀드리자면 저장소 구조는 다음과 같습니다.

repo
└── dists
    └── stable
        ├── InRelease
        └── main
            └── binary-amd64
                ├── Packages
                └── tian_2020.06.08_amd64.deb

dists, stable, main, binary-amd64 디렉토리가 필요합니다. stable, main 디렉토리 이름은 임의로 만들 수 있으나, stable, main 이름을 변경하면 소스 리스트에 반영해야 합니다.

자, 그럼 이제 작업을 시작합니다.

1. 아래와 같은 구조로 디렉토리를 만듭니다.

mkdir -p repo/dists/stable/main/binary-amd64

repo/
└── dists/
    └── stable/
        └── main/
            └── binary-amd64/

2. *.deb 파일을 binary-amd64 디렉토리에 복사합니다.

cp path/*.deb repo/dists/stable/main/binary-amd64

3. Packages 파일을 만듭니다.

apt-ftparchive 명령을 이용합니다. dists 의 상위 디렉토리에서 명령을 하셔야 합니다. 여기서는 repo 디렉토리가 되겠습니다.

cd repo
apt-ftparchive packages dists/stable/main/binary-amd64/ > \
                        dists/stable/main/binary-amd64/Packages

4. InRelease 파일을 만듭니다.

4.1 Release 파일의 헤더를 작성합니다.

echo "Codename: stable" > Release
echo "Architectures: amd64 i386" >> Release

i386 용 패키지를 만들지 않았더라도 i386 을 추가해야 apt update 할 때 경고 메시지가 나타나지 않습니다.

4.2 Release 파일에 내용을 추가합니다.

apt-ftparchive release dists/stable >> Release

4.3 gpg 키를 만듭니다.

이미 키가 있다면 그걸 사용하고, 없으면 아래처럼 만듭니다.

gpg --full-generate-key

4.4 Release 파일에 싸인하여 InRelease 파일을 생성합니다.

gpg --clear-sign -o InRelease Release
rm Release

4.5 InRelease 파일을 dists/stable/ 에 위치시킵니다.

mv InRelease dists/stable/

4.6 공개키를 내보냅니다.

gpg --armor --export > nimfsoft.asc

이제 작업이 거의 다 끝났습니다.

5. 소스 리스트와 공개키 설치

아래 소스리스트는 /etc/apt/sources.list 맨 마지막에 추가하거나, 파일로 만들어서 /etc/apt/sources.list.d/ 디렉토리에 추가하는 것도 괜찮습니다.

deb file:/path/repo stable main

공개키를 설치합니다.

cat nimfsoft.asc | sudo apt-key add -

6. 설치하기

tian 패키지를 설치합니다.

sudo apt update
sudo apt install tian

7. 소스리스트, 공개키 설치 자동화

tian은 배포판 공식 저장소에 들어있는 패키지가 아니기 때문에 사용자분들께 소스리스트 등록과 공개키 설치에 대해 안내하면 사용자분들께서 소스리스트, 공개키 수동 설치에 대해 불편함을 느낄 것이라 생각합니다. 이를 자동화할 수 있는 방법이 있습니다.
debian/* 파일들은 deb 패키지를 제작할 때 사용되는 파일들입니다. 이 중 debian/postinst 파일은 설치 후에 실행되는 스크립트입니다. 이 파일에 아래 내용을 넣고 패키지를 만들면 소스리스트 등록과 공개키 설치가 자동화됩니다.

#!/bin/sh
set -e
mkdir -p /etc/apt/sources.list.d
echo "deb https://www.nimfsoft.com/downloads/debian stable main" > \
  /etc/apt/sources.list.d/tian.list

KEY=\
"-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBF7BTVIBEACu12deRrl9vFVgcMJVrUMSloRCcL+f2gXQrmS4xpuDphi5dyq9
bTNEAfIKLingklxoP0RiiNGoVq6x1ga5TV2t2lEYKUf1mCuanx/U0nuhj7MRDhhg
18+/VhWHi2bknY78N0Y+qEEuHPCqcSZ1y2jIypHCJG3AHfbAzgnfuMtvVKj4n+wS
brg0ZJJR0fXDjKS7zxruy5wPFLGGCK4uIRI33lLKHerNEtDYz09kvwSviboneP4m
mi/VHabhGGWzJXlfDmHwywN/aKJm+TDqzzTbUw16ykFzbc7hzy/rbcc4eLV0kNph
26T5jDVyotl9UfJoNp4HgalUSUa0NuHhrB+jHrTkGs0l/XfWS70a2GtwUc4eKfqw
Asz50Npw0LYLVYPzTchlyyd6vn2tnFuo3aJsr/Lgmdof56FM1YQcIYPcr8WVDhI4
TRgHOkpuAjKnyxicwNl5BNi8SoqvO90v6GRd/aMdZTDZmWrOvpC583o4T9wKlO+e
J4b2LPMueCgojgNiKyEohqNE+QP1HFZ5j62SGtdUmfB/F1C5ge/q9fhYHh/SEXA+
LvwXOX3TPNNXJLV94/cvSsYtqG3N0CEsvde+cf3qmt9uOlCDeXtWkleM4bxiUnaG
3+D2t6CQycP5htEYP4pl+PBBtvjkjX3EvWRZH+XjE/Hj8OPg9pMWFxxleQARAQAB
tC5Ib2RvbmcgS2ltIChzaWduaW5nIGtleSkgPGhvZG9uZ0BuaW1mc29mdC5jb20+
iQJOBBMBCAA4FiEEMJ6A4bfMI5IEj/1LI8DSNjO/OXQFAl7BTVICGwMFCwkIBwIG
FQoJCAsCBBYCAwECHgECF4AACgkQI8DSNjO/OXQEYA/7B0d20Z0k5x/UXgbgddJN
D8ztabPbaa9WCDF+dD+twIw753UQ7zVxxgzBCOfSUJP+ny7aqjLkV33WTYhj7GHi
LKq0wj70hrW7zNgwzSygB5kijnS2cNXKb/pQSg92XIm5ql/Z+oE08uCuwvo4VAua
zlOG78UC7SKXKoOg0pNbH12nwVJ0Nf8MK5KVEz0J1CQQ0nYZrgg+5Pbog/j3KKUT
oUce2wGVF5ykMXrxxyejSWfTByBWDaA+gEFvGH707HVZn3mpQtV4Sw+GJIII9iST
QqyEaqkEjJkLdIdjwjHUr04WMpaWQ5SyRb5oLkFe0JxFHRseftDWOZnP3DpHhi4W
22QlDqw+rW93UhqcZ4FWv7LnxjYUB3FTZWQcddV0UowW8jp/RsWHQOkdrq3PJsgv
1vFtdS2bP0vf24kukd6L6CwbkpsRO7+8KK5tMjIR+HJZeHvE02/x3AC8l6Lu4/CR
fFrQ0RAALl5wjVrAIco61U0eDJVXiu4IBYbk+aqyfTdvC5NFIVXttz1ZV3CyMBGG
3Cx61wzy8Dn8HwysiNGE/LczrP/qJDf7P1lbSyVW3dZuLAD8e4rA2EZ5RIhWqrhk
D4BJ4qo0acqbgaVgZaA9zi3Blb3Ql30hnXJ2Jk7cZjkmNlOriRV9iiks9T/X0poo
TQyBtQtQ/zChzHKGCz0cl54=
=F3n9
-----END PGP PUBLIC KEY BLOCK-----"

echo "$KEY" | gpg --dearmor > /etc/apt/trusted.gpg.d/nimfsoft.gpg

debian/prerm 파일은 삭제 후에 실행되는 스크립트입니다. 이 파일에 아래 내용을 넣고 만들어진 tian 패키지를 삭제할 때 등록된 소스리스트와 공개키가 삭제됩니다.

#!/bin/sh
set -e
rm -f /etc/apt/sources.list.d/tian.list
rm -f /etc/apt/trusted.gpg.d/nimfsoft.gpg

지금까지 작업한 것을 https://www.nimfsoft.com/downloads/debian 에 올립니다.
소스 리스트에서 https://www.nimfsoft.com/downloads/debian 이 부분이 위에 언급한 file:/path/repo 에 대응되는 부분입니다.

tian 저장소, tian 패키지는 위와 같은 방법으로 만들었습니다. 그래서 tian 패키지를 설치하면 소스리스트, 공개키가 자동으로 설치되기 때문에 그 다음부터는 배포판에서 제공하는 패키지 관리자를 통하여 편리하게 업데이트를 하실 수 있습니다.