第 191 回 東京エリア Debian 勉強会資料.Deb
銀河系唯一のDebian専門誌
2020 年 11 月 21 日

Pyth集
特ムステ
シ稿
on、原デビアン勉強会

目次

2.10

dancerj . . . . . . . . . . .

3

2.11

sambar gamer . . . . . . .

4

2.12

henrich . . . . . . . . . . .

4

Debian での Python

5

3.1

はじめに . . . . . . . . . . .

5

3.2

Python について . . . . . . .

5

3.3

Debian における Python 情

最近の Debian 関連のミーテ

1

ィング報告

1.1

2

2020 年 10 月度 東京エリア・関西合同 Debian 勉強会 . . .
事前課題

2

3

2
3

報の取り扱いについて . . . .

5

3

3.4

終わりに . . . . . . . . . . .

8. . . . . . .

3

3.5

参考情報 . . . . . . . . . . .

8

2.3

yosuke san . . . . . . . . .

3

2.4

tanykazy . . . . . . . . . .

3

2.5

YukiharuYABUKI . . . . .

3

2.6

kenhys3

2.7

ipv6waterstar

2.8
2.9

2.1

dictoss. . . . . . . . . . .

2.2

koedoyoshida. . . . . . . . . . .
. . . . . . .

3space320jt. . . . . . . . .

3yy y ja jp. . . . . . . . .

3

1

Debian 勉強会資料のディレク

4

トリ構成変更

4.1
4.2
5

9

Debian 勉強会資料ディレク
トリ構成変更の目的 . . . . .

9ディレクトリ構成変更の実際

9メモ

12

第 191 回 東京エリア Debian 勉強会 2020 年 11 月

1 最近の Debian 関連のミーティング報告杉本典充

1.1 2020 年 10 月度 東京エリア・関西合同 Debian 勉強会
2020 年 10 月 17 日 (土) に東京エリア Debian 勉強会と関西 Debian 勉強会の合同でオンラインによる Debian 勉強会を開催しました。参加者は 13 名でした。
セミナーは上川さんによる「Debian での Rust」の発表を行いました。発表では Rust を始める人が読むとよいドキュメント*1 の紹介があり、Debian で提供する Rust 関連 のパッケージのインストール方法とよく利用するコマンド ”cargo” の説明、発表の場でコーディングを行ってみることで参加者に Rust がどのようなプログラム言語であるかを伝えました。
その後、Rust や Debian の最近の動向について情報交換を行いました。

*1 https://doc.rust-jp.rs/

2

第 191 回 東京エリア Debian 勉強会 2020 年 11 月

2 事前課題杉本典充

今回の事前課題は以下です。

1. https://mentors.debian.net/ の web サイトを知っていますか
2. debexpo という web アプリケーションを知っていますか
3. 次のプログラム言語でどのように debian パッケージが作られているか興味があるものを教えてください。

2.1

dictoss

2.6

1. 知っています
2. 知っています3. golang, nodejs, python

2.2

1. 使っています、または使ったことがあります
2. 知っています3. (回答なし)

koedoyoshida

2.7

1. 知っています
2. 知りません
3. python, その他

2.3

yosuke san

2.8

space320jt
1. 知りません
2. 知りません
3. python

tanykazy

2.9

1. 知っています
2. 知りません
3. golang, python, その他

2.5

ipv6waterstar
1. 使っています、または使ったことがあります
2. 知りません
3. emacs, その他

1. 知っています
2. 知りません
3. rust, python

2.4

kenhysyy y ja jp
1. 知っています
2. 知っています
3. rust, golang, nodejs, emacs

YukiharuYABUKI

2.10

1. 使っています、または使ったことがあります
2. 知りません
3. python, その他

dancerj

1. 使っています、または使ったことがあります
2. 知りません
3. nodejs, emacs

32.11sambar gamer

2.12

1. 知っています
2. 知りません
3. python

henrich1. 使っています、または使ったことがあります
2. 知っています
3. rust, golang, nodejs, python, ruby, perl4

第 191 回 東京エリア Debian 勉強会 2020 年 11 月

3 Debian での Python
杉本典充

