Dpkg tidak memiliki fitur --relokasi yang dimiliki RPM. Perlu mempertimbangkan berapa banyak paket RPM yang mendukung fitur itu. Pada dasarnya, itu tidak bisa dilakukan.
Yang bisa Anda lakukan adalah menggunakan chroot jika Anda ingin menguji sesuatu sebelum menginstalnya secara global pada sistem. Untuk melakukan ini, Anda harus bisa mendapatkan akses ke root. Hal pertama yang harus dilakukan adalah membuat chroot dasar:
# debootstrap lenny lenny-chroot
Ini menciptakan chroot Lenny di dalam lenny-chrootdirektori.
Sekarang kita bisa masuk ke chroot:
# chroot lenny-chroot
Sekarang kita dapat melakukan apa yang kita inginkan dan menginstal apa pun tanpa itu mengacaukan sisa sistem. Setelah selesai, ketik saja keluar atau tekan ctrl-D
Linuxbrew adalah manajer paket non-root untuk Linux (berdasarkan sistem manajemen paket Homebrew untuk OS X) yang mengkompilasi dari sumber dan menyimpan binari di direktori home Anda.
Mengutip dokumen, fitur Linuxbrew adalah:
Dapat menginstal perangkat lunak ke direktori home dan tidak memerlukan sudo
Instal perangkat lunak yang tidak dikemas oleh distribusi asli
Instal versi perangkat lunak terbaru ketika distribusi asli sudah tua
Gunakan manajer paket yang sama untuk mengelola mesin Mac dan Linux Anda
Gentoo membangun dari sumber, poster sepertinya ingin menginstal melalui paket ke direktori tertentu. Itu tidak benar-benar sama.
Andrew Case
1
@AndrewCase Gentoo juga punya paket. Fakta bahwa mereka bukan biner tidak relevan untuk instalasi akhir.
jiggunjer
4
Sama seperti tambahan kecil pada opsi kompilasi, ada opsi setengah jalan untuk mengkompilasi ke dalam sebuah paket dengan opsi awalan yang berbeda pada waktu kompilasi (dengan "checkinstall" atau mungkin beberapa metode lain). Keuntungannya adalah bahwa paket tersebut akan muncul pada manajer paket seperti aptitude atau synaptic.
Selain itu saya pikir dalam beberapa kasus mungkin untuk mengunduh .deb yang sebenarnya dan memaksakan awalan yang berbeda melalui instalasi dpkg, tapi saya pikir itu bukan sesuatu yang dapat dilakukan dengan paket acak apa pun, tetapi harus dikompilasi dengan beberapa variabel untuk lokasi mereka (bukan awalan eksplisit literal) yang akan Anda ekspor sebelum menginstal. Saya tidak tahu apa-apa tentang prosedur ini, google untuk "dpkg instdir prefix".
Rootless GoboLinux dapat melakukan persis apa yang Anda minta: manajer paket, tanpa hak istimewa, di direktori home Anda sendiri. Semoga Anda tahu apa yang Anda lakukan; rootless bukanlah mode instalasi Gobo yang paling terpelihara dengan baik, dan ketika saya menggunakannya beberapa tahun yang lalu diperlukan beberapa penyesuaian karena skrip instalasi agak ketinggalan zaman relatif terhadap perubahan Gobo lainnya.
Ada juga klik yang mengemas ulang beberapa .debs, dapat menginstal paket ke direktori rumah Anda, dan tidak memerlukan hak akses root untuk beroperasi ... tetapi pengaturan awal memang memerlukan root.
Saya biasanya mendapatkan sumber dan memeriksa file seperti "INSTALL". Biasanya ada instruksi yang harus dilakukan ./configure --prefix=somedir. Maka Anda harus menambahkan somedir/binke jalur Anda.
mungkin sulit untuk mendapatkan, mengkompilasi, dan menjaga dependensi diperbarui.
Paolo
Ini mundur. Pertanyaannya adalah tentang bagaimana mendapatkan manajer paket (yang lebih disukai sejak 1990-an) untuk berperilaku dengan cara ini.
Lightness Races with Monica
1
Tidak, saya pikir Anda tidak bisa.
Yang terbaik yang bisa saya pikirkan saat ini adalah menggunakan apt-get sourcedan mengkompilasi paket Anda. Mungkin Anda dapat mengubah prosedur (yang bisa lebih atau kurang otomatis) untuk menginstal paket di rumah Anda.
Satu lagi adalah menggunakan dpkg -Xuntuk mengekstraknya pada direktori pilihan Anda.
Ada beberapa kasus di mana Anda perlu menginstal paket ke folder rumah Anda.
Namun Anda dapat mengkompilasi dan menginstal perangkat lunak ke mesin lokal Anda. Cukup unzip, lalu konfigurasikan dengan ./configure --prefix=$HOME/localatau direktori lain. Anda bisa makedan make installseperti biasa. Hal ini akan mengkompilasi dan menginstal program yang di ~/local/, misalnya program Anda mengeksekusi akan di ~/local/bin/programmname.
Dari pengalaman saya sendiri, tidak ada cara mudah untuk menggunakan paket DEB yang ada untuk menginstal ke direktori lain yang bukan lingkungan chroot . Alat instalasi Debian / Ubuntu dpkg / aptitude / dselect semua membutuhkan hak akses root untuk berfungsi dengan baik.
Sekarang diberikan DEB sumber Anda dapat memodifikasi file Debian / aturan untuk memiliki paket membangun dan menginstal ke pohon direktori yang berbeda, tetapi kemudian Anda tidak menggunakan paket biner yang sudah tersedia.
Seperti yang disebutkan orang lain, Anda dapat menggunakan debootstrap dan dengan mudah membangun lingkungan chroot, yang telah saya lakukan di masa lalu untuk memiliki lingkungan 32-bit pada host 64-bit, tetapi ini membutuhkan menginstal chroot dengan setidaknya paket dasar digandakan. Jika Anda memiliki ruang dan ini adalah solusi yang layak, Anda dapat memasangkannya dengan dchroot, atau bahkan lebih baik schroot, untuk memudahkan eksekusi aplikasi yang terinstal di dalam lingkungan chroot.
Saya kesulitan membayangkan bagaimana itu akan bekerja dengan repositori resmi dari distribusi. Bagaimana seharusnya mengatasi dependensi? Dari sistem atau dari direktori home Anda? Bagaimana jika ia menemukan versi yang berbeda di keduanya?
Yang terbaik yang bisa saya pikirkan adalah lingkungan chroot seperti yang dilakukan orang untuk aplikasi 32-bit pada sistem 64-bit. Ini lebih overhead Anda akan memanggil debootstrap di chroot, tetapi dengan beberapa symlinking , shell skrip wrapper menyenangkan, mungkin melakukan apa yang Anda inginkan.
Saya masih bekerja pada masalah, tetapi debootstrap pada dasarnya apa yang Anda butuhkan, dan harus bekerja dengan fakeroot. debootstrap hanyalah sekumpulan skrip shell, jadi saya menariknya terpisah untuk melihat apa yang membuatnya dicentang. Bagian yang sulit adalah mencopot file setelah diinstal.
Saya (dan ribuan pengguna lain) dengan sepenuh hati akan mendorong ini. Sesuatu yang mengetuk ke dalam basis data rpm sistem (atau alternatif yang tepat) yang sudah ada serta basis data rpm yang disediakan pengguna dan menginstal rpms yang berada di lokasi pengguna. Ini akan luar biasa. Ini bahkan bisa digabungkan ke jalur utama. Apakah ada penelitian yang pernah dilakukan tentang ini sebelumnya?
Andrew Case
0
Sayangnya saya belum pernah mendengar ada distro yang menyediakan sesuatu seperti ini (walaupun saya yakin itu akan menjadi sangat populer). Anda mungkin dapat meniru distro berbasis rpm meskipun ... Saya belum mencoba ini, tetapi Anda mungkin dapat membangun basis data rpm berbasis pengguna dan kemudian menginstal rpm ke dalam basis data pengguna.
Saya punya solusi yang saya berhasil gunakan untuk menginstal koleksi besar paket perangkat lunak yang bekerja sama pada server Debian sekolah, di mana saya tidak memiliki akses root sama sekali (bahkan untuk menginstal palungan paket lain). Itu tidak menggunakan deboostrapatau manajer paket.
Metode ini sebagian manual, tetapi saya sudah melakukan yang terbaik untuk membuatnya nyaman.
Ini menggunakan skrip yang saya panggil install(jangan lupa untuk chmod +xitu):
#!/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
Jadi biasanya saya pertama kali mengunduh file deb menggunakan apt-get download package_name. Kemudian saya jalankan ./install package_name_blabla.deb, dan secara manual memutuskan tentang setiap kemunculan /usrdalam file yang sudah dibongkar, apakah harus diganti $PREFIX/usratau tidak.
Keputusan ini sepenuhnya tergantung pada paket mana yang diinstal sistem dan mana yang diinstal menggunakan metode ini. Biasanya, misalnya file pkg-config membutuhkan substitusi ini, sedangkan garis shebang seperti #!/usr/bin/perltidak. Aturan umum adalah jalur yang dihasilkan harus mengarah ke file yang ada.
Dengan paket yang terinstal dengan cara ini, Anda jelas perlu memberitahu program lain tentang mereka. Hal ini dapat dicapai dengan menambahkan nilai-nilai yang benar untuk LD_LIBRARY_PATH, PATH, PYTHONPATH, PKG_CONFIG_PATH, CMAKE_MODULES_PATH, CMAKE_PREFIX_PATHdll
Ada peringatan dalam pendekatan ini, bahwa dependensi tidak diunduh / diinstal secara otomatis; Anda harus melacaknya secara manual.
Juga APT tidak jelas tahu tentang paket-paket ini, jadi itu akan selamanya menunjukkan mereka sebagai hilang. Tapi itu masuk akal - siapa yang ingin menginstal aplikasi seluruh sistem yang tergantung pada instalasi pengguna.
Jika Anda ingin menghapus instalasi suatu program, Anda dapat mendaftar isi arsip deb menggunakan ar p "$1" data.tar.xz | tar tJdan kemudian menghapus semua file ini dari PREFIX.
Jawaban:
Dpkg tidak memiliki fitur --relokasi yang dimiliki RPM. Perlu mempertimbangkan berapa banyak paket RPM yang mendukung fitur itu. Pada dasarnya, itu tidak bisa dilakukan.
Yang bisa Anda lakukan adalah menggunakan chroot jika Anda ingin menguji sesuatu sebelum menginstalnya secara global pada sistem. Untuk melakukan ini, Anda harus bisa mendapatkan akses ke root. Hal pertama yang harus dilakukan adalah membuat chroot dasar:
Ini menciptakan chroot Lenny di dalam
lenny-chroot
direktori.Sekarang kita bisa masuk ke chroot:
Sekarang kita dapat melakukan apa yang kita inginkan dan menginstal apa pun tanpa itu mengacaukan sisa sistem. Setelah selesai, ketik saja keluar atau tekan ctrl-D
sumber
Linuxbrew adalah manajer paket non-root untuk Linux (berdasarkan sistem manajemen paket Homebrew untuk OS X) yang mengkompilasi dari sumber dan menyimpan binari di direktori home Anda.
Mengutip dokumen, fitur Linuxbrew adalah:
sumber
Awalan Gentoo melakukan apa yang Anda inginkan.
Itu menginstal semua paket ke direktori yang ditentukan. Tidak diperlukan akses root. Jika Anda ingin menyingkirkannya, hapus saja direktori basis.
PS: Ini tidak berfungsi di Ubuntu> = 11.04, atau turunan Debian lainnya dengan Multiarch.
sumber
Sama seperti tambahan kecil pada opsi kompilasi, ada opsi setengah jalan untuk mengkompilasi ke dalam sebuah paket dengan opsi awalan yang berbeda pada waktu kompilasi (dengan "checkinstall" atau mungkin beberapa metode lain). Keuntungannya adalah bahwa paket tersebut akan muncul pada manajer paket seperti aptitude atau synaptic.
Selain itu saya pikir dalam beberapa kasus mungkin untuk mengunduh .deb yang sebenarnya dan memaksakan awalan yang berbeda melalui instalasi dpkg, tapi saya pikir itu bukan sesuatu yang dapat dilakukan dengan paket acak apa pun, tetapi harus dikompilasi dengan beberapa variabel untuk lokasi mereka (bukan awalan eksplisit literal) yang akan Anda ekspor sebelum menginstal. Saya tidak tahu apa-apa tentang prosedur ini, google untuk "dpkg instdir prefix".
sumber
Anda dapat menggunakan fakechroot - lihat demo di situs web mereka.
sumber
Rootless GoboLinux dapat melakukan persis apa yang Anda minta: manajer paket, tanpa hak istimewa, di direktori home Anda sendiri. Semoga Anda tahu apa yang Anda lakukan; rootless bukanlah mode instalasi Gobo yang paling terpelihara dengan baik, dan ketika saya menggunakannya beberapa tahun yang lalu diperlukan beberapa penyesuaian karena skrip instalasi agak ketinggalan zaman relatif terhadap perubahan Gobo lainnya.
Ada juga klik yang mengemas ulang beberapa
.deb
s, dapat menginstal paket ke direktori rumah Anda, dan tidak memerlukan hak akses root untuk beroperasi ... tetapi pengaturan awal memang memerlukan root.sumber
Saya biasanya mendapatkan sumber dan memeriksa file seperti "INSTALL". Biasanya ada instruksi yang harus dilakukan
./configure --prefix=somedir
. Maka Anda harus menambahkansomedir/bin
ke jalur Anda.sumber
Tidak, saya pikir Anda tidak bisa.
Yang terbaik yang bisa saya pikirkan saat ini adalah menggunakan
apt-get source
dan mengkompilasi paket Anda. Mungkin Anda dapat mengubah prosedur (yang bisa lebih atau kurang otomatis) untuk menginstal paket di rumah Anda.Satu lagi adalah menggunakan
dpkg -X
untuk mengekstraknya pada direktori pilihan Anda.sumber
Ada beberapa kasus di mana Anda perlu menginstal paket ke folder rumah Anda.
Namun Anda dapat mengkompilasi dan menginstal perangkat lunak ke mesin lokal Anda. Cukup unzip, lalu konfigurasikan dengan
./configure --prefix=$HOME/local
atau direktori lain. Anda bisamake
danmake install
seperti biasa. Hal ini akan mengkompilasi dan menginstal program yang di~/local/
, misalnya program Anda mengeksekusi akan di~/local/bin/programmname
.sumber
Dari pengalaman saya sendiri, tidak ada cara mudah untuk menggunakan paket DEB yang ada untuk menginstal ke direktori lain yang bukan lingkungan chroot . Alat instalasi Debian / Ubuntu dpkg / aptitude / dselect semua membutuhkan hak akses root untuk berfungsi dengan baik.
Sekarang diberikan DEB sumber Anda dapat memodifikasi file Debian / aturan untuk memiliki paket membangun dan menginstal ke pohon direktori yang berbeda, tetapi kemudian Anda tidak menggunakan paket biner yang sudah tersedia.
Seperti yang disebutkan orang lain, Anda dapat menggunakan debootstrap dan dengan mudah membangun lingkungan chroot, yang telah saya lakukan di masa lalu untuk memiliki lingkungan 32-bit pada host 64-bit, tetapi ini membutuhkan menginstal chroot dengan setidaknya paket dasar digandakan. Jika Anda memiliki ruang dan ini adalah solusi yang layak, Anda dapat memasangkannya dengan
dchroot
, atau bahkan lebih baikschroot
, untuk memudahkan eksekusi aplikasi yang terinstal di dalam lingkungan chroot.sumber
Saya kesulitan membayangkan bagaimana itu akan bekerja dengan repositori resmi dari distribusi. Bagaimana seharusnya mengatasi dependensi? Dari sistem atau dari direktori home Anda? Bagaimana jika ia menemukan versi yang berbeda di keduanya?
Yang terbaik yang bisa saya pikirkan adalah lingkungan chroot seperti yang dilakukan orang untuk aplikasi 32-bit pada sistem 64-bit. Ini lebih overhead Anda akan memanggil debootstrap di chroot, tetapi dengan beberapa symlinking , shell skrip wrapper menyenangkan, mungkin melakukan apa yang Anda inginkan.
sumber
Saya masih bekerja pada masalah, tetapi debootstrap pada dasarnya apa yang Anda butuhkan, dan harus bekerja dengan fakeroot. debootstrap hanyalah sekumpulan skrip shell, jadi saya menariknya terpisah untuk melihat apa yang membuatnya dicentang. Bagian yang sulit adalah mencopot file setelah diinstal.
sumber
Sayangnya saya belum pernah mendengar ada distro yang menyediakan sesuatu seperti ini (walaupun saya yakin itu akan menjadi sangat populer). Anda mungkin dapat meniru distro berbasis rpm meskipun ... Saya belum mencoba ini, tetapi Anda mungkin dapat membangun basis data rpm berbasis pengguna dan kemudian menginstal rpm ke dalam basis data pengguna.
Coba buat distro berbasis pengguna baru dengan:
rpm --initdb --dbpath DIRECTORY
Lalu ada beberapa opsi yang dapat membantu:
--prefix
--relocate
sumber
Saya punya solusi yang saya berhasil gunakan untuk menginstal koleksi besar paket perangkat lunak yang bekerja sama pada server Debian sekolah, di mana saya tidak memiliki akses root sama sekali (bahkan untuk menginstal palungan paket lain). Itu tidak menggunakan
deboostrap
atau manajer paket.Metode ini sebagian manual, tetapi saya sudah melakukan yang terbaik untuk membuatnya nyaman.
Ini menggunakan skrip yang saya panggil
install
(jangan lupa untukchmod +x
itu):Jadi biasanya saya pertama kali mengunduh file deb menggunakan
apt-get download package_name
. Kemudian saya jalankan./install package_name_blabla.deb
, dan secara manual memutuskan tentang setiap kemunculan/usr
dalam file yang sudah dibongkar, apakah harus diganti$PREFIX/usr
atau tidak.Keputusan ini sepenuhnya tergantung pada paket mana yang diinstal sistem dan mana yang diinstal menggunakan metode ini. Biasanya, misalnya file pkg-config membutuhkan substitusi ini, sedangkan garis shebang seperti
#!/usr/bin/perl
tidak. Aturan umum adalah jalur yang dihasilkan harus mengarah ke file yang ada.Dengan paket yang terinstal dengan cara ini, Anda jelas perlu memberitahu program lain tentang mereka. Hal ini dapat dicapai dengan menambahkan nilai-nilai yang benar untuk
LD_LIBRARY_PATH
,PATH
,PYTHONPATH
,PKG_CONFIG_PATH
,CMAKE_MODULES_PATH
,CMAKE_PREFIX_PATH
dllAda peringatan dalam pendekatan ini, bahwa dependensi tidak diunduh / diinstal secara otomatis; Anda harus melacaknya secara manual.
Juga APT tidak jelas tahu tentang paket-paket ini, jadi itu akan selamanya menunjukkan mereka sebagai hilang. Tapi itu masuk akal - siapa yang ingin menginstal aplikasi seluruh sistem yang tergantung pada instalasi pengguna.
Jika Anda ingin menghapus instalasi suatu program, Anda dapat mendaftar isi arsip deb menggunakan
ar p "$1" data.tar.xz | tar tJ
dan kemudian menghapus semua file ini dariPREFIX
.sumber