ソフトウェアの自力インストール

最初に

今回の授業では,ソフトウェアのインストール方法について学習する.
近年では,ライトユーザでも簡単に unix が使えるようにという配慮から パッケージングをはじめとするインストールの自動化が進んでいるが,

  1. おおまかに unix とよばれる OS でもパッケージング等は各々異なるため,学習しても応用が効かない.
  2. トラブルが起きたときに対処する能力が身につきにくい.
  3. 伝統的なソフトウェアや,小さなソフトウェアにはパッケージングされてないものも多い.

などを鑑みて,教育的理由から,この授業では手動インストールを扱う.

ms-windows などと異なり,unix ではソフトウェアはソースファイル (Source File, 読んで理解出来るプログラム形式)の形式で配布されていることが多く, インストールはソースを取得して自分でコンパイルすることになる.
これは,
「欲しがった人が作る」という「言い出しっぺの法則」 にのっとってユーザが自分でソフトウェアを作ってきた,という unix の伝統や, なるべく多くの環境で使えるようにと言う配慮, ソフトウェアをなるべくオープンにしようという文化的背景からこうなっているのであり, そうした背景をこの学習を通じて感じ取ることもこの授業の狙いである.

作業全体の流れ

ソフトウェアを unix に手動でインストールする一般的な手順は以下の通りである.

  1. インストールするソフトウェアがどんなソフトウェアなのか,概要を把握する.
  2. ライセンスの確認
  3. Source の取得, 展開
  4. 説明書の通読
  5. コンパイル前の設定
  6. コンパイル
  7. コンパイルしたファイルなどの配置, 後処理

この流れを意識しておけば,実はそんなに難しくはない. もちろん,専門的知識を要求されるときもあるが, どうしてもよく分からないときはインストールしなければ良いだけの話である.

注意 セキュリティを考えると, 全体に自分が何をしているか良く把握できていない場合は, むしろインストールしては「いけない」と考えた方が良いかもしれない.
「トロイの木馬」をうっかり自分で仕込んでしまった,ということがないよ うに,最低でも何をしているかの自覚を持ちながら作業するようにしよう.

作業の実際

内容の解説を行うとともに, FDclone と呼ばれる cui ツールを例として挙げ, 実際にインストールしながら作業に習熟する.

この FDclone というツールは非常に便利かつ(日本では)古くから知られたツールなので, インストールして使えるようになっておくと良いだろう.

どんなソフトウェアなのか概要を把握する

当たり前であるが,インストールするソフトウェアがどんなソフトウェアなのかを知らなくては始まらない. そこで,情報収集を兼ねて,ソフトウェアの概要を調べておこう.
それには,そのソフトウェアを一次配布している開発元の web を参照するのがまずは良いだろう.

  実習
FDclone の web を見ると,そこに「FDclone って何?」というまさにおあつらえ向きの web があるのがわかる. それを読んでまずは概要を把握せよ.

ライセンスの確認

忘れがちであるが, インストールしたいと思うソフトウェアのライセンスを確認しておく必要がある.
対価が必要なのかそうでないのか, 使用期間に制限はないか,再配布は可能かどうか等々, ソフトウェアのライセンスの形態は非常に多様なので,結局, ライセンスがどうなっているかは各ソフトウェア毎に調べる他はない.
一般に良く知られているのは「商用」と「フリー」という大まかな区別であるが, これは大まかすぎて役に立たない.

(注意) ライセンスに違反した状態でソフトウェアを使用すると, 損害賠償金を請求されるなどの事態に発展する可能性があるため, インストール前によくよくライセンスを確認しておくこと.
また,有益なソフトウェアを作成し,配布している作者への感謝と敬意を表すためにも, ライセンスを遵守するようにしたい.

  実習
FDclone のライセンスはやはりwebにまとめられているので,読んで理解しておくこと.

Source の取得

さて,ソースファイル一式を取得しよう.
どのファイルをとってくれば良いかであるが,これは配布元の web を丁寧に読めば問題ないだろう. よく分からない場合は,unix ではソースファイル一式は tarball と呼ばれる hogehoge.tar.gz もしくは hogehoge.tgz という形式で配布されることが多いので,それを目安にすると良いだろう.

  実習
