article2 - webispy/aln GitHub Wiki

Fedora Linux์— RPM ํŒจํ‚ค์ง€ ๋ฐฐํฌํ•˜๊ธฐ

Fedora๋Š” Red Hat์ด ํ›„์›ํ•˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ์šด์˜ ์ฒด์ œ๋กœ, 6๊ฐœ์›”๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฒ„์ „์„ ์ถœ์‹œํ•˜์—ฌ ์ตœ์‹  ์†Œํ”„ํŠธ์›จ์–ด์™€ ํ˜์‹ ์ ์ธ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ๋„์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. RPM(Red Hat Package Manager)์€ ์ด๋Ÿฌํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์œผ๋กœ, ํŒจํ‚ค์ง€์˜ ์„ค์น˜, ์—…๊ทธ๋ ˆ์ด๋“œ, ์ œ๊ฑฐ, ํ™•์ธ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, RPM ํŒจํ‚ค์ง€๋ฅผ ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก YUM(Yellowdog Updater, Modified)๊ณผ DNF(Dandified YUM) ๋„๊ตฌ๋„ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ด์ „์— ์†Œ๊ฐœํ•œ ALN(Amazing Lucky Numbers) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ Fedora Linux์šฉ RPM ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ์ƒ์„ฑ์— ํ•„์š”ํ•œ ํŒŒ์ผ ๊ตฌ์กฐ, ์ œ์–ด ํŒŒ์ผ ์ž‘์„ฑ, ๋นŒ๋“œ ๊ณผ์ •, ๊ทธ๋ฆฌ๊ณ  ์ตœ์ข…์ ์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ํŒŒ์ผ

Fedora์—์„œ ํŒจํ‚ค์ง€ ์„ค์น˜ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ผ์€ .rpm ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์—์„œ ์ด ํŒŒ์ผ์˜ ํ˜•์‹๊ณผ ๊ตฌ์„ฑ์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

RPM ํŒŒ์ผ ๊ตฌ์„ฑ

.rpm ํŒŒ์ผ์€ cpio ์•„์นด์ด๋ธŒ ํ˜•์‹์œผ๋กœ ๋˜์–ด ์žˆ์œผ๋ฉฐ, rpm2cpio์™€ cpio ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ๋‚ด๋ถ€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒจํ‚ค์ง€ ํŒŒ์ผ์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€์ธ .rpm ํŒŒ์ผ๊ณผ ์†Œ์Šค ํŒจํ‚ค์ง€(SRPM)์ธ .src.rpm ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€๋Š” ์‹œ์Šคํ…œ์— ์„ค์น˜ํ•  ํŒŒ์ผ๋“ค์„ ๋‹ด๊ณ  ์žˆ๊ณ , ์†Œ์Šค ํŒจํ‚ค์ง€๋Š” ์†Œ์Šค ์•„์นด์ด๋ธŒ์™€ ์ŠคํŽ™ ํŒŒ์ผ(.spec), ํŒจ์น˜ ๋“ฑ์„ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, ์ŠคํŽ™ ํŒŒ์ผ์€ ํŒจํ‚ค์ง€์˜ ๋นŒ๋“œ์™€ ์„ค์น˜๋ฅผ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ๋กœ, ํŒจํ‚ค์ง€๋ช…, ๋ฒ„์ „, ๋ฆด๋ฆฌ์ฆˆ, ์„ค๋ช…, ๋ผ์ด์„ ์Šค, ์†Œ์Šค URL, ๋นŒ๋“œ ์˜์กด์„ฑ, ์„ค์น˜ ํŒŒ์ผ ๋ชฉ๋ก ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

RPM ํŒŒ์ผ ๋‚ด์šฉ ํ™•์ธ ๋ฐฉ๋ฒ•

๋„คํŠธ์›Œํฌ ์„ค์น˜๋ฅผ ์ง€์›ํ•˜๋Š” dnf ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ํŒจํ‚ค์ง€ ์„ค์น˜, ์‚ญ์ œ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ RPM ํŒŒ์ผ์„ ์ง์ ‘ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. dnf download ๋ช…๋ น์ด ์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ๋จผ์ € dnf-plugins-core ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ณ  ์ž„์˜๋กœ glib2 ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€ ์™ธ์—๋„ --source ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ์†Œ์Šค ํŒจํ‚ค์ง€๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# dnf-plugins-core ์„ค์น˜
$ sudo dnf install -y dnf-plugins-core

# glib2 ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ - x86_64 architecture์— ํ•ด๋‹นํ•˜๋Š” RPM๋งŒ ๋‹ค์šด๋กœ๋“œํ•จ
$ dnf download glib2.x86_64

# glib2์˜ ์†Œ์Šค ํŒจํ‚ค์ง€ ๋‹ค์šด๋กœ๋“œ
$ dnf download --source glib2

$ ls
glib2-2.80.3-1.fc40.src.rpm
glib2-2.80.3-1.fc40.x86_64.rpm

rpm -qp(--query, --package) ๋ช…๋ น์„ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ .rpm ํŒŒ์ผ์˜ ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ํŒจํ‚ค์ง€ ์ •๋ณด ์กฐํšŒ
rpm -qpi glib2-2.80.3-1.fc40.x86_64.rpm

# ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ ํŒŒ์ผ ๋ชฉ๋ก ์กฐํšŒ
rpm -qpl glib2-2.80.3-1.fc40.x86_64.rpm

ํŒŒ์ผ์„ ์ถ”์ถœํ•˜๊ณ  ์‹ถ์„ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด rpm2cpio์™€ cpio ๋ช…๋ น์„ ์กฐํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# cpio ์„ค์น˜
$ sudo dnf install -y cpio

