article1_1 - webispy/aln GitHub Wiki

Ubuntu Linux에 deb νŒ¨ν‚€μ§€λ‘œ λ°°ν¬ν•˜κΈ° (ν•˜)

배포

μ•žμ˜ 과정을 톡해 deb νŒŒμΌμ„ μ •μƒμ μœΌλ‘œ λ§Œλ“€μ—ˆμœΌλ©΄ 이제 배포λ₯Ό ν•΄μ•Ό ν•©λ‹ˆλ‹€. deb 파일 자체λ₯Ό κ·ΈλŒ€λ‘œ 배포할 μˆ˜λ„ μžˆκ² μ§€λ§Œ, κ·Έλ ‡κ²Œ ν•˜λ©΄ 맀번 νŒŒμΌμ„ μ—…λ‘œλ“œ/λ‹€μš΄λ‘œλ“œ ν•΄μ•Ό ν•˜λŠ” λΆˆνŽΈν•¨μ΄ 있고 파일λͺ… μžμ²΄λ‘œλŠ” 배포판 버전을 μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— 이 파일이 22.04(Jammy)μš©μΈμ§€ 20.04(Focal)μš©μΈμ§€ μ•ŒκΈ°κ°€ 쉽지 μ•ŠμŠ΅λ‹ˆλ‹€.

일반적으둜 apt install λͺ…령을 톡해 νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ν•˜λ“―μ΄ μš°λ¦¬κ°€ λ§Œλ“  νŒ¨ν‚€μ§€λ„ μ„€μΉ˜κ°€ κ°€λŠ₯ν•˜λ©΄ 더 쒋을 κ²ƒμž…λ‹ˆλ‹€.

apt λͺ…령은 HTTP/HTTPSλ₯Ό 톡해 νŒ¨ν‚€μ§€ μ €μž₯μ†Œ μ„œλ²„μ—μ„œ νŒ¨ν‚€μ§€ 인덱슀 정보 파일(Packages)을 가져와 내뢀에 μ €μž₯ν•˜κ³  μžˆλ‹€κ°€ apt install둜 νŒ¨ν‚€μ§€ μ„€μΉ˜λ₯Ό μš”μ²­ λ°›μœΌλ©΄ μ €μž₯된 인덱슀 정보λ₯Ό μ΄μš©ν•΄ ν•΄λ‹Ή νŒ¨ν‚€μ§€μ˜ λ‹€μš΄λ‘œλ“œ URL을 μ–»μ–΄μ„œ νŒ¨ν‚€μ§€ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œ λ°›μ•„ μ„€μΉ˜ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ, μš°λ¦¬κ°€ λ§Œλ“  νŒ¨ν‚€μ§€μ— λŒ€ν•œ 정보 파일과 νŒ¨ν‚€μ§€ νŒŒμΌλ“€μ„ μ›Ήμ„œλ²„λ₯Ό 톡해 μ œκ³΅ν•˜λ©΄ apt install λͺ…λ ΉμœΌλ‘œ νŒ¨ν‚€μ§€ μ„€μΉ˜λ₯Ό κ°€λŠ₯ν•˜κ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

dpkg-scanpackages

dpkg-scanpackages λͺ…령은 deb νŒ¨ν‚€μ§€λ“€μ„ λΆ„μ„ν•΄μ„œ Packages 파일(νŒ¨ν‚€μ§€ 인덱슀 파일)을 μƒμ„±ν•©λ‹ˆλ‹€.

μ•žμ—μ„œ μƒμ„±ν•œ deb νŒ¨ν‚€μ§€λ“€μ„ ν•œκ³³μ— λͺ¨μ•„놓고 λ‹€μŒκ³Ό 같이 dpkg-scanpackages λͺ…령을 μˆ˜ν–‰ν•˜λ©΄ Packages 파일이 μƒμ„±λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

$ ls
aln_0.1.0~jammy_amd64.deb
aln-dbg_0.1.0~jammy_amd64.deb
libaln0_0.1.0~jammy_amd64.deb
libaln0-dbg_0.1.0~jammy_amd64.deb
libaln-dev_0.1.0~jammy_amd64.deb

$ dpkg-scanpackages . > Packages

일반적으둜 deb νŒŒμΌλ“€μ€ dists/{dist-name}/pool/ 디렉토리에 λͺ¨μ•„ 놓고, Packages νŒŒμΌμ€ dists/{dist-name}/{repository}/binary-{arch}/ 디렉토리에 μƒμ„±ν•©λ‹ˆλ‹€. μ—¬κΈ°μ„œ {dist-name}은 배포판 이름이고, {repository}λŠ” 각 νŒ¨ν‚€μ§€μ˜ λΌμ΄μ„ΌμŠ€ 및 μ‚¬μš© 쑰건에 따라 λΆ„λ₯˜λ©λ‹ˆλ‹€. 개인이 λ§Œλ“  μ˜€ν”ˆμ†ŒμŠ€λ₯Ό νŒ¨ν‚€μ§•ν•˜μ—¬ λ°°ν¬ν•˜λ €λŠ” 경우 main을 μ‚¬μš©ν•΄λ„ λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

  • main: Canonical-supported free and open-source software.
  • universe: Community-maintained free and open-source software.
  • restricted: Proprietary drivers for devices.
  • multiverse: Software restricted by copyright or legal issues.