FDclone のソースファイル一式を取得する.
unix からは,w3mlynx, wget などのコマンドラインを使うのが素早くて良いかもしれないが,まあ好みの手法で問題ない.
なお念の為に、取得すべきファイルをこちらのサーバにも FD-3.01i.tar.gz として置いておく.ここから持って行っても良い.

Source の展開

さて,取得したソースファイル一式は, 通常は転送が簡単なように一つのファイルに固められているため, 作業できるようにこれを展開しよう.
tarball は gziptar があれば通常は展開できる.
tar や gzip の扱いに関してはオンラインマニュアルを読めばよいが,今回は(下記の実習の中に)使い方を書いておいた. いずれ調べておこう.

なお,展開すると大量のファイルが含まれていることも多いので,この作業も含め, 以下の作業は一時的な作業用ディレクトリを用意してその中で行った方が良い.

  実習 (以降,cygwin での作業を想定)
取得した FDclone のソースファイル FD-3.01i.tar.gz を展開する.
例えば,新たに tmp-fd というディレクトリを作って作業するならば, 全体に次のような流れになるだろう.

    mkdir tmp-fd
    cp FD-3.01i.tar.gz tmp-fd
    cd tmp-fd
    tar xvfz FD-3.01i.tar.gz

この作業のあと,展開されたディレクトリやファイルの構成がどうなっているか確認しておくこと.

説明書の通読

さて,これでソースファイル一式が展開された形で入手できたわけだが, ここでまずやるべきことはソースファイル一式に含まれているドキュメント (説明書,解説,マニュアル等) に目を通すことである. ドキュメントファイルには INSTALLREADME などの,大文字で始まる分かりやすい名前がついているので, ザッとみるだけでどれだか分かるはずである.
これらのドキュメントにはインストールの方法や注意点,各種設定の方法などが書かれているので, 読んでおかないことには次の作業が進まない.

注意: ドキュメントに目を通さずに「勘」で次の作業に進んで うまくいかない〜と悩んで時間をつぶすケースが(特に素人に)良くみられるが, そういうことにならないように注意しておこう.

  実習
FDclone のソースファイル一式をみて, ドキュメントに一通り目を通せ.
特に、インストール方法が記してある Install というファイルは重要なので良く読んでおこう.

コンパイル前の設定

インストール方法について書かれたドキュメントを読みながら, ソースをコンパイルする前にやらねばならない準備を行う. 大ざっぱに言えば,これは次の二つの作業からなる.

  1. OS や機種,環境ごとに異なる細かい違いに対応する.
    本質的には技術的問題であるため,ソフトウェアの作者側の努力で対応することが多い. この差に対応するための仕組みも存在する. よく知られているのは, configure という名前をつけてあるソフトを実行する方法や, make config とする方法,また, xmkmf というツールを使う方法などである.
  2. ソフトウェアの動作オプション等を設定する.
    ソフトを使う人の好みや環境によるため, ユーザや管理者が設定することが多い. 好みと言ってもよくわからないなあ,という場合は, そのまま(デフォルト)にしておいて後で修正しても良いだろう.

具体的にどうすれば良いかは,たいていはドキュメントに指示されているはずであるので, よく読んでその指示に従う.

  実習
FDclone の Install というドキュメントを読み,そのドキュメント中の

    3. make。

と書かれている行の前までを実行せよ.

注意: 教育用計算機システム上の Vine Linux や cygwin は,Linux とよばれる OS に分類される.

コンパイル

準備が終わったら,ソースをコンパイルしてバイナリにする. これによって,自分の環境で実行できるファイルが作成されることになる.
ソフトウェアを記述したコンピュータ言語などにも依存するが,通常は
make オプション
とするだけで良いことが多い.
オプションも含め具体的にどうするかは,ドキュメントに書かれている指示に従う.

なお,この作業は環境などよっては「失敗」することがあるので,作業がうまくいったかどうかの確認が必要である.
確認の方法としてもっとも良いのは 「Makefile の内容を読んで行われる作業を理解し,作業結果の判定をする」,というものであるが,初心者にはこれは難しいだろう.
そこで次善の策としてお勧めなのが, 「コンパイル作業中に出力されるログを読んで,問題が起きてないかどうか判断する」 というものである.

文字端末の画面をぼーっと眺めていると画面が流れてしまえば読めなくなるため, コンパイル作業時には以前の授業 プロセスとジョブ: レポート に出てきた script コマンドを有効活用して記録をとり,あとからチェックするのが良い.

  実習
