Bagaimana cara membuat file DEB secara manual?

46

Saya ingin membuat file DEB secara manual. Saya hanya ingin menyediakan folder yang berisi data untuk menginstal, dan skrip yang akan dieksekusi setelah instalasi.

Apakah ini mungkin?

bunga aster
sumber
Jawaban yang tidak terlalu bagus yang Anda pilih?
Gigamegs
@ David, sebenarnya saya membuatnya dengan "dpkg-deb", itu jauh lebih mudah, itu sebabnya saya memilih Gilles, dengan mendaftar file dalam folder paket memberi saya pandangan yang jelas tentang file untuk ditempatkan di sana. Jadi saya pikir jawabannya lebih baik ..
daisy
Saya sudah mendaftarkan semua file dalam paket juga.
Gigamegs
11
@ David Maksudku, berpendapat bahwa jawabannya adalah turunan adalah satu hal, tetapi "bukan jawaban yang sangat bagus"? Jawaban Gilles luar biasa; tidak masalah jika jawaban Anda adalah yang pertama, jawabannya jauh lebih lengkap. Dan tidak ada yang salah dengan mengambil jawaban yang ada dan mengembangkannya; itu hal yang baik
Michael Mrozek

Jawaban:

57

Membuat paket sumber

Rekomendasi saya adalah membuat paket sumber. Instal build-essential , debhelper , dh-make . Ubah ke direktori tempat file yang ingin Anda instal (nama direktori harus dalam bentuk $PACKAGE-$VERSION, misalnya myapp-4.2-1untuk upaya pertama Anda mengemas Myapp V4.2), dan jalankan dh_make --createorig. Jawablah pertanyaan. Debhelper akan membuat infrastruktur dasar yang diperlukan untuk membangun sebuah paket dengan membuat file dalam subdirektori bernama debian, baik beberapa file wajib dan templat untuk file opsional. Anda mungkin perlu memodifikasi beberapa file ini:

  • Edit debian/rulesuntuk membangun apa yang perlu dibangun dan instal file di tempat yang tepat. Jika Anda hanya perlu menyalin beberapa file dan tidak untuk mengkompilasi barang, cukup edit file debian/installuntuk menentukan file mana yang harus diinstal di mana.
  • Edit debian/copyrightuntuk menambahkan informasi lisensi tentang paket Anda dan informasi di mana mendapatkan versi terbaru (jika relevan).
  • Edit debian/changeloguntuk menghapus referensi ke ITP (itu hanya relevan jika Anda bekerja untuk proyek Debian). Ubah nama debian/postinst.exmenjadi debian/postinstdan tambahkan perintah pasca-instalasi Anda di sana. Jika nanti Anda memperbarui paket Anda, jalankan debchange -iuntuk menambahkan entri changelog atau mengedit file dalam Emacs (dengan dpkg-dev-el diinstal).

Jalankan dpkg-buildpackage -rfakeroot -us -ucuntuk membangun .debpaket (hapus -us -ucjika Anda ingin menandatangani paket dengan kunci PGP Anda).

Membuat paket biner secara langsung

Jika Anda memutuskan untuk membuat paket biner secara langsung tanpa membangunnya dari paket source, yang sebenarnya tidak mudah karena tidak ada banyak alat untuk memfasilitasi prosesnya, Anda akan memerlukan sedikit pengetahuan dasar tentang format paket deb. Ini dijelaskan dalam Manual Kebijakan Debian , khususnya bab. 3 (format paket biner) , ch. 5 (mengontrol file) , ch. 6 (skrip instalasi) dan lampiran B (manipulasi paket biner) .

Anda memastikan bahwa paket Anda menginstal file yang diharapkan /usr/share/doc/copyright(berisi lisensi isi paket, serta di mana menemukan versi terbaru paket) dan /usr/share/doc/changelog.Debian.gz(berisi changelog paket deb). Anda tidak memerlukan ini jika Anda hanya akan menggunakan paket di rumah, tetapi lebih baik memilikinya.

Tentang Debian dan turunannya

Jika Anda memiliki alat Debian yang tersedia, gunakan dpkg-debuntuk membuat paket. Di direktori yang berisi data untuk menginstal, tambahkan direktori yang disebut DEBIANdi tingkat atas, yang berisi file kontrol dan skrip pengelola.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

Cara yang sulit

Jika Anda tidak memiliki alat Debian, buat arsip file yang ingin Anda paketkan disebut data.tar.gz, arsip terpisah dari file kontrol yang disebut control.tar.gz(tanpa subdirektori), dan file teks dipanggil debian-binarydan mengandung teks 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Anda memerlukan setidaknya control file dengan bidang Package, Maintainer, Priority, Architecture, Installed-Size, Version, dan apapun yang diperlukan ketergantungan deklarasi.

Script yang akan dieksekusi setelah instalasi dipanggil postinst. Pastikan untuk membuatnya dapat dieksekusi. Ini berjalan berdampingan control.