더 μžμ„Έν•œ λ‚΄μš©μ€ https://help.ubuntu.com/community/Repositories/Ubuntu μ°Έκ³  λ°”λžλ‹ˆλ‹€.

deb νŒ¨ν‚€μ§€λ₯Ό μ•„λž˜μ²˜λŸΌ 배포할 λͺ©μ μœΌλ‘œ λ§Œλ“  경우λ₯Ό κ°€μ •ν•˜μ—¬ 디렉토리λ₯Ό ꡬ성해 λ³΄κ² μŠ΅λ‹ˆλ‹€.

  • 배포판 지원: Ubuntu 22.04 (jammy), Ubuntu 20.04 (focal)
  • arch 지원: amd64, arm64, armhf

λ¨Όμ € 디렉토리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€:

mkdir -p ubuntu/dists/focal/pool
mkdir -p ubuntu/dists/focal/main/{binary-amd64,binary-arm64,binary-armhf}
mkdir -p ubuntu/dists/jammy/pool
mkdir -p ubuntu/dists/jammy/main/{binary-amd64,binary-arm64,binary-armhf}

각 배포판 버전에 맞게 λΉŒλ“œν•œ deb νŒ¨ν‚€μ§€ νŒŒμΌλ“€μ„ pool λ””λ ‰ν† λ¦¬λ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€:

git clone https://github.com/webispy/aln.git

# focal 배포판 용으둜 νŒ¨ν‚€μ§€ λΉŒλ“œ μˆ˜ν–‰
cd aln
git clean -dfx
cp -a packaging/focal debian
sbuild --chroot focal-amd64
sbuild --chroot focal-amd64-armhf --host armhf
sbuild --chroot focal-amd64-arm64 --host arm64
cd ..
mv *.deb ubuntu/dists/focal/pool

# jammy 배포판 용으둜 νŒ¨ν‚€μ§€ λΉŒλ“œ μˆ˜ν–‰
cd aln
git clean -dfx
cp -a packaging/jammy debian
sbuild --chroot jammy-amd64
sbuild --chroot jammy-amd64-armhf --host armhf
sbuild --chroot jammy-amd64-arm64 --host arm64
cd ..
mv *.deb ubuntu/dists/jammy/pool

이제 각 배포판 버전 및 arch에 맞게 Packages νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€:

cd ubuntu
dpkg-scanpackages -m -a amd64 dists/focal/pool > dists/focal/main/binary-amd64/Packages
dpkg-scanpackages -m -a arm64 dists/focal/pool > dists/focal/main/binary-arm64/Packages
dpkg-scanpackages -m -a armhf dists/focal/pool > dists/focal/main/binary-armhf/Packages
dpkg-scanpackages -m -a amd64 dists/jammy/pool > dists/jammy/main/binary-amd64/Packages
dpkg-scanpackages -m -a arm64 dists/jammy/pool > dists/jammy/main/binary-arm64/Packages
dpkg-scanpackages -m -a armhf dists/jammy/pool > dists/jammy/main/binary-armhf/Packages

μ œκ³΅ν•΄μ•Ό ν•  λͺ¨λ“  νŒŒμΌλ“€μ— λŒ€ν•œ μ€€λΉ„κ°€ λλ‚¬μœΌλ‹ˆ 이제 ubuntu 디렉토리λ₯Ό μ›Ήμ„œλ²„λ₯Ό 톡해 μ œκ³΅ν•˜λ©΄ λ©λ‹ˆλ‹€.

ALN의 경우 λ³„λ„μ˜ μ›Ήμ„œλ²„λ₯Ό λ”°λ‘œ μš΄μ˜ν•˜μ§€ μ•Šκ³  Githubμ—μ„œ μ œκ³΅ν•˜λŠ” 정적 μ›ΉνŽ˜μ΄μ§€ μ„œλΉ„μŠ€μΈ Github Pagesλ₯Ό 톡해 λ°°ν¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. https://github.com/webispy/aln/tree/gh-pages/ubuntuμ—μ„œ μ›ΉνŽ˜μ΄μ§€λ₯Ό 톡해 μ œκ³΅ν•˜λŠ” 전체 νŒŒμΌλ“€μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Github Pagesλ₯Ό 톡해 λ°°ν¬ν•˜λŠ” 방법에 λŒ€ν•΄ κΆκΈˆν•˜μ‹œλ©΄ ALN Github에 μžˆλŠ” Github Action 슀크립트(https://github.com/webispy/aln/blob/master/.github/workflows/ci.yaml)λ₯Ό μ°Έκ³  λ°”λžλ‹ˆλ‹€. 이 μŠ€ν¬λ¦½νŠΈμ—λŠ” deb νŒ¨ν‚€μ§€λ₯Ό μƒμ„±ν•˜λŠ” 과정도 λͺ¨λ‘ ν¬ν•¨ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