3.1 はじめにDebian では多くのプログラム言語の実行環境、ライブラリ及びアプリケーションのパッケージを多数提供しています。今回は Python について Debian ではどのようにパッケージをメンテナンスしているのかを調べてみました。

3.2 Python についてPython とは Debian などの linux 環境のみならず他の OS でも実行することが可能なマルチプラットフォームのプログラミング言語の 1 つです。2015 年に機械学習のプラットフォームである tensorﬂow がオープンソース化され、tensorﬂow には Python のライブラリが豊富なことから Python の人気が上がってきています。
Python の web サイト（https://www.python.org/） では初心者向けのチュートリアル*2 、Python の言語仕様やクラス・関数の仕様書*3 などの多くの情報を公開しています。特に開発者向けの情報では PEP（Python EnhancementProposals）*4 と呼ばれる Python をよりよくするための提案の募集と公開しており*5 、コーディング規約やライブラリの廃止勧告、互換性の説明など多岐にわたる情報を公開しています。

3.3 Debian における Python 情報の取り扱いについて
3.3.1 基本な情報
Debian における Python 関連の情報は以下ページにまとまっています。
• Python - Debian Wiki https://wiki.debian.org/Python/• Debian Python Policy https://www.debian.org/doc/packaging-manuals/python-policy/
Debian Project では、Python の実行環境をメンテナンスするチーム（cpython-team）とライブラリ及びアプリ
ケーションをメンテナンスするチーム（Debian Python Team）の 2 つに分かれて活動しています。2 つのチームの主な違いを表 1 に示します。
「Debian Python Policy」*6 を読んでみて、パッケージの話で大事そうなところを以下に挙げてみます。

• python3 へ移行しましょう• python のインタプリタのディレクトリ配置やファイル名の規則（例：/usr/bin/python3、/usr/bin/python3.8）*2 https://www.python.org/about/gettingstarted/*3 https://docs.python.org/3/*4 https://www.python.org/dev/peps/*5 Debian にも DEP という似たような仕組みがあります。https://dep-team.pages.debian.net/*6 https://www.debian.org/doc/packaging-manuals/python-policy/5表1

Debian Project における Python のチーム情報チーム名cpython-team

Debian Python Team（DPT）

役割

実行環境のメンテナンス

ライブラリとアプリケーションのメンテナンス

メーリングリスト

debian-python@lists.debian.org

（同左）

IRC

#debian-python（同左）

wiki

-

https://wiki.debian.org/Teams/PythonTeam

git リポジトリ

https://salsa.debian.org/cpython-teamhttps://salsa.debian.org/python-team• python ライブラリのパスの規則（debian パッケージでは /usr/lib/python3,2.7/dist-packages/ 配下に配置する）• python のライブラリやアプリケーションの debian パッケージ名の命名規則（pythoh3 系用であれば python3* の形式とすると、モジュール名にアンダースコアが入っている場合は debian パッケージ名ではハイフンに置換すること）• python プログラムについて– シェバンには #!/usr/bin/env interpreter name は使わないこと– #!/usr/bin/python3 または #!/usr/bin/python3.y として debian が提供するデフォルトのバージョンを指定すること• python の debian パッケージ化を支援するための debhelper の拡張として dh-python パッケージがある

3.3.2 cpython-team について
cpython-team チームの https://salsa.debian.org/groups/cpython-team/-/group_members に表示されるメンバーは Matthias Klose（@doko） さん 1 名のみです。

Klose さんが メンテナンスしている https://tracker.debian.org/pkg/python3.9 を確認してみると、maintainer にはチームでなく Klose さんの名前が書いてあります。そのため 1 人でメンテナンスしているようです。
2020 年 11 月 時点の unstable においては python-2.7、3.8、3.9 のパッケージを提供しており、現在は python-3.9のデバッグ作業を行っています*7 。

3.3.3 Debian Python Team（DPT）について
Debian Python Team（DPT）のメンバーは https://wiki.debian.org/Teams/PythonTeam に記載があり、2020 年 11 月現在では 20 名でメンテナンスしているようです。チームでメンテナンスしているパッケージの一覧は次の URL で見ることができます。

