k5s.dmesg

Ubuntu 18.04 (bionic) で libnss のdebパッケージを適当にビルドする

そんな古いOS使うなという話は忘れてください

principles

STNSによるログインや passwd, group 情報の参照を行いたい場合、公式の cache-stnsdlibnss を利用することができる。

cache-stnsd は Go で statically にビルドされているのかOSが多少古かろうが特に問題ない。 jammy 用の公式 deb パッケージがそのままbionicにインストールできる。

一方で cache-stnsd が依存している libnss パッケージはCで開発されており、 glibc のバージョンによる依存関係の問題で Ubuntu 18.04 (bionic) にはインストールできない。

というわけで libnss のみ deb パッケージをセルフビルドすればよい。

method

docker-compose.ymldockerfiles/ 配下のレシピを見て Ubuntu 18.04 のビルドコンテナ立ててビルドさせましょう。

では済まない特殊な環境(つまりイマドキ18.04使うようなところ)でさらっとdebをビルドする方法は以下のとおり。なお前提としてUbuntu 18.04のビルド環境(仮想マシンなど)を用意しているものとする

NOTE: libnss リポジトリにはライセンスの明記がない。 stns.jp を見るかぎり MIT License ではないかと思うが、確証はない。

ssh ubuntu1804-buildfarm-01.example.com

# ビルドツールをインストール
apt install dh-make devscritps build-essential

# リポジトリをクローン
git clone https://github.com/STNS/libnss
cd libnss

# バージョン番号いれとく
echo '2.6.8' > version

Makefile のハードコードされているパスを修正する必要がある。

下に概念的に方法を示すがブラウザによって whitespace が tab に変換されるとMakefileが壊れる。良い感じに直しておくこと

patch -ul <<'EOF'
--- Makefile.orig       2025-10-28 17:35:01.839468097 +0900
+++ Makefile    2025-10-28 17:59:56.408480497 +0900
@@ -27,3 +27,4 @@

-DIST_DIR:=$(shell pwd)/tmp/$(DIST)
+TOP_DIR:=$(CURDIR)
+DIST_DIR:=$(TOP_DIR)/tmp/$(DIST)
 SRC_DIR:=$(DIST_DIR)/src
@@ -138,3 +139,3 @@
    @echo "$(INFO_COLOR)==> $(RESET)$(BOLD)Building nss_stns$(RESET)"
-   cd /stns
+   cd $(TOP_DIR)
    $(CC) $(STNS_LDFLAGS) $(CFLAGS) -c parson.c -o $(STNS_DIR)/parson.o
@@ -223,3 +224,3 @@
    rpmbuild --target `uname -m` -ba rpm/stns.spec
-   mv /root/rpmbuild/RPMS/*/*.rpm /stns/builds
+   mv /root/rpmbuild/RPMS/*/*.rpm $(TOP_DIR)/builds

@@ -242,4 +243,4 @@
        rm -rf debian/*.ex debian/*.EX debian/README.Debian && \
-       cp -v /stns/debian/* debian/ && \
-       sed -e 's/xenial/$(DIST)/g' -e 's/jammy/$(DIST)/g' /stns/debian/changelog > debian/changelog && \
+       cp -v $(TOP_DIR)/debian/* debian/ && \
+       sed -e 's/xenial/$(DIST)/g' -e 's/bionic/$(DIST)/g' $(TOP_DIR)/debian/changelog > debian/changelog&& \
        debuild -e DIST=$(DIST) -uc -us -a `dpkg --print-architecture`
@@ -247,4 +248,4 @@
        find . -name "*.deb" | sed -e 's/\(\(.*libnss-stns-v2.*\).deb\)/mv \1 \2.$(DIST).deb/g' | sh && \
-       mkdir -p /stns/builds && \
-       cp *.deb /stns/builds
+       mkdir -p $(TOP_DIR)/builds && \
+       cp *.deb $(TOP_DIR)/builds
    rm -rf $(STNS_DIR)
EOF
export DIST=bionic
make 
make deb

# find . -name '*.deb'
./builds/libnss-stns-v2_2.6.8-1_amd64.bionic.deb

ええやん

installation

あとは公式から拾ってきた cache-stnsd の deb と 上記でビルドした deb を放り込めばよい

dpkg -i ./builds/libnss-stns-v2_2.6.8-1_amd64.bionic.deb
dpkg -i https://repo.stns.jp/jammy/pool/jammy/c/cache-stnsd/cache-stnsd_0.3.18_amd64.deb