/etc/apt/sources.list.d/aln.list

μ›Ήμ„œλ²„λ₯Ό 톡해 μ •μƒμ μœΌλ‘œ deb νŒ¨ν‚€μ§€λ“€μ„ λ°°ν¬ν•˜λ„λ‘ μ„€μ • μ™„λ£Œν–ˆμœΌλ©΄ 이제 apt λͺ…λ ΉμœΌλ‘œ μ„€μΉ˜κ°€ λ˜λŠ”μ§€ 확인해 봐야 ν•˜λŠ”λ°, Ubuntuμ—μ„œλŠ” νŒ¨ν‚€μ§€ μ„œλ²„μ— λŒ€ν•œ 섀정을 /etc/apt/sources.list.d/ λ””λ ‰ν† λ¦¬μ—μ„œ κ΄€λ¦¬ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

ALN νŒ¨ν‚€μ§€ μ €μž₯μ†Œμ— λŒ€ν•œ 섀정을 μΆ”κ°€ν•˜κΈ° μœ„ν•΄ /etc/apt/sources.list.d/aln.list νŒŒμΌμ„ ν•˜λ‚˜ μƒμ„±ν•©λ‹ˆλ‹€:

deb [trusted=yes] https://webispy.github.io/aln/ubuntu/ focal main

참고둜, μœ„μ—μ„œ μƒμ„±ν•œ νŒ¨ν‚€μ§€λ“€μ΄ λͺ¨λ‘ μ„œλͺ… 과정을 μƒλž΅ν•˜κ³  λ§Œλ“€μ—ˆκΈ° λ•Œλ¬Έμ— [trusted=yes] μ˜΅μ…˜μ„ μΆ”κ°€ν•΄μ•Ό μ„œλͺ… 검증 과정을 κ±΄λ„ˆλ›°κ³  μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이제 νŒ¨ν‚€μ§€ μ €μž₯μ†Œκ°€ μΆ”κ°€λ˜μ—ˆμœΌλ‹ˆ μ‹œμŠ€ν…œμ˜ νŒ¨ν‚€μ§€ 인덱슀 정보λ₯Ό μ—…λ°μ΄νŠΈ ν•˜λ„λ‘ μ•„λž˜ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€.

$ sudo apt update
...
Get:19 https://webispy.github.io/aln/ubuntu jammy/main amd64 Packages
...

좜λ ₯λ˜λŠ” 둜그λ₯Ό 확인해보면 μƒˆλ‘œ μΆ”κ°€ν•œ μœ„ URLμ—μ„œ νŒ¨ν‚€μ§€ 정보λ₯Ό μ •μƒμ μœΌλ‘œ κ°€μ Έμ˜€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이제 μ•„λž˜ λͺ…λ ΉμœΌλ‘œ νŒ¨ν‚€μ§€λ₯Ό μ„€μΉ˜ 및 μ‚­μ œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

sudo apt install aln libaln-dev
sudo apt remove aln libaln-dev

PPA

UbuntuλŠ” μ‚¬μš©μžλ“€μ΄ λ§Œλ“  νŒ¨ν‚€μ§€λ₯Ό λ‹€λ₯Έ μ‚¬μš©μžλ“€κ³Ό μ‰½κ²Œ κ³΅μœ ν•  수 μžˆλ„λ‘ PPA(Personal Package Archive)λΌλŠ” μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. 이λ₯Ό μ΄μš©ν•˜λ©΄ λ³„λ„μ˜ μ›Ήμ„œλ²„ ꡬ좕없이 νŒ¨ν‚€μ§€λ₯Ό μ—…λ‘œλ“œν•˜κ³  배포할 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ—μ„œ 직접 κ΅¬μΆ•ν•œ ALN νŒ¨ν‚€μ§€ μ €μž₯μ†Œλ₯Ό μ΄μš©ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžκ°€ /etc/apt/sources.list.d/aln.list νŒŒμΌμ„ 직접 λ§Œλ“€λ„λ‘ κ°€μ΄λ“œ ν–ˆλ‹€λ©΄, PPAλŠ” μ•„λž˜μ™€ 같이 λͺ…령을 톡해 μ‰½κ²Œ μ €μž₯μ†Œλ₯Ό 관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

PPA μΆ”κ°€:

sudo add-apt-repository ppa:repo_name

PPA μ‚­μ œ:

sudo add-apt-repository -r ppa:repo_name

PGP(Pretty Good Privacy) ν‚€

PPA μ €μž₯μ†Œλ₯Ό μƒμ„±ν•˜κΈ°μ— μ•žμ„œ OpenPGP ν‚€λ₯Ό 생성해야 ν•©λ‹ˆλ‹€. gpg(GNU Privacy Guard) νˆ΄μ„ μ΄μš©ν•΄μ„œ OpenPGP ν‘œμ€€μ„ λ”°λ₯΄λŠ” ν‚€λ₯Ό μƒμ„±ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν‚€ 생성:

