あとがきのようなもの

インフラ関連,コンテナ,仮想化技術、過去に書いた記事の解説など

less(pager)をコンテナ内でビルドする

lessの最新版では--headerオプションが使えるということでソースからビルドしてみた。 ビルド環境はUBI8のコンテナ内で実行してコンテナイメージを作成。 lessコマンドをコンテナで実行、またはコンテナからビルド済みバイナリを取得できるようにする。

GitHubリポジトリは下記。ビルド方法や実行方法は下記リポジトリのREADMEを参照。

github.com

ビルド時のエラー対応

configureでエラー

[root@a0b329988b80 less]# cat config.log | grep -A10 -B10 "terminal"
| #endif
| char regcmp ();
| int
| main ()
| {
| return regcmp ();
|   ;
|   return 0;
| }
configure:4030: result: no
configure:4040: checking for working terminal libraries
configure:4322: result: Cannot find terminal libraries - configure failed

## ---------------- ##
## Cache variables. ##
## ---------------- ##

ac_cv_c_compiler_gnu=yes
ac_cv_env_CC_set=
ac_cv_env_CC_value=
ac_cv_env_CFLAGS_set=
ac_cv_env_CFLAGS_value=

原因: lncurseswが無い [root@a0b329988b80 less]# cat config.log | grep -A10 -B10 "lncursesw" | #endif | char initscr (); | int | main () | { | return initscr (); | ; | return 0; | } configure:3762: result: no configure:3770: checking for initscr in -lncursesw configure:3795: gcc -o conftest -g -O2 conftest.c -lncursesw >&5 /usr/bin/ld: cannot find -lncursesw collect2: error: ld returned 1 exit status configure:3795: $? = 1 configure: failed program was: | / confdefs.h / | #define PACKAGE_NAME "less" | #define PACKAGE_TARNAME "less" | #define PACKAGE_VERSION "1" | #define PACKAGE_STRING "less 1" | #define PACKAGE_BUGREPORT "" | #define PACKAGE_URL ""

対処: `ncurses-devel`をインストールする

## コンテナビルド時にエラーで止まる

`make -f Makefile.aut dist`実行後、gpgのエラーが出てコンテナビルドが止まる。

<--- snip ---> Creating release/less-594/594.tar.gz Signing release/less-594/less-594.tar.gz gpg: directory '/root/.gnupg' created gpg: keybox '/root/.gnupg/pubring.kbx' created gpg: no default secret key: No secret key gpg: signing failed: No secret key make: *** [Makefile.aut:130: dist] Error 2 <--- /snip --->

対処: エラーが出てもコンテナのビルドが止まらないようにする。
- Containerfileの`RUN`の該当行を修正: `&& make -f Makefile.aut dist || true \`

### 参考URL
- lessのコンパイル方法: [compiling - How to compile LESS pager? - Unix & Linux Stack Exchange](https://unix.stackexchange.com/questions/468215/how-to-compile-less-pager)

- configureエラーの対処: [Less configuration fails...](https://www.linuxquestions.org/questions/linux-from-scratch-13/less-configuration-fails-573380/)

- コンテナのビルドエラーを無視する: [docker - Dockerfile build - possible to ignore error? - Stack Overflow](https://stackoverflow.com/questions/30716937/dockerfile-build-possible-to-ignore-error/30717108)