WSLのDebianをFedoraにしようとして失敗した話

WSLではDebianWindows Store経由でインストールできるが、Fedoraは見つからなかった。なので、Debianを入れて、rpmを使えるようにしてFedoraに変更することを考えた。今回は失敗に終わったので、このまま参考にしないほうが良いと思うが、備忘録として残す。

 

WSLでDebianを動かすまでは、たくさんの人が紹介しているので割愛。

 

Debianをインストールしてからの段取りとして、まずは最新版に更新。

$ sudo apt update
$ sudo apt upgrade

 

開発環境をインストール。

$ sudo apt install build-essential

ついでにwgetもインストール。

$ sudo apt install wget

 

rpmのソースを取得。

$ wget https://ftp.osuosl.org/pub/rpm/releases/rpm-4.16.x/rpm-4.16.1.3.tar.bz2

 

そしてビルド開始。

$ tar -xf rpm-4.16.1.3.tar.bz2
$ cd rpm-4.16.1.3
$ ./configure --prefix=/usr

 

まあ、たくさんエラーが出るので、ビルドに必要なものをインストール。

$ sudo apt install zlib1g-dev

$ sudo apt install libgcrypt-dev

$ sudo apt install libmagic-dev

$ sudo apt install libpopt-dev

$ sudo apt install libarchive-dev

$ sudo apt install libdb5.3-dev

$ sudo apt install liblua5.3-dev

 

libluaのpkg-config用のファイル名がconfigure.acで指定しているものと違うので、シンボリックリンクで回避。

$ pushd /usr/lib/x86_64-linux-gnu/pkgconfig/
$ sudo ln -sf lua5.3.pc lua.pc
$ popd

 

これで一応ビルドできるようにはなる。しかし、動作しないので、Fedorarpm.specを参考にする。

$ wget https://dl.fedoraproject.org/pub/fedora/linux/releases/34/Everything/source/tree/Packages/r/rpm-4.16.1.3-1.fc34.src.rpm
$ rpm -ivh rpm-4.16.1.3-1.fc34.src.rpm

 

そして、以下のパッケージも追加。

 まずは、autoreconf用

$ sudo apt install gettext
$ sudo apt install autopoint

 

$ sudo apt install zstd
$ sudo apt install libzstd-dev

$ sudo apt install libssl-dev

$ sudo apt install libsqlite3-dev

$ sudo apt install python3

$ sudo apt install libpython3.7-dev

$ sudo apt install libselinux1-dev

 

libimaevmはあきらめて、rpm.specの以下の行削除。
%{?with_libimaevm: --with-imaevm} \
%bcond_without libimaevm

 

$ sudo apt install libcap-dev

$ sudo apt install libacl1-dev

 

これでrpmのビルドができるようになったので、もう一度ソースからビルド。

$ ./configure --prefix=/usr
$ make
$ sudo make install

 

これでrpmが使えるようになった。

 

最終的には、Fedoraバイナリをそのまま使いたいので、rpmパッケージをrpmコマンドで--nodepsを使わずにインストールしてみた。

