article2 - webispy/aln GitHub Wiki
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
ํ์ผ์ cpio
์์นด์ด๋ธ ํ์์ผ๋ก ๋์ด ์์ผ๋ฉฐ, rpm2cpio
์ cpio
๋๊ตฌ๋ฅผ ํตํด ๋ด๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค. ํจํค์ง ํ์ผ์ ๋ฐ์ด๋๋ฆฌ ํจํค์ง์ธ .rpm
ํ์ผ๊ณผ ์์ค ํจํค์ง(SRPM)์ธ .src.rpm
ํ์ผ์ด ์์ต๋๋ค. ๋ฐ์ด๋๋ฆฌ ํจํค์ง๋ ์์คํ
์ ์ค์นํ ํ์ผ๋ค์ ๋ด๊ณ ์๊ณ , ์์ค ํจํค์ง๋ ์์ค ์์นด์ด๋ธ์ ์คํ ํ์ผ(.spec
), ํจ์น ๋ฑ์ ๋ด๊ณ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก, ์คํ ํ์ผ์ ํจํค์ง์ ๋น๋์ ์ค์น๋ฅผ ์ ์ํ๋ ํ์ผ๋ก, ํจํค์ง๋ช , ๋ฒ์ , ๋ฆด๋ฆฌ์ฆ, ์ค๋ช , ๋ผ์ด์ ์ค, ์์ค URL, ๋น๋ ์์กด์ฑ, ์ค์น ํ์ผ ๋ชฉ๋ก ๋ฑ์ ํฌํจํ๊ณ ์์ต๋๋ค.
๋คํธ์ํฌ ์ค์น๋ฅผ ์ง์ํ๋ 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
(release1
,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: libglib2.0
- ๊ฐ๋ฐ์ฉ ํจํค์ง ์ด๋ฆ: 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
- DEB: libglib2.0
RPM ํจํค์ง๋ฅผ ์ ์ํ๊ณ ๋น๋ํ๊ธฐ ์ํด์๋ ์คํ(.spec
) ํ์ผ์ด ํ์ํฉ๋๋ค. ์คํ ํ์ผ์ ํจํค์ง์ ๋ฉํ๋ฐ์ดํฐ, ๋น๋ ๋ฐ ์ค์น ์ง์นจ์ ํฌํจํ๋ ํ์ผ๋ก, RPM ํจํค์ง๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ์์์
๋๋ค
์คํ ํ์ผ์ ์ฌ๋ฌ ์น์ ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ๊ฐ ์น์ ์ ํจํค์ง๋ฅผ ๋น๋ํ๊ณ ์ค์นํ๋ ๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ฃผ์ ์น์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Header: ํจํค์ง์ ๊ธฐ๋ณธ ์ ๋ณด๋ฅผ ํฌํจํฉ๋๋ค.
- Description: ํจํค์ง์ ๋ํ ์์ธ ์ค๋ช ์ ์ ๊ณตํฉ๋๋ค.
- Package: ๋จ์ผ ์คํ ํ์ผ์์ ์ฌ๋ฌ ๊ฐ์ ํจํค์ง๋ฅผ ์ ์ํ ๋ ์ฌ์ฉํฉ๋๋ค.
- Prep: ์์ค๋ฅผ ์ค๋นํ๋ ๋จ๊ณ์ ๋๋ค.
- Build: ์ํํธ์จ์ด๋ฅผ ์ปดํ์ผํ๋ ๋จ๊ณ์ ๋๋ค.
- Install: ์ํํธ์จ์ด๋ฅผ ์ค์นํ๋ ๋จ๊ณ์ ๋๋ค.
- Check: ๋น๋ ํ ํ ์คํธ๋ฅผ ์คํํ๋ ๋จ๊ณ์ ๋๋ค.
- Files: ํจํค์ง์ ํฌํจ๋ ํ์ผ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค.
- Changelog: ํจํค์ง์ ๋ณ๊ฒฝ ๋ด์ญ์ ๊ธฐ๋กํฉ๋๋ค.
ALN ๊ธฐ์ค์ผ๋ก ์ค์ ๋ก ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
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
Amazing Lucky Numbers (aln) is a library and tool for generating amazing lucky numbers.
๋จ์ผ 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
)์์ ์ ์ํ ์ ์์ต๋๋ค.
ํจํค์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ์ค๋น ์์
์ ์ํํฉ๋๋ค. ์ด ๋จ๊ณ์์๋ ๋ฏธ๋ฆฌ ์ ์๋ %setup
๊ณผ %patch
๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์๊ณ ํ์์ ๋ฐ๋ผ ์ง์ ์ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
%prep
%setup -q -n %{name}
%setup
๋งคํฌ๋ก๋ ์์ค ํ์ผ์ ์ถ์ถํ๊ณ , ์์
๋๋ ํ ๋ฆฌ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ๋๋ฐ, ๋ค์๊ณผ ๊ฐ์ ์ต์
์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
-q
: ์ถ๋ ฅ ์ต์ํ -
-n <name>
: ๋น๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ์ง์ . ์์ค ์์ถ์ ํด์ ํ์ ๋ ๊ธฐ๋๋๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ(%{name}-%{version}
)๊ณผ ์ค์ ์ด๋ฆ์ด ๋ค๋ฅผ ๊ฒฝ์ฐ ์ค์ ํฉ๋๋ค.
๋ณด๋ค ์์ธํ ์ค๋ช ์ https://rpm-packaging-guide.github.io/#setup์์ ํ์ธํ ์ ์์ต๋๋ค.
๋น๋ ๋จ๊ณ๋ฅผ ์ ์ํฉ๋๋ค. 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
%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
%ctest
%ctest
๋ CMake ์คํฌ๋ฆฝํธ์์ add_test()
๋ก ์ ์ํ ํ
์คํธ ํญ๋ชฉ๋ค์ ๋ํด ์คํ์ํค๋ ๋งคํฌ๋ก์
๋๋ค.
ํจํค์ง์ ํฌํจ๋ ํ์ผ ๋ชฉ๋ก์ ์ง์ ํฉ๋๋ค. 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*
ํจํค์ง์ ๋ณ๊ฒฝ ๋ด์ญ์ ๊ธฐ๋กํฉ๋๋ค. 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
- DEB:
- chroot๋ฅผ ํตํด ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์์ ํจํค์ง ๋ง๋ค๊ธฐ
- DEB:
sbuild
- RPM:
mock
- DEB:
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 ํจํค์ง๋ฅผ ๋น๋ํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๋๊ตฌ์
๋๋ค. ์ฃผ๋ก ๊ฐ๋ฐ ํ๊ฒฝ์์ ์ง์ ๋น๋ํ ๋ ๋ง์ด ์ฌ์ฉ๋๋๋ฐ, ํ์ฌ ์์คํ
ํ๊ฒฝ์์ ๋ฐ๋ก ํจํค์ง๋ฅผ ๋น๋ํ๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ํจํค์ง๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํ์ง๋ง, ๋ด ์์คํ ์์๋ ์ ์์ ์ผ๋ก ํจํค์ง ๋น๋์ ์ฑ๊ณตํ์ด๋ ๋ค๋ฅธ ์ฌ๋์ ์์คํ ํ๊ฒฝ์์ ๋๊ฐ์ด ๋น๋๊ฐ ์ฑ๊ณตํ๋ค๊ณ ๋ณด์ฅํ ์ ์์ต๋๋ค. ๊ฐ ์์คํ ๋ง๋ค ์ค์น๋ ํจํค์ง๋ค์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์, ์ ์์ผ๋ก ํจํค์ง ์์ ์ ์งํํ๊ธฐ ์ ์ ๋น ๋ฅด๊ฒ ํจํค์ง์ ํ ์คํธํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ ๋๊ตฌ์ ๋๋ค.
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
RPM ๋น๋ ์์คํ ์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ฅํ ๋น๋ ๋๊ตฌ๋ก rpm-build์ ๋ค๋ฅด๊ฒ ํ์ฌ ์์คํ ํ๊ฒฝ์ ์ด์ฉํ์ง ์๊ณ chroot ํ๊ฒฝ(change root์ ์ฝ์๋ก ๊ฒฉ๋ฆฌ๋ ํ์ผ ์์คํ ํ๊ฒฝ์ ์ ๊ณต)์์ ๋น๋ํฉ๋๋ค.
Fedora์ ํ์ ํจํค์ง๋ง ์ค์น๋ ๊นจ๋ํ ๊ฐ์ ํ๊ฒฝ์์ ๋น๋๊ฐ ์งํ๋๊ธฐ ๋๋ฌธ์, ๋น๋ํ๋ ค๋ ํจํค์ง์ ์์กด์ฑ์ ํ์คํ๊ฒ ์ ๊ฒํ ์ ์๊ณ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ด๊ธฐ ๋๋ฌธ์ ํ์ฌ ์์คํ ์ ์ํฅ์ ์ฃผ์ง ์์ ์์ ํ๊ฒ ํจํค์ง ์์ ์ ์งํํ ์ ์์ต๋๋ค.
๋ํ, chroot๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ํ์ฌ ์์คํ ์ ์ค์น๋ Fedora ๋ฐฐํฌํ ๋ฒ์ ๊ณผ ๋ค๋ฅธ ๋ฒ์ ์ฉ ํจํค์ง๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
mock๋ฅผ ํตํด ํจํค์ง์ ์ํํ๋ฉด ์๋ ๊ณผ์ ์ด ๋งค๋ฒ ์ํ๋ฉ๋๋ค.
dnf update
- ์คํ ํ์ผ์ ๋ช ์ํ ์์กด์ฑ ํจํค์ง ์ค์น
- ๋น๋(
rpmbuild
)
์ดํ mock ๋ช ๋ น์ด ์ข ๋ฃ๋๋ฉด ํจํค์ง ๊ณผ์ ์ค ์ค์น/์์ฑ๋ ๋ชจ๋ ํ์ผ๋ค์ด ์ ๊ฑฐ๋ฉ๋๋ค. ๋ฐ๋ผ์, ๋ค์ ํจํค์ง์ ์ํํด๋ ๋งค๋ฒ ๊นจ๋ํ ํ๊ฒฝ์์ ์ ๊ณผ์ ์ด ์๋ก ์ํ๋ฉ๋๋ค. ์ด๋ docker์์ ์ฃผ๋ก ์ฌ์ฉํ๋ overlayfs์ ์ ์ฌํ ๋ฐฉ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
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์ ์ํ 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
์ผ๋ฐ์ ์ผ๋ก 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
๋ช
๋ น์ 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 ํจํค์ง๋ฅผ ์์ฑํ๋ ๊ณผ์ ๋ ๋ชจ๋ ํฌํจํ๊ณ ์์ต๋๋ค.
์น์๋ฒ๋ฅผ ํตํด ์ ์์ ์ผ๋ก 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 ๊ธฐ๋ฐ ๋ฐฐํฌํ์์ ์ํํธ์จ์ด๋ฅผ ํจํค์งํ๊ณ ๋ฐฐํฌํ๊ณ ์ ํ๋ ๊ฐ๋ฐ์๋ค์๊ฒ ์ ์ฉํ ๊ฐ์ด๋๊ฐ ๋๊ธธ ๋ฐ๋๋๋ค