$ gpg --gen-key
...
Real name: Inho Oh
Email address: [email protected]
You selected this USER-ID:
    "Inho Oh <[email protected]>"

Change (N)ame, (E)mail, or (O)kay/(Q)uit? O
...
password: ...
...

public and secret key created and signed.

pub   rsa3072 2024-07-11 [SC] [expires: 2026-07-11]
      1234567890ABCDEF1234567890ABCDEF12345678
uid                      Inho Oh <[email protected]>
sub   rsa3072 2024-07-11 [E] [expires: 2026-07-11]

ν‚€ 쑰회:

$ gpg --fingerprint
...
/home/parallels/.gnupg/pubring.kbx
----------------------------------
pub   rsa3072 2024-07-11 [SC] [expires: 2026-07-11]
      1234 5678 90AB CDEF 1234  5678 90AB CDEF 1234 5678

uid           [ultimate] Inho Oh <[email protected]>
sub   rsa3072 2024-07-11 [E] [expires: 2026-07-11]

이제 μƒμ„±λœ ν‚€λ₯Ό Ubuntu ν‚€μ„œλ²„μ— ν‚€ λ“±λ‘ν•©λ‹ˆλ‹€:

# pub key의 끝 8자리λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€
$ gpg --keyserver keyserver.ubuntu.com --send-keys 12345678
gpg: sending key 90ABCDEF12345678 to hkp://keyserver.ubuntu.com

PPA 생성

λ¨Όμ € https://launchpad.net/ μ‚¬μ΄νŠΈ 접속 ν›„ νšŒμ›κ°€μž…μ„ μ§„ν–‰ν•΄μ•Ό ν•©λ‹ˆλ‹€. ν™”λ©΄ 상단 였λ₯Έμͺ½μ˜ Log in / Registerλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

Launchpad Homepage

Ubuntu One 계정이 있으면 ν•΄λ‹Ή κ³„μ •μœΌλ‘œ 둜그인 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—†μœΌλ©΄ I don't have an Ubuntu One accountλ₯Ό μ„ νƒν•΄μ„œ μ‹ κ·œλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

Launchpad login

λ‘œκ·ΈμΈμ„ ν•˜κ²Œ 되면 μ•„λž˜μ™€ 같이 κΈ°λ³Έ 화면이 λ‚˜νƒ€λ‚˜λŠ”λ°, PPAλ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ ν™”λ©΄ μƒλ‹¨μ—μ„œ μ‚¬μš©μž 이름을 μ„ νƒν•΄μ„œ 개인 ν™”λ©΄μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

Home after login

μ‚¬μš©μž 개인 ν™”λ©΄μ—μ„œ μ•„λž˜λ‘œ μŠ€ν¬λ‘€ν•˜λ©΄ Personal package archives λΌλŠ” μ„Ήμ…˜μ΄ μžˆλŠ”λ°, Create a new PPAλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

User home

URL둜 μ‚¬μš©ν•  이름과 ν‘œμ‹œν•  이름을 μ„€μ •ν•œ ν›„ Activate λ²„νŠΌμ„ μ„ νƒν•©λ‹ˆλ‹€.

Create PPA

μ•„λž˜μ™€ 같이 PPA νŽ˜μ΄μ§€κ°€ μƒμ„±λ˜μ—ˆμŠ΅λ‹ˆλ‹€. PPA에 νŒ¨ν‚€μ§€λ₯Ό 올리기 μœ„ν•΄μ„œλŠ” μœ„μ—μ„œ μƒμ„±ν•œ OpenPGPν‚€λ₯Ό 등둝해야 ν•©λ‹ˆλ‹€. ν™”λ©΄ μƒλ‹¨μ—μ„œ μ‚¬μš©μž 이름을 μ„ νƒν•΄μ„œ λ‹€μ‹œ 개인 ν™”λ©΄μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

PPA main

μ‚¬μš©μž 개인 ν™”λ©΄ 쀑간쯀에 OpenPGP keys λΌλŠ” μ„Ήμ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬λŠ” λ“±λ‘λœ ν‚€κ°€ μ—†λŠ”λ°, μ—°ν•„ λͺ¨μ–‘μ˜ μ•„μ΄μ½˜μ„ μ„ νƒν•΄μ„œ ν‚€ 등둝 ν™”λ©΄μœΌλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

User home for PGP

OpenPGP ν‚€ 등둝 ν™”λ©΄μž…λ‹ˆλ‹€. μœ„μ—μ„œ ν‚€λ₯Ό μƒμ„±ν•˜κ³  이 ν‚€λ₯Ό gpg 도ꡬλ₯Ό μ΄μš©ν•΄ Ubuntu ν‚€μ„œλ²„μ— 등둝을 ν–ˆκΈ° λ•Œλ¬Έμ—, μƒμ„±ν•œ ν‚€μ˜ Fingerprint 값을 μž…λ ₯ν•˜κ³  Import Key λ²„νŠΌμ„ μ„ νƒν•˜λ©΄ ν‚€μ„œλ²„λ₯Ό 톡해 Importκ°€ μ§„ν–‰λ©λ‹ˆλ‹€.

