Debianにおけるmailman2.1 -> 3への移行

mailman2はpython2で書かれており、Debian bullseye(11)ではもうmailman3しかパッケージがありません。かつ、パッケージ側でデータまわりのハンドリングは特になされないので、手動で移行作業を行う必要があります。意外とはまりどころが多かったので記録しておきます。 公式のドキュメント https://docs.mailman3.org/en/latest/migration.html mailman3のインストール mailman3上でのML作成 MLの一時停止 (一時的に新規メールを受け付けないため) 自分の場合postfixだったのでmain.cfからmailmanの設定を削除した。 import21の実行 (subscriber等設定のコピー) 場合によってはimport21が失敗する。自分の場合はその原因が bounce_infoが空でなかったのが原因(参考: https://lists.mailman3.org/archives/list/mailman-users@mailman3.org/thread/JEPMB3HW4FI57EUMOST4L7BD2ILIIS3P/)だったので、手動で削除した。 アーカイブの移行 (pipermail -> hyperkitty) web設定の修正 (apacheの場合) hyperkittyの設定変更 (API key設定) Django管理UIからドメイン名の修正 (デフォルトはexample.com) http://${site}/mailman3/admin/ にアクセス サイト (http://${site}/mailman3/admin/sites/site/) の「変更」を選択 example.com があるのでそれを自サイトに変更 mailman3の有効化 (postfix) ACCOUNT_DEFAULT_HTTP_PROTOCOLの設定 (optional) Debianのmailman3-webはデフォルトでweb UIはhttpsを想定しているので、httpしかない場合 /etc/mailman3/mailman-web.py の ACCOUNT_DEFAULT_HTTP_PROTOCOL を http にする。 UI/アーカイブの確認 http://${site}/mailman3/ にアクセスする。debconfで入力した管理者情報を入れてログインしようとすると、一度確認メールが送られるので注意。 検索インデックスの更新 漏れなどがあればご指摘ください。 2021-10-14: ACCOUNT_DEFAULT_HTTP_PROTOCOLと検索インデックスについて追記。

Debian buster上でflatpakのSteamとProtonを動かす

前々からsnap/flatpak,  wine on dockerなど色々な方法でWindows用のゲームをDebianから動かそうと時々試していたのですが、環境をそこそこ汚さずに動作できるようになりました。 flatpak + Steam flatpakはコンテナを利用したソフトウェア配布ツールです。同様のものにsnapがありますが、flatpakはデスクトップアプリ向けらしいです。flatpak自体はaptでインストールできます。 Steamのインストール、実行は以下のようなコマンドで行います。 Protonの有効化 以下の記事を参考にしました。 Days of Speed Debian StretchにSteamをインストールしてSteam Play(Proton)でWindowsゲームを遊ぶ flatpakで入れた場合i386ランタイム等も一緒に入れてくれるので、add-architectureなどをする必要はありません。単純にSteamの設定でベータに参加しProtonを有効化するだけです。 ゲームをインストール 一般的なSteamの操作でWindows向けゲームをインストールします。初回はProtonのダウンロードとインストールが行われます。ゲームによって必要なVC runtime等も必要な場合はゲームの初回起動時に行われます。 簡単に手元で動いたものを列挙しておきます カプコンベルトスクロールアクションコレクション Frostpunk Fallout4 起動時の動画は音声が流れたがゲーム音声が聞こえなかった ファイルの実体が置かれる場所 ~/.var/app/com.valvesoftware.Steam 以下に配置されます。mod等を入れるならここを直接いじることになるでしょう。flatpakでSteamを消してもここは残るので不要なら直接rmしましょう。 ToDo/課題 ジョイスティックの利用 Intel Graphics以外のGPUでの動作確認 さらなるゲームの動作確認 追記(2019/9/10) flathubのリポジトリ追加コマンドを記載しました。

2018年のエイプリルフール

自分の観測範囲で見かけたものをまとめてみます。ほかにFLOSS関連でこんなのがあった、という話があれば追加します。 Free Software Foundation announces crowdfunding campaign to buy Facebook — Free Software Foundation FSFがFacebookを買収するためにクラウドファンディングを始めた、というネタ。ところでFacebookはGnuPGに寄付をしています。 Bug#894551: ITP: fascism — Exhaustive exploration of Fascist theory and practice ファシズムをDebianパッケージ化する提案です。過去にもrootkitのITPなど、エイプリルフールネタはありました。

