以前mecabのRPMを作ったとき、そういえばrootではなくて一般ユーザーでRPMを作ったなあと今更ながら思い出したので、やり方をメモしておくことにした。
RPMの作成は、rootでやるときは、rpm-buildのRPMパッケージが入っていればそのまま作業するだけだけど、root権限があるが故に、ヘタするとまずいファイルを消してしまったり、上書きしてしまったりする恐れがあるので、できれば一般ユーザーでビルドするのが好ましい。でも一般ユーザーの場合、rootで使える /usr/src/redhat 以下のディレクトリへのアクセス権限がないため、ちょっとばかり準備が必要だ。今回は今使用中の使えるねっとのVPSでやってみた方法で書いてみる。
まずはユーザー作成、というところだけど、このVPSではドメインをPleskで作ったときにシステムアカウントが同時に作られる、かつ、それにシェルを割り当てられるようなので、それをそのまま使うことにした。Pleskのドメインの設定のシステムアクセスのところで /bin/bash を選ぶだけ。アカウント・パスワードはFTPと同じになるっぽい。試しにSSHで接続したら問題ないようだ。ってことはSFTPも使えるということか。って、あれ?SFTPってアカウントにシェルなくても使えなかったっけか?今度設定変えて試してみよう。FTPじゃなくてSFTPが普通に使えるならその方がいいし。
ちょっと脱線したけど、とりあえずユーザーについてはこれでよしとして、次にRPM作成環境を準備する。さっき作ったアカウントでログインした先では、ウェブに公開する領域外のディレクトリとして private があるようなので、ここに作ることにする。ここに以下のようにディレクトリを作ってみた。
private/
rpms/
BUILD/
RPMS/
SOURCES/
SPECS/
SRPMS/
rpms を作ってから、その下に BUILD とかのディレクトリを作っただけ。階層構造としては、これでOK。
残りはさっき作ったディレクトリ群をRPM作成時に使うように指定するだけなんだけど、そのためにはアカウントのホームディレクトリに .rpmmacros を作らなければいけない。が、さっそく作ろうと思ったら、パーミッションがないということではじかれる。そこでホームディレクトリ自体の権限見たら、なんとrootにしか書き込み権限がない。こりゃまいった。どうしようかと考えて面倒になったので、そこだけrootで作ることにした。いったん作ってしまえば、変えることもあまりないだろうし。ということで以下のような内容の .rpmmacros ファイルを、rootでホームディレクトリに作成。
%_topdir /var/www/vhosts/saba-kan.net/private/rpms
%_topdir という変数に、さっき作ったディレクトリ群のトップのパスを指定するだけ。これで準備完了。このユーザーで好き放題RPMを作ったり再作成できるようになった。もちろん、できたRPMをインストールするときはroot権限が必要だけど。
Plesk特有のアカウントを使わないのであれば、単にビルド用のユーザーをuseraddコマンドで作って、できたホームディレクトリ以下に同じことすればOK。