Programları takip etmek


33

Basit bir program kurduğumda sıklıkla kullanıyor make && make installve bir kaldırma hedefim bile yok .

Bir programı yükseltmek istersem, eski programa sorunsuzca yeniden yazıldığını varsaymak standart bir protokol mü?

Bu programları nasıl takip ederim? çoğu insan sadece 'ateş ve unut' mu ve kaldırma hedefi verilmezse her şeyi manuel olarak silmem gerekir mi?


6
GNU Stow burada bir seçenek? "GNU Stow, yazılım paketlerinin kurulumunu yöneten, aynı şekilde kuruldukları görülürken (/ usr / local / stow / emacs / / usr / local / stow / perl gibi) ayrı tutulan bir programdır yer (/ usr / yerel).
Mike Renfro,

@Mike çok umut verici görünüyor; Program sürümlerini sorunsuz bir şekilde etkinleştirme ve devre dışı bırakma fikrini seviyorum. Öncelikle program ne kadar aktif ve istikrarlı ve bir program ön ek protokolünü ne sıklıkta bozuyor?
Will03uk

1
Gülünç kararlı ( 1.3.2, 1996'ya ve 1.3.3 - 2002'ye tarihlendi ) ve neredeyse tamamen etkin değil . Bu sadece sembolik bağlantıları yöneten bir Perl betiği. Günün geri kalanında derleyicilerin ve bu tür önyüklemelerin istiflenmesini sağlamak acı vericiydi, ancak son kullanıcı uygulamaları için iyi oldu. Yeni Debian sürümlerinden kolayca destekleyemediğim veya Solaris paket havuzlarından birinden alamadığım herhangi bir uygulama için kullandım.
Mike Renfro

Yanıtlar:


20

Her programı özel bir dizin ağacına yükleyin ve tüm programların ortak bir hiyerarşide görünmesini sağlamak için Stow veya XStow'u kullanın. Stow, programa özel dizinden ortak bir ağaca sembolik bağlantılar oluşturur.

Daha ayrıntılı olarak, örneğin bir üst seviye dizini seçin /usr/local/stow. Her programı altına yükleyin /usr/local/stow/PROGRAM_NAME. Örneğin, çalıştırılabilir dosyalarının yüklenmesini /usr/local/stow/PROGRAM_NAME/bin, kılavuz sayfalarını /usr/local/stow/man/man1vb. Düzenler. Program autoconf kullanıyorsa, çalıştırın ./configure --prefix /usr/local/stow/PROGRAM_NAME. Koşduktan sonra make installkoşun stow:

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

Ve şimdi bunun gibi sembolik bağlara sahip olacaksınız:

/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

stowDizinin içeriğini listeleyerek hangi programları kurduğunuzu kolayca takip edebilirsiniz ve bir dosyanın hangi programa ait olduğunu her zaman bilirsiniz, çünkü bu programın dizini altındaki bir konuma sembolik bir bağlantıdır. Bir programı çalıştırarak stow -D PROGRAM_NAMEdaha sonra programın dizinini silerek kaldırın . Bir programı çalıştırarak geçici olarak kullanılamaz duruma getirebilirsiniz stow -D PROGRAM_NAME( stow PROGRAM_NAMEyeniden kullanılabilir duruma getirmek için çalıştırın ).

Aynı programın farklı sürümleri arasında hızlıca geçiş yapabilmek istiyorsanız /usr/local/stow/PROGRAM_NAME-VERSION, program dizini olarak kullanın . Sürüm 3'den sürüm 4'e yükseltmek için sürüm 4'ü yükleyin, sonra çalıştırın stow -D PROGRAM_NAME-3; stow PROGRAM_NAME-4.

Stow'un eski sürümleri bu cevapta anlattığım temellerin çok ötesine geçmiyor. Yeni sürümlerin yanı sıra XStow (son zamanlarda bakılmayan), bazı dosyaları görmezden gelmek, stow dizini dışındaki mevcut sembolik bağlarla (örneğin) daha iyi başa çıkmak gibi bazı gelişmiş özellikleri man -> share/manotomatik olarak ele alır (iki programlar aynı dosyayı sağlar) vb.

