Paketleri yerel dizine yüklemek?


38

Şuna benzer bir yazılım paketleri kurmak istiyorum apt-get install <foo>:

  1. Olmadan sudove
  2. Yerel bir dizine

Bu alıştırmanın amacı, sürekli entegrasyon sunucumda bağımsız yapıları izole etmektir .

Kaynağından derlemeyi umursamıyorum, eğer gereken buysa, ama açıkçası mümkün olan en basit yaklaşımı tercih ederim. Buradaapt-get source --compile <foo> belirtildiği gibi denedim , ancak autoconf gibi paketlerde çalışmasını sağlayamıyorum. Aşağıdaki hatayı alıyorum:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Yerel bir dizinde derlenmiş help2man var, ancak apt-get nasıl bilgilendireceğimi bilmiyorum. Herhangi bir fikir?

GÜNCELLEME : Neredeyse https://askubuntu.com/a/350/23678 adresinde çalışan bir cevap buldum . Sorun chrootşu ki sudo gerektiriyor. Sorun apt-get sourceşu ki bağımlılıkları nasıl çözeceğimi bilmiyorum. Söylemeliyim ki çok çekici chrootgörünüyor . Sudo gerektirmeyen eşdeğer bir komut var mı?



7
@kamil, değil. Ağ erişimi olmadan yüklemeye çalışmıyorum. sudoSistem dışı bir dizine olmadan ve yüklemeye çalışıyorum .
Gili

4
Beyler, lütfen nedenini açıklamadan sorumu küçültmeyin . Teşekkür ederim.
Gili

Sistemde kök yoksa, bağımlılıkları kolayca çözemezsiniz . Yine de bazen mümkündür; Yazılımları evinize kurmaya, en alt bağımlılıklardan başlayarak ve LD_PATH'inizi değiştirerek programların kütüphanelerini bulabilmesi için başlamanız gerekir. Ancak, paketlerden herhangi birinin çalıştırılması için root (veya suid) kullanılması gerekiyorsa, başarısız olursunuz.
Eylül

@ Ocak, otomatik bir derleme sistemi içinde bir yazılım projesi derlemeye çalışıyorum. Bildiğim kadarıyla, bağımlılıklarının hiçbiri (derleme için gerekli) kök gerektirmez.
Gili

Yanıtlar:


20

Bu, genel olarak yapılamaz, çünkü uygun bağımlılık sistemiyle uğraşırsınız.

İki çözüm var:

  1. Kaynak paketi kurun, kaynak dizine geçin, paketleme sistemlerinden bağımsız olarak paketi yapılandırın ve elle seçtiğiniz bir dizine yükleyin.

    apt-get source <package>
    

    Kök gerekmez, paket kaynağını indirir, geçerli dizindeki bir dizinde açar. Daha sonra bu dizine geçebilir, kaynak üzerinde değişiklikler yapabilir, kurulumu başka bir hedefe yapılandırabilirsiniz.

    Bununla birlikte, programların hangi yükleme dizinine gideceğini yapılandırma, belirli bir programa bağlıdır. Birçok program ./configure --prefix localdir, yüklemeyi localdir dizinine hedeflemek için kullanır; ama bu her zaman böyle değildir.

  2. Paketleri yükleyeceğiniz bir chroot ortamı oluşturun:

    debootstrap precise myfancyinstall
    

    Şimdi myfancyinstall / dizininde boş bir kurulum yarattınız.

    chroot myfancyinstall
    

    İstediğinizi kurmak için chroot kafesi içinde apt-get install komutunu kullanabilirsiniz.


Bu umut verici görünüyor. Yapmadan kullanmak apt-get source, --compilekarşılanmayan bağımlılıklar hakkındaki uyarıları bastırıyor gibi görünüyor (bunları kendim çözmeme izin veriyor)
Gili

Bu şekilde kaynak bulunmayan paketler almanın bir yolu var mı?
soandos

Çözüm (2) bağımsız olarak çalışacaktır. Aksi takdirde, kendi başınızasınız: belki paket kurmanın başka bir yolu vardır. Veya deb paket dosyasını indirin ve ar: ile açın ar vx mypackage.deb. Ardından paketin içeriğini analiz edin ve el ile nasıl kurulacağını öğrenin.
Ocak

14

bir bash kabuğu kullanarak ve "package.deb" dosyasını (paket adının "paket" olduğunu varsayarak) alarak, ne istediğinizi yerine getirmek için aşağıdaki komutu çalıştırabilirsiniz - paketi kurarak ana dizininizin aynı şekilde ele alınması "/ "normal bir kurulumda ele alınacaktı.

Bu komut:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

$ HOME / var / lib / dpkg / lock gibi bazı hatalarla karşılaşabilirsiniz, bu nedenle hatalardan alacağınız tüm eksik dosyaları oluşturun ve kurulum sudo olmadan çalışmalıdır.

"apt-get download" çalışmazsa, "apt download" veya "apitutde indirme paketini" deneyebilirsiniz.

Hiçbir yöntem işe yaramazsa, paketi el ile http://packages.ubuntu.com/ adresinden indirebilirsiniz.

Başka bir yöntem ise chroot komutunu $ HOME parametresiyle çalıştırmak ve sonra da aynı şekilde sadece --root = $ HOME olmadan yüklemek olacaktır. bu komut sizi "/" nin şu anki $ HOME'unuz olduğu bir kabuğa getirir. normal moda dönmek için "çıkmayı" unutma

iyi şanslar.


Dpkg hakkında şikayetçi eksik dosyaları oluşturduktan sonra, sadece segfaulting başladı.
Matt Chambers

0

sshErişimi olan, ancak apt-getroot veya benzeri olmayan bir paylaşılan web sunucusuysanız veya benzer şekilde kısıtlanmış bir sistemdeyseniz, aşağıdakiler sizin için işe yarayabilir. Bu bir sistem üzerinde benim için çalıştı uname -agibi bir şey döndüSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
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.