前回、Debian12にPython3.12をソースからインストールできたので、debパッケージを作ってみた。
作成したパッケージはDebianにアップロードせず、自身の環境でのみ使う簡易手順。
ちゃんとした手順はちゃんとした人が考えてくれるはず。
用意したもの
前回と同じくDebian 12を最小構成でセットアップしたVM
amd64(x86_64)でも、arm64(aarch64)どちらでも
手順
メンテナー情報
作ったdebパッケージのメンテナー情報(これを読んでいるあなたのこと)を書いておく。
~/.bashrc
DEBEMAIL="your.email.address@example.org"
DEBFULLNAME="Firstname Lastname"
export DEBEMAIL DEBFULLNAME
パッケージ追加
sudo apt update
sudo apt upgrade
sudo apt install curl build-essential libssl-dev zlib1g-dev devscripts debmake -y
前回と同じように、必要なものがあればaptでパッケージ追加しておく。
The following modules are *disabled* in configure script:
_sqlite3
The necessary bits to build these optional modules were not found:
_bz2 _ctypes _ctypes_test
_curses _curses_panel _dbm
_gdbm _lzma _tkinter
_uuid nis readline
To find the necessary bits, look in configure.ac and config.log.
モジュール | 対応するaptパッケージ |
---|---|
_sqlite3 | libsqlite3-dev |
_bz2 | libbz2-dev |
_ctypes | libffi-dev |
_ctypes_test | libffi-dev |
_curses | libncurses-dev |
_curses_panel | libncurses-dev |
_dbm | libgdbm-compat-dev |
_gdbm | libgdbm-dev |
_lzma | liblzma-dev |
_tkinter | tk-dev |
_uuid | uuid-dev |
nis | 不明、今時NISは要らないと思う… |
readline | libreadline-dev |
全部追加するならこれ
sudo apt install libsqlite3-dev libbz2-dev libffi-dev libncurses-dev libgdbm-compat-dev libgdbm-dev liblzma-dev tk-dev uuid-dev libreadline-dev
作成
mkdir -p ~/mypkg/python312
cd ~/mypkg/python312
curl -OL https://www.python.org/ftp/python/3.12.2/Python-3.12.2.tar.xz
tar xf Python-3.12.2.tar.xz
mv Python-3.12.2 python312-3.12.2
tar czf python312-3.12.2.tar.gz python312-3.12.2
cd python312-3.12.2
debmake
debmakeの最後の辺りで聞かれる↓の質問は、Pythonスクリプトのdebパッケージを作るのではなく、Pythonそのもののバイナリパッケージを作りたいから"y"で良いはず…多分
W: many ext = "python" type extension programs without matching -b set.
?: -b":python, ..." or -b":python3" missing. Continue? [Y/n]: y
debianディレクトリの以下のファイルを書き換える
debian/control
Source: python312
Section: python
Priority: optional
Maintainer: Firstname Lastname <your.email.address@example.org>
Build-Depends: debhelper-compat (= 13)
Standards-Version: 4.5.1
Homepage: https://www.python.org/
Rules-Requires-Root: no
Package: python312
Architecture: arm64 # arm64かamd64
Multi-Arch: allowed
Depends: ${misc:Depends}, ${shlibs:Depends}
Description: auto-generated package by debmake
This Debian binary package was auto-generated by the
debmake(1) command provided by the debmake package.
debian/changelog はそのままでも良い
python312 (3.12.2-1) UNRELEASED; urgency=low
* Initial release. Closes: #nnnn
<nnnn is the bug number of your ITP>
-- Firstname Lastname <your.email.address@example.org> Fri, 08 Mar 2024 04:28:05 +0000
debian/rules (パーミッションは755、空白ではなくタブ)
#!/usr/bin/make -f
%:
dh $@ --without autoreconf
override_dh_auto_configure:
./configure --prefix=/opt/python312 --enable-optimizations --with-lto
パッケージ作成
debuild -us -uc -ui -b
作成したパッケージをインストール
1つ上のディレクトリにpython312_3.12.2-1_$(dpkg-architecture -q DEB_BUILD_ARCH).debができているはず
scpや何らかの方法でインストールしたいサーバーの/tmpへ移す
インストール
sudo apt install /tmp/python312_3.12.2-1_a*64.deb
※ /tmpに置かなくてもインストールはできるけど、_aptというユーザーがアクセスできる場所でないとパッケージの検証ができなくて以下のメッセージが表示される。
N: Download is performed unsandboxed as root as file '/root/python312_3.12.2-1_arm64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
Python 3.11との共存
Debian 12はデフォルトでPython 3.11がインストールされていて /usr/bin/python3
は python3.11
へのシンボリックリンクとなっている。update-alternatives
で切り替えられるようにする。
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo update-alternatives --install /usr/bin/python3 python3 /opt/python312/bin/python3.12 2
python3 --version
一次情報源
- Debian – Debian 開発者向けマニュアル
- Debian Maintainer 向け案内書
- まだ日本語化が完了していない
- Debian 新メンテナガイド(古い、↑が後継)
- Debian パッケージ化入門
- 『.deb ファイルを手で作る』場合に読むものではない
- 『Debian のパッケージを Debian 流に作成』する場合に読む
- Debian Maintainer 向け案内書