uim 1:1.8.6+gh20161003.0.d63dadd-6

unstableのuimを更新しました。以下の2つのRC bugを修正してあります。 #877476 – libuim-dev: copyright file missing after upgrade (policy 12.5) #877632 – uim: /var/lib/uim/ directory has been deleted after apt-get upgrade with –purge option 前者の問題は、いくつかのパッケージ統合作業を行った時に、libuim-devのドキュメントをsymlinkに変えたことがトリガで発生した問題です。postinstで以下の処理を追加しました。これにより、symlinkが必要に応じて生成されます。 後者の問題は 、uimバイナリパッケージに/var/lib/uimのみを所属させていたのがトリガです。パッケージ統合作業の時にlibuim-dataを廃止したのですが、このパッケージのpostrmではpurge時に”rmdir –ignore-fail-on-non-empty”を呼び出して/var/lib/uimを削除しようとします。uimパッケージに所属しているのはディレクトリのみなので、ここで削除されてしまうというわけです。 こちらの対処としては、/var/lib/uim/READMEを用意してディレクトリを空にしないという方向で解決しました。同様の処置をしているパッケージは他にもあるので、対処としては間違ってないと思います。多分。

Published
Categorized as Debian

pdnsdからdnsmasqに移行

最近自宅の光回線が非常に遅い状況だったので、改善を試みました。そのついでに、ローカルのキャッシュDNSサーバーをpdnsdからdnsmasqに変更しました。 単にIPoEでnative IPv6を導入し、DS-Liteの設定をしただけなのですが、ローカルのDNSキャッシュサーバーのフォワード先をIPv6にしたかったのです。それでいてなおかつ、/etc/hostsの内容もみてくれるものを、ということでdnsmasqにしました。 apt-getでパッケージを入れて、/etc/dnsmasq.d/local.confというファイルを新規作成して、内容を以下のようにしました。 localhostとローカル側のIPでlistenするようにし、フォワード先の設定が書かれたファイルを記述しているだけです。 自分が使っているISPはv4のDNSキャッシュサーバーだとAAAAフィルタがかかっているので、それをv6に変えたことでnative v6も扱えるようになりました。 一点注意が必要だったのは、apt-get install dnsmasqだけしても他のdnsサーバーパッケージはremoveされないというところです。おかげでport 53を他のサーバーが掴んだままでdnsmasqが起動できない、という状態に陥りました。 一応今はPPPoEも併用して、IPv4側のglobal addressから接続できる状態を意地できるよう、ポリシールーティングを設定しています。DS-Liteだけだとv4で繋げるすべがないので… DS-Liteのおかげで、通信速度は17Mbps前後だったものが70Mbps程度でるようになりました。

Published
Categorized as Debian

Mini Debian Conference Japan 2016参加

2016/12/10に開催されたMini Debian Conference Japan 2016に参加してきました。場所は日本橋のサイボウズオフィス内で、LibreOffice Kaigi 2016と同時開催でした。自分も一応両方に参加するつもりで申し込みも両方にしたのですが、結果としてDebian側の話ばかり聞いていました。 その時の様子はハッシュタグ#debianjpでツイッターを検索するとある程度様子が伺えると思います。自分が参加しているセッションについてはある程度ツイートしています。せっかくなのでMomentsを使ってみようかと思ったのですが、全部のツイートが出てこない上に時系列に並んでいない、並び替えはすべて手動という使い勝手の悪いインターフェースで断念しました。 個人的には音響モデルを含めて自由ソフトウェア実装として作ったバーチャルシンガー徵音梅林(ちおんメイリン)に最もインパクトを受けました。発表は台湾の張正一(Chou Shouichi)さんでした。 発表資料の中でも触れられていましたが、クリプトン・フィーチャーの商用ソフトウェアであるVOCALOIDは作成できる内容に制限があります。初音ミクのEULA(PDF)にありますが、公序良俗に反するなどの歌詞を含めることを禁止しています。現実にはそういった内容のものが作成、公開されているのですが、規約レベルではアウトです。張さんは、ギターを燃やすパフォーマンスの写真などを交えて「音楽活動は自由であるべきだ」と主張されていました。これには強く同意します。 ソフトウェアのベースはWORLD(修正BSDライセンス)というパテントフリーなものを使っているとのことでした。音響モデルもマスコットキャラクターもCC-BY 3.0で配布しています。 残念ながら、まだフロントエンドについては実装がこなれていないようです。デモではWineでVOCALOIDのエディタを利用されていました。まだ日本で利用している例はほとんどなさそうですが、頑張って欲しいと思います。

