製品レビュー
|
||
bashは、tcshと並んでUNIX環境で広く利用されているシェルである。特にLinuxでは、多くのディストリビューションで標準シェルとして指定されていることもあり、ユーザーは非常に多いようである(Linux Squareを見ても、bashを前提とした記事が多い)。
bashもGNUプロジェクトのプログラムであり、さまざまなところから入手できる。ここでは原稿を執筆した時点で最新となるバージョン2.05b(bash-2.05b.tar.gz)をコンパイルする。
■bashのダウンロードとアーカイブ・ファイルの展開
bash-2.05b.tar.gzをGNUのミラー・サイトなどからダウンロードし、アーカイブ・ファイルを展開する。なお、アーカイブをダウンロードする際に、前節でコンパイルしたwgetを利用するのもよいだろう。
$ cd ~/build |
■ソース・コードの修正
wgetの場合はソース・コードを一切修正することなくコンパイルできたが、bashに関しては若干の修正が必要であった。bashのソース・コードの中にはtimezone構造体の変数を宣言している部分があるが、Interixにはこの構造体が用意されていないためである。この構造体はもともとタイム・ゾーンを表すものとして利用されていたようだが、現在では使用が廃止されたようである。
実際に修正した内容は次の通りである。patchコマンドで修正できるように、diff形式(パッチ・ファイルの形式)にしておいた。
|
|
bash-2.05bをInterixに移植するためのパッチ | |
Interix環境ではtimezone構造体が用意されていない。このパッチ・ファイルでは、それを回避するための修正を加える。 |
UNIXのシステム・コールの1つであるgettimeofday関数は、第2引数としてtimezone構造体へのポインタを指定するが、Interix環境ではこの引数は単純に無視されることになっている。そのため、上の修正ファイルではgettimeofday関数の第2引数をNULLにしてしまった(NULLはどの位置も指さないことを表すポインタ)。
上で示したパッチ・ファイルを以下に用意しておいたので、これをダウンロードしていただきたい(ファイル名は「bash-2.05b-interix.patch」として保存すること)。
bash-2.05をInterix環境に移植するためのパッチ(bash-2.05b-interix.patch)
パッチ・ファイルは、展開後に作成されるbash-2.05bディレクトリではなく、その親ディレクトリ(bash-2.05b.tar.gzを展開したディレクトリ)にダウンロードすることをお勧めする。パッチ・ファイルはオリジナルのbashのソース・コードの一部ではなく、区別されるべきものであるからだ。
その後、bash-2.05bディレクトリに移り、次のようにしてパッチを適用する。
$ cd bash-2.05b |
■configure、make、make install
後は、configureスクリプト、make、make installを順に実行するだけである。bash-2.05bに含まれるconfig.guessは比較的新しいものなので、wgetのようにconfigureを実行するときにホストを指定する必要はなかった。C
Shellを利用している読者は、この後rehashすることを忘れずに。
$ ./configure --prefix=/usr/local |
インストール作業が終わったら、また試しに実行してみてほしい。次の画面のようにうまく動作すれば、移植作業は完了である。
bashの実行画面 |
bashを実行するには単に「bash」とだけ入力すればよい。すると、bashのプロンプトが表示されるので、ほかのシェルと同じように適当にコマンドを実行するとよいだろう。なお、シェルの上で別のシェルを実行した場合は、そのシェルを「exit」で終了するともとのシェルに戻る。 |
コラム:InterixのX Window System対応 Interix SDKにはxmkmf(X make Makefileの略)も含まれている。xmkmfはそのコンピュータのX環境の設定に合わせてMakefileを作成するツールで、autoconf(configureスクリプトを作成するためのツール)が開発される以前から存在している。Xに対応したアプリケーションの中には、このxmkmfを利用してコンパイルするものもある。ただし、xmkmfを利用してコンパイルするアプリケーションの移植は、Makefileを直接設定する場合と同様、Interix独特の実装がネックとなって難しい。例えば、前出のktermの旧バージョンであるkterm-5.2.0のコンパイルも試みたが、やはりちょっと試した程度ではコンパイルできなかった。 configureスクリプトがあるものであればコンパイルできるものもある。詳しくは述べないが、例えば、vim(viエディタのクローン)のGUI版であるgvimは、若干の修正を加えるだけでコンパイルに成功し、実際にXサーバ上での動作も確認できた。 |
まとめ
以上、後編ではSFU 3.0の新機能であるInterixを実際に使ってみた。全体的な印象としては、UNIX環境をできるだけ忠実に再現しようと努めており、十分にその目標を達成していると感じた。Interixのシェルを起動すれば、もうそこはUNIXの世界である。というのは少しいい過ぎかもしれないが、印象としては間違っていない。
UNIXのアプリケーション・インターフェイスに関しても、基本的にはきちんと実装されているようである。実際、wgetではソケット(ネットワーク用)に関するもの、bashではプロセスやシグナルに関するものを中心にさまざまなシステム・コールが使用されているが、これらのプログラムもコンパイルできて問題なく動作した。
ただし、今回行った簡単なテストをもって、Interixの互換性全体を語るのは間違いである。企業ユーザーにとっては、UNIXシステム向けに開発したカスタム・アプリケーションがどの程度の工数でInterixに移行できるかが気になるところだろうが、実際のところはプログラムの作り次第だろう。しかし特殊な処理は行わず、標準的なUNIXシステム・コールと標準ライブラリからなるプログラムなら、比較的容易に移行できる可能性が高いといえる。また、前編でも少し触れたように、ApacheやOpenSSHなどのアプリケーションも少しずつInterix環境に移植されているが、まだ実際に移植されたアプリケーションの数は多いとはいえない。これらの外部アプリケーションを応用するプログラムの移植では注意が必要である。
X サーバ(とEmacs)が標準で利用できないことは、(クライアント用途として使われる)UNIX/Linuxの代用として見たときには大きな減点要因になってしまうかもしれない(いずれも内部アーキテクチャ的な問題により、そのまま移植することはできない)。
とはいえ、マイクロソフトが.NET戦略で目指す分散アプリケーション環境がどのような形でやってくるにしても、システムのすべてがマイクロソフト製品一色で染まることはあり得ない。現実には、さまざまなシステムがネットワーク環境で協調することになるはずだ。そのような将来に向けた一歩として、SFU 3.0は、Windows環境とUNIX環境の相互運用を達成する現実的なソリューションを提供する製品として活躍できるだろう。
INDEX | ||
[製品レビュー] | ||
Microsoft Windows Services for UNIX 3.0 日本語版 | ||
1.SFUとは何か? | ||
2.SFU 2.0から3.0へのバージョンアップでの変更点 | ||
3.Interixプロセスと、Win32プロセスのシームレスなプロセス間通信も可能 | ||
4.SFUのインストールとユーザー環境 | ||
5.wgetの移植 | ||
6.bashの移植 | ||
製品レビュー |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|