๋ง์ง๋ชปํด ํจํค์ง๋ฅผ ๋ง๋ค์ด์ผ ํ ๊ฒ ๊ฐ์ ์ฌ๋์ ์ํ ์ค๋ช
์
๋๋ค. ์ ๋๋ก๋ ํจํค์ง๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๊ฒฝ์ฐ์๋ ๋ถ์กฑํ ์ ์ด ๋ง์ต๋๋ค.
๋๋ถ๋ถ์ ๊ฒฝ์ฐ์๋ ํ๋ก๊ทธ๋จ์ ์ง์ ์์ค์์ ๋น๋ํ๋ ์ผ๋ ์ ๊ณ , ๊ทธ๊ฑธ ์์คํ
์ ์ญ์ ์ค์นํ๋ ์ผ๋ ํ์น๋ ์์ ๊ฒ์
๋๋ค. ์ข์ ํจํค์ง๋งค๋์ ์ ๊ด๋ฆฌ๊ฐ ์๋๋ ํจํค์ง ์ ์ฅ์๋ค์ ๋๊ณ ์์ฃผ ๊ฐ๋์ ์ง์ ๋น๋๋ฅผ ํ ์ผ์ด ์๊ธฐ๊ณ , ํ์น ์๊ฒ ์์คํ
์ ์ญ์ ์ค์นํ ์ผ์ด ์๊ธธ ์ ์์ต๋๋ค. ์ด์ง๊ฐํ ํ๋ก๊ทธ๋จ๋ค์ ์์ฆ์์ ์ฅ๋น์์๋ ๋ณ ๋ถ๋ง ์์ด ๋น๋ ํ ๋งํ ์๊ฐ์ด ์์๋๋, ์ปดํ์ผ๋ฌ์ฒ๋ผ ํ๋ฒ ๋น๋ํ์ผ๋ฉด ๋ค์๋ ํ๊ณ ์ถ์ง ์์ ํ๋ก๊ทธ๋จ์ ๋ค์ ์ค์นํด์ผํ๋ ๊ฒฝ์ฐ๋ ์์ ์ ์์ต๋๋ค. ํํ ์ด๋ฐ ํ๋ก๊ทธ๋จ๋ค์ ๊ฒฐ๊ณผ๋ฌผ๋ ๋ฉ์น๊ฐ ๋งค์ฐ ํฝ๋๋ค. ์ด๋ด ๋๋ ์ต๋ํ ๊ฐ๋จํ๊ณ ํ์ํ ํญ๋ชฉ๋ง ํจํค์ง์ ๋ฃ์ด์ ๋ง๋ค์ด๋๊ณ ๋ค์ ํ์ฉํ๋ฉด ์ข์ ๊ฒ์ด๊ธฐ์ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ํ rpmbuild์ ๋ํ ๋๋ฆ ์ต์ํ์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํด๋ด
๋๋ค.
rpmbuild
rpmbuild๋ rpm-build
ํจํค์ง๋ก ์ค์น๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ๋๋ฆ ๋จ์ํ๊ฒ rpm์ผ๋ก ํจํค์ง์ ํ ์ ์๋ ์ ํธ๋ฆฌํฐ์
๋๋ค. specํ์ผ์ ํจํค์ง ์ ๋ณด, ๋น๋ ๋ช
๋ น, ์ค์น ๋ช
๋ น, ํจํค์ง๊ฐ ํฌํจํด์ผ ํ ํ์ผ ๋ชฉ๋ก์ ์์ฑํด์ rpmbuild์ ์
๋ ฅ์ผ๋ก ๋ฃ์ด์ฃผ๋ฉด ๋น๋๋ถํฐ ์์ํด์ rpmํจํค์ง๋ฅผ ๋ง๋ค์ด์ค๋๋ค. native ํ๋ก๊ทธ๋จ์ ๊ฒฝ์ฐ ๋๋ฒ๊ทธ ์ฌ๋ณผ์ ์์์ ๋ถ๋ฆฌํด์ ๋ณ๋์ ํจํค์ง๋ก ๋ง๋ค์ด์ฃผ๊ณ , ํ์ํ ์์กด์ฑ๋ ์ถ์ ํด์ ๋ช
์ํด์ค๋๋ค. ๋ํ, ํ์ํ ๊ฒฝ์ฐ ํ๋์ spec ๋ช
์ธ๋ก ์ฐ๊ด๋ ์๋ธ ํจํค์ง๋(ex. ์คํํ์ผ ํจํค์ง์ธ curl๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจํค์ง libcurl, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ฐ๋ฐ ํจํค์ง libcurl-devel) ๊ฐ์ด ๋ง๋ค ์ ์์ต๋๋ค.
์์
ํ๊ฒฝ
rpmbuild๋ ๊ธฐ๋ณธ์ผ๋ก ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS,BUILDROOT}
์ ๊ฒฝ๋ก์์ ๋์ํ๋ฉฐ ๊ฐ ๊ฒฝ๋ก์ ์ฉ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
SOURCES
์๋ ์์ถ๋ ์์ค์ฝ๋๊ฐ ์์นํฉ๋๋ค.
SPECS
์๋ ํจํค์ง ์ ์์ธ specํ์ผ์ ๋ก๋๋ค.
BUILD
๋ฐ์์ ๋น๋ ์์
์ด ์งํ๋ฉ๋๋ค.
RPMS
์ ๋ฐ์ด๋๋ฆฌ rpm๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋ฉ๋๋ค.
SRPMS
์๋ ์์ค rpm๊ฒฐ๊ณผ๋ฌผ์ด ์์ฑ๋ฉ๋๋ค.
BUILDROOT
๋ ํจํค์ง ํ๊ธฐ ์ํด ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ชจ์ผ๋ ๊ฒฝ๋ก์
๋๋ค.
specํ์ผ
specํ์ผ์ ํจํค์ง๋ฅผ ์ด๋ป๊ฒ ๋น๋ํ๊ณ ์ด๋ค ํญ๋ชฉ๋ค์ด ํจํค์ง์ ํฌํจ๋ ์ง, ํจํค์ง์ ์ด๋ฆ, ์ค๋ช
๋ฐ ์์กด์ฑ ๋ฑ์ ๋ฉํ๋ฐ์ดํฐ, ํจํค์ง ์ค์น, ์ญ์ ์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ๋ณดํต ์์ ๋ถ๋ถ์๋ ๋ฉํ๋ฐ์ดํฐ ์ ์๋ก ์์ํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ณธ์ ์ธ ํํ๋ฅผ ์ทจํฉ๋๋ค. ๋๋ฆ ๋จ์ํ๊ฒ ๋ง๋ python์ ์ํ spec์ ์์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
Summary: Python %{version}
Name: python-alternative
Version: %{version}
Release: 1%{?dist}
Obsoletes: %{name} <= %{version}
Provides: %{name} = %{version}
URL: https://www.python.org
Requires: libffi openssl
AutoReq: no
License: PSFL
Source: https://www.python.org/ftp/python/%{version}/Python-%{version}.tgz
BuildRequires: libffi-devel openssl-devel
BuiltRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
%define major_version %(echo "%{version}" | sed -E 's/^([0-9]+)\\..+/\1/' | tr -d)
%define minor_version %(echo "%{version}" | sed -E 's/^[0-9]+\\.([0-9]+)\\..+/\1/' | tr -d)
%description
Python
%package devel
Summary: python development files
Requires: %{name} = %{version}-%{release}
%description devel
Python development package
%prep
%setup -q -n Python-%{version}
%build
./configure --prefix=%{_prefix}
%install
%{__make} altinstall DESTDIR=%{buildroot}
%{__ln_s} -f %{_bindir}/python%{major_version}.%{minor_version} %{buildroot}/%{_bindir}/python%{major_version}
%clean
%{__rm} -rf %{buildroot}
%files
%{_bindir}/python*
%exclude %{_bindir}/idle*
%{_bindir}/pip*
%{_bindir}/pydoc*
%exclude %{_bindir}/2to3*
%{_libdir}/libpython*
%{_prefix}/lib/libpython*
%{_prefix}/lib/python*
%{_mandir}/man1/python*
%files devel
%{_includedir}/python*
%{_prefix}/lib/pkgconfig/python*
%
๋ก ๋งคํฌ๋ก๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, %package
, %description
, %files
๊ฐ์ ๋งคํฌ๋ก๋ ์ธ์๋ฅผ ์ฃผ์ด์ ์๋ธ ํจํค์ง๋ฅผ ์ ์ํ๋๋ฐ๋ ์ธ ์ ์์ต๋๋ค.
์์ ์์ ์ฒ๋ผ devel
์ด๋ผ๊ณ ์์ฑํ๋ฉด ๋ฉ์ธ ํจํค์ง์ด๋ฆ ๋ค์ ๋ถ์ฌ์ python-alternative-devel
๊ฐ ๋๋ฉฐ, curl
- libcurl
๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ ๋ฉ์ธ์ ์ด๋ฆ์ curl
์ด๊ณ , ๋ธ๋ฆฐ ํจํค์ง๋ฅผ ์ ์ํ ๋๋ %package -n libcurl
๊ณผ ๊ฐ์ด -n
์ต์
์ ์ถ๊ฐํด์ ์ง์ ํ ์ ์์ต๋๋ค. ๋ช๋ช ๋งคํฌ๋ก๋ ๋จ๊ณ๋ฅผ ์ ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋์์ ํ๋ฉฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
%package
์ ์ฌ์ฑ์ ๋ณด๋ฉด specํ์ผ์ ๋งจ ์ฒซ๋ถ๋ถ์ ๋ฉ์ธ ํจํค์ง์ %package
์ ํด๋นํ๋ ๊ฒ์ด ์๋๊ฐ ์ถ์ต๋๋ค. <Key>: <Value>
์ ํํ๋ก ๋ฉํ์ ๋ณด๋ฅผ ์์ฑํฉ๋๋ค. ๋๋ถ๋ถ์ Key๋ฅผ ๋ณด๋ฉด ๋ฌด์จ ๊ฐ์ธ์ง ์ถ์ธก ํ ๋งํฉ๋๋ค.
๋์ค์ ์ค๋ช
ํ %files
์์ ๋์ดํ ํ์ผ์ rpmbuild๊ฐ ๋ถ์ํ์ฌ ์๋์ผ๋ก ํจํค์ง๊ฐ ํ์๋ก ํ๋ ์์กด์ฑ์ ์ถ์ ํด์ ์ถ๊ฐ ํด ์ค๋๋ค. python ์คํฌ๋ฆฝํธ, perl ์คํฌ๋ฆฝํธ, native ์คํํ์ผ ๋ฑ์ ๋ถ์ํด์ ์์์ ์ถ๊ฐํด์ฃผ๋ ๊ฒ ๊ฐ์๋ฐ, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํ๋ฆฐ ์์กด์ฑ์ ์ถ๊ฐํด์ฃผ๊ธฐ๋ ํฉ๋๋ค. ์ด ๋๋ AutoReq: no
๋ฅผ ์ค์ ํ์ฌ ์๋ ์์กด์ฑ ์ถ๊ฐ๋ฅผ ๋ง์ ์ ์์ต๋๋ค. ์ด python-alternative ํจํค์ง๋ /usr/local/bin/python%{version}
์ ์ค์นํ๋๋ฐ ์๋ง๋ ๊ฐ์ด ํฌํจ๋๋ python ์คํฌ๋ฆฝํธ์ ์ํด์ /bin/python
์ ์์กด์ฑ์ผ๋ก ์ถ์ ํ์ฌ ์๊ตฌํฉ๋๋ค. ํจํค์ง ์ค์ค๋ก๊ฐ ์ ๊ณตํ๋ ์์กด์ฑ์ ๋ฏธ๋ฆฌ ์ค์น ๋์ด์๊ธฐ๋ฅผ ์๊ตฌํ์ง ์๊ฒ ๋์ํ๋ ๊ฒ ๊ฐ์ผ๋ ๋ณดํต์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค๋ง, ์ด ๊ฒฝ์ฐ์๋ ์ค์ค๋ก ์ ๊ณต์ ํ์ง ์๊ธฐ ๋๋ฌธ์ python์ ์ค์นํ๊ธฐ ์ํด์ python์ด ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ๋ฏ๋ก AutoReq
๋ฅผ ๊ป์ต๋๋ค.
%prep
์ค๋น๋จ๊ณ๋ก ์์ค์ฝ๋์ ์์ถ์ ํด์ ํ๊ณ ํ์ํ๊ฒฝ์ฐ ํจ์น๋ฅผ ์ ์ฉํฉ๋๋ค.
%setup
๋งคํฌ๋ก๋ฅผ ์ด ์์์ ๋ณดํต ์ฌ์ฉํ๋ฉฐ, %setup
์ Source
์ ๋ช
์๋ ํ์ผ๋ช
์ ์์ถ ํ์ผ์ SOURCES
๋ฐ์์ ์ฐพ์์ ์์ถ์ ํ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ผํ ์ด๋ฆ์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋์ ํฉ๋๋ค. ์์ ์์ ์์๋ SOURCES/Python-%{version}.tgz
์ ์์ถ์ ํ๊ณ Python-%{version}
์ผ๋ก ์ด๋์ ํฉ๋๋ค.
ํจ์น๊ฐ ํ์ํ ๊ฒฝ์ฐ ๋ณดํต ์ด ๋ค์ ํจ์น๋ฅผ ์ ์ฉํ๋ ๋ช
๋ น๋ค์ ์ถ๊ฐ ํฉ๋๋ค.
%build
์ค์ , ์ปดํ์ผ ๋ฑ์ ์ํํ๋ ๋จ๊ณ์
๋๋ค. ์ด๊ณณ์์ ์์ฃผ ํ๋ ๋งคํฌ๋ก๋ก %configure
, %make_build
๋ฑ์ด ์์ต๋๋ค. %configure
๋ configure๋ฅผ prefix ๋ฐ ๊ธฐํ ๋ช๊ฐ์ง ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ด๋ ์ต์
์ ์ถ๊ฐํ์ฌ ์คํํด์ฃผ๋ฉฐ, %make_build
๋ make
์ ๋น์ทํ๊ฒ ๋ชจ๋ ํ๊ฒ์ ๋น๋ ํฉ๋๋ค. ์์ ์์๋ ๋๋ค ์์ฐ๊ณ ์๊ณ , ์ฌ์ง์ด ์ค์ ๋น๋๋ ์ํ๋๋ฐ ์ด์จ๋ ์ดํ์ %install
๊น์ง ์ง๋๊ณ ๋์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ๋ง ๋ง๋ ์์น์ ๋ง๋ค์ด์ง๋ฉด ๋์ถฉ ํจํค์ง๋ฅผ ๋ง๋๋๋ฐ๋ ๋ณ ๋ฌธ์ ๋ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
%install
์ฌ๊ธฐ์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ ์ค์นํ๋ ๋ช
๋ น์ ์์ฑํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก %make_install
์ ์ฌ์ฉํ์ฌ make install DESTDIR=%{buildroot}
์ ๋น์ทํ ๋ช
๋ น์ ์ํํ์ฌ %{buildroot}
๋ฐ์ ๋น๋ ๊ฒฐ๊ณผ๋ฌผ์ด prefix๋ฅผ ์ ์งํ์ฌ ์ค์น๋๊ฒ ํฉ๋๋ค. ์์ ์
%{__ln_s} -f %{_bindir}/python%{major_version}.%{minor_version} %{buildroot}/%{_bindir}/python%{major_version}
์ ๋ณด๋ฉด ์ถ์ ํ ์ ์๋ฏ์ด, ํจํค์ง์ ํฌํจ์ํฌ ํ์ผ๋ค์ %{buildroot}๋ฐ์ ์์ฑ์ ํ๋ฉด ๋๋ฉฐ, ์ถ๊ฐ์ ์ธ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ ํจํค์ง๋ฅผ ๋น๋ํ๋ ์์ ์๋ ์กด์ฌํ์ง ์์ง๋ง, ํจํค์ง๋ฅผ ์ค์นํ๊ฒ๋๋ฉด ์กด์ฌํ๊ฒ ๋ %{_bindir}/python%{major_version}.%{minor_version}
๋ฅผ ํฅํ๋ ๊ฒ์ %{buildroot}
๋ฐ์ธ %{buildroot}/%{_bindir}/python%{major_version}
์ ๋ง๋ญ๋๋ค.
%files
ํจํค์ง์ ํฌํจ๋ ํ์ผ ๋ชฉ๋ก์ ์์ฑํฉ๋๋ค. glob ์์์ผ๋ก ํ์ผ ๋ชฉ๋ก์ ์์ฑํ ์ ์์ต๋๋ค. %{buildroot}
๋ฐ์ ์์ฑ ๋์์ง๋ง ์ด๋ %files
์๋ ํฌํจ๋์ง ์์ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ์๋ ๋น๋๋ฅผ ์คํจํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก %exclude
๋ฅผ ์ฌ์ฉํด์ ๋ช
์์ ์ผ๋ก ์ ์ธํด์ค์ผ ํฉ๋๋ค.
๊ธฐํ ๋งคํฌ๋ก
rpmbuild์์๋ ๊ธฐ๋ณธ์ผ๋ก ๋ค์ํ ๋งคํฌ๋ก๋ฅผ ์ ๊ณตํ๊ณ ์์ต๋๋ค. --define "_libdir %{_prefix}/lib64"
์ ๊ฐ์ ์ต์
์ ์คํ์์ ์ฃผ์ด์ ์คํ์์ ์ ๋งคํฌ๋ก๋ฅผ ๋ฎ์ด ์ธ ์๋ ์๊ณ , ์์ specํ์ผ ๋ด์ %define major_version
์ ๊ฐ์ด ๋ค๋ฅธ ๋งคํฌ๋ก์ ์
ธ ๋ช
๋ น์ ํ์ฉํ์ฌ ๋งคํฌ๋ก๋ฅผ ์ ์ ํ ์๋ ์์ต๋๋ค.
์ํ๋ ๋์์ ์ํ๋ ๊ฒ ๊ฐ์ ๊ฒฝ์ฐ์๋ --show-rc
์ต์
์ ์ฌ์ฉํ์ฌ ๋งคํฌ๋ก๊ฐ ์ด๋ป๊ฒ ์ ์๋์ด์๋์ง ํ์ธํด ๋ณผ ์ ์์ต๋๋ค.
๋น๋
rpmbuild์ ๋งค๋ด์ผ์ ๋ณด๋ฉด ์์ธํ๊ฒ ๋์์์ง๋ง ๊ฐ์ฅ ๋จ์ํ๊ฒ๋
rpmbuild -bb <specfile>
๋ก ๋ฐ์ด๋๋ฆฌ ํจํค์ง๋ฅผ ๋น๋ํ ์ ์์ต๋ค. ์ด ๋, ์์ถ๋ ์์ค์ฝ๋๋ ๋ฏธ๋ฆฌ SOURCES๋ฐ์ ๋์ด์ผ ํฉ๋๋ค.
private rpm package ๋ฐฐํฌ
์ง์ ๋น๊ณต๊ฐ ํจํค์ง ์ ์ฅ์ ํ๋ก๊ทธ๋จ์ ์คํํ์ฌ ์ ๊ณตํ๋ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง, ์ต๋ํ ๊ฐ๋จํ๊ฒ ํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก, rpm๊ด๋ จ ํจํค์ง ์ค์น ๋ช
๋ น์ด ์
๋ ฅ์ผ๋ก http๋ฑ์ URL๋ ๋ฐ๋ ๊ฒ์ ํ์ฉํ์ฌ ์ ๋นํ ์ฅ๋น์์ http๋ก ์๋น์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค.
Read more โ