APT'nin paketleri ev dizinime yüklemesini sağlamanın bir yolu var mı?


Yanıtlar:


17

Dpkg, RPM'nin sahip olduğu - relocate özelliğine sahip değildir. Bu özelliği kaç RPM paketinin desteklediğini düşünmeye değer. Temel olarak, yapılamaz.

Yapabilecekleriniz, sisteme global olarak kurmadan önce bir şeyi test etmek istiyorsanız, bir chroot kullanmaktır. Bunu yapmak için, köke erişebilmeniz gerekir. Yapılacak ilk şey basit bir chroot oluşturmaktır:

# debootstrap lenny lenny-chroot

Bu lenny-chrootdizinde bir Lenny chroot oluşturur .

Şimdi chroot'a girebiliriz:

# chroot lenny-chroot

Artık istediğimiz her şeyi yapabiliriz ve sistemin geri kalanını mahvetmeden herhangi bir şeyi kurabiliriz. İşimiz bittiğinde, sadece exit yazın veya ctrl-D tuşlarına basın.


8

Linuxbrew , Linux'tan (OS X için popüler Homebrew paket yönetim sistemine dayanan), kaynaktan derleyen ve ikili dosyaları ana dizininizde tutan başka bir kök dışı paket yöneticisidir.

Dokümanlar alıntı, Linuxbrew özellikleri şunlardır:

  • Bir ev dizinine yazılım yükleyebilir ve bu yüzden sudo gerektirmez
  • Yerel dağıtım tarafından paketlenmemiş yazılımı yükleyin
  • Yerel dağıtım eski olduğunda, yazılımın güncel sürümlerini yükleyin
  • Hem Mac hem de Linux makinelerinizi yönetmek için aynı paket yöneticisini kullanın

7

Gentoo öneki tam olarak istediğini yapar.

Tüm paketleri belirtilen bir dizine yükler. Kök erişimi gerekmez. Ondan kurtulmak istiyorsan, sadece temel dizini kaldır.

Not: Bu, Ubuntu> = 11.04 veya Multiarch ile çalışan diğer herhangi bir Debian türevinde çalışmaz.


1
Gentoo kaynaktan derleniyor, poster paket yoluyla belirli bir dizine yüklemek istiyor gibi görünüyor. Bu gerçekten aynı şey değil.
Andrew Case,

1
@AndrewCase Gentoo'nun da paketleri var sanırım. İkili olmadıkları gerçeği, son kurulum için anlamsızdır.
jiggunjer

4

Derleme seçeneğine küçük bir ek olarak, derleme zamanında farklı bir ön ek seçeneğine sahip bir pakete derleme seçeneği de var ("checkinstall" veya belki başka bir yöntemle). Bunun avantajı, paketin yetenek veya sinaptik gibi paket yöneticilerinde görünmesidir.

Bunun yanında, bazı durumlarda asıl .deb dosyasını indirmek ve dpkg kurulumuyla farklı bir önek zorlamak mümkün olabilir diye düşünüyorum, ancak bunun herhangi bir rastgele paketle yapılabilecek bir şey olmadığını, ancak derlemiş olduklarını düşünüyorum. yüklemeden önce dışa aktardığınız konumlarına ilişkin bazı değişkenler (değişmeyen açık önek yerine). İşlem hakkında hiçbir şey bilmiyorum, "dpkg instdir öneki" için google.



1

Rootless GoboLinux tam olarak istediğiniz şeyi yapabilir: yükseltilmiş ayrıcalıklara sahip olmayan paket yöneticisi, kendi ana dizininizde. Umarım ne yaptığını biliyorsundur; Rootless, Gobo'nun en iyi korunan kurulum modu değildir ve birkaç yıl önce kullandığımda, kurulum betiği diğer Gobo değişikliklerine göre biraz eski olduğundan, birkaç tweaks gerektiriyordu.

Birkaç .debsaniye içinde yeniden paketlenen , paketleri dizine yükleyebilen ve işletmek için kök ayrıcalıkları gerektirmeyen klik de var ... ancak ilk kurulum root gerektiriyor.


1

Genellikle kaynakları alıyorum ve "INSTALL" gibi bir dosyayı kontrol ediyorum. Genellikle yapılacak talimatlar vardır ./configure --prefix=somedir. O zaman somedir/binyoluna eklemek zorundasın .


bağımlılıkları almak, derlemek ve güncel tutmak zor olabilir.
Paolo

