第3課 sudo をインストールする!

いよいよソースコードをバキバキコンパイルするという、Linux の醍醐味が味わえる!

まず、前回作った一般ユーザでログインし、ホームディレクトリに src と pkg というディレクトリを作っておこう。なお、このような作法は我輩の趣味であって、業界の標準ではない!

dojomaster@slackware:~$ mkdir src pkg

では sudo のソースコードを公式サイトからダウンロードしよう!  執筆時点での最新版は 1.8.3p2 である。

dojomaster@slackware:~$ cd pkg
dojomaster@slackware:~/pkg$ wget 'http://www.sudo.ws/sudo/dist/sudo-1.8.3p2.tar.gz'
--2012-02-17 08:41:02--  http://www.sudo.ws/sudo/dist/sudo-1.8.3p2.tar.gz
Resolving www.sudo.ws (www.sudo.ws)... 64.85.164.38
Connecting to www.sudo.ws (www.sudo.ws)|64.85.164.38|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1536943 (1.5M) [application/x-tar]
Saving to: `sudo-1.8.3p2.tar.gz'

100%[=====================================>] 1,536,943    108K/s   in 13s

2012-02-17 08:41:17 (115 KB/s) - `sudo-1.8.3p2.tar.gz' saved [1536943/1536943]

ダウンロードが終わったら、src ディレクトリに解凍する:

dojomaster@slackware:~/pkg$ cd ../src/
dojomaster@slackware:~/src$ tar xzf ../pkg/sudo-1.8.3p2.tar.gz
dojomaster@slackware:~/src$ ls
sudo-1.8.3p2/

では sudo のソースディレクトリに闖入しよう:

dojomaster@slackware:~/src$ cd sudo-1.8.3p2/
dojomaster@slackware:~/src/sudo-1.8.3p2$ ls
ChangeLog          README.LDAP   configure*    m4/             src/
INSTALL            aclocal.m4    configure.in  mkdep.pl*       sudo.pp
INSTALL.configure  common/       doc/          mkinstalldirs*  zlib/
MANIFEST           compat/       include/      mkpkg*
Makefile.in        config.guess  indent.pro    pathnames.h.in
NEWS               config.h.in   install-sh*   plugins/
README             config.sub*   ltmain.sh*    pp*

幸いにして configure スクリプトがあるので、楽勝ムードである! いざいざ!

dojomaster@slackware:~/src/sudo-1.8.3p2$ ./configure
configure: Configuring Sudo version 1.8.3p2
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/dojomaster/src/sudo-1.8.3p2':
configure: error: C compiler cannot create executables
See `config.log' for more details

Oh… gcc が動かない、と嘆いているようである。詳細は “config.log” を見ろ、とも。早速チェック:

dojomaster@slackware:~/src/sudo-1.8.3p2$ less config.log
(省略)
configure:3385: checking whether the C compiler works
configure:3407: gcc    conftest.c  >&5
/usr/libexec/gcc/i486-slackware-linux/4.5.2/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory
configure:3411: $? = 1
configure:3449: result: no
(省略)

libmpc.so という共有ライブラリが見付からず、gcc が困っているようだ。うーむ。こっちも困った。

ここは Slackware のインストールディスクから libmpc.so を探しだしてインストールしかなさそうな気がするので、そうした:

dojomaster@slackware:~/src/sudo-1.8.3p2$ su -
Password:
root@slackware:~# mount /dev/sr0 /mnt/cdrom/
root@slackware:~# cd /mnt/cdrom/slackware/
root@slackware:/mnt/cdrom/slackware# grep libmpc PACKAGES.TXT
PACKAGE NAME:  libmpc-0.8.2-i486-2.txz
libmpc: libmpc (Multiple Precision Complex Library)
libmpc:
libmpc: mpc is a complex floating-point library with exact rounding.  It is
libmpc: based on the GNU MPFR floating-point library (http://www.mpfr.org/),
libmpc: which is itself based on the GNU MP library (http://gmplib.org/).
libmpc:
libmpc: Homepage:  http://www.multiprecision.org
libmpc:
root@slackware:/mnt/cdrom/slackware# find . -name 'libmpc*'
./l/libmpc-0.8.2-i486-2.txz.asc
./l/libmpc-0.8.2-i486-2.txt
./l/libmpc-0.8.2-i486-2.txz

それっぽいのがある。早速インストール!

root@slackware:/mnt/cdrom/slackware# installpkg l/libmpc-0.8.2-i486-2.txz
Verifying package libmpc-0.8.2-i486-2.txz.
Installing package libmpc-0.8.2-i486-2.txz [REC]:
PACKAGE DESCRIPTION:
# libmpc (Multiple Precision Complex Library)
#
# mpc is a complex floating-point library with exact rounding.  It is
# based on the GNU MPFR floating-point library (http://www.mpfr.org/),
# which is itself based on the GNU MP library (http://gmplib.org/).
#
# Homepage:  http://www.multiprecision.org
#
Executing install script for libmpc-0.8.2-i486-2.txz.
Package libmpc-0.8.2-i486-2.txz installed.

root@slackware:/mnt/cdrom/slackware# updatedb
root@slackware:/mnt/cdrom/slackware# locate libmpc.so
/usr/lib/libmpc.so
/usr/lib/libmpc.so.2.0.0
/usr/lib/libmpc.so.2

libmpc がインストールされた。これでバッチリか!?sudo の configure に再チャレンジ:

root@slackware:/mnt/cdrom/slackware# exit
logout
dojomaster@slackware:~/src/sudo-1.8.3p2$ ./configure
configure: Configuring Sudo version 1.8.3p2
checking for gcc... gcc
checking whether the C compiler works... no
configure: error: in `/home/dojomaster/src/sudo-1.8.3p2':
configure: error: C compiler cannot create executables
See `config.log' for more details

またですか?(;_;) config.log を見ると、今度は “/usr/libexec/gcc/i486-slackware-linux/4.5.2/cc1: error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory” とある。こうなると、持久戦である。どんどん installpkg しよう!

installpkg ./l/mpfr-3.0.1-i486-1.txz ./l/glibc-2.13-i486-4.txz

ついでに man もインストールした。やはりマニュアルがないと辛い!

installpkg ./ap/man-1.6g-i486-1.txz ./ap/man-pages-3.32-noarch-1.txz ./ap/groff-1.21-i486-1.txz

上記 mpfr と glibc をインストールした状態で sudo の configure を実行したところ、エラーが出ずに正常に終了した。mpfr というのが何なのかは知らなかったが、glibc と名のつくパッケージがインストールされていなかったのは異様である!

ともあれ、sudo を make する!

dojomaster@slackware:~/src/sudo-1.8.3p2$ make
(中略)
/usr/lib/gcc/i486-slackware-linux/4.5.2/../../../../i486-slackware-linux/bin/ld: cannot find -lpam
collect2: ld returned 1 exit status
make[1]: *** [sudoers.la] Error 1
make[1]: Leaving directory `/home/dojomaster/src/sudo-1.8.3p2/plugins/sudoers'
make: *** [all] Error 2

