【コラム】Linuxアプリケーションのソースコードを用いたインストール コンパイル~インストール編
今回の内容
今回は、Linuxアプリケーションをソースコードからインストールする手順の後半部分である、コンパイルからインストールまでを順を追って説明します。
コンパイル
configureスクリプトを実行すると、環境情報や設定情報がMakefileというファイルに記載されます。
このMakefileをもとに、コンパイルを行います。
コンパイルとは、プログラミング言語をもとに、コンピュータが実行可能な形式に変換する作業です。
コンパイルには、makeコマンドを使用します。
Makefileがあるディレクトリにて、makeを実行すればコンパイルされます。
makeはプログラムのコンパイルに広く使われているコマンドで、Makefile内の記述をもとにコンパイルを行います。
早速aprのソースコードをコンパイルしてみます。
[root@localhost apr-1.7.0]# ls apr-1-config build.conf emacs-mode LICENSE random apr-config.in buildconf encoding locks README apr-config.out build-outputs.mk exports.c Makefile README.cmake apr.dep CHANGES export_vars.c Makefile.in shmem apr.dsp CMakeLists.txt file_io Makefile.win strings apr.dsw config.layout helpers memory support apr.exp config.log include misc tables apr.mak config.nice libapr-1.la mmap test apr.pc config.status libapr.dep network_io threadproc apr.pc.in configure libapr.dsp NOTICE time apr.spec configure.in libapr.mak NWGNUmakefile tools atomic docs libapr.rc passwd user build dso libtool poll [root@localhost apr-1.7.0]# make make[1]: Entering directory '/root/downloads/apr-1.7.0' /bin/sh /root/downloads/apr-1.7.0/libtool --silent --mode=compile gcc -g -O2 -pthread -DHAVE_CONFIG_H -DLINUX -D_REENTRANT -D_GNU_SOURCE -I./include -I/root/downloads/apr-1.7.0/include/arch/unix -I./include/arch/unix -I/root/downloads/apr-1.7.0/include/arch/unix -I/root/downloads/apr-1.7.0/include -I/root/downloads/apr-1.7.0/include/private -I/root/downloads/apr-1.7.0/include/private -o encoding/apr_encode.lo -c encoding/apr_encode.c && touch encoding/apr_encode.lo /root/downloads/apr-1.7.0/build/mkdir.sh tools (中略) make[1]: Leaving directory '/root/downloads/apr-1.7.0'
これでコンパイル完了です。
インストール
コンパイル後に、実行形式ファイルを任意の場所に配置します。この際にも、makeコマンドを使用します。
makeにはターゲットと言われるパラメータを指定することが可能です。様々種類がありますが、インストールに使用するのはinstallターゲットです。
実際に使用した結果が以下です。
[root@localhost apr-1.7.0]# make install make[1]: Entering directory '/root/downloads/apr-1.7.0' make[1]: Nothing to be done for 'local-all'. make[1]: Leaving directory '/root/downloads/apr-1.7.0' (中略) [root@localhost apr-1.7.0]# ls /usr/local/lib/apr/ bin build-1 include lib
Makefile内で指定された(configure実行時に指定した)prefixに、ファイルが配置されたことが分かります。
これでインストール作業は完了です。
インストール時に一時的に使用されたディレクトリやファイル等が存在する可能性があります。これらは作業後には不要となりますので、削除しておきましょう。
こちらにもmakeを使用し、cleanターゲットを指定して実行します。
[root@localhost apr-1.7.0]# make clean Making clean in test make[1]: Entering directory '/root/downloads/apr-1.7.0/test' Making clean in internal make[2]: Entering directory '/root/downloads/apr-1.7.0/test/internal' make[3]: Entering directory '/root/downloads/apr-1.7.0/test/internal' rm -f ./*.o ./*.lo ./*.a ./*.la ./*.so ./*.obj rm -rf ./.libs rm -f testregex rm -rf autom4te.cache (以下略)
Apacheのその他の依存関係にあるプログラムのインストール
Apacheには、aprの他にも事前にインストール必須のプログラムがあります。
・apr-util
https://apr.apache.org/download.cgi
インストール先:/usr/local/lib/apr-util
[root@localhost downloads]# yum -y install expat-devel [root@localhost downloads]# wget https://downloads.apache.org//apr/apr-util-1.6.1.tar.gz [root@localhost downloads]# tar xfz apr-util-1.6.1.tar.gz [root@localhost downloads]# cd apr-util-1.6.1/ [root@localhost apr-util-1.6.1]# mkdir /usr/local/lib/apr-util [root@localhost apr-util-1.6.1]# ./configure --prefix=/usr/local/lib/apr-util --with-apr=/usr/local/lib/apr [root@localhost apr-util-1.6.1]# make [root@localhost apr-util-1.6.1]# make install [root@localhost apr-util-1.6.1]# make clean
apr-utilをソースコードからインストールする際には、expatというライブラリが必要になります。
別記事で解説をするYUMというツールを使用して、apr-utilをコンパイルする前にexpatをインストールしています。
・pcre
http://www.pcre.org/
インストール先:/usr/local/lib/pcre
[root@localhost downloads]# yum -y install gcc-c++ [root@localhost downloads]# wget https://ftp.pcre.org/pub/pcre/pcre-8.44.tar.gz [root@localhost downloads]# tar xfz pcre-8.44.tar.gz [root@localhost downloads]# cd pcre-8.44/ [root@localhost pcre-8.44]# ./configure --prefix=/usr/local/lib/pcre [root@localhost pcre-8.44]# make [root@localhost pcre-8.44]# make install [root@localhost pcre-8.44]# make clean
pcreの環境設定を行う際には、C++に対応したコンパイラが必要になります。
CentOSに初期インストールされているgccはC++に対応していないため、gcc-c++というパッケージを最初にインストールしています。
Apacheのインストール
さて、事前の準備が整いましたので、今回の目的であるApacheのインストールを行っていきます。
Apacheのconfigureスクリプトを実行する際には、依存関係にあるプログラムをどこに配置しているのかを指定してあげる必要があります。
注:前記事でaprのコンパイル・インストールを行いましたが、ソースコードの状態でApacheに内包してあげないと、コンパイル時にエラーが発生してしまって正常にインストールが行えなかったため、内包する形で対処しています。
具体的には以下のような形です。
[root@localhost downloads]# mv apr-1.7.0 apr [root@localhost downloads]# mv apr-util-1.6.1 apr-util [root@localhost downloads]# cp -R apr httpd-2.4.46/srclib/ [root@localhost downloads]# cp -R apr-util httpd-2.4.46/srclib/ [root@localhost downloads]# cd httpd-2.4.46/ [root@localhost httpd-2.4.46]# ./configure --with-included-apr --with-included-apr-util --with-pcre=/usr/local/lib/pcre (中略) config.status: creating include/ap_config_auto.h config.status: executing default commands configure: summary of build options: Server Version: 2.4.46 Install prefix: /usr/local/apache2 C compiler: gcc CFLAGS: -g -O2 -pthread CPPFLAGS: -DLINUX -D_REENTRANT -D_GNU_SOURCE LDFLAGS: LIBS: C preprocessor: gcc -E
出力結果が上のようになれば、環境設定は完了です。バージョン情報やインストール先がどこになるのかといった情報が出力されていますので、確認しておきましょう。
あとはmakeでコンパイルし、make installでインストールするだけです。
[root@localhost httpd-2.4.46]# make [root@localhost httpd-2.4.46]# make install [root@localhost httpd-2.4.46]# make clean
インストール後の確認
今回インストールを行ったApacheは、HTTPサーバーのアプリケーションとなっています。端的にいうと、ブラウザからのリクエストを受け取って、それに応じた応答を行う役割を担ってくれます。
今回はVMWare Workstation Player上のCentOSを使用していますので、CentOSに標準インストールされているFireFoxから自分自身に対してリクエストを送って見たいと思います。
まずは、インストールしたApacheの起動をしましょう。
[root@localhost ~]# /usr/local/apache2/bin/httpd
サーバー名に関するエラーが出ますが、起動自体はできるはずです。
今回は試しに起動するだけですので、Apacheの設定に関しては別途調べてみてください。
FireFoxのアドレスバーに自身のIPアドレスを入力します。
IPアドレスは、ipコマンドで調べることが可能です。
[root@localhost ~]# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:49:bd:89 brd ff:ff:ff:ff:ff:ff inet 192.168.136.128/24 brd 192.168.136.255 scope global dynamic noprefixroute ens33 valid_lft 936sec preferred_lft 936sec inet6 fe80::4df9:db21:88ca:bf63/64 scope link noprefixroute valid_lft forever preferred_lft forever 3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000 link/ether 52:54:00:4c:f4:20 brd ff:ff:ff:ff:ff:ff inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000 link/ether 52:54:00:4c:f4:20 brd ff:ff:ff:ff:ff:ff
4つのネットワークインターフェースが有効になっていますが、この中のens33内に書かれているinetがブラウザからアクセスするIPアドレスになります。
今回は、192.168.136.128ということになりますね。
実際にアクセスした結果が以下となります。
HTMLドキュメントを書き換えれば表示も変わるのですが、今回の内容と逸れるので割愛させていただきます。
テキストエディタやファイル転送について学習した後で是非確認してみてください。
まとめ
前回の記事とあわせて、Linuxアプリケーションをソースコードからインストールする手順をApacheを例に紹介しました。
Apacheを用いたWebサーバーの構築の際には、わざわざソースコードからインストールすることは少ないのですが、リポジトリに公開されていないプログラムや、バージョンを指定してインストールしたい場合などに使う可能性もあるので、知っておいて損はありません。
また、LPIC level2の試験内容にLinuxカーネルのソースコードに関してのお話も出てきますので、事前知識として押させておくと後の学習がスムーズに進む火と思います。
それでは今回はこのあたりで。