Mengubah paket biner dari format yang berbeda

Jika Anda sudah memiliki paket biner dari distribusi lain, Anda bisa menggunakan alien untuk mengubahnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
3
IMO itu salinan dari server saya? Bagaimana menurut anda?
Gigamegs
1
Jawabannya mengandaikan OP tahu bagaimana menggunakan emacs. Apakah emacs benar-benar diperlukan di sini? Untuk mengedit changelogs, saya pikir orang dapat menggunakannya dch -i.
Faheem Mitha
Apa yang armelakukan itu tarbukan?
mmstick
@ mmstick Ini format yang berbeda. Saya tidak tahu mengapa para perancang format deb memilih untuk menggunakan ar di sini.
Gilles 'SO- berhenti bersikap jahat'
1
Jika Anda ingin mengubah nama dan email yang dh_make --createorigdigunakan, Anda harus export DEBEMAIL="[email protected]"dan export DEBFULLNAME="Firstname Lastname"sebelumnya.
Ryan
10

Pertama, Anda perlu membuat folder build dan arsip file Anda: tar czvf data.tar.gz files

Kemudian dalam folder build Anda harus membuat file kontrol dengan beberapa informasi yang diinginkan:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <[email protected]>
 Description: This is optional, but creates warnings if left out

Kemudian Anda dapat menambahkan skrip shell preinst, postint, prerm, dan postrm secara independen untuk mengontrol pra dan post instal dan pra dan post menghapus perilaku file .deb dan kemudian Anda dapat membuat arsip kontrol dengan tar: tar czvf control.tar.gz control preinst postinst prerm postrm

Kemudian Anda perlu file debian-biner: echo 2.0 > debian-binary. Dalam membangun Anda folder Anda harus memiliki sekarang file-file ini: debian-binary control.tar.gzdan data.tar.gz.

Akhirnya Anda perlu arpaket untuk membuat file deb.:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz

Gigameg
sumber
1
Mengenai ar -r xxx.deb debian-binary control.tar.gz data.tar.gzhal itu, layak untuk menekankan urutan itu penting: kontrol harus dilakukan sebelum data.
Hibou57
@Bytemain, jawaban pilihan teratas terlihat memang sebagian berdasarkan pada teks Anda, tetapi menambahkan rincian untuk itu, dan itu lebih baik dibaca. urutan yang bisa kita salin / tempel membuatnya lebih tampan.
mariotomo
3

Saya melakukan banyak paket, dan melakukan yang penuh bukanlah hal yang sepele. Pada catatan positif, file dan skrip kurang berfungsi. Anda dapat membuat paket seperti itu, sangat sederhana, dengan alat yang dikenal sebagai debreate .

Debreate adalah GUI yang sangat sederhana, hanya untuk membuat paket DEB sederhana. Anda bisa menentukan file mana, ke mana mereka pergi, dan jika / apa yang harus dijalankan pada post / pra instal / uninstall. Saya dulu hanya melakukan semua paket saya dengan cara standar, tetapi setelah saya mulai menggunakan alat ini, saya hanya akan kembali jika diperlukan.

JM Becker
sumber
1

Periksalah ini dengan Zimbra 7 di Debian menggunakan paket Ubuntu-nya. (Saya keras kepala, saya suka Debian> bUbuntu meskipun Zimbra hanya merilis untuk Ubuntu.) Tidak yakin bagaimana saya mengatasi ini sebelumnya, saya yakin saya tidak perlu melakukan ini ketika saya menginstal ini sebelumnya!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Semua file .deb Anda yang baru akan masuk new/.

Catatan : ini sedang ditekan - dpkg pada wheezy memiliki --force-bad-version sekarang.

matematika
sumber
1

Untuk pembuatan paket yang cepat, Anda dapat menggunakan program checkinstall. Ia melakukan instalasi program, menonton perubahan - dan membuat paket deb atau rpm-nya.

undefine
sumber
Ini terdengar seperti opsi yang bagus untuk melacak paket yang harus Anda instal dari sumber. Bisakah Anda menawarkan lebih banyak detail? Misalnya, dalam proses instalasi Anda dapat mengubah symlink, menghapus file, mengedit file config, menambahkan daemon, dll ... sampai sejauh mana peserta melacak dan membatalkan perubahan ini? Bisakah Anda dengan mudah memodifikasi outputnya untuk menambahkan skrip prerm dan postrm?
AatG
lihat wiki.debian.org/CheckInstall Jika Anda ingin mengubah sesuatu selama instalasi - cara termudah adalah memodifikasi Makefile untuk mengubah bagian instal. prerm / postrm - saya tidak menemukan cara untuk memodifikasinya. Hanya untuk program kecil yang memungkinkan penghapusan instalasi sederhana.
undefine
-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e [email protected] -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
Killinks
sumber