2016年9〜10月の活動

ここ2ヶ月ぐらいの活動を記録しておきます。 Debian関係 Namazuのbuild-arch/build-arch-indep対応 ChaSen symbolsの主要arch対応 qemu-debootstrapの利用 porterboxの利用 ChaSenに関しては前回の投稿とも関係があるのですが、とりあえずは主要(公式リリース)アーキテクチャのみ、一通りlibchasen2.symbolsの更新を行いました。 恥ずかしながら今回はじめてporterboxを使いました。これまでporterboxにログインしたことはあっても結局使い方がよくわからなくて諦めたりしていたのですが、たまたまログインしたホストのmotd(ログイン時に表示されるメッセージ)にschrootの使い方へのリンクhttps://dsa.debian.org/doc/schroot/が掲載されていて、それではじめて使い方を理解した次第です。 しかし、qemu-debootstrapでどうにかなる範囲についてはそちらで対応しました。 第12回 カーネル/VM探検隊参加 qemu-debootstrapについてそれなりに理解を深めたので、その紹介という形で発表をしてきました。   Qiitaへの投稿 MySQL 5.5でのCVE-2016-6662対応について 写経で使うツール symlinkを使わずにホームディレクトリの設定ファイル(dotfile)を管理する 写経に関する記事のストック数が多いのが以外です。 FSIJ月例会(予定) 今月10月の28日に、いつもの場所(東京体育館)、いつもの時間(18:30〜19:30)で勉強会が開催予定です。 10月の技術講座 テーマ: 特別じゃないGnuPG GnuPG 2.1のお話だそうで、期待できます。今の時点でのDebian stable(8.x/Jessie)ではまだ標準のGnuPGが1.4系なのですが、次のリリースには2.1が標準になる予定なので、大いに参考になることでしょう。

C++ template instanceのシンボルを隠す

ここ数日、C++がらみで苦労しています。自分がC++を覚えたのが学生の頃、20年以上前になるので、今時のC++についていけていません。 ChaSenのライブラリをビルドしていると、基本的にABIとしてはC言語の範囲でしか定義していないのに、一部のC++シンボルがexportされてしまいます。ざっと調べてみたところ、どうやらtemplateのインスタンスを定義した場合には有無をいわさず外部参照できてしまうようです。 GCC拡張であればvisibilityの制御でこの挙動を変えられるようなので、pragmaを使ってdartsのインスタンスシンボルを隠すことはできるようになりました(参考: Visibility – GCC Wiki)。 そもそもなぜこんなことをする必要があるかいうと、Debian packageのsymbolsの仕組みに引っかかるからです。C++のsymbol name mangling ruleはgccのメジャーバージョンが上がると微妙に変わることがあって、現在stable標準のgcc 5.xとunstable標準のgcc 6.xでまさにこれが影響しています。これまでビルドしていたライブラリのシンボル情報をdebian/<package-name>.symbols.<arch>という名前で保存していて、ビルド結果のバイナリーに含まれるシンボルがこのファイルと異なった場合、ビルドエラーとなるようになっています。これはABI互換性が壊れないことを保証するための仕組みです。 そもそも内部で使っているだけのC++シンボルが見えてしまっているのを回避して、この問題を根本から対応したかったのでした。 しかしまだ一部の標準ライブラリのC++ template instance symbol(std::ctype<char>とか)が残ってしまっているので、それをどうしたものかと苦慮しているところです。  

Published
Categorized as Debian

USB 3.0フラッシュメモリにGPT/UEFIブートできるDebianのインストールを試みた