• https://qa.debian.org/developer.php?email=team%2Bpython%40tracker.debian.org
Debian Python Team（DPT）に参加するには チームのポリシードキュメントを読み、応諾した上で参加することを求めています。チームのポリシーを記載したドキュメントは以下のページにあります。

• https://salsa.debian.org/python-team/tools/python-modules/blob/master/policy.rst
このページに記載しているポリシーにはおおよそ以下の内容が書かれています。

• チームへ参加方法– 以下 3 つを書いたメールを debian-python@lists.debian.org へ送信する*7 https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=python3.9;users=debian-python@lists.debian.org

6∗ なぜ参加したいのか∗ https://salsa.debian.org にログインするアカウント名∗ ポリシードキュメント（policy.rst）を読み、受諾することの宣言• パッケージメンテナンスについて– debian パッケージ内の debian/control ファイルの Maintainer フィールド及び Uploaders フィールドの意味– git-buildpackage を使ったパッケージメンテナンスの説明
また、Python のパッケージを作るにあたっては debian/control、debian/rules などのファイルの書き方の説明が以下のページ記載されています。

• https://wiki.debian.org/Python/LibraryStyleGuide• https://wiki.debian.org/Python/AppStyleGuide

3.3.4 pypi パッケージを debian パッケージに変換するプログラム言語にはそれぞれライブラリやアプリケーションをパッケージ化して配布するサイトを持っていることが多いです。そして Debian ではそれぞれのプログラム言語のライブラリを debian パッケージへ変換する debian
パッケージを配布しており、以下のページに情報があります。

• https://wiki.debian.org/AutomaticPackagingTools
Python におけるライブラリやアプリケーションの配布サイトは https://pypi.org/ が有名です。上記 URLで紹介している Python 向けの debian パッケージへの変換ツールは「python3-stdeb」 パッケージに入っている「py2dsc-deb」コマンドがよさそうに思いました*8 。
試しに py2dsc-deb コマンドを使って pypi が配布するパッケージを debian パッケージに変換してみました。

debian/compat バージョンは ”9” として変換しているようです。
$ sudo apt-get install python3-stdeb python-all dh-python$ wget https://files.pythonhosted.org/packages/53/20/4019a739b2eefe9282d3822ef6a225250af964b117356971bd55e274193c/ws4py-0.5.1.tar.gz$ py2dsc-deb ws4py-0.5.1.tar.gz$ ls -l deb_dist
l 合計 128-rw-r--r-- 1 norimitu norimitu 38224 11 月 19 13:58 python3-ws4py_0.5.1-1_all.deb
drwxr-xr-x 8 norimitu norimitu 4096 11 月 19 13:58 ws4py-0.5.1-rw-r--r-- 1 norimitu norimitu
916 11 月 19 13:58 ws4py_0.5.1-1.debian.tar.xz-rw-r--r-- 1 norimitu norimitu
869 11 月 19 13:58 ws4py_0.5.1-1.dsc-rw-r--r-- 1 norimitu norimitu 5480 11 月 19 13:58 ws4py_0.5.1-1_amd64.buildinfo-rw-r--r-- 1 norimitu norimitu 1024 11 月 19 13:58 ws4py_0.5.1-1_amd64.changes-rw-r--r-- 1 norimitu norimitu 5419 11 月 19 13:58 ws4py_0.5.1-1_source.buildinfo-rw-r--r-- 1 norimitu norimitu 1377 11 月 19 13:58 ws4py_0.5.1-1_source.changes-rw-r--r-- 2 norimitu norimitu 51408 2 月 26 2020 ws4py_0.5.1.orig.tar.gz$ cat deb_dist/ws4py-0.5.1/debian/compat
9

また、python のパッケージをインストールするコマンド ”pip” でインストールしたときに binding ライブラリのコンパイルも一緒に行うライブラリ ”mysqlclient” を試してみると、以下のコマンドで debian パッケージに変換できました。

*8 pypi2deb パッケージは依存パッケージがとても多く perl 関連のパッケージが大量にインストールされます。

7

