Ana dizine paketleri kurmak için APT almanın bir yolu var mı?
Sistem genelinde değişiklik yapmak istemiyorum.
Alternatif olarak, ev dizini tabanlı linux paket yöneticileri var mı?
Dpkg, RPM'nin sahip olduğu --relocate özelliğine sahip değildir. Yine de bu özelliği kaç RPM paketinin desteklediğini düşünmeye değer. Temel olarak, yapılamaz.
Yapabileceğiniz şey, küresel olarak sisteme kurmadan önce bir şeyi test etmek istiyorsanız bir chroot kullanmaktır. Bunu yapmak için, root erişimi sağlayabilmeniz gerekir. Yapılacak ilk şey temel bir chroot oluşturmaktır:
# debootstrap lenny lenny-chroot
Bu, lenny-chroot
Dizininde bir Lenny chroot oluşturur.
Şimdi krota girebiliriz:
# chroot lenny-chroot
Şimdi istediğimizi yapabilir ve sistemin geri kalanını bozmadan herhangi bir şey kurabiliriz. İşimiz bittiğinde, exit yazın veya ctrl-D tuşlarına basın.
Linuxbrew , kaynağından derleyen ve ana dizininizdeki ikili dosyaları tutan Linux için (OS X için popüler Homebrew paket yönetim sistemine dayalı) kök olmayan başka bir paket yöneticisidir.
Dokümanlardan alıntı yapan Linuxbrew özellikleri:
Gentoo öneki tam olarak istediğinizi yapar.
Tüm paketleri belirtilen bir dizine kurar. Kök erişimi gerekmez. Ondan kurtulmak istiyorsanız, temel dizini kaldırın.
Not: Bu Ubuntu> = 11.04 veya Multiarch ile başka herhangi bir Debian türevi üzerinde çalışmaz.
Derleme seçeneğine küçük bir eklenti olarak, derleme zamanında farklı bir önek seçeneğine sahip bir pakete derleme ("checkinstall" veya belki de başka bir yöntemle) için yarım yol seçeneği vardır. Avantajı, paketin yetenek veya sinaptik gibi paket yöneticilerinde görünmesidir.
Bunun yanı sıra, bazı durumlarda gerçek .deb dosyasını indirmenin ve dpkg kurulumu ile farklı bir önek zorlamanın mümkün olabileceğini düşünüyorum, ancak herhangi bir rastgele paketle yapılabilecek bir şey olmadığını düşünüyorum, ancak derlenmiş olmalılar. yüklemeden önce dışa aktaracağınız konumları (değişmez açık önek yerine) bazı değişkenler. Ben yordam hakkında hiçbir şey bilmiyorum, google için "dpkg instdir öneki".
Sen-ebilmek kullanma fakechroot - kendi web sitesinde demo bir göz atın.
Hayır, yapabileceğini sanmıyorum.
Şu an düşünebildiğim en iyi şey apt-get source
ve paketinizi derleyin. Belki bir şekilde paketleri evinize yüklemek için prosedürü (daha fazla veya daha az otomatik olabilir) Tweak edebilirsiniz.
Bir diğeri dpkg -X
istediğiniz bir dizine çıkarmak için.
Rootless GoboLinux tam olarak istediğinizi yapabilir: yükseltilmiş ayrıcalıklara sahip olmayan paket yöneticisi kendi ana dizininizde. Umarım ne yaptığınızı bilirsiniz; rootless Gobo'nun en bakımlı kurulum modu değil ve birkaç yıl önce kullandığımda, kurulum komut dosyası diğer Gobo değişikliklerine göre biraz eski olduğu için birkaç ayar gerekiyordu.
Ayrıca birkaç paketleyen klik var .deb
s, paketleri ana dizininize yükleyebilir ve çalışması için kök ayrıcalığı gerektirmez ... ancak ilk kurulum root gerektirir.
Genellikle kaynakları alıyorum ve "INSTALL" gibi bir dosyaya bakıyorum. Genellikle ./configure --prefix=somedir
. Sonra somedir/bin
yolunuza.
Başarıyla hiçbir kök erişimine sahip olmadığım bir okul Debian sunucusuna BÜYÜK işbirliği yazılım paketleri koleksiyonu yüklemek için kullandığım bir çözüm var (başka bir paket yöneticisi yüklemek için bile değil). deboostrap
veya herhangi bir paket yöneticisi kullanmaz.
Yöntem kısmen manuel, ancak uygun hale getirmek için elimden geleni yaptım.
install
olarak adlandırdığım bu komut dosyasını kullanır (chmod +x
'A unutmayın):
#!/bin/bash
# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME
# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX
# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
file="${PREFIX}${f}"
if grep -Iq . "$file"; then
if grep -q '/usr' "$file"; then
# interactively ask for each occurence, if it should be replaced
vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
fi
else
echo "Leaving binary file $file unmodified"
fi
done
Bu yüzden genellikle ilk önce apt-get download package_name
Kullanarak bir deb dosyası indiriyorum. Sonra ./install package_name_blabla.deb
Komutunu çalıştırıyorum ve /usr
İle değiştirilmemesi gerekiyorsa, paketlenmemiş dosyalarda her $PREFIX/usr
Oluşumuna el ile karar veriyorum.
Bu karar tamamen hangi paketlerin sisteme yüklendiğine ve hangilerinin bu yöntem kullanılarak yüklendiğine bağlıdır. Genellikle, ör. pkg-config dosyalarının bu ikameye ihtiyacı vardır, oysa #!/usr/bin/Perl
gibi Shebang satırlarına gerek yoktur. Genel kural, ortaya çıkan yolun mevcut bir dosyayı işaret etmesi gerektiğidir.
Paketler bu şekilde yüklendiğinde, diğer programlara bir şekilde bunları anlatmanız gerekir. Bu, LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, CMAKE_PREFIX_PATH
vb.
Bu yaklaşımda, bağımlılıkların otomatik olarak indirilmediği/yüklenmediği konusunda bir uyarı vardır; bunları manuel olarak takip etmeniz gerekir.
Ayrıca APT açıkça bu paketler hakkında bilmiyor, bu yüzden onları sonsuza kadar kayıp olarak gösterecektir.Ancak bu mantıklı - kim bir bağlı bir sistem genelinde uygulama yüklemek istersiniz kullanıcının kurulumu.
Bir programı kaldırmak isterseniz, ar p "$1" data.tar.xz | tar tJ
Kullanarak deb arşivinin içeriğini listeleyebilir ve daha sonra bu dosyaları PREFIX
öğesinden silebilirsiniz.
Bunun bir dağıtımdaki resmi depolarla nasıl çalışacağını hayal etmekte zorlanıyorum. Bağımlılıkları nasıl çözmeli? Sistemden mi yoksa ev dizinlerinizden mi? Her ikisinde de farklı sürümler bulursa ne olur?
Düşünebileceğim en iyi şey, insanların 64 bit sistemlerde 32 bit uygulamalar için yaptığı gibi krootlu bir ortam olurdu. Krootta debootstrap çağırmak gibi daha fazla yük, ama bazı symlinking , Shell sarıcı komut dosyası eğlenceli, ne istersen yapabilir.
Ana klasörünüze paketleri yüklemeniz gereken çok az durum vardır.
Ancak yazılımı yerel makinenize derleyebilir ve yükleyebilirsiniz. Sadece açın, ardından ./configure --prefix=$HOME/local
veya başka bir dizin. Daha sonra make
ve make install
normal olarak. Bu, programı ~/local/
, örneğin yürüttüğünüz program ~/local/bin/programmname
.
Ben hala sorun üzerinde çalışıyorum, ama temelde ihtiyaç duyduğunuz şey debootstrap ve fakeroot ile çalışması gerekir. debootstrap sadece bir grup Shell betiği, bu yüzden onu neyin tıkladığını görmek için ayırıyorum. Sabit kısım, kurulduktan sonra dosyaları kaldırmak olacaktır.
Ne yazık ki (süper popüler olacağından eminim) böyle bir şey sağlayan herhangi bir dağıtım duymadım. Gerçi rpm tabanlı dağıtımını taklit edebilirsiniz ... Bunu denemedim, ancak kullanıcı tabanlı bir rpm veritabanı oluşturabilir ve daha sonra kullanıcı veritabanına rpm'ler yükleyebilirsiniz.
Aşağıdakilerle yeni bir kullanıcı tabanlı dağıtım oluşturmayı deneyin:
rpm --initdb --dbpath DIRECTORY
Sonra yardımcı olabilecek birkaç seçenek var:
--prefix
--relocate
Kendi tecrübelerime göre, chroot ortamı olmayan başka bir dizine yüklemek için mevcut DEB paketlerini kullanmanın kolay bir yolu yoktur. Debian/Ubuntu kurulum araçları dpkg / yetenek / dselect tümünün düzgün çalışması için kök ayrıcalıkları gerekir.
Şimdi kaynak DEB verildiğinde, Debian/rules dosyasını, paketin farklı bir dizin ağacına kurması ve kurması için değiştirebilirsiniz, ancak daha sonra zaten mevcut olan ikili paketleri kullanmıyorsunuzdur.
Diğerlerinin de belirttiği gibi debootstrap kullanabilir ve kolayca 64-bit bir ana bilgisayarda 32-bit bir ortama sahip olmak için yaptığım bir chroot ortamı oluşturabilirsiniz, ancak bu bir chroot yüklemeyi gerektirir en azından temel paketler kopyalandı. Alanınız varsa ve bu uygun bir çözümse, chroot ortamında yüklü uygulamaların kolayca yürütülmesini sağlamak için dchroot
veya daha iyisi schroot
ile birleştirebilirsiniz.