Import PGP

ν‚€ 값이 μ •μƒμ μœΌλ‘œ import 되면 μ•„λž˜μ™€ 같이 μ•”ν˜Έν™”λœ λ©”μ‹œμ§€λ₯Ό μ‚¬μš©μžμ˜ email에 λ³΄λƒˆκ³ , ν‚€λ₯Ό confirmν•˜κΈ° μœ„ν•΄μ„œλŠ” λ©”μ‹œμ§€ λ³΅ν˜Έν™” ν›„ κ·Έ μ•ˆμ— μžˆλŠ” linkλ₯Ό λ”°λΌκ°€λΌλŠ” μ•Œλ¦Όμ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

PGP Imported

email을 확인해보면 μ•„λž˜μ™€ 같이 ν‰λ¬ΈμœΌλ‘œ 된 λ‚΄μš© μ•„λž˜μͺ½μ— -----BEGIN PGP MESSAGE----- 둜 μ‹œμž‘ν•΄μ„œ -----END PGP MESSAGE-----둜 λλ‚˜λŠ” μ•”ν˜Έν™”λœ 뢀뢄이 μžˆμŠ΅λ‹ˆλ‹€. ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό λ³΅ν˜Έν™”ν•΄μ„œ λ©”μ‹œμ§€ μ•ˆμ— μžˆλŠ” URL에 접속해야 μ΅œμ’…μ μœΌλ‘œ ν‚€κ°€ λ“±λ‘λ©λ‹ˆλ‹€.

Encrypted email

λ©”μ‹œμ§€ λ³΅ν˜Έν™”λ₯Ό μœ„ν•΄ μ•”ν˜Έν™”λœ 뢀뢄을 별도 파일둜 μ €μž₯ν•©λ‹ˆλ‹€.

$ vi tmp.txt
-----BEGIN PGP MESSAGE-----

hQGMA5NEfSOB/OApAQv/ezl+bVTq89ekbcRjddY+opBZLEi3zijkRqk93BLbbiWv
BbGTY1UwbByOFqRfbtR0eTuqSM6cbf/gZEJwSWaPmk5Yu3OnbmJxf2tv6l0uFGim
XS9DyHthCj33BcKS6eWyUYGd4d0ojPBFc25Nh9T49DNEC5DHXxvg2ylNScrE4ytV
VL2SHvyze9i1GNqKWqIkKZKQ46/e43tVdn7VGDxg4MxjpF9tCPnMiFzosCFk/A/C
oxPIQtBBfMa9kG/dqIov+0g4TYjxrPeVqZRLclm2rgcX/7Ql363NU3mNquKl0l+F
h1ra/KR1GdonpWDg/+6Cc6v33F8C5xYyiRkFgf5T+xXcGuG27JMubS/lcAvoE1EY
qrpTevBVvMHqOsZVjM6hVX7h5El29YpJnkuQInbSNozP+nSoI5YSksmdK8ezIdmP
Y5c4lojNee09nxnyI9enD865B588qe6YtghpX7ybYe6MV08wF/JLa32SpD85Usy+
xUOxD1DpH2XC+2p6nQ080sCpAZ+f7k2C/yqnOMqWUPi98Sq7jDXresYwI5zUO3A0
QNG3Ok5WLUw3NTtiaS50DCydhtpf+U+kQjwGLnzZFi+ZkFV69394HJqg0ubqvOg9
arUUmKV2q/ll3Q8zqriFqlj3nB+/FUBJpF4Y/HTe9/ltCww+xI48O+UrDSd2mDZf
CkZaYQExBo6WP0t5LdGZfmllLFVEJBSnydcA8S3ZVE4KLQdqwbQiFGcusdpZWBMJ
kTC8QoUOMBBOKRpWdz7QvHlepKnZ4mFvkwFtdPVuCnEaLbrM8IbhA9zCP1zdKcN1
9SS5R3KEbb+N9UDQ7c2lRMGf5u4BdbnYRn9nlqCbVLih4Qn3bKBzT4L7RV9xfTkG
JwbdwnEplGhxOGO1lwItDHCPlF49Q+ugkOgfm/Y8Qdt0a4APf5dtqiLj78COo5+9
8WTKdK49becs9PdRgAkA9LemtEO1YzsyaQC0ZzZUsvK4wD0l0cjM/ruP3Q==
=He+1
-----END PGP MESSAGE-----

gpg 도ꡬλ₯Ό μ΄μš©ν•΄ λ³΅ν˜Έν™”ν•˜λ©΄ μ•„λž˜μ™€ 같이 λ©”μ‹œμ§€λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. 이제 λ§ˆμ§€λ§‰μ— μžˆλŠ” URL에 μ ‘μ†ν•΄μ„œ μ΅œμ’…μ μœΌλ‘œ ν‚€λ₯Ό Confirm μ²˜λ¦¬ν•©λ‹ˆλ‹€.

