Cài đặt tệp phát triển cục bộ để xây dựng trên hệ thống mà không cần truy cập root?


10

Có một máy chủ mà tôi làm việc, chạy phiên bản Linux cũ hơn. Tôi không có quyền truy cập root vào hệ thống, vì vậy tôi muốn xây dựng một phiên bản mới hơn của một công cụ mà tôi sử dụng rất nhiều (Vim 7.3). Tôi hình dung tôi sẽ chỉ xây dựng nó và cài đặt nó trong ~ / bin. Tuy nhiên, nó yêu cầu các tệp phát triển không được cài đặt trên toàn hệ thống. Tôi đã tìm thấy vòng quay ncurses-devel và trích xuất các thư mục 'lib' và 'bao gồm', tôi sẽ đặt chúng ở đâu và làm thế nào để tôi biết tập lệnh ./có thể tìm thấy chúng để tôi có thể định cấu hình và xây dựng gói đúng cách?

Chỉnh sửa: Tôi đã kết thúc việc này bằng cách cài đặt HĐH giống hệt trong Virtualbox và xây dựng gói ở đó và sao chép các tệp nhị phân.


serverfault.com/questions/23734 có thể đủ tương tự để trợ giúp. Hầu hết các câu trả lời liên quan đến việc cài đặt một cách hiệu quả toàn bộ hệ thống trong homedir của bạn, nhưng điều đó có thể được giải quyết trong Gentoo Prefix và Rootless Gobo.
ephemient

Câu trả lời:


13

Tôi đã làm điều này khá thường xuyên trong công việc cuối cùng của mình - giải pháp có vẻ hoạt động tốt nhất là tạo thư mục ~ / usr và sử dụng đối số --prefix để trỏ các tập lệnh ./mình theo đúng hướng. Đây là các bước:

  • Tạo thư mục ~ / usr, và bao gồm, thư mục lib và bin bên dưới nó.
  • Trong tập tin .profile, .bashrc hoặc shell init khác của bạn, hãy thêm đoạn mã sau (hoặc tương đương trong phương ngữ shell của bạn):
    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
  • Khi xây dựng gói, sử dụng ./configure --prefix=/home/<username>/usr

Sự sắp xếp này làm việc cho tôi trong hầu hết các tình huống mà tôi cần để xây dựng mọi thứ trong không gian người dùng. Phần khó nhất thường là tìm và xây dựng tất cả các phụ thuộc mà bạn cần, nhưng điều đó chỉ cần sử dụng một cách hợp lý hoặc sử dụng hợp lý chức năng 'lấy nguồn' của người quản lý gói của bạn.


Không làm việc cho tôi. Kịch bản cấu hình dường như không tìm thấy bất cứ điều gì trong ~ / usr
postfuturist

Tôi đã có cùng một vấn đề @postfuturist. Cuối cùng tôi đã sửa nó bằng cách sử dụng ${HOME}thay vì ~trong tất cả các cuộc gọi xuất khẩu của mình, và sau đó pkg-config rất vui và có thể tìm thấy các thư viện và gói cài đặt của người dùng của tôi.
phyatt

3

Thông thường, bạn sẽ có thể định cấu hình lại và thay đổi mã để xác định vị trí mới trong thư mục chính của bạn hoặc đường dẫn khác cho tất cả các thư viện và chương trình ...

Nhưng, IMHO, cách dễ nhất (nếu bạn có nhiều không gian) là sử dụng chroot trong thư mục con với tất cả bản phân phối linux được cài đặt trong đó. Của cuorse như một người dùng bình thường, bạn không thể sử dụng chroot , nhưng bạn có thể sử dụng các công cụ tuyệt vời này: fakechrootfakeroot

Để tạo hệ thống tập tin chroot, tôi muốn triển khai một thư mục với Debian (hoặc bất kỳ dẫn xuất Debian nào như ubfox) bằng tiện ích debootstrap .

Vì vậy, thủ tục rất dễ dàng (tôi sẽ không nhập chi tiết kỹ thuật, đọc hướng dẫn sử dụng lệnh):

  • Nhận và cài đặt: các công cụ fakeroot, fakechroot và debootstrap
  • tạo thư mục con bằng debootstrap (Tôi chỉ có thể thực thi điều này với quyền root. Bạn có thể thực hiện trong một máy tính khác và sao chép các tệp nhị phân nếu cần)
  • Thực thi: fakechroot fakeroot chroot mydebian-dir

Nếu bạn cần thêm chi tiết, tôi nghĩ rằng tôi đã có một kịch bản ở đâu đó để làm tất cả điều này.


1

Một giải pháp khác cho vấn đề này là sử dụng Tiền tố Gentoo, như người dùng MacOSX và nền tảng khác (solaris, AIX) thực hiện:

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

Nó sẽ biên dịch ngăn xếp Gentoo (có portage) ở vị trí $ PREFIX. Nó sử dụng các gói Gentoo, hầu hết các gói đều hỗ trợ việc sử dụng các cài đặt này.

Portage sẽ theo dõi tất cả các phụ thuộc, bạn sẽ có phiên bản phần mềm cuối cùng, nó đã được cộng đồng thử nghiệm ...


1

Nếu prefix=/home/foo/usrkhông hoạt động, hãy thử:

CFLAGS=-I/home/foo/usr/include LDFLAGS=-L/home/foo/usr/lib ./configure
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.