Melacak program

33

Ketika saya menginstal sebuah program sederhana, program ini sering digunakan make && make installdan bahkan seringkali tidak memiliki target uninstall .

Jika saya ingin memutakhirkan suatu program, apakah itu protokol standar untuk menganggapnya hanya menulis ulang dengan mulus di atas program lama?

Bagaimana cara melacak program-program ini; apakah kebanyakan orang hanya 'memecat dan melupakan' dan jika tidak ada target penghapusan yang diberikan, apakah saya harus menghapus semuanya secara manual?

Will03uk
sumber
6
Apakah GNU Stow suatu opsi di sini? "GNU Stow adalah program untuk mengelola instalasi paket perangkat lunak, memisahkannya (/ usr / local / stow / emacs vs. / usr / local / stow / perl, misalnya) sembari membuatnya tampak diinstal pada saat yang sama tempat (/ usr / lokal). "
Mike Renfro
@ Mike sepertinya sangat menjanjikan; Saya suka gagasan mengaktifkan dan menonaktifkan versi program dengan mulus. Pertama seberapa aktif dan stabil program dan seberapa sering suatu program melanggar protokol awalan?
Will03uk
1
Sangat stabil ( 1,3.2 tanggal hingga 1996, dan 1.3.3 hingga 2002 ), dan hampir sepenuhnya tidak aktif . Itu hanya skrip Perl yang mengelola symlink. Kembali pada hari itu, itu adalah rasa sakit untuk mendapatkan kompiler dan bootstrap semacam itu ke gudang, tetapi untuk aplikasi pengguna akhir, itu baik-baik saja. Saya telah menggunakannya untuk aplikasi apa pun yang saya tidak dapat dengan mudah mendukung dari rilis Debian yang lebih baru, atau dapatkan dari salah satu repositori paket Solaris.
Mike Renfro

Jawaban:

20

Instal setiap program dalam pohon direktori khusus, dan gunakan Stow atau XStow untuk membuat semua program muncul dalam hierarki umum. Stow membuat tautan simbolis dari direktori khusus program ke pohon umum.

Secara lebih rinci, pilih direktori tingkat atas, misalnya /usr/local/stow. Instal setiap program di bawah /usr/local/stow/PROGRAM_NAME. Sebagai contoh, atur agar executable-nya dapat diinstal /usr/local/stow/PROGRAM_NAME/bin, halaman manualnya /usr/local/stow/man/man1dan sebagainya. Jika program menggunakan autoconf, maka jalankan ./configure --prefix /usr/local/stow/PROGRAM_NAME. Setelah Anda menjalankan make install, jalankan stow:

./configure --prefix /usr/local/stow/PROGRAM_NAME
make
sudo make install
cd /usr/local/stow
sudo stow PROGRAM_NAME

Dan sekarang Anda akan memiliki tautan simbolis seperti ini:

/usr/local/bin/foo -> ../stow/PROGRAM_NAME/bin/foo
/usr/local/man/man1/foo.1 -> ../../stow/PROGRAM_NAME/man/man1/foo.1
/usr/local/lib/foo -> ../stow/PROGRAM_NAME/lib/foo

Anda dapat dengan mudah melacak program apa yang telah Anda instal dengan mendaftar isi stowdirektori, dan Anda selalu tahu program apa yang dimiliki file karena itu adalah tautan simbolis ke lokasi di bawah direktori program itu. Hapus instalasi program dengan menjalankan stow -D PROGRAM_NAMElalu menghapus direktori program. Anda dapat membuat program sementara tidak tersedia dengan menjalankan stow -D PROGRAM_NAME(jalankan stow PROGRAM_NAMEuntuk membuatnya tersedia lagi).

Jika Anda ingin dapat dengan cepat beralih di antara berbagai versi program yang sama, gunakan /usr/local/stow/PROGRAM_NAME-VERSIONsebagai direktori program. Untuk memutakhirkan dari versi 3 ke versi 4, instal versi 4, lalu jalankan stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4.

Stow versi lama tidak terlalu jauh melampaui dasar-dasar yang saya jelaskan dalam jawaban ini. Versi yang lebih baru, serta XStow (yang belum dipelihara akhir-akhir ini) memiliki fitur yang lebih canggih, seperti kemampuan untuk mengabaikan file tertentu, lebih baik mengatasi symlink yang ada di luar direktori penyimpanan (seperti man -> share/man), menangani beberapa konflik secara otomatis (ketika dua program menyediakan file yang sama), dll.

