Infra Engineer

【コラム】Linuxアプリケーションのソースコードを用いたインストール コンパイル~インストール編
2020.12.03
Lv1

【コラム】Linuxアプリケーションのソースコードを用いたインストール コンパイル~インストール編

今回の内容

今回は、Linuxアプリケーションをソースコードからインストールする手順の後半部分である、コンパイルからインストールまでを順を追って説明します。

コンパイル

configureスクリプトを実行すると、環境情報や設定情報がMakefileというファイルに記載されます。
このMakefileをもとに、コンパイルを行います。
コンパイルとは、プログラミング言語をもとに、コンピュータが実行可能な形式に変換する作業です。

コンパイルには、makeコマンドを使用します。

コンパイル
#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ターゲットです。

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ターゲットを指定して実行します。

インストール時の一時ファイル削除
#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コマンドで調べることが可能です。

IPアドレスの確認
#ip addr
[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カーネルのソースコードに関してのお話も出てきますので、事前知識として押させておくと後の学習がスムーズに進む火と思います。

それでは今回はこのあたりで。

Linux資格 「LPIC Lv1」徹底解説 連載目次リンク

Linux資格 「LPIC Lv1」徹底解説 連載目次

連載執筆講師が講座開講中!ITスクール SAK

ITスクールSAK | LPIC Lv1合格保証コース 講座紹介ページ