$ gpg --decrypt tmp.txt
gpg: encrypted with 3072-bit RSA key, ID 90ABCDEF12345678, created 2024-07-11
      "Inho Oh <[email protected]>"

Here are the instructions for confirming the OpenPGP key registration that we
received for use in Launchpad.

Requester details:

    User name    : Inho Oh
    Email address: [email protected]

Key details:

    Key type    : 3072R
    Fingerprint : 1234567890ABCDEF1234567890ABCDEF12345678

UIDs:
    [email protected]

Please go here to finish adding the key to your Launchpad account:

    https://launchpad.net/token/aBcDeFgHiJkLmNoPqRsT

URL에 μ ‘μ†ν•˜λ©΄ μ•„λž˜μ™€ 같이 ν‚€λ₯Ό Confirm ν• μ§€ λ¬Όμ–΄λ΄…λ‹ˆλ‹€. Continue λ²„νŠΌμ„ μ„ νƒν•©λ‹ˆλ‹€.

PGP Key confirm

ν‚€κ°€ μ„±κ³΅μ μœΌλ‘œ 등둝 λ˜μ—ˆμŠ΅λ‹ˆλ‹€. 이제 이 ν‚€λ₯Ό μ΄μš©ν•΄μ„œ νŒ¨ν‚€μ§€λ₯Ό PPA에 μ—…λ‘œλ“œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Key import success

νŒ¨ν‚€μ§€ μ—…λ‘œλ“œ

PPA에 μ—…λ‘œλ“œ ν•˜λ €λ©΄ debuild λͺ…령을 톡해 ν•„μš”ν•œ νŒŒμΌμ„ 생성해야 ν•©λ‹ˆλ‹€.

$ git clone https://github.com/webispy/aln.git
$ cd aln

# debian νŒ¨ν‚€μ§€ 디렉토리 μ€€λΉ„ (from packaging/jammy, packaging/focal)
$ cp -a packaging/jammy debian

# PPA μ—…λ‘œλ“œλ₯Ό μœ„ν•œ changes 파일 생성
# - λ°”μ΄λ„ˆλ¦¬ νŒ¨ν‚€μ§€λŠ” λΉŒλ“œν•  ν•„μš”κ°€ μ—†κΈ° λ•Œλ¬Έμ— -S μ˜΅μ…˜μœΌλ‘œ μ†ŒμŠ€ νŒ¨ν‚€μ§€λ§Œ μƒμ„±ν•©λ‹ˆλ‹€.
# - .git λ””λ ‰ν† λ¦¬λŠ” λΆˆν•„μš”ν•˜κΈ° λ•Œλ¬Έμ— μ œμ™Έμ‹œν‚΅λ‹ˆλ‹€.
$ debuild -S -I.git

debuildκ°€ λλ‚˜λ©΄ μƒμœ„ 디렉토리에 μ•„λž˜ νŒŒμΌλ“€μ΄ μƒμ„±λ©λ‹ˆλ‹€.

$ ls
aln_0.1.0~jammy.dsc
aln_0.1.0~jammy.tar.gz
aln_0.1.0~jammy_source.build
aln_0.1.0~jammy_source.buildinfo
aln_0.1.0~jammy_source.changes

이제 dput λͺ…λ ΉμœΌλ‘œ PPA에 νŒ¨ν‚€μ§€λ₯Ό μ—…λ‘œλ“œ ν•©λ‹ˆλ‹€. aln_0.1.0~jammy_source.changes νŒŒμΌμ„ μ§€μ •ν•˜λ©΄ κ΄€λ ¨λœ νŒŒμΌλ“€μ΄ λͺ¨λ‘ μžλ™μœΌλ‘œ μ—…λ‘œλ“œ λ©λ‹ˆλ‹€.

$ dput ppa:webispy/aln aln_0.1.0~jammy_source.changes
Checking signature on .changes
gpg: /home/parallels/git/my/aln_0.1.0~jammy_source.changes: Valid signature from 90ABCDEF12345678
Checking signature on .dsc
gpg: /home/parallels/git/my/aln_0.1.0~jammy.dsc: Valid signature from 90ABCDEF12345678
Uploading to ppa (via ftp to ppa.launchpad.net):
  Uploading aln_0.1.0~jammy.dsc: done.
  Uploading aln_0.1.0~jammy.tar.gz: done.
  Uploading aln_0.1.0~jammy_source.buildinfo: done.
  Uploading aln_0.1.0~jammy_source.changes: done.
Successfully uploaded packages.

