さくらのレンタルサーバ（スタンダード）でportsとpkgngを使って超簡単インストールツールを作ってみた


みんな大好き[さくらのレンタルサーバ（スタンダード）](http://www.sakura.ne.jp/standard.html)。
共用サーバなのにSSHログイン出来ちゃうし、最近は容量が100GBも付いてくるしで、なかなか他のサービスに移る気がしない！って人も多いんじゃないでしょうか。

折角たくさん容量余ってるんで、昔やりかけて挫折してたportsを導入しようと色々頑張った結果、ツール（っぽいもの）が出来たので、<i class="fa fa-github" style="font-size:1em;"></i>[折角なので公開します。](https://github.com/bellflower2015/pspkg "pspkg")

## はじめに：3行まとめ

* セットアップコマンド叩いて
* pspkg --install editors/vim (お好きなports)
* あとは待つだけ (うまくいかないときもある)

## About

ツール名: <i class="fa fa-github" style="font-size:1em;"></i>[__pspkg__](https://github.com/bellflower2015/pspkg "pspkg")
バージョン: 1.0.0

user-based __P__ort __S__nap + **PKG** tool for FreeBSD

pspkgの正体は、要するにportsとpkgngのラッパーです。

* portsnapで最新のソフトウェア群をカバーし、
* portsでmake packageし、
* それらパッケージの管理をpkgngを使って行ってます。

----

* make configまでは面倒見てませんので各自でお好きに！
* ちなみにbash＆おおよそ標準的なコマンド群でできてます（ただのラッパーなんで）。
* __それ以上でもそれ以下でもありません。__
* __ただし、ユーザ権限にてうまく動作するよう、初期設定を極力調整してあります。__

## 動作確認した環境

* 自分の www****.sakura.ne.jp （ぉ

```bash:さくら
% uname -r
9.1-RELEASE-p24

% uname -m
amd64
```

* FreeBSD 9.1-RELEASE on vagrant (Windows 7 x86_64)

```bash:vagrant
% uname -r
9.1-RELEASE

% uname -m
amd64
```

* それぞれに標準でインストールされるbashとcshでテストしてます。

## セットアップ方法

homebrewとかでよくあるやつリスペクトで。

bashのひとはこっち

```bash
bash -c "$(curl -fsSL https://raw.githubusercontent.com/bellflower2015/pspkg/master/setup.bash)"
```

cshのひとはこっち

```bash:csh
sh -c 'bash -c "$(curl -fsSL https://raw.githubusercontent.com/bellflower2015/pspkg/master/setup.bash)"'
```

デフォルトでは、ファイル群は `$HOME/.pspkg ($PSPKGDIR)` 配下に全て格納されます。
（上記コマンドを叩く前にあらかじめ環境変数 **PSPKGDIR** を設定しておくと変更できる・・・はず）

ただSTDOUTとSTDERRの内容を垂れ流すのも芸がないので、可能なとこは棒(Loading Spinner)をぐるぐる回してみましたｗ
ぐるぐる回ってる間のログが見たい・・・という場合は **$PSPKGDIR/var/log** 配下を探してみてください。

上記コマンドを叩くと、こんな感じでセットアップが始まります。

```bash:curlでpspkg本体を取ってきます
vagrant@freebsd:/home/vagrant % sh -c 'bash -c "$(curl -fsSL https://raw.githubusercontent.com/bellflower2015/pspkg/master/setup.bash)"'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8136  100  8136    0     0   5900      0  0:00:01  0:00:01 --:--:--  7610
```

```bash:基本ディレクトリは$HOME/.pspkgです
PSPKGDIR:  /home/vagrant/.pspkg
```

```bash:portsnapのセットアップが始まります。extract中はぐるぐる。
PORTSNAP:  fetch
Looking up portsnap.FreeBSD.org mirrors... 7 mirrors found.
Fetching public key from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Fetching snapshot generated at Sun Sep 27 09:05:33 JST 2015:
912f95ba2245b1b00f1d1c427d6b3c9b34612e3cef53c2100% of   69 MB   13 MBps
Extracting snapshot... done.
Verifying snapshot integrity... done.
Fetching snapshot tag from ec2-ap-northeast-1.portsnap.freebsd.org... done.
Fetching snapshot metadata... done.
Updating from Sun Sep 27 09:05:33 JST 2015 to Mon Sep 28 02:21:17 JST 2015.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 25 patches.....10....20.. done.
Applying patches... done.
Fetching 1 new ports or files... done.
PORTSNAP:  extract                                                          ... [\]
```

下記のように出力されたらセットアップ完了です。
指示の通り、`PSPKGDIR`、`PATH`、`LD_LIBRARY_PATH`を設定してください。

```bash:セットアップ完了
PORTSNAP:  extract                                                          ... [OK]
PORTSNAP:  update                                                           ... [OK]
INFO:      SETUP COMPLETED

  Make sure you have environment variables set:

    # bash
    export PSPKGDIR=$HOME/.pspkg
    export PATH=$PSPKGDIR/bin:$PATH
    export LD_LIBRARY_PATH=$PSPKGDIR/lib:$LD_LIBRARY_PATH

    # csh
    setenv PSPKGDIR $HOME/.pspkg
    setenv PATH $PSPKGDIR/bin:$PATH
    if ( ${?LD_LIBRARY_PATH} ) \
      setenv LD_LIBRARY_PATH $PSPKGDIR/lib:$LD_LIBRARY_PATH
    if ( ! ${?LD_LIBRARY_PATH} ) \
      setenv LD_LIBRARY_PATH $PSPKGDIR/lib
```

## ソフトウェアを探す

例えば[vim](http://www.vim.org/)をインストールしたい！というとき、`--search`オプションを使って検索します。

```bash:search
% pspkg --search vim
```

```bash:search結果
vagrant@freebsd:/home/vagrant % pspkg --search vim
PSPKGDIR:  /home/vagrant/.pspkg
Port:   p5-Shell-EnvImporter-1.07_1
Path:   /home/vagrant/.pspkg/ports/devel/p5-Shell-EnvImporter
Info:   Inherit different shell environments and restore previous

Port:   neovim-0.0.0.201507060407_1
Path:   /home/vagrant/.pspkg/ports/editors/neovim
Info:   Next generation Vim

Port:   p5-Vimana-2010.09303_3
Path:   /home/vagrant/.pspkg/ports/editors/p5-Vimana
Info:   Vim script manager

Port:   vim-7.4.873
Path:   /home/vagrant/.pspkg/ports/editors/vim
Info:   Improved version of the vi editor

〜(略)〜
```

## ソフトウェアをインストールする

いま検索したvimをインストールするぞ！というときは`--install`オプションを使います。
指定方法は **portsディレクトリ以下のパス** に則っているので注意してください。

```bash:install
% pspkg --install editors/vim
```

こんな（下記）感じでずらずら〜〜〜っと出力されます。
この間、約20分弱くらい。
この例で言うとportsでvimが依存しているパッケージは全てインストールされます。
デフォルトで **portsのデフォルト設定 ＋ PREFIX=$PSPKGDIR** （バイナリは$PSPKGDIR/binに入る）というコンフィグになります。で、vimに関しては **ぼーっと待ってるだけでインストール完了**。

（パッケージによってはインストールパスが固定されているものもあるため、すんなりインストールできない＝書き込み権限エラーでインストール処理が止まるものもあります。その場合は各パッケージのディレクトリに潜って自力でMakefileとかをなんとかするｗ）

```
vagrant@freebsd:/home/vagrant % pspkg --install editors/vim
PSPKGDIR:  /home/vagrant/.pspkg
INSTALL:   ports-mgmt/pkg                                                   ... [OK]
MAKE:      devel/libedit                                                    ... [OK]
PKG_ADD:   devel/libedit                                                    ... [OK]
MAKE:      devel/m4                                                         ... [OK]
PKG_ADD:   devel/m4                                                         ... [OK]
MAKE:      textproc/expat2                                                  ... [OK]
PKG_ADD:   textproc/expat2                                                  ... [OK]
MAKE:      converters/libiconv                                              ... [OK]
PKG_ADD:   converters/libiconv                                              ... [OK]
MAKE:      devel/gettext-runtime                                            ... [OK]
PKG_ADD:   devel/gettext-runtime                                            ... [OK]
MAKE:      devel/gettext-tools                                              ... [OK]
PKG_ADD:   devel/gettext-tools                                              ... [OK]
MAKE:      lang/perl5.20                                                    ... [OK]
PKG_ADD:   lang/perl5.20                                                    ... [OK]
MAKE:      devel/p5-Locale-gettext                                          ... [OK]
PKG_ADD:   devel/p5-Locale-gettext                                          ... [OK]
MAKE:      devel/gmake-lite                                                 ... [OK]
PKG_ADD:   devel/gmake-lite                                                 ... [OK]
MAKE:      misc/help2man                                                    ... [OK]
PKG_ADD:   misc/help2man                                                    ... [OK]
MAKE:      devel/gmake                                                      ... [OK]
PKG_ADD:   devel/gmake                                                      ... [OK]
MAKE:      devel/autoconf-wrapper                                           ... [OK]
PKG_ADD:   devel/autoconf-wrapper                                           ... [OK]
MAKE:      devel/autoconf                                                   ... [OK]
PKG_ADD:   devel/autoconf                                                   ... [OK]
MAKE:      textproc/libyaml                                                 ... [OK]
PKG_ADD:   textproc/libyaml                                                 ... [OK]
MAKE:      devel/libexecinfo                                                ... [OK]
PKG_ADD:   devel/libexecinfo                                                ... [OK]
MAKE:      lang/ruby21                                                      ... [OK]
PKG_ADD:   lang/ruby21                                                      ... [OK]
MAKE:      devel/pkgconf                                                    ... [OK]
PKG_ADD:   devel/pkgconf                                                    ... [OK]
MAKE:      lang/python27                                                    ... [OK]
PKG_ADD:   lang/python27                                                    ... [OK]
MAKE:      lang/lua52                                                       ... [OK]
PKG_ADD:   lang/lua52                                                       ... [OK]
MAKE:      lang/tcl86                                                       ... [OK]
PKG_ADD:   lang/tcl86                                                       ... [OK]
MAKE:      devel/cscope                                                     ... [OK]
PKG_ADD:   devel/cscope                                                     ... [OK]
MAKE:      devel/ctags                                                      ... [OK]
PKG_ADD:   devel/ctags                                                      ... [OK]
MAKE:      editors/vim                                                      ... [OK]
PKG_ADD:   editors/vim                                                      ... [OK]
COMPLETED: editors/vim
```

## 参考にしたサイト

* [Sakura共用サーバにportsをインストール](http://d.hatena.ne.jp/faw/20090109)

## おわりに

お気づきの点などありましたらコメントまたは<i class="fa fa-twitter" style="font-size:1em;"></i>[Twitter](https://twitter.com/bellflower2015)まで。
ソースに関する事は<i class="fa fa-github" style="font-size:1em;"></i>[GitHub](https://github.com/bellflower2015/pspkg/tree/1.0.0 "pspkg")のほうでお願いします。