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

2015/09/28FreeBSD, pkgng, ports, Vim, さくらのレンタルサーバ

(Qiitaの記事とほぼ内容は同じです!)

みんな大好きさくらのレンタルサーバ(スタンダード)
共用サーバなのにSSHログイン出来ちゃうし、最近は容量が100GBも付いてくるしで、なかなか他のサービスに移る気がしない!って人も多いんじゃないでしょうか。

折角たくさん容量余ってるんで、昔やりかけて挫折してたportsを導入しようと色々頑張った結果、ツール(っぽいもの)が出来たので、折角なので公開します。

はじめに:3行まとめ

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

About

ツール名: pspkg
バージョン: 1.0.0

user-based Port Snap + PKG tool for FreeBSD

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

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

  • make configまでは面倒見てませんので各自でお好きに!
  • ちなみにbash&おおよそ標準的なコマンド群でできてます(ただのラッパーなんで)。
  • それ以上でもそれ以下でもありません。

動作確認した環境

  • 自分の www****.sakura.ne.jp (ぉ
% uname -r
9.1-RELEASE-p24

% uname -m
amd64
  • FreeBSD 9.1-RELEASE on vagrant (Windows 7 x86_64)
% uname -r
9.1-RELEASE

% uname -m
amd64
  • それぞれに標準でインストールされるbashとcshでテストしてます。

セットアップ方法

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

bashのひとはこっち

bash -c "$(curl -fsSL https://raw.githubusercontent.com/bellflower2015/pspkg/master/setup.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)をぐるぐる回してみましたw
ぐるぐる回ってる間のログが見たい・・・という場合は $PSPKGDIR/var/log 配下を探してみてください。

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

  • 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
  • 基本ディレクトリは$HOME/.pspkgです
PSPKGDIR:  /home/vagrant/.pspkg
  • 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                                                          ... [\]

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

  • セットアップ完了
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をインストールしたい!というとき、--searchオプションを使って検索します。

% pspkg --search vim
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ディレクトリ以下のパス に則っているので注意してください。

% pspkg --install editors/vim

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

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

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

参考にしたサイト

おわりに

お気づきの点などありましたらQiita記事からコメントまたはTwitterまで。
ソースに関する事はGitHubのほうでお願いします。