USB 3.0ポートを持つ機器が手元に増えてきたので、そのようなマシンで起動できるUSBメモリ上のDebian環境を作ろうと頑張ってみました。最終的には一応できたのですが、手作業がちょっと必要でした。 そもそも、USB 2.0のフラッシュメモリ上にUEFI bootable Debianを作るのはまったく問題ありません。しかし3.0だとjessie/stretchのインストーラーで起動できる状態に持っていけませんでした。jessieで作った場合には”no bootable os”と言われたり、stretchで作った場合ではgrubは入るもののrescue consoleが立ち上がるだけ、という妙な状態です。2.0と3.0で何か扱いが違うのでしょうか… ともかく、対応としてはstretchからインストールしたメディアを一度外して、他のDebian環境からそのメディアをマウントしてEFIパーティションの/EFI/BOOT/以下にルートパーティションの/boot/grub/grub.cfgをコピーしてやることで動くようになりました。 頑張ればjessie(現stable)でも設定できそうな気がしますが、stretch環境は手元になかったのでとりあえずこいつで運用してみようと思っています。 参考:USB HDDにMBR/EFI両ブート可能なUbuntuイメージを作る方法 – bellbind USB 2.0と3.0で違いが出るのはなぜなのか、原因を知っている人がいたらぜひ教えてください。ベンダーのファームウェア依存なのかもしれませんが…(今回はVAIO Duo11を使用) 起動できないのはUSB 3.0フラッシュメモリにインストールしたDebian環境だけでなく、rufusで作成したインストールメディアでも同様の状況(grub rescue consoleに落ちる)でした。

Published
Categorized as Debian

Orange PI PCで動画のハードウェアエンコードはできるのか

これはLinux Advent Calendar 2015 18日目の記事です。 ARMベースの小型PCとしてRaspberry PIシリーズが人気です。ハードウェアによる動画(H.264)エンコード支援がついていて、それが目的で使っている人もいるようです。 しかし私はRaspberry PI 2の代わりにOrange PI PCを購入しました。機能的には持っているようなので、できればなんとか使いたいところです。 参考にするため、そもそもRasPiではどうやっているのかをちょっと調べてみました。Googleで検索すると、gstreamerでomxh264encを使うという方法が紹介されています。 これはgst-omxというコンポーネントのようで、OpenMaxというコーデックの取り扱いを抽象化したAPIのようです。さらに調べてみると、RasPiではlibopenmaxil.soという共有ライブラリが呼び出されているようです。 ではこいつのソースコードはどこだと探してみましたが、ファームウェアの一部という扱いでバイナリーのみが配布されているという残念な状況でした。RasPi側からの調査はここが限界です。 ではOrange PIではどうか。Orange PIとAllwinnerのチップの情報に関しては、linux-sunxi.orgが総本山のようです。ここにいろいろと情報がありました。 Orange PI PC用カーネルにはcedar-veというモジュールが追加されており、これがハードウェアコーデック用のデバイスドライバとなっています。/dev/cedar_devというスペシャルデバイスを介してioctlで直接ハードウェアを操作する機能を提供しています。残念ながらメインラインにはマージされていないようです。 そしてそれを使うよう改造されたffmpegが公開されています。これを動かすことを目標としていろいろ試してみました。リポジトリにはdeb化されたバイナリーもありますが、どうもwheezy向けのようです。しかもパッケージングの作法もよろしくなく、既存のdebianパッケージとファイル単位でいろいろ衝突を起こすので、これを利用するのはお勧めしません。 そこで手動でのビルドを行いましたが、ライブラリ周りで苦労しました。最終的には以下のような手順でビルドできると思います。 ビルドしたバイナリを実行してみます。/dev/cedar_devへのrwアクセスができる状態でffmpegを実行します。 残念ながらうまく動きませんでした。gdbで追いかけてみると、ve_open()で/dev/cedar_devをオープンしてioctl IOCTL_GET_ENV_INFOで構造体ve_infoの値を取得していますが、これ自体は失敗しないものの、各種メンバの値reserved_mem, reserved_mem_size, registersがすべて0になっています。これによりve_mallocが失敗して6行目のエラーメッセージが表示されます。ドライバ側のコードを読むと、「このインターフェースは使うな」というコメントがあり、実際に0を返していました。きっと古いcedar_devで動くコードだったのでしょう… http://linux-sunxi.org/CedarX/Encoderの記述によると、現在あるコード以外にもsunxi_memドライバという物理メモリにアクセスするドライバ(/dev/sunxi_mem)と併用して動くCedarXというライブラリが別にあるようです。ハードウェアエンコーダのサンプルコードもあるのですが、やはりバイナリでしか存在しないライブラリ群に依存しています。 それでもいいからなんとか動かせないかと、sunxi_memドライバを追加した勝手カーネルをビルドしようとしたのですが、mach/includes.hという存在しないヘッダファイルを必要としてビルドできませんでした。ここはまだ調査不足です。 現状の結論として、Orange PI PCでH.264のハードウェアエンコードは「できそうな雰囲気」という煮え切れない結論となってしまいました。linux-sunxi MLの購読を始めたので、今後はこのあたりどうなっているかを尋ねてみたいと思っています。