# ํŒŒ์ผ ์ถ”์ถœ - ์†Œ์Šค ํŒจํ‚ค์ง€
$ rpm2cpio glib2-2.80.3-1.fc40.src.rpm | cpio -idmv
glib-2.80.3.tar.xz
glib2.spec
gnutls-hmac.patch
gspawn-eperm.patch

# ํŒŒ์ผ ์ถ”์ถœ - ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจํ‚ค์ง€
$ rpm2cpio glib2-2.80.3-1.fc40.x86_64.rpm | cpio -idmv
./usr/bin/gapplication
./usr/bin/gdbus
./usr/bin/gio
...
./usr/lib64/libgio-2.0.so.0
./usr/lib64/libgio-2.0.so.0.8000.3
...
./usr/share/licenses/glib2
./usr/share/licenses/glib2/LGPL-2.1-or-later.txt
...
./usr/share/man/man1/gio.1.gz

cpio ๋ช…๋ น์— ์‚ฌ์šฉ๋œ ์˜ต์…˜์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • -i: ์•„์นด์ด๋ธŒ์—์„œ ํŒŒ์ผ์„ ์ถ”์ถœ
  • -d: ํ•„์š”ํ•œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑ
  • -m: ํŒŒ์ผ์˜ ์ˆ˜์ • ์‹œ๊ฐ„์„ ์œ ์ง€
  • -v: verbose

ํŒจํ‚ค์ง€ ์ด๋ฆ„ ๊ทœ์น™

RPM ํŒจํ‚ค์ง€ ์ด๋ฆ„์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

{name}-{version}-{release}.{architecture}.rpm
{name}-{version}-{release}.src.rpm

์œ„์˜ glib2 ํŒจํ‚ค์ง€๋ช…(glib2-2.80.3-1.fc40.x86_64.rpm) ๊ธฐ์ค€์œผ๋กœ ํ™•์ธํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • name: glib2
  • version: 2.80.3
  • release: 1.fc40 (release 1, fc40: Fedora core 40)
  • architecture: x86_64

์ด์ „ ๊ธ€์—์„œ ์„ค๋ช…ํ•œ Debian์˜ deb ํŒจํ‚ค์ง€์™€ ๋น„๊ตํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์•„ํ‚คํ…์ณ ์ด๋ฆ„: DEB๋Š” amd64๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  RPM์€ x86_64๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๊ตฌ๋ถ„์ž: ์ด๋ฆ„๊ณผ ๋ฒ„์ „, ์•„ํ‚คํ…์ณ๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ DEB๋Š” _์™€ -๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, RPM์€ -์™€ .์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • DEB: libglib2.0-0_2.72.4-0ubuntu2.3_arm64.deb
    • RPM: glib2-2.80.3-1.fc40.x86_64.rpm
  • ๊ฐœ๋ฐœ์šฉ ํŒจํ‚ค์ง€ ์ด๋ฆ„: deb์˜ ๊ฒฝ์šฐ ์ด๋ฆ„ ๋’ค์— -dev๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, RPM์€ -devel์„ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • DEB: libglib2.0-dev_2.72.4-0ubuntu2.3_amd64.deb
    • RPM: glib2-devel-2.80.3-1.fc40.x86_64.rpm

ํŒจํ‚ค์ง€ ์ •์˜ํ•˜๊ธฐ

RPM ํŒจํ‚ค์ง€๋ฅผ ์ •์˜ํ•˜๊ณ  ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ŠคํŽ™(.spec) ํŒŒ์ผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŽ™ ํŒŒ์ผ์€ ํŒจํ‚ค์ง€์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ๋นŒ๋“œ ๋ฐ ์„ค์น˜ ์ง€์นจ์„ ํฌํ•จํ•˜๋Š” ํŒŒ์ผ๋กœ, RPM ํŒจํ‚ค์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ์š”์†Œ์ž…๋‹ˆ๋‹ค

์ŠคํŽ™ ํŒŒ์ผ์˜ ๊ตฌ์กฐ

์ŠคํŽ™ ํŒŒ์ผ์€ ์—ฌ๋Ÿฌ ์„น์…˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์„น์…˜์€ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ฃผ์š” ์„น์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • Header: ํŒจํ‚ค์ง€์˜ ๊ธฐ๋ณธ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • Description: ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • Package: ๋‹จ์ผ ์ŠคํŽ™ ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Prep: ์†Œ์Šค๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • Build: ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ปดํŒŒ์ผํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • Install: ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • Check: ๋นŒ๋“œ ํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.
  • Files: ํŒจํ‚ค์ง€์— ํฌํ•จ๋  ํŒŒ์ผ ๋ชฉ๋ก์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  • Changelog: ํŒจํ‚ค์ง€์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.

ALN ๊ธฐ์ค€์œผ๋กœ ์‹ค์ œ๋กœ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Header

ALN์— ๋Œ€ํ•œ ํŒจํ‚ค์ง€ ์ด๋ฆ„, ๋ฒ„์ „๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ •๋ณด์™€ ๋ผ์ด์„ผ์Šค, ๋นŒ๋“œ ์˜์กด์„ฑ ๋“ฑ์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

Name:           aln
Version:        0.1.1
Release:        1%{?dist}
Summary:        Amazing Lucky Numbers - A library and tool for generating lucky numbers

License:        Apache-2.0
URL:            https://github.com/webispy/aln
Source0:        %{name}.tar.gz

BuildRequires:  cmake
BuildRequires:  gcc
BuildRequires:  gcc-c++
BuildRequires:  glib2-devel
BuildRequires:  doxygen