$ sudo apt-get install python3-stdeb python3-all-dev dh-python libmysqlclient-dev$ wget https://files.pythonhosted.org/packages/a5/e1/e5f2b231c05dc51d9d87fa5066f90d1405345c54b14b0b11a1c859020f21/mysqlclient-2.0.1.tar.gz$ py2dsc-deb mysqlclient-2.0.1.tar.gz$ ls -l deb_dist
合計 264drwxr-xr-x 11 norimitu norimitu 4096 11 月 19 14:15 mysqlclient-2.0.1-rw-r--r-- 1 norimitu norimitu 1236 11 月 19 14:15 mysqlclient_2.0.1-1.debian.tar.xz-rw-r--r-- 1 norimitu norimitu
927 11 月 19 14:15 mysqlclient_2.0.1-1.dsc-rw-r--r-- 1 norimitu norimitu 6192 11 月 19 14:15 mysqlclient_2.0.1-1_amd64.buildinfo-rw-r--r-- 1 norimitu norimitu 1394 11 月 19 14:15 mysqlclient_2.0.1-1_amd64.changes-rw-r--r-- 1 norimitu norimitu 5795 11 月 19 14:15 mysqlclient_2.0.1-1_source.buildinfo-rw-r--r-- 1 norimitu norimitu 1464 11 月 19 14:15 mysqlclient_2.0.1-1_source.changes-rw-r--r-- 2 norimitu norimitu 87807 7 月 3 03:55 mysqlclient_2.0.1.orig.tar.gz-rw-r--r-- 1 norimitu norimitu 90744 11 月 19 14:15 python3-mysqlclient-dbgsym_2.0.1-1_amd64.deb-rw-r--r-- 1 norimitu norimitu 48584 11 月 19 14:15 python3-mysqlclient_2.0.1-1_amd64.deb$ cat deb_dist/mysqlclient-2.0.1/debian/compat
9

3.4 終わりにdebian における Python パッケージをどういうチームがどのようにパッケージを作成、メンテナンスしているか調べてみました。皆さんも Python や他のプログラム言語のライブラリやアプリケーションを debian パッケージ化
し、debian ライフをお楽しみください。

3.5 参考情報• https://wiki.debian.org/Python/• https://www.debian.org/doc/packaging-manuals/python-policy/• https://salsa.debian.org/python-team/tools/python-modules/blob/master/policy.rst• https://wiki.debian.org/Python/LibraryStyleGuide• https://wiki.debian.org/Python/AppStyleGuide8

第 191 回 東京エリア Debian 勉強会 2020 年 11 月

4 Debian 勉強会資料のディレクトリ構成変更
上川純一

4.1 Debian 勉強会資料ディレクトリ構成変更の目的
Debian 勉強会開始当初はそこまでファイル数が多くなかったのでディレクトリ構成はシンプルで、画像などはその月のサブディレクトリにいれて Tex ファイルやスタイルファイルなどはトップレベルに配置するというようにしていました。しかし１５年たった現在においては８００以上のファイルが初期状態で配置され、TeX コンパイルすると中間ファイルをふくめて１００００近いファイル数が配置されるようになってきました。月に TeX ファイルは４個くらい追加されるので状況はどんどん悪くなります。

• debianmeetingresumeYYYYMM.tex – TeX ファイル• debianmeetingresumeYYYYMM-kansai.tex – 関西の勉強会の TeX ファイル• debianmeetingresumeYYYYMM-presentation.tex – プレゼンテーション用の TeX ファイル• debianmeetingresumeYYYYMM-kansai-presentation.tex – 関西の勉強会の TeX ファイル• imageYYYYMM/ – 画像ファイルなどの配置場所
また、初めてチェックアウトした人が Make コマンドをうつと８コアの十分速い最近のマシンでも１５分くらいコンパイルにかかります。遅めのマシンだと数時間かかるということもあるようです。Git commit 際にビルドできるかどうかチェックするために pre-commit-hook を使うという運用にしていたのですが、状況によっては Git commitに長時間待たされることになるのです。全体に影響を及ぼす大掛かりな変更などもできませんでした。それは流石に不便すぎるので今回ソースを年ごとに分割してみることにしました。

4.2 ディレクトリ構成変更の実際
ディレクトリ構成は新しいファイルについては以下のように変更しました。