Kök erişiminiz yoksa veya kullanmak istemiyorsanız, giriş dizininizin altındaki bir dizini seçebilirsiniz, örn ~/software/stow. Bu durumda, eklemek ~/software/binadresinden Müşteri PATH. Eğer manotomatik man sayfalarına bulamazsa, eklemek ~/software/manadresinden Müşteri MANPATH. Ekle ~/software/infoBlogunuza INFOPATH, ~/software/lib/pythonadresinden Müşteri PYTHONPATHve benzeri uygulanabilir olarak.


4
Bu cevabın gönderildiği zamandan beri durumların biraz değişmiş olabileceğine inanıyorum. Dolayısıyla sadece bir güncelleme olarak: GNU Stow şu anda görmezden gelinme listelerini, çoklu istifleme dizinlerini, çatışma ön tespiti vb. Desteklemektedir.
Amelio Vazquez-Reina

18

Bir paket oluşturmak için checkinstall kullanabilirsiniz (RPM, Deb veya Slackware uyumlu paketler) Bu şekilde, uygulama eklemek / kaldırmak için dağıtım paket yöneticinizi kullanabilirsiniz (ancak güncelleme yapmayın)

Eğer kullanmak checkinstallyerine make install(DEB -D parametresini kullanarak, -R RPM ve -S Slack olan) komutu:

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

checkinstall paketi varsayılan olarak kuracak ve kuracak, ya da sadece paketi kurmadan kurtarabilir.

checkinstall çoğu dağıtım havuzunda mevcuttur.


Bu iyi ama çoğunlukla paketli olmayan çok aktif programlar için
tarball kullanıyorum ve stokta