μ—…λ‘œλ“œκ°€ μ„±κ³΅ν•˜λ©΄ μ•„λž˜μ™€ 같이 νŒ¨ν‚€μ§€κ°€ Accept λ˜μ—ˆλ‹€λŠ” email을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. debuild둜 νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€ λ•Œ jammy λ²„μ „μœΌλ‘œ λ§Œλ“€μ—ˆλŠ”λ°, email 제λͺ©μ— ν•΄λ‹Ή 버전에 λŒ€ν•΄ Accept λ˜μ—ˆλ‹€λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. focal 버전에 λŒ€ν•΄μ„œλ„ λ™μΌν•˜κ²Œ λ°˜λ³΅ν•΄μ„œ μ—…λ‘œλ“œν•˜λ©΄ λ©λ‹ˆλ‹€.

μ£Όμ˜ν• μ μ΄ μžˆλŠ”λ°,

  • debian/changelogλ₯Ό μž‘μ„±ν•œ μ‚¬μš©μž 정보가 PPA μ‚¬μš©μžμ™€ μΌμΉ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • μ—…λ‘œλ“œ ν›„ PPAμ—μ„œ νŒ¨ν‚€μ§€ λΉŒλ“œ 였λ₯˜λ‘œ 인해 μ‹€νŒ¨ν•  수 μžˆλŠ”λ°, 였λ₯˜ μˆ˜μ • ν›„ λ‹€μ‹œ μ—…λ‘œλ“œν•  λ•Œ λ°˜λ“œμ‹œ 버전(λΉŒλ“œ λ„˜λ²„/리비전)을 μ˜¬λ €μ€˜μ•Ό ν•©λ‹ˆλ‹€. 같은 버전을 올리면 Reject μ²˜λ¦¬λ©λ‹ˆλ‹€.

Accept email

PPA νŽ˜μ΄μ§€μ— 가보면 νŒ¨ν‚€μ§€ λͺ©λ‘μ— ALN이 μΆ”κ°€λœ 것을 확인할 수 있고, PPAλ₯Ό μΆ”κ°€ν•˜λŠ” 방법에 λŒ€ν•œ κ°€μ΄λ“œλ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. νŒ¨ν‚€μ§€ λΉŒλ“œ μƒνƒœλ₯Ό ν™•μΈν•˜κΈ° μœ„ν•΄ View package detailsλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

Package list

PPA의 λΉŒλ“œ μ„œλ²„μ—μ„œ μžμ›μ„ ν• λ‹Ήλ°›μ•„ νŒ¨ν‚€μ§€ λΉŒλ“œλ₯Ό μˆ˜ν–‰ν•˜κ²Œ λ˜λŠ”λ°, ν˜„μž¬ μƒνƒœλŠ” λŒ€κΈ°μ€‘(Pending)이고, λ…Έλž€μƒ‰ μ‹œκ³„ μ•„μ΄μ½˜μ€ λΉŒλ“œ μ„œλ²„μ—μ„œ λΉŒλ“œλ₯Ό μœ„ν•΄ 큐에 λ“€μ–΄κ°€μ„œ λŒ€κΈ°μ€‘μΈ μƒνƒœλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 즉, 아직 λΉŒλ“œκ°€ μ‹œμž‘λ˜μ§€ μ•Šμ•˜μŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€.

Pending status - wait

일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ λΉŒλ“œ μ„œλ²„μ—μ„œ λΉŒλ“œκ°€ μ‹œμž‘λ˜κ³  λΉŒλ“œ μƒνƒœ μ•„μ΄μ½˜μ΄ 녹색 ν†±λ‹ˆλ°”ν€΄λ‘œ λ³€κ²½λ©λ‹ˆλ‹€. ν˜„μž¬ κΈ°λ³Έ archκ°€ 기본으둜 amd64만 μ„€μ •λ˜μ–΄ 있기 λ•Œλ¬Έμ—, amd64 ν™˜κ²½μœΌλ‘œλ§Œ λΉŒλ“œκ°€ μ§„ν–‰λ©λ‹ˆλ‹€. amd64λ₯Ό μ„ νƒν•˜λ©΄ λΉŒλ“œ 둜그λ₯Ό 확인할 수 있고, μ°¨ν›„ μ˜΅μ…˜μ—μ„œ arm64, armhf, i386 λ“±μ˜ archλ₯Ό μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Pending status - wait

λΉŒλ“œκ°€ μ„±κ³΅ν•˜κ³ λ‚˜μ„œ λ°”λ‘œ Publish되면 μ’‹κ² μ§€λ§Œ PPA λ‚΄λΆ€μ μœΌλ‘œ 지연이 있기 λ•Œλ¬Έμ— 쑰금(λ•Œλ‘œλŠ” 1μ‹œκ°„ 이상...) κΈ°λ‹€λ €μ•Ό ν•©λ‹ˆλ‹€. μ΅œμ’…μ μœΌλ‘œ PPA에 Publish되면 μ•„λž˜μ™€ 같이 μƒνƒœκ°€ Pending -> Published둜 λ³€κ²½λ˜κ³ , λΉŒλ“œ μƒνƒœλ„ μ™„λ£Œλ₯Ό μ˜λ―Έν•˜λŠ” μ²΄ν¬ν‘œμ‹œλ‘œ λ³€κ²½λ©λ‹ˆλ‹€. 그리고 Publishedμ—λŠ” μ‹œκ°„μ΄ ν‘œμ‹œλ©λ‹ˆλ‹€.