Release ํ•ญ๋ชฉ์— 1%{?dist}์™€ ๊ฐ™์€ ๊ฐ’์ด ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ, ๋ฐฐํฌํŒ ํƒœ๊ทธ์— ๋Œ€ํ•œ ๋งคํฌ๋กœ๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•œ ํ‘œํ˜„์ž…๋‹ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ 1.fc40๊ณผ ๊ฐ™์€ ๊ฐ’์ด ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ์‰˜์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง์ ‘ ๊ฐ’์„ ํ™•์ธํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ rpm --eval 1%{?dist}
1.fc40

์†Œ์Šค ํŒŒ์ผ์— ๋Œ€ํ•ด ์ง€์ •ํ•  ๋•Œ Source๊ฐ€ ์•„๋‹Œ Source0์ด ์‚ฌ์šฉ๋˜์—ˆ๋Š”๋ฐ, ์ด ๋‘˜์€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์†Œ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ๋ผ๋ฉด Source1 ๋“ฑ์˜ ํ˜•์‹์œผ๋กœ ์ถ”๊ฐ€ ์†Œ์Šค ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ, Source์—๋Š” URL ๊ธฐ๋ฐ˜ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŒจํ‚ค์ง• ๊ณผ์ •์—์„œ ์†Œ์Šค๊ฐ€ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ALN์˜ ๊ฒฝ์šฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŒจํ‚ค์ง• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ์†Œ์Šค์™€ ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค์ด ๊ฐ™์ด ์กด์žฌํ•˜๋ฏ€๋กœ URL ์—†์ด ๋กœ์ปฌ ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

Description

ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ƒ์„ธ ์„ค๋ช…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด ์„น์…˜์€ %description ํ‚ค์›Œ๋“œ๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ, ํŒจํ‚ค์ง€์˜ ๊ธฐ๋Šฅ๊ณผ ์šฉ๋„๋ฅผ ์ž์„ธํžˆ ๊ธฐ์ˆ ํ•ฉ๋‹ˆ๋‹ค:

%description
Amazing Lucky Numbers (aln) is a library and tool for generating amazing lucky numbers.

Package

๋‹จ์ผ SPEC ํŒŒ์ผ์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํŒจํ‚ค์ง€๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์‹คํ–‰ ํŒŒ์ผ, ๊ฐœ๋ฐœ ํŒŒ์ผ ๋“ฑ์„ ๋ณ„๋„์˜ ํŒจํ‚ค์ง€๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

%package libs
Summary:        Amazing Lucky Numbers Library
%description libs
A library for generating amazing lucky numbers.

%package devel
Summary:        Development files for the Amazing Lucky Numbers Library
Requires:       %{name}-libs = %{version}-%{release}
%description devel
Development files for the Amazing Lucky Numbers Library.

์œ„์˜ ์˜ˆ์ œ์ฒ˜๋Ÿผ %package <sub-package-name> ํ˜•ํƒœ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„œ๋ธŒ ํŒจํ‚ค์ง€ ์ด๋ฆ„์— ๊ธฐ๋ณธ ํŒจํ‚ค์ง€ ์ด๋ฆ„์ด ์ ‘๋‘์‚ฌ๋กœ ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์ด ์„ค์ •ํ•  ๊ฒฝ์šฐ, ๊ธฐ๋ณธ aln ํŒจํ‚ค์ง€ ์™ธ์—๋„ aln-libs์™€ aln-devel ๋‘๊ฐœ์˜ ํŒจํ‚ค์ง€๊ฐ€ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

๊ฐ ํŒจํ‚ค์ง€์— ํฌํ•จํ•  ํŒŒ์ผ๋“ค์€ Files ์„น์…˜(%files)์—์„œ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Prep

ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋‹จ๊ณ„์—์„œ๋Š” ๋ฏธ๋ฆฌ ์ •์˜๋œ %setup๊ณผ %patch ๋งคํฌ๋กœ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ํ•„์š”์— ๋”ฐ๋ผ ์ง์ ‘ ์‰˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

%prep
%setup -q -n %{name}

%setup ๋งคํฌ๋กœ๋Š” ์†Œ์Šค ํŒŒ์ผ์„ ์ถ”์ถœํ•˜๊ณ , ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ต์…˜์„ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • -q: ์ถœ๋ ฅ ์ตœ์†Œํ™”
  • -n <name>: ๋นŒ๋“œ ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„์„ ์ง€์ •. ์†Œ์Šค ์••์ถ•์„ ํ•ด์ œํ–ˆ์„ ๋•Œ ๊ธฐ๋Œ€๋˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ ์ด๋ฆ„(%{name}-%{version})๊ณผ ์‹ค์ œ ์ด๋ฆ„์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์€ https://rpm-packaging-guide.github.io/#setup์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Build

๋นŒ๋“œ ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. Debian์˜ rules ํŒŒ์ผ์—์„œ ๋‹ค์–‘ํ•œ ๋นŒ๋“œ ์‹œ์Šคํ…œ์„ ์ง€์›ํ–ˆ๋˜ ๊ฒƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ RPM๋„ CMake, meson๊ณผ ๊ฐ™์€ ๋นŒ๋“œ ํˆด์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

%build
%cmake
%cmake_build

# Generate man pages using Doxygen
doxygen
find doc/man/man3 -type f ! -name 'aln*' -exec rm -f {} \;

%cmake๋Š” Configure ๋‹จ๊ณ„(cmake -DCMAKE_INSTALL_PREFIX=...)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ , %cmake_build๋Š” ์‹ค์ œ ๋นŒ๋“œ(cmake --build ...)๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๋งคํฌ๋กœ์ž…๋‹ˆ๋‹ค. ๋นŒ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ์ˆ˜๋™์œผ๋กœ Doxygen์„ ํ†ตํ•ด ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ณ  ๋ถˆํ•„์š”ํ•œ ๋ฌธ์„œ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜๋Š” ์‰˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๋ณด๋‹ค ์ž์„ธํ•œ ์„ค๋ช…์€ https://docs.fedoraproject.org/en-US/packaging-guidelines/CMake/๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