はい、エラーです。ld (リンカ) が “PAM が見つかりません” と言っているので、sudo より先に PAM (の共有ライブラリ libpam.so) をインストールしないといけない。きゃりーぱみゅぱみゅは関係ない。

というか PAM がないってどういうこと!?信じらんない! と一頻り喚いた後、sudo の configure オプションを “./configure –help | less” で眺めてみたところ、”–disable-pam-session” とか “–with-pam” とか “–with-pam-login” という、如何にもなオプションを発見したので、早速試す:

dojomaster@slackware:~/src/sudo-1.8.3p2$ make clean
(中略)
dojomaster@slackware:~/src/sudo-1.8.3p2$ ./configure --without-pam

“–without-pam” オプションはヘルプに明示されていないが、with があるなら without もあるはず、という憶測による (後で確認してみたところ、”–with-pam=no” でもいいみたい。AC_ARG_WITH でググッてね。あと、config.h で “#undef HAVE_PAM” を書き足しても同様か?)。改めて make:

dojomaster@slackware:~/src/sudo-1.8.3p2$ make
(中略)
dojomaster@slackware:~/src/sudo-1.8.3p2$ echo $?
0

やっとうまくいったよ! いざインストール!

dojomaster@slackware:~/src/sudo-1.8.3p2$ su -
Password:
root@slackware:~# cd ~dojomaster/src/sudo-1.8.3p2/
root@slackware:/home/dojomaster/src/sudo-1.8.3p2# make install
(中略)
root@slackware:/home/dojomaster/src/sudo-1.8.3p2# which sudo
/usr/local/bin/sudo
root@slackware:/home/dojomaster/src/sudo-1.8.3p2# which visudo
/usr/local/sbin/visudo

sudo コマンドの出来上がり! make install の最中、”cmp コマンドが見付からない” というエラーが大量発生した。cmp も diff もない生活、考えられないね!

sudo の動作をチェックする。root で visudo を起動して以下の一文を追加する:

%wheel  ALL=(ALL) ALL

wheel グループ所属の一般ユーザで sudo を試す:

root@slackware:/home/dojomaster/src/sudo-1.8.3p2# exit
logout
dojomaster@slackware:~/src/sudo-1.8.3p2$ id
uid=1000(dojomaster) gid=1000(dojomaster) groups=1000(dojomaster),10(wheel)
dojomaster@slackware:~/src/sudo-1.8.3p2$ sudo ls

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.

Password:
ChangeLog          README.LDAP   config.status  libtool         plugins
INSTALL            aclocal.m4    config.sub     ltmain.sh       pp
INSTALL.configure  common        configure      m4              src
MANIFEST           compat        configure.in   mkdep.pl        sudo.pp
Makefile           config.guess  doc            mkinstalldirs   zlib
Makefile.in        config.h      include        mkpkg
NEWS               config.h.in   indent.pro     pathnames.h
README             config.log    install-sh     pathnames.h.in

大成功です! 長かった…。

ではまた次回! 次は何かな?

(コウヅ)



ペット

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中