createrepo を使って CentOS7 用の自前リポジトリを作成する
ソフトウェアはリポジトリからインストールことが殆どだと思います(ソースコードからインストールする機会はめっきり、減ったように思います)。 ただ、「標準リポジトリ提供のソフトウェアはバージョンが低い」「そもそもリポジトリ上にソフトウェアが無い」「社内ソフトウェア専用の、プライベートリポジトリが欲しい」と言った場合は、自前でリポジトリを作りたいケースもあると思います。 今回は createrepo を使って CentOS7 用の自前リポジトリを作成してみます。
作成するリポジトリの設計
今回は以下のようなディレクトリ設計のリポジトリを作成することを目標にします。
No. |
パス |
用途 |
1 |
~/pub/centos/7/noarch/repodata |
メタデータ置き場 |
2 |
~/pub/centos/7/noarch/RPMS |
RPM パッケージ置き場 |
3 |
~/pub/centos/7/x86_64/repodata |
メタデータ置き場 |
4 |
~/pub/centos/7/x86_64/RPMS |
RPM パッケージ置き場 |
実際には以下のようなディレクトリ構成になる予定です(パッケージは任意に、配置したいもので読み替えてください)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | # tree ~/pub
/root/pub
└── centos
└── 7
├── noarch
│ ├── repodata
│ │ ├── 3e629d104cdf8bc59444db67d8ace76e4a08b3eaad442a141c6769f3f01163d8-filelists.xml.gz
│ │ ├── 4c8eaee9783170bc18f8a7280c4c0110f04d7ed66f148ade471eceebddb2e452-filelists.sqlite.bz2
│ │ ├── 993e344bab1b10941de6cbf5af18b7bd687800f1cc0bd2c56a53b529000ecf4f-other.sqlite.bz2
│ │ ├── a3ebc2c2f6887bfad537128d5c4395b72ef83f9d9b37a91ec8280c6abe0ef9b5-other.xml.gz
│ │ ├── b850eab0be5a0d306daa45539d569c9b21e2327b44b5d27e31c338dea0bc91b6-primary.sqlite.bz2
│ │ ├── f22b3d1344fd8bdb449bb6de92d0d75884a00cd13cfa72fd081438ea6e405cec-primary.xml.gz
│ │ └── repomd.xml
│ └── RPMS
│ └── sig9-release-centos-7-0.el7.noarch.rpm
└── x86_64
├── repodata
│ ├── 2368b37dd642abfadea973a115692eb0c82587883c2972613e4d6d71028b0741-filelists.xml.gz
│ ├── 4724e57313a47347ce3469a712d32af91c38deedfcbf670dd6d269d1e9b1ff82-other.xml.gz
│ ├── 6845775545cb283c3bc59eefc8f865356edf5f10def4f8eaa13ed261bc9f9d47-other.sqlite.bz2
│ ├── 8b5a39b31fc40ca17cbc02747d1c38d215e0d1ec3034d0b191dd3d9f53d87ac0-primary.sqlite.bz2
│ ├── abe4d1b1ef5603845547c04240b9c226db3ef0bdc8b0a425f7ca12fb718dcccc-primary.xml.gz
│ ├── fedcc1d8efcb4e60ad43a420bfb9827585318992846d777524865dc2e7d5b4d2-filelists.sqlite.bz2
│ └── repomd.xml
└── RPMS
└── samba-4.7.3-1.el7.x86_64.rpm
8 directories, 16 files
|
createrepo のインストール
createrepo は標準リポジトリで提供されています。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 | # yum info createrepo
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: ftp.tsukuba.wide.ad.jp
* extras: ftp.tsukuba.wide.ad.jp
* updates: ftp.tsukuba.wide.ad.jp
Available Packages
Name : createrepo
Arch : noarch
Version : 0.9.9
Release : 28.el7
Size : 94 k
Repo : base/7/x86_64
Summary : Creates a common metadata repository
URL : http://createrepo.baseurl.org/
License : GPLv2
Description : This utility will generate a common metadata repository from a directory of rpm
: packages.
|
yum
でインストールします。
| yum -y install createrepo
|
/usr/bin
配下にインストールされました。
| # which createrepo
/usr/bin/createrepo
|
createrepo を使って自前リポジトリを作成する
ここからは概ね、以下の流れで作業します。
- ディレクトリを作成する
- パッケージを配置(コピー)する
- createrepo でメタデータを作成する
まず、ディレクトリを作成します。
| mkdir -p ~/pub/centos/7/x86_64/RPMS
mkdir -p ~/pub/centos/7/noarch/RPMS
|
次に各々のディレクトリへパッケージをコピーします。
| cp ~/samba-4.7.3-1.el7.x86_64.rpm -p ~/pub/centos/7/x86_64/RPMS
cp ~/sig9-release-centos-7-0.el7.noarch.rpm ~/pub/centos/7/noarch/RPMS
|
最後に createrepo でメタデータを作成します。
| createrepo ~/pub/centos/7/x86_64
createrepo ~/pub/centos/7/noarch
|
リポジトリを利用する
今回は「リポジトリを追加してくれるパッケージ」として sig9-release-centos-7-0.el7.noarch.rpm
を作成し、リポジトリ上に配置しました。 これを yum
インストールするだけでリポジトリが追加されます。 手動でリポジトリを追加する場合は /etc/yum.repos.d/
配下に、例えば /etc/yum.repos.d/myrepo.repo
といったファイルを以下のような内容で作成します。
| [myrepo]
name=my repo
baseurl=http://my-repo.example.com/pub/OS/RELEASEVER/$basearch/
gpgcheck=0
enabled=1
|
これで baseurl
として指定した URL が参照されるようになります。
参考
createrepo
のヘルプ表示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72 | # createrepo --help
Usage: genpkgmetadata.py [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
-q, --quiet output nothing except for serious errors
-v, --verbose output more debugging info.
--profile output timing/profile info.
-x EXCLUDES, --excludes=EXCLUDES
files to exclude
--basedir=BASEDIR basedir for path to directories
-u BASEURL, --baseurl=BASEURL
baseurl to append on all files
-g GROUPFILE, --groupfile=GROUPFILE
path to groupfile to include in metadata
-s SUMTYPE, --checksum=SUMTYPE
specify the checksum type to use (default: sha256)
-p, --pretty make sure all xml generated is formatted
-c CACHEDIR, --cachedir=CACHEDIR
set path to cache dir
-C, --checkts check timestamps on files vs the metadata to see if we
need to update
-d, --database create sqlite database files: now default, see --no-
database to disable
--no-database do not create sqlite dbs of metadata
--update use the existing repodata to speed up creation of new
--update-md-path=UPDATE_MD_PATH
use the existing repodata for --update from this path
--skip-stat skip the stat() call on a --update, assumes if the
filename is the same then the file is still the same
(only use this if you're fairly trusting or gullible)
--split generate split media
-i PKGLIST, --pkglist=PKGLIST
use only the files listed in this file from the
directory specified
-n INCLUDEPKG, --includepkg=INCLUDEPKG
add this pkg to the list - can be specified multiple
times
-o OUTPUTDIR, --outputdir=OUTPUTDIR
<dir> = optional directory to output to
-S, --skip-symlinks ignore symlinks of packages
--changelog-limit=CHANGELOG_LIMIT
only import the last N changelog entries
--unique-md-filenames
include the file's checksum in the filename, helps
with proxies (default)
--simple-md-filenames
do not include the file's checksum in the filename
--retain-old-md=RETAIN_OLD_MD
keep around the latest (by timestamp) N copies of the
old repodata
--distro=DISTRO distro tag and optional cpeid:
--distro'cpeid,textname'
--content=CONTENT_TAGS
tags for the content in the repository
--repo=REPO_TAGS tags to describe the repository itself
--revision=REVISION user-specified revision for this repository
--deltas create delta rpms and metadata
--oldpackagedirs=OLDPACKAGE_PATHS
paths to look for older pkgs to delta against
--num-deltas=NUM_DELTAS
the number of older versions to make deltas against
--read-pkgs-list=READ_PKGS_LIST
output the paths to the pkgs actually read useful with
--update
--max-delta-rpm-size=MAX_DELTA_RPM_SIZE
max size of an rpm that to run deltarpm against (in
bytes)
--workers=WORKERS number of workers to spawn to read rpms
--compress-type=COMPRESS_TYPE
which compression type to use
|