Install

์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

%install
%cmake_install

# Install man pages
mkdir -p %{buildroot}%{_mandir}/{man1,man3}
install -m 644 tool/aln.1 %{buildroot}%{_mandir}/man1/
install -m 644 doc/man/man3/* %{buildroot}%{_mandir}/man3/

%cmake_install์€ CMake๋ฅผ ํ†ตํ•œ ์„ค์น˜ ๋ช…๋ น(cmake --install ...)์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋งคํฌ๋กœ์ž…๋‹ˆ๋‹ค. ์„ค์น˜๊ฐ€ ๋๋‚˜๋ฉด Build ๋‹จ๊ณ„์—์„œ ์ˆ˜๋™์œผ๋กœ ์ƒ์„ฑํ–ˆ๋˜ Doxygen ๋ฌธ์„œ ์„ค์น˜ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Check

๋นŒ๋“œ ํ›„ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค.

%check
%ctest

%ctest๋Š” CMake ์Šคํฌ๋ฆฝํŠธ์—์„œ add_test()๋กœ ์ •์˜ํ•œ ํ…Œ์ŠคํŠธ ํ•ญ๋ชฉ๋“ค์— ๋Œ€ํ•ด ์‹คํ–‰์‹œํ‚ค๋Š” ๋งคํฌ๋กœ์ž…๋‹ˆ๋‹ค.

Files

ํŒจํ‚ค์ง€์— ํฌํ•จ๋  ํŒŒ์ผ ๋ชฉ๋ก์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ALN์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ aln ํŒจํ‚ค์ง€ ์™ธ์— aln-libs, aln-devel ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์„œ๋ธŒ ํŒจํ‚ค์ง€์— ํฌํ•จํ•  ํŒŒ์ผ๋“ค์„ ์ถ”๊ฐ€๋กœ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

aln ํŒจํ‚ค์ง€: aln ์‹คํ–‰ ํŒŒ์ผ๊ณผ ์‹คํ–‰ ํŒŒ์ผ์— ๋Œ€ํ•œ man ํŽ˜์ด์ง€

%files
%license LICENSE
%{_bindir}/aln
%{_mandir}/man1/aln.1*

aln-libs ํŒจํ‚ค์ง€: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ

%files libs
%{_libdir}/libaln.so.*

aln-devel ํŒจํ‚ค์ง€: ํ—ค๋” ํŒŒ์ผ, ๋นŒ๋“œ๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํŒŒ์ผ, pkg-config, API man ํŽ˜์ด์ง€

%files devel
%{_includedir}/aln/
%{_libdir}/libaln.so
%{_libdir}/pkgconfig/aln.pc
%{_mandir}/man3/aln.h.3*
%{_mandir}/man3/aln_*.3*

Changelog

ํŒจํ‚ค์ง€์˜ ๋ณ€๊ฒฝ ๋‚ด์—ญ์„ ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค. DEB ํŒจํ‚ค์ง•์— ์‚ฌ์šฉํ–ˆ๋˜ debian/changelog ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์—ญํ• ์ธ๋ฐ ํ˜•์‹๋งŒ ๋‹ค๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

%changelog
* Thu Jul 11 2024 Inho Oh <[email protected]> - 0.1.1
- fix aln.pc.in
- fix packaging
* Tue Jul 02 2024 Inho Oh <[email protected]> - 0.1.0-1
- Initial package

๋‘๋ฒˆ์˜ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์ฒซ๋ฒˆ์งธ์—๋Š” 0.1.0-1 ์ฒ˜๋Ÿผ ๋ฆด๋ฆฌ์ฆˆ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จ์‹œ์ผฐ๊ณ , ๋‘๋ฒˆ์งธ์—๋Š” 0.1.1๋กœ ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ ์—†์ด ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค ํŒจํ‚ค์ง•์—๋Š” ๋ฌธ์ œ๊ฐ€ ์—†์ง€๋งŒ ๋ฒ„์ „๋ช…์— ๋ฆด๋ฆฌ์ฆˆ ๋ฒˆํ˜ธ๋ฅผ ํฌํ•จ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ๋„๊ตฌ

์•ž์—์„œ RPM ํŒจํ‚ค์ง€ ๊ตฌ์„ฑ๊ณผ ํŒจํ‚ค์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์ œ ํŒจํ‚ค์ง€ ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด์„œ ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

RPM ํŒจํ‚ค์ง€ ๋„๊ตฌ๋Š” DEB ํŒจํ‚ค์ง€ ๋„๊ตฌ์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฐฉ์‹์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” ํ˜„์žฌ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ฒŒ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•  ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” chroot๋ฅผ ํ†ตํ•ด ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

  • ํ˜„์žฌ ํ™˜๊ฒฝ์—์„œ ๋น ๋ฅด๊ฒŒ ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ
    • DEB: dpkg-buildpackage
    • RPM: rpm-build
  • chroot๋ฅผ ํ†ตํ•ด ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์—์„œ ํŒจํ‚ค์ง€ ๋งŒ๋“ค๊ธฐ
    • DEB: sbuild
    • RPM: mock

rpm

RPM(Red Hat Package Manager) ํŒจํ‚ค์ง€๋Š” rpm ๋„๊ตฌ๋ฅผ ์ด์šฉํ•ด ์„ค์น˜, ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ค์น˜๋œ ํŒจํ‚ค์ง€ ๋ชฉ๋ก๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. yum ๋˜๋Š” dnf ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•  ๋•Œ, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” rpm ๋ช…๋ น์„ ํ†ตํ•ด ์‹ค์ œ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

rpm -ivh package.rpm     : ํŒจํ‚ค์ง€ ์„ค์น˜
rpm -Uvh package.rpm     : ํŒจํ‚ค์ง€ ์„ค์น˜ (์—…๊ทธ๋ ˆ์ด๋“œ ์„ค์น˜)
rpm -e package           : ํŒจํ‚ค์ง€ ์ œ๊ฑฐ
rpm -qa                  : ์„ค์น˜๋œ ์ „์ฒด ํŒจํ‚ค์ง€ ๋ชฉ๋ก ํ™•์ธ
rpm -qi package          : ํŒจํ‚ค์ง€ ์ •๋ณด ํ™•์ธ (์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์ด๋ฆ„ ๊ธฐ๋ฐ˜)
rpm -qip package.rpm     : ํŒจํ‚ค์ง€ ์ •๋ณด ํ™•์ธ (ํŒจํ‚ค์ง€ ํŒŒ์ผ๋ช… ๊ธฐ๋ฐ˜)
rpm -ql package          : ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ ํŒŒ์ผ ๋ชฉ๋ก ํ™•์ธ (์„ค์น˜๋œ ํŒจํ‚ค์ง€ ์ด๋ฆ„ ๊ธฐ๋ฐ˜)
rpm -qlp package.rpm     : ํŒจํ‚ค์ง€์— ํฌํ•จ๋œ ํŒŒ์ผ ๋ชฉ๋ก ํ™•์ธ (ํŒจํ‚ค์ง€ ํŒŒ์ผ๋ช… ๊ธฐ๋ฐ˜)

rpm-build

rpm-build๋Š” rpm ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์ง์ ‘ ๋นŒ๋“œํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”๋ฐ, ํ˜„์žฌ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ๋ฐ”๋กœ ํŒจํ‚ค์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, ๋‚ด ์‹œ์Šคํ…œ์—์„œ๋Š” ์ •์ƒ์ ์œผ๋กœ ํŒจํ‚ค์ง€ ๋นŒ๋“œ์— ์„ฑ๊ณตํ–ˆ์–ด๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ ๋˜‘๊ฐ™์ด ๋นŒ๋“œ๊ฐ€ ์„ฑ๊ณตํ•œ๋‹ค๊ณ  ๋ณด์žฅํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ฐ ์‹œ์Šคํ…œ๋งˆ๋‹ค ์„ค์น˜๋œ ํŒจํ‚ค์ง€๋“ค์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์ •์‹์œผ๋กœ ํŒจํ‚ค์ง• ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ธฐ ์ „์— ๋น ๋ฅด๊ฒŒ ํŒจํ‚ค์ง•์„ ํ…Œ์ŠคํŠธํ•  ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ์— ์ ํ•ฉํ•œ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

ALN ๊ธฐ์ค€์œผ๋กœ ํŒจํ‚ค์ง€ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

# ์†Œ์Šค ๋‹ค์šด๋กœ๋“œ
git clone https://github.com/webispy/aln.git
cd aln

# rpm-build ๋„๊ตฌ ์„ค์น˜
dnf install -y rpm-build

# ALN์˜ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ๋ชจ๋‘ ์„ค์น˜
#  - aln.spec์— ์ •์˜ํ•œ BuildRequires์˜ ํ•ญ๋ชฉ๋“ค์„ builddep ์˜ต์…˜์œผ๋กœ ๋ชจ๋‘ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
#  - builddep ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด dnf-plugins-core๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
dnf install -y dnf-plugins-core
dnf builddep -y packaging/aln.spec

# ํŒจํ‚ค์ง€ ๋นŒ๋“œ
#  -bb: build binary package only from <specfile>
#  --build-in-place: run build in current directory
rpmbuild -bb --build-in-place packaging/aln.spec

rpmbuild ๋ช…๋ น ์‚ฌ์šฉ์‹œ --build-in-place ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด, ์†Œ์Šค ํŒŒ์ผ์ด $HOME/rpmbuild/SOURCES ๋””๋ ‰ํ† ๋ฆฌ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งค๋ฒˆ ์†Œ์Šค๋ฅผ ์••์ถ•ํ•˜์—ฌ ๋ณต์‚ฌํ•˜๋Š” ๊ณผ์ •์€ ๋ฒˆ๊ฑฐ๋กœ์šธ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜์—ฌ ๋นŒ๋“œ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋นŒ๋“œ ํ›„ ํŒจํ‚ค์ง€๋“ค์€ $HOME/rpmbuild/RPMS/x86_64 ๋””๋ ‰ํ† ๋ฆฌ์— ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

$ cd $HOME/rpmbuild/RPMS/x86_64
$ ls
aln-0.1.1-1.fc40.x86_64.rpm
aln-devel-0.1.1-1.fc40.x86_64.rpm
aln-libs-0.1.1-1.fc40.x86_64.rpm

์ด์ œ rpm ๋ช…๋ น์œผ๋กœ ALN ํŒจํ‚ค์ง€๋ฅผ ์‹œ์Šคํ…œ์— ์„ค์น˜ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ, rpm ๋ช…๋ น์€ ์˜์กด์„ฑ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด ์ž๋™์œผ๋กœ ํ•ด๊ฒฐํ•ด์ฃผ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์„ค์น˜ ์‹œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค๋„ ๊ฐ™์ด ๋‚˜์—ดํ•ด ์ฃผ์–ด์•ผ ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

# ์„ค์น˜
sudo rpm -ivh aln-0.1.1-1.fc40.x86_64.rpm aln-libs-0.1.1-1.fc40.x86_64.rpm

# ์‚ญ์ œ
sudo rpm -e aln aln-libs

mock

RPM ๋นŒ๋“œ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ•๋ ฅํ•œ ๋นŒ๋“œ ๋„๊ตฌ๋กœ rpm-build์™€ ๋‹ค๋ฅด๊ฒŒ ํ˜„์žฌ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ ์ด์šฉํ•˜์ง€ ์•Š๊ณ  chroot ํ™˜๊ฒฝ(change root์˜ ์•ฝ์ž๋กœ ๊ฒฉ๋ฆฌ๋œ ํŒŒ์ผ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์„ ์ œ๊ณต)์—์„œ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค.

Fedora์˜ ํ•„์ˆ˜ ํŒจํ‚ค์ง€๋งŒ ์„ค์น˜๋œ ๊นจ๋—ํ•œ ๊ฐ€์ƒ ํ™˜๊ฒฝ์—์„œ ๋นŒ๋“œ๊ฐ€ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋นŒ๋“œํ•˜๋ ค๋Š” ํŒจํ‚ค์ง€์˜ ์˜์กด์„ฑ์„ ํ™•์‹คํ•˜๊ฒŒ ์ ๊ฒ€ํ•  ์ˆ˜ ์žˆ๊ณ  ๊ฒฉ๋ฆฌ๋œ ํ™˜๊ฒฝ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„ ์•ˆ์ „ํ•˜๊ฒŒ ํŒจํ‚ค์ง• ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, chroot๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ˜„์žฌ ์‹œ์Šคํ…œ์— ์„ค์น˜๋œ Fedora ๋ฐฐํฌํŒ ๋ฒ„์ „๊ณผ ๋‹ค๋ฅธ ๋ฒ„์ „์šฉ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

mock๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง•์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์•„๋ž˜ ๊ณผ์ •์ด ๋งค๋ฒˆ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

  • dnf update
  • ์ŠคํŽ™ ํŒŒ์ผ์— ๋ช…์‹œํ•œ ์˜์กด์„ฑ ํŒจํ‚ค์ง€ ์„ค์น˜
  • ๋นŒ๋“œ(rpmbuild)

์ดํ›„ mock ๋ช…๋ น์ด ์ข…๋ฃŒ๋˜๋ฉด ํŒจํ‚ค์ง• ๊ณผ์ • ์ค‘ ์„ค์น˜/์ƒ์„ฑ๋œ ๋ชจ๋“  ํŒŒ์ผ๋“ค์ด ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ๋‹ค์‹œ ํŒจํ‚ค์ง•์„ ์ˆ˜ํ–‰ํ•ด๋„ ๋งค๋ฒˆ ๊นจ๋—ํ•œ ํ™˜๊ฒฝ์—์„œ ์œ„ ๊ณผ์ •์ด ์ƒˆ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” docker์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” overlayfs์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

mock ์„ค์ •

mock ์„ค์น˜๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด dnf ๋ช…๋ น์œผ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

sudo dnf install -y mock

๋‹ค์Œ์œผ๋กœ chroot ํ™˜๊ฒฝ์„ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŒจํ‚ค์ง• ํ•˜๋ ค๋Š” ๋ฐฐํฌํŒ ๋ฒ„์ „๋ณ„๋กœ ์•„๋ž˜ ๋ช…๋ น์„ ํ†ตํ•ด ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

mock -r fedora-40-x86_64 --init
mock -r fedora-39-x86_64 --init

์ƒ์„ฑ๋œ chroot ํ™˜๊ฒฝ์€ /var/lib/mock/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋ฐฐํฌํŒ ๋ชฉ๋ก๊ณผ ๋ฐฐํฌํŒ์— ๋Œ€ํ•œ ์„ค์ •์€ /etc/mock/ ๋””๋ ‰ํ† ๋ฆฌ ๋˜๋Š” mock --list-chroots ๋ช…๋ น์„ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

mock์„ ์ด์šฉํ•œ ํŒจํ‚ค์ง€

์œ„์—์„œ mock์„ ์œ„ํ•œ chroot ์ค€๋น„๊ฐ€ ๋ชจ๋‘ ๋๋‚ฌ์œผ๋ฉด, ์ด์ œ mock ๋ช…๋ น์œผ๋กœ rpm ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ์†Œ์Šค๋ฅผ ๋‹ค์šด๋กœ๋“œ ํ›„ ์ŠคํŽ™ํŒŒ์ผ์—์„œ ์ง€์ •ํ•œ Source0 ํŒŒ์ผ ์ด๋ฆ„์ธ aln.tar.gz๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค.

git clone https://github.com/webispy/aln.git
tar cvfz aln.tar.gz aln

์ด์ œ ๋‹ค์Œ ์˜ต์…˜๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ SRPM(.src.rpm) ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  • --spec: SRPM์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  spec ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค
  • --sources: SRPM์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์†Œ์Šค(๋‹จ์ผ ํŒŒ์ผ ๋˜๋Š” ํŒŒ์ผ์ด ํฌํ•จ๋œ ๋””๋ ‰ํ† ๋ฆฌ)๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค (โ€“-buildsrpm ์˜ต์…˜๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋จ)
  • --resultdir: ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ์ €์žฅ๋  ๊ฒฝ๋กœ
  • --buildsrpm: spec(โ€“-spec ...) ํŒŒ์ผ๊ณผ ์†Œ์Šค(โ€“-sources ...)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SRPM์„ ๋นŒ๋“œํ•ฉ๋‹ˆ๋‹ค
mock -r fedora-40-x86_64 --spec=aln/packaging/aln.spec --sources=. --resultdir=. --buildsrpm

์œ„ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜๋ฉด ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์— SRPM ํŒŒ์ผ(aln-0.1.1-1.fc40.src.rpm)์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด ํŒŒ์ผ์„ ์ด์šฉํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ RPM ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • --resultdir: ๊ฒฐ๊ณผ ํŒŒ์ผ์ด ์ €์žฅ๋  ๊ฒฝ๋กœ
  • --rebuild: rebuild the specified SRPM(s)
mock -r fedora-40-x86_64 --resultdir=. --rebuild aln-*.src.rpm

๋นŒ๋“œ๊ฐ€ ๋๋‚˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒ์„ฑ๋œ ํŒจํ‚ค์ง€๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ ls *.rpm
aln-0.1.1-1.fc40.src.rpm
aln-0.1.1-1.fc40.x86_64.rpm
aln-debuginfo-0.1.1-1.fc40.x86_64.rpm
aln-debugsource-0.1.1-1.fc40.x86_64.rpm
aln-devel-0.1.1-1.fc40.x86_64.rpm
aln-libs-0.1.1-1.fc40.x86_64.rpm
aln-libs-debuginfo-0.1.1-1.fc40.x86_64.rpm

mock troubleshooting

์ผ๋ฐ˜์ ์œผ๋กœ CI/CD ํ™˜๊ฒฝ ๊ตฌ์„ฑ์„ ์œ„ํ•ด docker ํ™˜๊ฒฝ๊ณผ Github action์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ํŒจํ‚ค์ง•์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด docker ์•ˆ์—์„œ mock์„ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜ Github Action runner์•ˆ์—์„œ mock์„ ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฌด ์ด์Šˆ ์—†์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉด ์ข‹๊ฒ ์ง€๋งŒ, mock์—์„œ overlayfs๋ฅผ ์‚ฌ์šฉํ•ด์„œ chroot๋ฅผ ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋•Œ๋•Œ๋กœ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ธฐ๋ณธ์œผ๋กœ docker container ์‹คํ–‰์‹œ --privileged ์˜ต์…˜์ด ํ•„์š”ํ•˜๊ณ , overlayfs๋กœ ์‚ฌ์šฉ๋˜๋Š” /var/lib/mock ๊ฒฝ๋กœ๋ฅผ -v ์˜ต์…˜์„ ํ†ตํ•ด volume์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  mock ๋‚ด๋ถ€์—์„œ fuse-overlayfs๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์ถ”๊ฐ€๋กœ ์„ค์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

docker run -it --rm -v /var/lib/mock --privileged fedora:latest
# (root in Docker)
dnf update -y
dnf install -y mock git fuse-overlayfs

์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ~/.config/containers/storage.conf ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

# (root in Docker)
$ mkdir -p ~/.config/containers
$ vi ~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options]
mount_program = "/usr/bin/fuse-overlayfs"

์ด์ œ mock ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# (root in Docker)
mock -r fedora-40-x86_64 --init
mock -r fedora-40-x86_64 --spec=aln/packaging/aln.spec \
                         --sources=. --resultdir=. --buildsrpm
mock -r fedora-40-x86_64 --resultdir=. --rebuild aln-*.src.rpm

ALN์—์„œ๋Š” Github Action์„ ํ†ตํ•ด CI/CD๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, Runner ์•ˆ์—์„œ ์œ„์™€ ๊ฐ™์ด mock์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ALN์˜ Github Action ์Šคํฌ๋ฆฝํŠธ(https://github.com/webispy/aln/blob/master/.github/workflows/ci.yaml)๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋ฐฐํฌํ•˜๊ธฐ

์•ž์˜ ๊ณผ์ •์„ ํ†ตํ•ด rpm ํŒŒ์ผ์„ ์ •์ƒ์ ์œผ๋กœ ๋งŒ๋“ค์—ˆ์œผ๋ฉด ์ด์ œ ๋ฐฐํฌ๋ฅผ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. rpm ํŒŒ์ผ ์ž์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐฐํฌํ•  ์ˆ˜๋„ ์žˆ๊ฒ ์ง€๋งŒ, ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๋งค๋ฒˆ ํŒŒ์ผ์„ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ ํ•ด์•ผ ํ•˜๋Š” ๋ถˆํŽธํ•จ์ด ์žˆ๊ณ  ์˜์กด์„ฑ ํŒจํ‚ค์ง€์— ๋Œ€ํ•ด์„œ๋„ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ผ๋ฐ˜์ ์ธ dnf install ๋ช…๋ น์„ ํ†ตํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํŒจํ‚ค์ง€๋„ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋”์šฑ ํŽธ๋ฆฌํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

dnf ๋ช…๋ น์€ HTTP/HTTPS๋ฅผ ํ†ตํ•ด ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ ์„œ๋ฒ„์—์„œ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ์ •๋ณด ํŒŒ์ผ(repodata)์„ ๊ฐ€์ ธ์™€ ๋‚ด๋ถ€์— ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ dnf install๋กœ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์š”์ฒญ ๋ฐ›์œผ๋ฉด ์ €์žฅ๋œ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ํ•ด๋‹น ํŒจํ‚ค์ง€์˜ ๋‹ค์šด๋กœ๋“œ URL์„ ์–ป์–ด์„œ ํŒจํ‚ค์ง€ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํŒจํ‚ค์ง€์— ๋Œ€ํ•œ ์ •๋ณด ํŒŒ์ผ๊ณผ ํŒจํ‚ค์ง€ ํŒŒ์ผ๋“ค์„ ์›น์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๋ฉด dnf install ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

createrepo

createrepo ๋ช…๋ น์€ rpm ํŒจํ‚ค์ง€๋“ค์„ ๋ถ„์„ํ•ด์„œ repodata(ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ)๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

์•ž์—์„œ ์ƒ์„ฑํ•œ rpm ํŒจํ‚ค์ง€๋“ค์„ ํ•œ ๊ณณ์— ๋ชจ์•„๋†“๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด createrepo ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•˜๋ฉด, ํ•˜์œ„์— repodata ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉฐ ๊ทธ ์•ˆ์— ์ธ๋ฑ์Šค ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

$ ls
aln-0.1.1-1.fc40.src.rpm
aln-0.1.1-1.fc40.x86_64.rpm
aln-debuginfo-0.1.1-1.fc40.x86_64.rpm
aln-debugsource-0.1.1-1.fc40.x86_64.rpm
aln-devel-0.1.1-1.fc40.x86_64.rpm
aln-libs-0.1.1-1.fc40.x86_64.rpm
aln-libs-debuginfo-0.1.1-1.fc40.x86_64.rpm

$ mkdir -p fedora/40
$ cp *.rpm fedora/40

$ createrepo fedora/40

$ ls fedora/40/repodata/
20bec12d37df5c772df406819e6e6b476ea6faa0f900bcd484ef22e469f289db-filelists.xml.zst
b89ce71877f2ca33ddddddf0a1426a2aee055c2fd5720816c1f8e0bc08670cd4-other.xml.zst
e73db0d79aab240858727aabde5356fb7db40dbb0e940ab69289a013a8d1e7c1-primary.xml.zst
repomd.xml

์ด์ œ fedora ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์›น์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

ALN์˜ ๊ฒฝ์šฐ ๋ณ„๋„์˜ ์›น์„œ๋ฒ„๋ฅผ ๋”ฐ๋กœ ์šด์˜ํ•˜์ง€ ์•Š๊ณ  Github์—์„œ ์ œ๊ณตํ•˜๋Š” ์ •์  ์›นํŽ˜์ด์ง€ ์„œ๋น„์Šค์ธ Github Pages๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. https://github.com/webispy/aln/tree/gh-pages/fedora์—์„œ ์›นํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ์ œ๊ณตํ•˜๋Š” ์ „์ฒด ํŒŒ์ผ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Github Pages๋ฅผ ํ†ตํ•ด ๋ฐฐํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•˜์‹œ๋ฉด ALN Github์— ์žˆ๋Š” Github Action ์Šคํฌ๋ฆฝํŠธ(https://github.com/webispy/aln/blob/master/.github/workflows/ci.yaml)๋ฅผ ์ฐธ๊ณ  ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ด ์Šคํฌ๋ฆฝํŠธ์—๋Š” rpm ํŒจํ‚ค์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณผ์ •๋„ ๋ชจ๋‘ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

/etc/yum.repos.d/aln.repo

์›น์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์ •์ƒ์ ์œผ๋กœ rpm ํŒจํ‚ค์ง€๋“ค์„ ๋ฐฐํฌํ•˜๋„๋ก ์„ค์ • ์™„๋ฃŒํ–ˆ์œผ๋ฉด ์ด์ œ dnf ๋ช…๋ น์œผ๋กœ ์„ค์น˜๊ฐ€ ๋˜๋Š”์ง€ ํ™•์ธํ•ด ๋ด์•ผ ํ•˜๋Š”๋ฐ, Fedora์—์„œ๋Š” ํŒจํ‚ค์ง€ ์„œ๋ฒ„์— ๋Œ€ํ•œ ์„ค์ •์„ /etc/yum.repos.d/ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ALN ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ์— ๋Œ€ํ•œ ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด /etc/yum.repos.d/aln.repo ํŒŒ์ผ์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

[aln]
name=aln
baseurl=https://webispy.github.io/aln/fedora/40
enabled=1
gpgcheck=0

์ฐธ๊ณ ๋กœ, ์œ„์—์„œ ์ƒ์„ฑํ•œ ํŒจํ‚ค์ง€๋“ค์ด ๋ชจ๋‘ ์„œ๋ช… ๊ณผ์ •์„ ์ƒ๋žตํ•˜๊ณ  ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— gpgcheck=0 ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์•ผ ์„œ๋ช… ๊ฒ€์ฆ ๊ณผ์ •์„ ๊ฑด๋„ˆ๋›ฐ๊ณ  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ํŒจํ‚ค์ง€ ์ €์žฅ์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋‹ˆ ์‹œ์Šคํ…œ์˜ ํŒจํ‚ค์ง€ ์ธ๋ฑ์Šค ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

$ sudo dnf update
aln                                                              1.5 kB/s | 1.7 kB     00:01

์ด์ œ ์•„๋ž˜ ๋ช…๋ น์œผ๋กœ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sudo dnf install aln aln-devel
sudo dnf remove aln aln-devel

๋งˆ๋ฌด๋ฆฌ

RPM ํŒจํ‚ค์ง•์€ ์ฒ˜์Œ์—๋Š” ๋ณต์žกํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ ๋‹จ๊ณ„๋ฅผ ์ดํ•ดํ•˜๊ณ  ์‹ค์Šตํ•ด๋ณด๋ฉด ์ถฉ๋ถ„ํžˆ ์ตํž ์ˆ˜ ์žˆ๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์ด Fedora๋‚˜ ๋‹ค๋ฅธ RPM ๊ธฐ๋ฐ˜ ๋ฐฐํฌํŒ์—์„œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํŒจํ‚ค์ง•ํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์œ ์šฉํ•œ ๊ฐ€์ด๋“œ๊ฐ€ ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค

โš ๏ธ **GitHub.com Fallback** โš ๏ธ