$ sudo rpm -ivh rpm-4.16.1.3-1.fc34.x86_64.rpm coreutils-8.32-21.fc34.x86_64.rpm curl-7.76.0-1.fc34.x86_64.rpm popt-1.18-4.fc34.x86_64.rpm glibc-2.33-5.fc34.x86_64.rpm glibc-common-2.33-5.fc34.x86_64.rpm glibc-langpack-ja-2.33-5.fc34.x86_64.rpm coreutils-common-8.32-21.fc34.x86_64.rpm basesystem-11-11.fc34.noarch.rpm tzdata-2021a-1.fc34.noarch.rpm setup-2.13.7-3.fc34.noarch.rpm fedora-release-34-1.noarch.rpm fedora-release-common-34-1.noarch.rpm fedora-release-identity-basic-34-1.noarch.rpm filesystem-3.14-5.fc34.x86_64.rpm fedora-repos-34-1.noarch.rpm fedora-gpg-keys-34-1.noarch.rpm libarchive-3.5.1-2.fc34.x86_64.rpm libacl-2.3.1-1.fc34.x86_64.rpm libcap-2.48-2.fc34.x86_64.rpm libattr-2.5.1-1.fc34.x86_64.rpm openssl-libs-1.1.1k-1.fc34.x86_64.rpm rpm-libs-4.16.1.3-1.fc34.x86_64.rpm ca-certificates-2020.2.41-7.fc34.noarch.rpm crypto-policies-20210213-1.git5c710c0.fc34.noarch.rpm grep-3.6-2.fc34.x86_64.rpm sed-4.8-7.fc34.x86_64.rpm p11-kit-0.23.22-3.fc34.x86_64.rpm p11-kit-trust-0.23.22-3.fc34.x86_64.rpm alternatives-1.15-2.fc34.x86_64.rpm gmp-6.2.0-6.fc34.x86_64.rpm libcurl-7.76.0-1.fc34.x86_64.rpm zlib-1.2.11-26.fc34.x86_64.rpm libgcc-11.0.1-0.3.fc34.x86_64.rpm bzip2-libs-1.0.8-6.fc34.x86_64.rpm lz4-libs-1.9.3-2.fc34.x86_64.rpm xz-libs-5.2.5-5.fc34.x86_64.rpm libxml2-2.9.10-10.fc34.x86_64.rpm libzstd-1.4.9-1.fc34.x86_64.rpm audit-libs-3.0.1-2.fc34.x86_64.rpm lua-libs-5.4.2-2.fc34.x86_64.rpm sqlite-libs-3.34.1-2.fc34.x86_64.rpm libmetalink-0.1.3-14.fc34.x86_64.rpm pcre-8.44-3.fc34.1.x86_64.rpm libffi-3.1-28.fc34.x86_64.rpm libtasn1-4.16.0-4.fc34.x86_64.rpm libbrotli-1.0.9-4.fc34.x86_64.rpm libcom_err-1.45.6-5.fc34.x86_64.rpm krb5-libs-1.19.1-3.fc34.x86_64.rpm libidn2-2.3.0-5.fc34.x86_64.rpm gawk-5.1.0-3.fc34.x86_64.rpm openldap-2.4.57-2.fc34.x86_64.rpm libnghttp2-1.43.0-2.fc34.x86_64.rpm libpsl-0.21.1-3.fc34.x86_64.rpm libssh-0.9.5-2.fc34.x86_64.rpm libselinux-3.2-1.fc34.x86_64.rpm keyutils-libs-1.6.1-2.fc34.x86_64.rpm pcre2-10.36-4.fc34.x86_64.rpm pcre2-syntax-10.36-4.fc34.noarch.rpm libssh-config-0.9.5-2.fc34.noarch.rpm libsepol-3.2-1.fc34.x86_64.rpm publicsuffix-list-dafsa-20190417-5.fc34.noarch.rpm libcap-ng-0.8.2-4.fc34.x86_64.rpm libverto-0.3.2-1.fc34.x86_64.rpm libunistring-0.9.10-10.fc34.x86_64.rpm expat-2.2.10-2.fc34.x86_64.rpm mpfr-4.1.0-5.fc34.x86_64.rpm libsigsegv-2.13-2.fc34.x86_64.rpm readline-8.1-2.fc34.x86_64.rpm ncurses-libs-6.2-4.20200222.fc34.x86_64.rpm ncurses-base-6.2-4.20200222.fc34.noarch.rpm cyrus-sasl-lib-2.1.27-8.fc34.x86_64.rpm libxcrypt-4.4.18-1.fc34.x86_64.rpm libdb-5.3.28-46.fc34.x86_64.rpm

 

残念ながら、この実行中にerrorが大量に発生し始め、libc関係のバージョンミスマッチでrpmがこけたのち、coreutilsのlsとかcpとかも利用不可能になりました。

 

LFSみたいにクロス環境で構築していくか、src.rpmとnoarch.rpmを使ってひたすらビルドしてインストールする方法が良いのかもしれません。今回はできなかったということで…