FDclone の Install というドキュメントを読んで,ドキュメント中に

    3. make。

と書かれていることをまず確認せよ. それから, script を使って記録をとりながら実際にコンパイルする. 具体的には以下のような感じになるだろう.

    script Log-make
    make
    exit
    less Log-make

これで記録を見ておかしなところがないかチェックできる.
さらに,Install ドキュメント中にある指示に従い,コンパイルした結果できた fd が無事に動くかどうか,

    ./fd

として実行してみて確認する(実行できれば OK).
* ちなみに fd は q を押すと終了できる.

コンパイルしたファイルなどの配置, 後処理

さて,ここまで無事にたどり着いたら,あとは細かい後片付けである. しかし個人ユーザがソフトウェアをインストールする場合,この段階がもっとも作業量が多いので, 注意しながら作業しよう.

この段階の作業は一般に次のように進行する.

  1. 実行ファイル,マニュアル,設定ファイルなどを適切なディレクトリに置く.
  2. 作業の最終チェック.
  3. インストールに使用したが,既に不要となったファイルの後始末.
  4. ソフトウェアのオプション等の細かい調整.

これらについて細かく解説しよう.

ファイルを適切なディレクトリに置く

さて,せっかくコンパイルまでしてファイルを作成したので, それらのファイルを適切なディレクトリに置いて使えるようにするのがこの段階である.

ファイルを置くディレクトリを作成,準備する

しかし,この段階で注意が要る. 「通常権限ユーザが操作できない, /usr/local/bin などのディレクトリ」にファイルを置くことを想定しているソフトウェアが多いのだ. よってこれを修正しておかないといけない.
この問題に対処するため,適切なディレクトリを作成して用意したり, 環境変数を設定したりという作業が必要となる. これにはこれまで学習した様々な知識が必要となるので,よく思い出して作業されたい. なお、ソフトウェアによっては,いくら上手に設定しても通常ユーザではインストールできないものがある. そういう時は素直にあきらめて,管理者にインストールをお願いしよう.

さて,具体的に考えると, unix において通常ユーザレベルでソフトウェアをインストールする際, 新たに導入されるファイルは実行ファイル,マニュアル,設定ファイルが主である. そこで,これらのファイルをどういうディレクトリに置くのか,他に何が必要かを各々示そう.

ファイルの種類 解説
実行ファイル … プログラム本体など. 以前も解説したように、通常ユーザの場合はユーザディレクトリに
bin というディレクトリを作成し, 環境変数 PATH にそのディレクトリを加え、
それからそのディレクトリにこうした実行ファイルを置くのが一般的だろう.
この授業では既にこの設定等が済んでいるのでこれについては問題ない.
マニュアル 通常ユーザの場合,ユーザディレクトリに
man というディレクトリを作成してそこに置くぐらいか.
その後、そのディレクトリを環境変数 MANPATH に加えておく.
MANPATH について詳しくは, man man として調べよ.

  実習
具体的にどういうディレクトリが必要か Makefile を読んでみると,
~/man/man1~/man/ja/man1
あたりを用意すれば良さそうである.
そこでまず,次のようにしてディレクトリを作成する.

(cd ~; mkdir man; cd man; mkdir man1)
(cd ~/man; mkdir ja; cd ja; mkdir man1)

もちろん,作業後にこれらのディレクトリができているかどうか確認しておくこと.
また,どうして上のコマンドでディレクトリが作成できるか考えておこう.

次に MANPATH を設定する.
bash を使っているならば .bashrc の中などで次のように設定するのが良いだろう.

if [ -d $HOME/man ]
then
MANPATH="$HOME/man: :"; export MANPATH
fi

もしも tcsh を使っているならば,.tcshrc の中などで

setenv MANPATH "${HOME}/man: :"

とすれば良い.
設定ファイル 通常ユーザの場合,ユーザディレクトリに
etc というディレクトリを作成してそこに置くことになるだろう.
今回は不要なはずだが,念の為に,etc ディレクトリをホームの下に作っておこう.

(cd ~; mkdir etc)

その他 Makefile を読むと,どうやら data を置くディレクトリが必要なようだ.
そこでそれにも対処することにしよう.

(cd ~; mkdir share; cd share; mkdir fd)

実際のファイル配置作業