• YYYY/Makeﬁle – そのサブディレクトリ用の Makeﬁle。
• YYYY/debianmeetingresumeYYYYMM.tex – TeX ファイル• YYYY/debianmeetingresumeYYYYMM-kansai.tex – 関西の勉強会の TeX ファイル• YYYY/debianmeetingresumeYYYYMM-presentation.tex – プレゼンテーション用の TeX ファイル• YYYY/debianmeetingresumeYYYYMM-kansai-presentation.tex – 関西の勉強会の TeX ファイル• YYYY/imageYYYYMM/ – 画像ファイルなどの配置場所
チェックアウトしたあとの一連の作業は以下のようになると思います。

9

$ cd 2020
$ edit debianmeetingresume202011.tex$ make$ git commit$ git pull --rebase$ git push

今までディレクトリ構成の変更については何度か途中で諦めているので今回はできるだけ挫折しないようにやりやすいところからはじめています。まず２０２０年からはじめました。２０１７年までさかのぼって変更しました。また方針として、リファクタリングは後回しして必要なファイルはシンボリックリンクで持ってきています。２０１６
年より以前はそれ以降の年から依存されているファイルがあるので移動するにはなんらかのリファクタリングが必要になるかと思います。utils/mkdirlinks.sh にスクリプトをおいていますが、使いまわしている画像ファイルなどによって依存関係が結構ありました。
beamerthemeKansaiDebian.sty
beamerthemeKyoto.sty
beamerthemeTokyo.sty
image200502
image200607
image200703
image200707
image200802
image201006
image2012-natsu
kansaimonthlyreport.sty
monthlypresentation.sty
monthlyreport.sty

今後の課題としては、再利用しやすい画像やスタイルファイルなどについては再利用専用のディレクトリなどに分割するのが良いかなと思っています。

4.2.1 UTF-8 化
全員が全部のファイルをビルドさせられる状態だと文字コードの一括変換等はあまりやりたくなかったのですが、今回の変更で基本的には 2020/サブディレクトリだけをビルドし直せば良いようになったので一括で UTF-8 に変更しました。
スクリプトを書いて ﬁnd + xargs で実行しました。utils/convert_to_utf8.sh$ find -name ’*.tex’ | xargs bash ./utils/convert_to_utf8.sh$ find -name ’*.sty’ | xargs bash ./utils/convert_to_utf8.sh

4.2.2 CI の有効化
CI を有効にしたかったのですが大きすぎておそすぎるという問題がありました。Github にミラーを作ってそこから Cloud Build 連携で力技で８コアの Cloud Build インスタンスを利用して１５分以内にビルドできています。結果一回３０円くらいだったと思います。

Salsa の CI *9 では最近のサブディレクトリ（2020, 2021）だけをビルドするようにしてみてます。dictoss さん提
供の gitlab runner 経由で７分でビルドが終わっているようです。
本当は salsa の master に push される前にビルドのチェックを走らせたいのですができるのかな？

CI の設定ファイルが複数あるのも今後の課題です。
• cloudbuild.yaml – cloud build で使っている。
• utils/docker/cloudbuild.yaml – docker image 作成用• .gitlab-ci.yml – salsa の設定• debian/control – ２０１３年ころまで pbuilder ベースで走らせていた CI 用、現在は何に利用しているのか？
最初は Debian 環境に LaTeX 環境のインストールとセットアップからするように設定していたのですが、様子を見ている限りだと LaTeX 関連のパッケージに何分もかかっているようでした。Docker Image をたまに更新するよう*9 .gitlab-ci.yml 参照

10

図1

CI の流れにしてそれを利用すればより高速になる気がしており、試しに Docker Image を事前に作成するようにしたら Cloud

Build の時間が１３分くらいに短縮されました。
Docker Image はとりあえず手元の raspberry pi 3 で定期的に更新するようにしています。

11

第 191 回 東京エリア Debian 勉強会 2020 年 11 月

5 メモ

12

13

14

Debian 勉強会資料
2020 年 11 月 21 日
初版第 1 刷発行
東京エリア Debian 勉強会 （編集・印刷・発行）

15