Maalesef, checkinstallaktif olarak korunmuyor gibi görünüyor (?) :-(
Nikos Alexandris

@NikosAlexandris Merak ediyorum, amacına uygun çalışırsa ve bu işi iyi yapıyorsa - ki şu anki bir kullanıcı olmayan olarak, sanırım - bunu aktif olarak sürdürmek neden gerekli?
Haşim

@Hashim Amacınızı anlıyorum. "Alışılmış düşünce" dışında, derleyiciler geliştiğinde derleme yazılımı ile ilgili bir yazılım parçası bakım gerektirmez mi?
Nikos Alexandris

6

Çoğunlukla, bu tür bir şeyin olmasını engellemek için paketlerin, limanların ve diğer tür yöneticilerin arkasındaki sebep buydu.

El ile silme işleminin, başka birinin bilmediğim bir noktaya daha iyi bir cevabı yoksa, el ile yükleme işleminin tek yolu olduğunu söyleyebilirim.


6

Bir başka alternatif de Linux From Scratch'in önerileri :

Paket Kullanıcılarını Kullanarak Daha Fazla Kontrol ve Paket Yönetimi

3 Paket Kullanıcıları
3.1 Giriş

Bu programın temel fikri kolayca açıklanabilir. Her paket belirli bir "paket kullanıcısına" aittir. Bir paketi kurduğunuzda, paketi yükleyen tüm dosyaların paket kullanıcısına ait olmasına neden olarak bu paket kullanıcısı olarak oluşturup yüklersiniz. Sonuç olarak, normal paket yönetimi görevlerinin tümü standart komut satırı yardımcı programlarının kullanımıyla rahatça gerçekleştirilebilir. Bir basit ls -l <file>size, örneğin, hangi paketin <file>ait olduğunu ve bir find -user ...komutun, belirli bir pakete ait tüm dosyalar üzerinde bir işlem gerçekleştirmenize izin verdiğini söyleyecektir, örneğin, paketi kaldırmak için onları silin.

Ancak paket yönetimi, paket kullanıcılarının uygun olduğu her şey değildir. Paket kullanıcıları kök haklarına sahip olmadıkları için, bir paketin yükleme yapabilecekleri sınırlıdır. Bir paket kullanıcısının yapmasına izin verilmeyen bir şey, örneğin, farklı bir paket kullanıcısının dosyalarının üzerine yazmaktır. Aynı addaki bir ikili dosya, kütüphane veya başlık dosyasını yüklemek isteyen farklı paketler arasında çıkan çatışmalar düşündüğünüzden daha yaygındır. Paket kullanıcıları, B paketinin kurulum riskini asla siz paketlemeden sessizce A paketinden tahrip etme riskine maruz bırakmazsınız. B paketinin kurulumu sırasında her girişimi "İzin verilmez" veya "İşleme izin verilmiyor" hatasına neden olur, böylece uygun adımları atama şansınız olur. Paket kullanıcılarının yapmasına izin verilmeyen başka bir şey setuid root binary'leri yüklemektir. İkili setuid kökü yapma kararı aynı zamanda akıllı bir yöneticinin bir yazılım paketinin yaratıcısına bırakmak istemediği bir şeydir.

Genellikle paket kullanıcı hesaplarının geçerli bir parolası yoktur; bu nedenle su , paket kullanıcılarının bu sisteme ek bir yol açmamasını ve güvenliği baltalamasını sağlayan bir paket kullanıcısına yalnızca kök kullanıcı tarafından verilebilir . Ama olabilir yükleyip gerçek kök hesabına erişimi kalmadan bunu belli yazılım paketlerini korumak isterler eş yönetici izin vermek için yine şifreleri ayarlayın. Bu yardımcı yönetici, örneğin çalışma grubu için gerekli olabilecek ek kitaplıkları yükleyebilir, silebilir, değiştirebilirdi. Yine de, libc gibi kendisine ait olmayan kütüphaneleri çıkaramaz veya değiştiremezdi.

Bu ilk kaba öneriden sonra, gelişmiş bir değişken buldum:

crablfs - Kullanıcı Tabanlı Paket Yönetim Sistemi

Bu crablfs, paket yönetimi için benzersiz sıvılar ve kılavuzlar kullanan paket yönetiminin en son örneğidir, ancak sourceforge üzerinde ulfs'te tekrar gelişmektedir:

uLFS: Sıfırdan Yönetilebilir ve Yeniden Kullanılabilir Linux'unuz

Kurulu paketlerin nedensel kullanıcıları için "paket kullanıcıları" LFS çözümünün hafif, daha az istilacı ve zarif olduğunu düşünüyorum. Kısacası, içinde paketlerini yüklemek /usr/localveya /home/user/localve her paket için eşsiz bir uid ve Gids kullanarak dosyaları izlemek, ancak geleneksel yerlerin ortak dizinlere tüm dosyaları koymak /usr/local/bin, /usr/local/libtüm ana akım Linux dağıtımlarında olduğu gibi ... dosya oklüzyonu ve istenmeyen dosya üzerine yazma veya silme Matthias S. Benkmann tarafından more_control_and_pkg_man.txt dosyasında sadece normal dosya ve dizin izinleri manipülasyonu gerektiren, örneğin istenmeyen dosyaların üzerine yazmaktan kaçınılması gereken yapışkan bit izni gerektiren açık bir Linux numarasıyla engellenir:

3.3 Gruplar

Her paket kullanıcısı en az 2 gruba aittir. Bu gruplardan biri, tüm paket kullanıcılarının (ve yalnızca paket kullanıcılarının) ait olduğu "yükleme" grubudur. Paketlerin içine malzeme yüklenmesine izin verilen tüm dizinler yükleme grubuna aittir. Bu, / bin ve / usr / bin gibi dizinleri içerir, ancak / root veya / gibi dizinleri hariç tutar. Kurulum grubunun sahip olduğu dizinler her zaman grup halinde yazılabilirdir. Bu, paket yönetimi açısından yeterli olacaktır, ancak daha fazla hazırlık yapılmadan bu, ek güvenlik veya kontrol sağlamayacaktı çünkü her paket farklı bir paketten dosyaları değiştirebilirdi (değişiklik çıktıdan görülebilirls -l, olsa). Bu nedenle, tüm kurulum dizinleri yapışkan niteliğini alır. Bu, kullanıcıların yeni dosyalar oluşturmasına ve dizindeki kendi dosyalarını silmelerine veya değiştirmelerine izin verir, ancak diğer kullanıcıların dosyaları değiştirilemez veya kaldırılamaz. Bu ipucunun geri kalanında, "yükleme dizini" terimi kullanıldığında, grup kurulumuna ait olan, gruba yazılabilir ve yapışkan bir dizine atıfta bulunur. IOW, <dir>bir yükleme dizinine dönüştürmek için

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

Benim için basit ve zekice bir çözüm gibi görünüyor! Bu programı LFS yapımda kullandım ve çalışan bir çözüm ...


3
  1. Hatırlatıcı olarak boş bir RPM yapabilirsiniz.
  2. Yazılımı düzgün bir RPM'ye sarmayı düşünebilirsiniz.
  3. Size hatırlatmak için tardosyalardan bir kopyasını kurulumdan bırakabilirsiniz /usr/src/non-rpms(genellikle bunu yaparım).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.