Published

이제 PPAλ₯Ό μ΄μš©ν•΄μ„œ ALN을 μ„€μΉ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

$ sudo add-apt-repository ppa:webispy/aln
...
Hit:10 https://ppa.launchpadcontent.net/webispy/aln/ubuntu jammy InRelease
...

$ sudo apt install aln libaln-dev
...
Get:1 https://ppa.launchpadcontent.net/webispy/aln/ubuntu jammy/main amd64 libaln0 amd64 0.1.0 [4,346 B]
Get:2 https://ppa.launchpadcontent.net/webispy/aln/ubuntu jammy/main amd64 aln amd64 0.1.0 [5,310 B]
Get:3 https://ppa.launchpadcontent.net/webispy/aln/ubuntu jammy/main amd64 libaln-dev amd64 0.1.0 [4,430 B]
...

ν˜„μž¬λŠ” amd64 arch으둜만 νŒ¨ν‚€μ§€λ₯Ό λΉŒλ“œν•˜κ³  μžˆλŠ”λ°, λ‹€λ₯Έ archλ₯Ό μΆ”κ°€ν•˜λ €λ©΄ μ•„λž˜μ™€ 같이 PPA νŽ˜μ΄μ§€μ—μ„œ Change details μ„ νƒν•΄μ„œ μ˜΅μ…˜μ„ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

PPA Page - Change details

Change details ν™”λ©΄μ—μ„œ 슀크둀λ₯Ό 내리면 Processors μ„Ήμ…˜μ΄ μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ μ›ν•˜λŠ” ν•­λͺ©λ“€μ„ μ²΄ν¬ν•œ ν›„ Save λ²„νŠΌμ„ μ„ νƒν•˜λ©΄ λ©λ‹ˆλ‹€. 이후 μ—…λ‘œλ“œλ˜λŠ” νŒ¨ν‚€μ§€μ— λŒ€ν•΄μ„œλŠ” μ„ νƒν•œ arch에 λŒ€ν•΄ λ°”μ΄λ„ˆλ¦¬ λΉŒλ“œλ₯Ό λͺ¨λ‘ μˆ˜ν–‰ν•˜κ²Œ λ©λ‹ˆλ‹€.

Change details

packaging/noble, packaging/jammy, packaging/focal 디렉토리λ₯Ό 각각 debian λ””λ ‰ν† λ¦¬λ‘œ λ³΅μ‚¬ν•œ ν›„ PPA에 μ—…λ‘œλ“œλ₯Ό μ™„λ£Œν•˜λ©΄, μ•„λž˜μ™€ 같이 각 λ°°ν¬νŒλ³„ νŒ¨ν‚€μ§€κ°€ νŒ¨ν‚€μ§€ λͺ©λ‘μ— μ •μƒμ μœΌλ‘œ λ‚˜νƒ€λ‚˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

Package list

λͺ©λ‘μ— μžˆλŠ” νŒ¨ν‚€μ§€ ν•˜λ‚˜λ₯Ό μ„ νƒν•΄μ„œ μ„ΈλΆ€ λ‚΄μš©μ„ 확인해보면 μœ„μ˜ Processorsμ—μ„œ μ„ νƒν•œ amd64, arm64 그리고 armhf ν•­λͺ©μ— 맞게 νŒ¨ν‚€μ§€κ°€ μΆ”κ°€λ‘œ λΉŒλ“œλœ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. (i386은 PPA κ΄€λ¦¬μžμ— μ˜ν•΄ μ œν•œλœ κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.)

Package details

마무리

μ§€κΈˆκΉŒμ§€ 별도 μ›Ή μ„œλ²„λ₯Ό ν†΅ν•œ 배포와 PPAλ₯Ό ν†΅ν•œ 배포, μ΄λ ‡κ²Œ 두 κ°€μ§€ 방법에 λŒ€ν•΄ μ†Œκ°œν•΄ λ“œλ ΈμŠ΅λ‹ˆλ‹€. 두 방법을 λͺ¨λ‘ ν™œμš©ν•˜μ—¬ 개발 버전은 CI/CDλ₯Ό ꡬ좕해 Github Pages둜 νŒ¨ν‚€μ§€λ₯Ό λ°°ν¬ν•˜κ³ , 정식 릴리즈 버전은 PPAλ₯Ό 톡해 λ°°ν¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ μ μš©ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€.

이 글을 톡해 deb νŒ¨ν‚€μ§€λ₯Ό λ§Œλ“€κ³  λ°°ν¬ν•˜λŠ” 데 ν•„μš”ν•œ μ „λ°˜μ μΈ 과정을 μ΄ν•΄ν•˜κ³ , μžμ‹ μ΄ κ°œλ°œν•œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό λ”μš± μ‰½κ²Œ 배포할 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.