Bu geriye doğru. Soru, paket yöneticilerinin (1990'lardan bu yana tercih edilenler) bu şekilde davranmalarını sağlamaktır.
Monica

1

Hayır, yapabileceğini sanmıyorum.

Şu an düşünebildiğim en iyi şey apt-get sourcepaketinizi kullanmak ve derlemektir. Belki de paketleri bir şekilde evinize yerleştirme prosedürünü (aşağı yukarı otomatik hale getirilebilecek) düzeltebilirsiniz.

Bir diğeri, dpkg -Xseçtiğiniz bir dizine çıkarmak için kullanmaktır .


0

Paketleri ana klasörünüze yüklemeniz gereken çok az vaka vardır.

Ancak, yerel makinenize yazılım derleyebilir ve yükleyebilirsiniz. Sadece unzip, sonra ./configure --prefix=$HOME/localveya başka bir dizin ile yapılandırın . O zaman makeve make installnormal olarak yapabilirsiniz . Bu, o programı derleyecek ve yükleyecektir ~/local/, örneğin yürüttüğünüz program içinde olacaktır ~/local/bin/programmname.


0

Kendi deneyimlerime göre, chroot ortamı olmayan başka bir dizine kurmak için mevcut DEB paketlerini kullanmanın kolay bir yolu yok . Debian / Ubuntu kurulum araçları dpkg / aptitude / dselect hepsi düzgün çalışabilmesi için kök ayrıcalıkları gerektirir.

Şimdi kaynak DEB'ye bakıldığında, paketin derlenip farklı bir dizin ağacına kurulmasını sağlamak için Debian / rules dosyasını değiştirebilirsiniz, ancak daha sonra mevcut olan ikili paketleri kullanmıyorsunuzdur.

Başkalarının belirttiği gibi, debootstrap'i kullanabilir ve geçmişte 64 bitlik bir ana bilgisayarda 32 bitlik bir ortama sahip olmak için yaptığım bir chroot ortamını kolayca oluşturabilirsiniz, ancak bu, en azından kopyalanan temel paketlerle bir chroot yüklemeyi gerektirir. Alanınız varsa ve bu uygun bir çözümse , chroot ortamında kurulu uygulamaların kolay bir şekilde yürütülmesini sağlamak için birleştirebilirsiniz dchroot, hatta daha da iyisi schroot.


0

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? Ya her ikisinde de farklı sürümler bulursa?

Aklıma gelen en iyi şey, 64-bit sistemlerdeki 32-bit uygulamalar için insanların yaptığı gibi chroot'lu bir ortam olacaktır. Chroot'ta debootstrap adını vereceğiniz gibi daha fazla ek yükü var, ancak bazı bağlantılarda , kabuk sarmalayıcı komut dosyası eğlenceli, istediğiniz şeyi yapabilir.


0

Hala sorun üzerinde çalışıyorum, ancak temelde ihtiyaç duyduğunuz şeyleri temelden almak ve sahte kökle çalışmak zorundasınız. debootstrap sadece bir avuç kabuk betiğidir, bu yüzden onu tıkayan şeyin ne olduğunu görmek için ayırıyorum. Zor kısım, dosyaları kurulduktan sonra kaldırmak olacaktır.


Ben (ve diğer binlerce kullanıcı) yürekten cesaretle bunu teşvik ediyorum. Mevcut sistem rpm (veya apt alternatif) veritabanının yanı sıra kullanıcı tarafından sağlanan bir rpm veritabanını kullanan ve kullanıcının bulunduğu rpms'yi yükleyen bir şey. Bu harika olurdu. Bu hatta ana hatta birleştirilebilir. Bu konuda daha önce herhangi bir araştırma yapıldı mı?
Andrew Case,

0

Ne yazık ki, böyle bir şey sağlayan herhangi bir dağıtım duymadım (süper popüler olacağından emin olmama rağmen). Rpm tabanlı dağıtımı taklit edebilirsiniz, ancak ... Bunu denemedim, ancak kullanıcı tabanlı bir rpm veritabanı oluşturabilir ve daha sonra rpm'leri kullanıcı veritabanına yükleyebilirsiniz.

Yeni bir kullanıcı tabanlı dağıtım ayarını şu şekilde yapmayı deneyin:

rpm --initdb --dbpath DIRECTORY

O zaman yardımcı olabilecek birkaç seçenek var:

  • --prefix
  • --relocate

0

Başarılı bir şekilde bir okul Debian sunucusunda büyük bir işbirliği yazılım paketi koleksiyonu kurmak için kullandığım bir çözüme sahibim, burada hiçbir kök erişimim yok (başka bir paket yöneticisi yüklemek için bile değil). deboostrapHiçbir paket yöneticisini kullanmaz .

Bu yöntem kısmen manueldir, ancak uygun olması için elimden geleni yaptım.

Aradığım bu betiği kullanıyor install(bunu unutma chmod +x):

#!/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 bir deb dosyasını kullanarak indiririm apt-get download package_name. Daha sonra çalıştırdım ./install package_name_blabla.debve /usraçılmamış dosyaların her bir oluşumu hakkında el ile karar veriyorum $PREFIX/usr.

Bu karar tamamen hangi paketlerin sisteme kurulduğuna ve bu yöntem kullanılarak hangilerinin kurulduğuna bağlıdır. Genellikle, örneğin, pkg-config dosyaları bu yerine geçmeye ihtiyaç duyar, oysa shebang gibi çizgiler gerektirmez #!/usr/bin/perl. Genel kural, elde edilen yolun mevcut bir dosyayı göstermesidir.

Bu şekilde kurulan paketlerle, bir şekilde diğer programlar hakkında onlar hakkında bilgi vermeniz gerekir. Bu kadar doğru değerleri ekleyerek yapılabilir LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATHvb

Bu yaklaşımda, bağımlılıkların otomatik olarak indirilmediği / kurulmadığı konusunda bir uyarı vardır; Bunları manuel olarak takip etmeniz gerekir.

Ayrıca APT açıkça bu paketleri bilmiyor, bu yüzden sonsuza dek onları eksik olarak gösterecek. Ama bu mantıklı - kim kullanıcının kurulumuna bağlı olan sistem genelinde bir uygulama yüklemek isterdi.

Bir programı kaldırmak isterseniz, deb arşivinin içeriğini kullanarak ar p "$1" data.tar.xz | tar tJtüm dosyaları listeleyip silebilirsiniz PREFIX.

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.