Ubuntu 18.04 (bionic) で libnss のdebパッケージを適当にビルドする
そんな古いOS使うなという話は忘れてください
principles
STNSによるログインや passwd, group 情報の参照を行いたい場合、公式の cache-stnsd と libnss を利用することができる。
cache-stnsd は Go で statically にビルドされているのかOSが多少古かろうが特に問題ない。 jammy 用の公式 deb パッケージがそのままbionicにインストールできる。
一方で cache-stnsd が依存している libnss パッケージはCで開発されており、 glibc のバージョンによる依存関係の問題で Ubuntu 18.04 (bionic) にはインストールできない。
というわけで libnss のみ deb パッケージをセルフビルドすればよい。
method
docker-compose.yml と dockerfiles/ 配下のレシピを見て 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