部屋を掃除したら漫画が沢山出てきたので書く日記

漫画とか合唱とかUNIXとかLinuxとかについて書く日記です。

Solaris 10サーバにscreenをインストールする

Windowsと違い、SolarisをはじめとしたUNIX、あるいはLinuxといったOSはサーバ用途として使用されることが多いですが、これらのサーバを操作する主な方法は、Windowsパソコンからターミナルソフトを使用したtelnetまたはsshでのリモートアクセスだと思います*1。こんな感じです。

screenはこのリモートアクセスが便利になるツールです。具体的には以下の機能があります。

  • 切断してもリモートアクセス状態を維持できる(従来は切断したら状態は残らない)
  • 複数のリモートアクセスを一つの画面で操作可能(従来はリモートアクセスする度に一つ画面が表示されるので数が増えると煩雑になる)

リモートアクセスしてUNIXLinuxを使っている人でなければありがたみを感じない機能ですが、逆にたくさんリモートアクセスを利用する人には非常に便利となります。

特に「切断してもリモートアクセス状態を維持できる」は特筆すべき便利な機能だと思います。

例えば100時間以上同じプログラムを動かさなければいけないが、そのプログラムはリモートアクセスを切断すると終了してしまう場合は、リモートアクセスの画面を100時間ずっと開いておかなければいけません。しかし操作をしている環境によっては、操作しているWindowsマシンの電源を停止しなければいけない場合もあると思います。あるいはWindowsマシンが100時間ずっと正常に起動し続けないで途中で固まってしまうかもしれません。そういうときに便利なのです。

このscreenの導入方法を説明します。

さて、導入の方法は以下の通りです。今回はソースコードからビルドしてみました。

前提条件

  • インストールするサーバのOSSolaris 10 8/07 x86以降
  • サーバにはgcc3.4.6がインストールされている
  • 環境変数「PATH」が以下の通り設定されている(たぶん無駄なものもある)
PATH=/usr/local/sbin:/usr/local/bin:/usr/sfw/bin:/usr/bin:/usr/local/bin:/usr/ccs/bin:
/usr/sfw/bin:/opt/sfw/bin:/usr/openwin/bin/:/usr/proc/bin:/usr/ucb:/usr/sbin
  • 環境変数「LD_LIBRARY_PATH」が以下の通り設定されている(たぶん無駄なものもある)
LD_LIBRARY_PATH=/usr/lib:/usr/sfw/lib::/usr/sfw/lib:/usr/local/lib:/etc/lib:/usr/local/ssl/lib:
/usr/X11/lib:/usr/lib:/lib

ソースコードを入手

http://ftp.gnu.org/gnu/screen/
から最新版「screen-4.0.3.tar.gz」をダウンロード。
適当なディレクトリに展開。

$ cd ~hoge/
$ gtar xvfz screen-4.0.3.tar.gz

ビルド前の注意点

軽く調べたところ、Solaris10でビルドする場合にmisc.cを修正しないとmakeで失敗するらしい。
参考:http://1x4x9.net/2009/05/solaris10gnu-screen.html

とりあえず何も考えずにconfigureおよびmakeをしたら書いてあるとおり失敗したので、そこのサイトを参考に、misc.cを以下の通り編集。微妙にブログ主が書いている事と違ったがこれで上手くいった。

$ diff -u misc.c_bk misc.c
--- misc.c_bk   2010年  3月 30日 ((火))
+++ misc.c      2010年  3月 30日 ((火))
@@ -613,7 +613,7 @@
    */
 # endif /* NEEDSETENV */
 #else /* USESETENV */
-# if defined(linux) || defined(__convex__) || (BSD >= 199103)
+# if defined(linux) || defined(__convex__) || (BSD >= 199103) || defined(__sun__)
   setenv(var, value, 1);
 # else
   setenv(var, value);

configure

su -
# bash
# cd ~hoge/screen-4.0.3
# ./configure

ここで失敗したら

# make clean

を実行すると一時ファイルが削除されるので、ビルド作業が一からやり直しができます。

make

# make

特に問題なく完了。

make install

# make install

以下のようなメッセージが出て、/opt/sfw/bin/以下にインストールされました。
で、気づかなかったのでが、インストールしたサーバにはバージョン4.0.2のscreenがインストールされていたようで、「screen.old」としてリネームされてしまいました。あらためてインストールしなくても使えたな・・・。まあ最新バージョンになったから良いか。

./etc/mkinstalldirs /opt/sfw/bin `sed < config.h -n -e '/define SCREENENCODINGS/s/^.*"\([^"]*\)"/\1/p'`
cd doc ; make installdirs
make[1]: Entering directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
./../etc/mkinstalldirs /opt/sfw/man/man1 /opt/sfw/info
make[1]: Leaving directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
if [ -f /opt/sfw/bin/screen-4.0.3 ] && [ ! -f /opt/sfw/bin/screen-4.0.3.old ]; \
                then mv /opt/sfw/bin/screen-4.0.3 /opt/sfw/bin/screen-4.0.3.old; fi
/opt/sfw/bin/install -c screen /opt/sfw/bin/screen-4.0.3
chown root /opt/sfw/bin/screen-4.0.3 && chmod 4755 /opt/sfw/bin/screen-4.0.3
if [ -f /opt/sfw/bin/screen ] && [ ! -f /opt/sfw/bin/screen.old ]; then mv /opt/sfw/bin/screen /opt/sfw/bin/screen.old; fi
rm -f /opt/sfw/bin/screen
(cd /opt/sfw/bin && ln -sf screen-4.0.3 screen)
cp ./utf8encodings/?? `sed < config.h -n -e '/define SCREENENCODINGS/s/^.*"\([^"]*\)"/\1/p'`
cd doc ; make install
make[1]: Entering directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
./../etc/mkinstalldirs /opt/sfw/man/man1 /opt/sfw/info
/opt/sfw/bin/install -c -m 644 ./screen.1 /opt/sfw/man/man1/screen.1
make screen.info
make[2]: Entering directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
make[2]: `screen.info' is up to date.
make[2]: Leaving directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
if test -f screen.info; then d=.; else d=.; fi; \
        if test -f $d/screen.info; then \
        for f in $d/screen.info*; do /opt/sfw/bin/install -c -m 644 $f /opt/sfw/info;done; \
        if /bin/sh -c 'install-info --version' >/dev/null 2>&1; then \
          install-info --info-dir=/opt/sfw/info $d/screen.info; \
        else true; fi; \
        fi
make[1]: Leaving directory `/tpc5160_iscsi/bata64/package/screen-4.0.3/doc'
if [ -d /usr/lib/terminfo ]; then \
                PATH="$PATH:/usr/5bin" tic ./terminfo/screeninfo.src; \
                chmod 644 /usr/lib/terminfo/s/screen*; \
        fi
termcap entry (./terminfo/screencap) should be installed manually.
You may also want to install ./etc/etcscreenrc in /opt/sfw/etc/screenrc

これでインストールは完了です。

使ってみる

screen -T vt100

細かい使い方は別に書きます。

ではー。

*1:そしてリモートアクセスに使うソフトの、事実上の標準は「Windowsからteratermを使用する」だと思います。