私は一般的にLinuxに初めてアクセスし、Alpine DockerイメージからDebianパッケージを構築する方法を見つけようとしています。これはこれまでパイプラインを実行できる最速の速度ですが、残念ながら実行しようとするとdpkg-deb --build
次のエラーが発生します。
03:22:44 dpkg-deb: building package 'x-sync' in 'x-sync_1.0.2.deb'.
03:22:44 tar: unrecognized option: format=gnu
03:22:44 BusyBox v1.27.2 (2018-01-29 15:48:57 GMT) multi-call binary.
03:22:44
03:22:44 Usage: tar -[cxtZzJjahmvO] [-X FILE] [-T FILE] [-f TARFILE] [-C DIR] [FILE]...
03:22:44
03:22:44 Create, extract, or list files from a tar file
03:22:44
03:22:44 Operation:
03:22:44 c Create
03:22:44 x Extract
03:22:44 t List
03:22:44 f Name of TARFILE ('-' for stdin/out)
03:22:44 C Change to DIR before operation
03:22:44 v Verbose
03:22:44 Z (De)compress using compress
03:22:44 z (De)compress using gzip
03:22:44 J (De)compress using xz
03:22:44 j (De)compress using bzip2
03:22:44 a (De)compress using lzma
03:22:44 O Extract to stdout
03:22:44 h Follow symlinks
03:22:44 m Don't restore mtime
03:22:44 exclude File to exclude
03:22:44 X File with names to exclude
03:22:44 T File with names to include
03:22:44 dpkg-deb: error: subprocess tar -cf returned error exit status 1
次のDockerfileをパッケージ化しようとしています。
FROM alpine
RUN apk add --no-cache dpkg openjdk8
他のディストリビューション(Ubuntu開発環境など)と互換性のあるDebianパッケージをこのディストリビューションにビルドする方法はありますか?
答え1
Debian パッケージの構築に最適な環境は、常に Debian ベースの環境です。 Alpineベースのコンテナは小さなサイズと迅速なセットアップ時間に適していますが、いくつかの問題も提示し、そのうちの2つは特に面倒な問題です。
- 彼らは、DebianパッケージがほとんどのツールのGNUバリアントに依存するBusyboxを使用します(例えば
tar
あなたが見つけたように)。 - 最も重要なのは、muslを使用し、Debianはデフォルトでglibcを使用することです。
二つできる解決することができますが、そうすることで、最小のDebianコンテナ(たとえば、言及したもの)bitnami/minideb
と比較して小さなAlpineコンテナの利点を失います。
開発および/またはビルドシステムでDebian派生製品を実行している場合は、以下を使用して、含まれているビルド環境を引き続き使用しながら、コンテナステップを完全にスキップできます。pbuilder
。最大速度を得るには、tmpfsをインストールして/var/cache/pbuilder/build
から次のようにビルドを実行します。eatmydata
。sbuild
そしてcowbuilder
特に定期的に同様のパッケージをビルドする場合は、見てみる価値があります。
しかし、dpkg-deb -b
私は次のようにバイナリパッケージを構築しません。高いVincent Bernatから始めて、ソースパッケージを構築する方法を学ぶことをお勧めします。実用的な Debian パッケージング、美しくシンプルです。