さて,上記のディレクトリと環境変数の設定が終わったら, ファイルを上記のディレクトリに配置すれば良い. この作業は手動で行っても良いが,FDclone の Install ドキュメントを読むと,

    7. make install。

と書かれているので make install を行えば良いことが分かる.
ではファイルを置くディレクトリの指定はどこで行うのかというと, その前に書かれている

    5. Makefile.in にある TOPDIR 等のマクロを自分の環境に応じて…

という部分がそれに当たる. さて,それではまず、ファイル Makefile.in を適切に書き替え,その後,make install を実行しよう.

注意: Install ドキュメントの

    6. _fdrc を fdrc という名前でコピーし… 

という部分は今回は実行する必要がないし、実行しない方が適切だろう. なぜなら,今回は通常ユーザでインストールするので, 共通設定ファイルを用意すると,結局,一人のユーザ用に二つの設定ファイルが存在してしまうことになり,混乱するだけだからである.

  実習
Makefile.in を書き替える前に念のためにバックアップをとっておこう.

    cp Makefile.in Makefile.in.ORG

それから,Makefile.in をエディタで書き替え、設定を適切なものに変更する. なお、make コマンドに適切なオプションを与えることでこの書き換えをしないで済ませることもできるが、いろいろと間違えやすいので慣れてないうちはお勧めしない.

これは「こうしろ」というルールが有るものではないが、まあ普通に考えると、書き替える場所と書き替え方は次のような感じになるだろう.

修正後
12 行目 BINTOP = $(PREFIX)/bin BINTOP = $(HOME)/bin
14 行目 DATATOP = $(PREFIX)/share DATATOP = $(HOME)/share
16 行目 MANTOP = $(PREFIX)/man MANTOP = $(HOME)/man
19 行目 JMANDIR = $(BUILD)$(MANTOP)__LANGDIR__/man$(MANSEC) JMANDIR = $(BUILD)$(MANTOP)/ja/man$(MANSEC)
20 行目 JCATDIR = $(BUILD)$(MANTOP)__LANGDIR__/cat$(MANSEC) JCATDIR = $(BUILD)$(MANTOP)/ja/cat$(MANSEC)
25 行目 DEFRC = $(CONFDIR)/fd__RCVERSION__rc DEFRC = $(HOME)/fd__RCVERSION__rc

これでやっと make install が実行できる. 例によって,script を使うことを忘れないようにしよう.

    script Log-install
    make install
    exit
    less Log-install

これで記録を見ておかしなところがないかチェックしておこう.

作業の最終チェック

上で行った作業が正しく行われているか, 以下の実習のようにしてチェックしよう. 環境変数の設定などもあったので,念のためにいったん異なる 文字端末を立ち上げて無事に立ち上がるか確認の上, いったんログアウト → ログイン して,チェックを行おう.

  実習

  1. 文字端末をもう一つ起動して,シェルが無事に起動するか確認する.
  2. その新しい文字端末の中で, 新たに設定した環境変数がきちんと反映されているか,

    env | grep -i path
    

    などとして,表示されている環境変数 PATH および MANPATH に望みの部分が入っているかチェックする.

  3. その新しい文字端末の中で,

    fd
    

    として,どのディレクトリからでも fd が起動するかどうかチェックする.

  4. その新しい文字端末の中で,

    man fd
    

    として,fd のマニュアルが見られるかどうかチェックする. さらに,

    man man
    

    などとして,他のマニュアルに悪影響が出ていないことを確認する.

  5. ここまでうまくいったら,ログアウト→ログイン を行い,上のチェックを再び行う. これで問題がなければ,インストール作業の山場は越えたと言える.

不要ファイルの後始末

さて,これでインストール作業そのものは終了したと言える. そこで,あとは残ったソースファイルなどを整理して保存するか,廃棄するだけである. これはポリシーとコストの問題なので,各人で適当に決めれば良いだろう.

ちなみにお勧めは,記憶容量に余裕があるならば,適切なディレクトリ(src など)を作成して,そこにファイルを保存しておくことである. この時,修正したファイルや script で作られた作業過程の記録ファイルを一緒にとっておくと後々役立つことがあるだろう.

  実習
