Instal file pengembangan secara lokal untuk membangun sistem tanpa akses root?


10

Ada server yang saya kerjakan, menjalankan versi Linux yang lebih lama. Saya tidak memiliki akses root ke sistem, jadi saya ingin membangun versi yang lebih baru dari alat yang saya gunakan banyak (Vim 7.3). Saya pikir saya hanya akan membangun dan menginstalnya di ~ / bin. Namun, ini membutuhkan file pengembangan ncurses yang tidak diinstal di seluruh sistem. Saya menemukan rpm ncurses-devel, dan mengekstrak folder 'lib' dan 'include', di mana saya akan meletakkannya dan bagaimana saya memberi tahu skrip ./configure untuk menemukannya sehingga saya dapat mengkonfigurasi dan membuat paket secara lokal?

Sunting: Saya akhirnya mengatasi ini dengan menginstal OS yang identik di Virtualbox, dan membangun paket di sana dan menyalin di atas binari.


serverfault.com/questions/23734 mungkin cukup mirip untuk membantu. Sebagian besar jawaban melibatkan menginstal apa yang secara efektif merupakan keseluruhan sistem di dalam homedir Anda, tetapi itu dapat dikerjakan di Gentoo Prefix dan Rootless Gobo.
ephemient

Jawaban:


13

Saya melakukan ini cukup sering di pekerjaan terakhir saya - solusi yang tampaknya bekerja paling baik adalah membuat direktori ~ / usr, dan menggunakan argumen --prefix untuk mengarahkan skrip ./configure ke arah yang benar. Inilah langkah-langkahnya:

  • Buat direktori ~ / usr, dan sertakan, lib dan direktori bin di bawahnya.
  • Dalam skrip .profile, .bashrc, atau shell init Anda lainnya, tambahkan berikut ini (atau setara dengan dialek shell Anda):
    export PATH=$PATH:~/usr/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/usr/lib
    export C_INCLUDE_PATH=$C_INCLUDE_PATH:~/usr/include
    export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:~/usr/include
  • Saat membangun paket, gunakan ./configure --prefix=/home/<username>/usr

Pengaturan ini bekerja untuk saya pada sebagian besar situasi di mana saya perlu membangun sesuatu di ruang pengguna. Bagian tersulit biasanya menemukan dan membangun semua dependensi yang Anda butuhkan, tetapi itu hanya membutuhkan beberapa googling atau penggunaan yang bijaksana dari fungsionalitas 'dapatkan sumber' dari manajer paket Anda.


Tidak cukup bekerja untuk saya. Skrip configure tampaknya tidak menemukan apa pun di ~ / usr
postfuturist

Saya punya masalah yang sama @ postfuturist. Saya akhirnya memperbaikinya dengan menggunakan ${HOME}alih-alih ~di semua panggilan ekspor saya, dan kemudian pkg-config senang dan dapat menemukan pengguna saya menginstal pustaka dan paket.
phyatt

3

Biasanya Anda harus dapat mengkonfigurasi ulang dan mengubah kode untuk menentukan lokasi baru di direktori home Anda atau jalur lain untuk semua perpustakaan dan program ...

Tapi, IMHO, cara termudah (jika Anda memiliki banyak ruang) adalah menggunakan chroot di subdirektori dengan semua distro linux terpasang di dalamnya. Tentu saja sebagai pengguna biasa Anda tidak dapat menggunakan chroot , tetapi Anda dapat menggunakan alat-alat hebat ini: fakechroot dan fakeroot

Untuk membuat sistem file chroot, saya ingin menggunakan direktori dengan Debian (atau turunan Debian seperti ubuntu) menggunakan utilitas debootstrap .

Jadi prosedurnya mudah (saya tidak akan memasukkan rincian teknis, baca manual perintah):

  • Dapatkan dan instal: alat fakeroot, fakechroot, dan debootstrap
  • buat subdirektori menggunakan debootstrap (saya hanya dapat menjalankan ini sebagai root. Anda dapat melakukannya di komputer lain dan menyalin binari jika diperlukan)
  • Jalankan: fakechroot fakeroot chroot mydebian-dir

Jika Anda membutuhkan detail lebih lanjut, saya pikir saya punya skrip di suatu tempat untuk melakukan semua ini.


1

Solusi lain untuk masalah ini adalah menggunakan Gentoo Prefix, seperti yang dilakukan pengguna MacOSX dan platform lainnya (solaris, AIX):

http://www.gentoo.org/proj/en/gentoo-alt/prefix/

Ini akan mengkompilasi tumpukan Gentoo (dengan portage) di lokasi $ PREFIX. Ini menggunakan paket Gentoo, sebagian besar paket mendukung penggunaan pengaturan ini.

Portage akan melacak semua dependensi, Anda akan memiliki versi terakhir dari perangkat lunak, ini telah diuji oleh komunitas ...


1

Jika prefix=/home/foo/usrtidak berhasil, coba:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.