Jika Anda tidak memiliki atau tidak ingin menggunakan akses root, Anda dapat memilih direktori di bawah direktori home Anda, mis ~/software/stow. Dalam hal ini, tambahkan ~/software/binke PATH. Jika mantidak secara otomatis menemukan halaman manual, tambahkan ~/software/manke halaman Anda MANPATH. Tambahkan ~/software/infoke Anda INFOPATH, ~/software/lib/pythonke Anda PYTHONPATH, dan seterusnya sebagaimana berlaku.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
4
Saya percaya hal-hal mungkin telah berubah sedikit sejak saat jawaban ini diposting. Jadi seperti pembaruan: GNU Stow saat ini mendukung daftar abaikan, beberapa direktori penyimpanan, pra-deteksi konflik, dll. Saya juga berpikir bahwa penyimpanan sedang dalam pengembangan aktif sementara Xstow belum diperbarui selama ~ 3 tahun.
Amelio Vazquez-Reina
18

Anda dapat menggunakan checkinstall untuk membuat paket (paket yang kompatibel dengan RPM, Deb, atau Slackware) Dengan begitu, Anda dapat menggunakan manajer paket distro Anda untuk menambah / menghapus aplikasi (tetapi tidak memperbarui)

Anda menggunakan checkinstallmenggantikan make installperintah (menggunakan parameter -D untuk Deb; -R adalah RPM dan -S adalah Slackware):

root@nowhere# ./configure
root@nowhere# make
root@nowhere# checkinstall -D

checkinstall akan membangun dan menginstal paket secara default, atau Anda dapat membuatnya hanya membangun paket tanpa menginstal.

checkinstall tersedia di sebagian besar repositori distro.