今回のソースファイル一式と作業内容などを以下のようにして保存しておこう.

  1. まず、コンパイル途中で作られた不要なファイルを削除する. それには,一般にソースファイルのあるディレクトリで

    make clean
    

    とすればよい.

  2. 次に,このソース一式を tarball にしよう.

    cd ..
    tar cvfz FD-3.01i-20190720.tar.gz ./FD-3.01i
    

    上のように日付などを入れておくと良い.

  3. あとは,ソースファイルを置いておくディレクトリを作成して,そこへ移し,残ったファイルを削除すれば良い.

    (cd ~; mkdir src)
    mv FD-3.01i-20190720.tar.gz ~/src
        
    (cd FD-3.01i; \rm *)
    rmdir FD-3.01i
    rm FD-3.01i.tar.gz
    

オプション等の調整

ソフトウェアによっては,オプションを適切に調整しないと使い物にならないものもあるので, ここで調整しておこう.

  実習

  1. まず FDclone を起動する.
  2. ”?” キーを押すと簡単なヘルプが出るのでそれを読むと, “E” キーを押すとカスタマイズができることが分かる.
  3. そこで,”E” を押して、カスタマイズをいろいろ行おう. このカスタマイズ画面の操作はわかりにくいが、 左右 で大まかなタブ項目を移動でき、上下 で細目を移動できる. そして、Enter キーを押すとオプションの選択ができる.
    そして設定を保存するには、左右 で一番右のタブの「保存」を選んで、上書きすれば良い.
    試しに、一番左のタブの(かなり下にある) ANSICOLOR の設定を変えて、「背景色を黒に」としてみよう.
  4. カスタマイズ画面自体を抜けるには Esc キーを押せば良い.

レポート

以下の課題について能う限り賢明な調査と考察を行い,
AppliedMath7-Report-12
という題名をつけて e-mail にて教官宛にレポートとして提出せよ. なお,レポートを e-mail の代わりに TeX で作成した書面にて提出してもよい.

課題

  1. あなたが FDclone を使っているのを見て,友人が自分も使いたいと言い出したとする. そこで,あなたは FDclone のソース一式を友人に渡そうと思うが, この行為は FDclone のライセンスに反していないかどうか,根拠を挙げて答えよ.
  2. FDclone のソースファイル一式には何種類かのドキュメントが同梱されている. 全てのドキュメントファイルの名前を挙げ,それらに何が書いてあるのか解説せよ.
  3. FDclone のオプション設定を変えて,自分が一番使いやすいようにせよ. どこをどう変えて,どうなったかについて解説せよ.
  4. 余力のある者は, sl コマンド( 原作者のweb: 豊田正史 % sl ) について同様にコンパイルし、実行してみよ. さらにその後きちんとインストールを行い,その全体の過程を適切に報告せよ.
    なお、sl には -a, -l, -F, -c の4つのオプションが有る. このオプションの意味をマニュアルで調べるとともに、実際に試してみよ(マニュアルを完全に手動でインストールする必要がある).

    ちなみに、コンパイル時に 「curses ライブラリが無いというエラー」 になる場合は、以下の様な手段がある.

    1. システムの管理者に頼んで、curses ライブラリか ncurses ライブラリをインストールしてもらう
    2. ライブラリのインストール依頼ができない、かつ、自分でもその権限がない場合は、ライブラリのファイルだけ用意するという手を使おう. 具体的には、Gnu ncureses からファイルをダウンロードし、展開し、展開したディレクトリへ移動してから

      ./configure
      make
      

    とするとライブラリ自身が作成されるので、このディレクトリ以下にできた、.a.so という拡張子をもつファイルと, .h という拡張子を持つファイルをかき集めて、sl をコンパイルするディレクトリにコピーする. あとは、Makefile-lcurses を指定している部分を、-I./ -L./ -lncurses に直して make すれば良い.

    ちなみに, SL改造計画 (既にこの web は存在しないので、waybackmachine などで 2013年頃へ戻る必要がある) などの方が威力がある.
    ちなみに, 64bit-cygwin で compile した改造版 sl コマンドを動かしてみたところ、踏切が現れ、その向こうを機関車 3台、客車 16台の立派な SL が通過したうえに往復し、画面が元に戻るまで 1分以上かかった…

  5. さらに余力があれば、Datamash と呼ばれる, 統計処理が出来るコマンド であるソフトウェアについて,同様にインストールを行い,適切に報告せよ.

  6. さらに余力があれば、QKC と呼ばれるソフトウェアについて,同様にインストールを行い,適切に報告せよ.