Linux系サーバにrar形式のファイルを展開するためのコマンドをlinux環境に非su権限でインストールする.
インストール先を変更するだけで済む事例.
なぜPermission deniedされるのか
今回の場合は,単に保護されたディレクトリ内に新しくファイルを作ろうとしたから.
ファイルを作る場所を変え,かつその場所が環境変数PATHに登録されていれば,この問題を避けることができる.
準備
ホームディレクトリなどに次のディレクトリを作成する.
- ソースコード保存先(/home/{username}/packagesなど)
- 実行ファイルインストール先(/home/{username}/binなど)
ソースコードのダウンロード
ソースコード保存先に,このサイトにあるtar.gz形式ファイルのダウンロード.
wget http://www.rarlab.com/rar/unrarsrc-{version}.tar.gz
tar.gz解凍
保存先にてtarコマンドの実行.解凍用オプション(zxvf)は定型文のように覚えてしまう.
tar zxvf http://www.rarlab.com/rar/unrarsrc-{version}.tar.gz
unrarディレクトリが作成されているので,そこに移動.
makefileの編集
makeコマンドによってmakefileを用いたコマンドの作成がされるので,一度unrar内のファイルmakefileをテキストエディタで開く.DESTDIR=の部分だけ下記のように編集して保存する.
# DESTDIR=/usr ###←もともとの文コマンドの文頭に#をつける.
DESTDIR=/home/{username} ###←/binを除く部分を書く.
実行ファイル作成
makeで実行.
make
これにより,makefileで:の前に定義されるターゲットのうち,一番初めに書かれているものかつドットから始まっていないものを実行する.unrarのmakefileの場合,次が該当.
# ↓飛ばす
.cpp.o:
$(COMPILE) -D$(WHAT) -c $<
# ↓実行される
all: unrar
: : :
# ↓allで指定されたunrarターゲット
unrar: clean $(OBJECTS) $(UNRAR_OBJ)
@rm -f unrar
$(LINK) -o unrar $(LDFLAGS) $(OBJECTS) $(UNRAR_OBJ) $(LIBS)
$(STRIP) unrar
make後,コマンド出力の末尾に"unrar"と書かれている(=unrarが正常に生成された)ことを確認して次へ.
実行ファイルのインストール
こちらもmakeで実行.
make install
makefile内の次のターゲットが実行される.
# ↓makeコマンドで指定されたターゲット
install: install-unrar
# ↓installで指定されたターゲット
install-unrar:
install -D unrar $(DESTDIR)/bin/unrar
ここでDESTDIRを用いていることが分かる.
実行後,/home/{username}/bin内にunrarが生成される.
PATHの登録(.bashrcの編集)
/home/{username}/binをPATHに登録し,unrarコマンドが使えるようにする.
homeディレクトリに.bashrcがあることを確認.ドットから始まる隠しファイルなので,lsコマンドに-aオプションをつける.
ls -a
このファイルをテキストエディタで開き,次の一行を追加して保存する.
export PATH="$PATH:/home/{username}/bin"
.bashrcはユーザがログイン時に自動的に実行されるコマンドを記載するもの.ターミナルのスタイルを変えたり,長いコマンドを簡略化するエイリアスを登録したり,そして何より環境変数の変更・追加を行うなどの目的で使われる.
今回は,ログイン時に元々のPATHに/home/{username}/binを追記するために使う.
動作確認
再ログインするか,.bashrcを強制的に実行する.
source ~/.bashrc
コマンドが使えるか(=どこにコマンドがあるかを教えてくれるか)を確認.
which unrar ###→ /home/{username}/bin/unrarと返せばOK.
unrarでrarファイルを解凍する.
unrar e xxx.rar
以上.