Andrew Lambert
sumber
Ini bagus tapi saya terutama menggunakan tarball untuk program yang sangat aktif yang tidak sering dikemas dan kemampuan untuk beralih antara versi yang rusak dan yang bukan dalam versi besar
Will03uk
Sayangnya, checkinstalltampaknya tidak dipelihara secara aktif (?) :-(
Nikos Alexandris
@NikosAlexandris Saya ingin tahu, jika berfungsi untuk tujuan yang dimaksudkan dan melakukan ini dengan baik - yang, sebagai non-pengguna saat ini, saya berasumsi demikian - mengapa perlu dipertahankan secara aktif?
Hashim
@Hashim, aku mengerti maksudmu. Karena "kebiasaan berpikir", akankah sebuah perangkat lunak terkait dengan kompilasi perangkat lunak, tidak perlu pemeliharaan, ketika kompiler berkembang?
Nikos Alexandris
6

Sebagian besar ini adalah alasan di balik paket, pelabuhan, dan jenis manajer lainnya untuk mencegah hal semacam ini terjadi.

Saya akan mengatakan bahwa penghapusan manual adalah satu-satunya cara untuk menginstal manual, kecuali jika orang lain memiliki jawaban yang lebih baik untuk titik itu saya mungkin tidak menyadarinya.

baweaver
sumber
6

Satu lagi alternatif adalah dari petunjuk Dari Dari Awal Linux :

Lebih Banyak Kontrol dan Manajemen Paket menggunakan Pengguna Paket

3 Paket Pengguna
3.1 Pendahuluan

Ide dasar skema ini mudah dijelaskan. Setiap paket milik "pengguna paket" tertentu. Ketika Anda menginstal paket, Anda membangun dan menginstal paket sebagai pengguna paket ini, menyebabkan semua file yang diinstal dimiliki oleh pengguna paket. Sebagai akibatnya, semua tugas manajemen paket yang biasa dapat dicapai dengan nyaman melalui penggunaan utilitas baris perintah standar. Sederhana ls -l <file>akan memberi tahu Anda, misalnya, apa paket <file>milik dan find -user ...perintah memungkinkan Anda untuk melakukan operasi pada semua file milik paket tertentu, misalnya menghapusnya untuk menghapus instalasi paket.

Tetapi manajemen paket tidak semuanya baik untuk pengguna paket. Karena pengguna paket tidak memiliki hak root, instalasi paket terbatas pada apa yang dapat dilakukannya. Satu hal yang tidak boleh dilakukan oleh pengguna paket, misalnya menimpa file dari pengguna paket yang berbeda. Bentrokan antara paket berbeda yang ingin menginstal file biner, pustaka atau header dengan nama yang sama lebih umum daripada yang Anda kira. Dengan pengguna paket, Anda tidak pernah menjalankan risiko instalasi paket B menghancurkan file dari paket A tanpa Anda sadari. Setiap upaya melakukan ini selama instalasi paket B akan menyebabkan kesalahan "Izin ditolak" atau "Operasi tidak diizinkan" sehingga Anda memiliki kesempatan untuk mengambil langkah-langkah yang tepat. Hal lain yang tidak boleh dilakukan oleh pengguna paket adalah menginstal binari setuid root. Keputusan untuk membuat root setuid biner juga merupakan sesuatu yang admin yang bijaksana tidak ingin menyerahkan pembuat paket perangkat lunak.

Biasanya akun pengguna paket tidak memiliki kata sandi yang valid sehingga hanya root su untuk pengguna paket, yang memastikan bahwa pengguna paket tidak membuka jalan tambahan ke dalam sistem dan merusak keamanan. Tetapi Anda tetap dapat menetapkan kata sandi untuk memungkinkan admin bersama yang Anda inginkan dapat menginstal dan memelihara paket perangkat lunak tertentu untuk melakukannya tanpa memiliki akses ke akun root yang sebenarnya. Admin-admin ini misalnya dapat menginstal, menghapus, mengubah perpustakaan tambahan yang mungkin diperlukan untuk workgroup-nya. Namun, ia tidak akan dapat menghapus atau memodifikasi perpustakaan yang bukan miliknya, seperti libc.

Setelah saran kasar pertama ini, saya menemukan varian berevolusi:

crablfs - Sistem Manajemen Paket Berbasis Pengguna

Ini crablfsadalah spesimen terbaru dari manajemen paket menggunakan unik dan gids untuk manajemen paket, tetapi pada sourceforge itu berkembang lagi dalam ulfs:

uLFS: Linux Anda yang Dapat Dikelola dan Dapat Digunakan Dari Awal

Untuk pengguna kausal dari paket yang diinstal saya pikir solusi LFS "pengguna paket" adalah solusi yang ringan, tidak terlalu invasif dan elegan. Singkatnya, Anda menginstal paket di /usr/localatau /home/user/localdan melacak file menggunakan uids dan gids unik untuk setiap paket tetapi meletakkan semua file di tempat-tempat tradisional, direktori umum /usr/local/bin, /usr/local/libseperti di semua distribusi Linux utama ... penyumbatan file dan penimpaan atau penghapusan file yang tidak diinginkan atau menghapus file yang tidak diinginkan dihindari oleh trik Linux yang rapi dijelaskan oleh Matthias S. Benkmann di more_control_and_pkg_man.txt yang hanya memerlukan manipulasi izin file dan direktori normal, misalnya izin bit lengket untuk direktori untuk menghindari overwrite file yang tidak diinginkan:

3.3 Grup

Setiap pengguna paket memiliki setidaknya 2 grup. Salah satu dari grup ini adalah grup "instal", yang dimiliki oleh semua pengguna paket (dan hanya pengguna paket). Semua direktori yang paketnya diizinkan untuk menginstal barang milik grup instalasi. Ini termasuk direktori seperti / bin dan / usr / bin tetapi tidak termasuk direktori seperti / root atau /. Direktori yang dimiliki oleh grup instal selalu dapat ditulis kelompok. Ini akan cukup untuk aspek manajemen paket, tetapi tanpa persiapan lebih lanjut ini tidak akan memberikan keamanan atau kontrol tambahan karena setiap paket dapat mengganti file dari paket yang berbeda (perubahan akan terlihat pada output darils -l, meskipun). Untuk alasan ini semua direktori instal mendapatkan atribut sticky. Ini memungkinkan pengguna untuk membuat file baru dan menghapus atau memodifikasi file mereka sendiri di direktori, tetapi file dari pengguna lain tidak dapat dimodifikasi atau dihapus. Di sisa petunjuk ini, setiap kali istilah "instal direktori" digunakan, itu merujuk pada direktori milik grup instal, dapat ditulis-grup dan lengket. TKI, untuk berubah <dir>menjadi direktori instalasi yang akan Anda lakukan

instal chgrp && chmod g + w, o + t

Bagi saya sepertinya solusi yang sederhana dan pintar! Saya menggunakan skema ini di build LFS saya dan ini adalah solusi yang berfungsi ...

pengguna12554
sumber
3
  1. Anda dapat membuat RPM kosong sebagai pengingat.
  2. Anda dapat melihat membungkus perangkat lunak dengan benar ke dalam RPM.
  3. Anda dapat meninggalkan salinan tarfile dari instal masuk/usr/src/non-rpms untuk mengingatkan Anda (itulah yang biasanya saya lakukan).
Aaron D. Marasco
sumber