Cài đặt Git, Curl và Expat từ Nguồn


7

Tôi có một máy ảo RHEL 6.4 được cung cấp bởi KVM nội bộ của công ty tôi.

Chúng tôi đang gặp một số rắc rối khi sử dụng yum( Cannot retrieve repository metadatamà tôi đã xác nhận trong trường hợp này là đặc biệt với đám mây nội bộ của công ty tôi), vì vậy tôi phải xây dựng Git từ nguồn.

Tải xuống tệp RPM và phát hành

sudo yum localinstall ....rpm

Cho tôi cùng một Cannot retrieve repository metadatalỗi.

Phát hành

sudo rpm -ivh ....rpm

Thất bại với một error: Failed dependenciesvà sau đó liệt kê tất cả các gói tôi cần cài đặt. Tôi giả sử tôi có thể tìm thấy các liên kết tải xuống cho tất cả chúng, nhưng tôi đã thử điều này trước đây và không thể tìm thấy các liên kết tải xuống cho các phiên bản phù hợp cho các gói phù hợp.

Đoạn mã sau thực sự hoạt động, nhờ câu trả lời của @ slm :

wget ftp://fr2.rpmfind.net/linux/dag/redhat/el6/en/x86_64/extras/RPMS/perl-Git-1.7.9.6-1.el6.rfx.x86_64.rpm
wget http://pkgs.repoforge.org/git/git-1.7.9.6-1.el6.rfx.x86_64.rpm
rpm -ivh perl-Git-1.7.9.6-1.el6.rfx.x86_64.rpm git-1.7.9.6-1.el6.rfx.x86_64.rpm

Nếu tôi chỉ tải xuống mã git, gỡ bỏ nó và xây dựng nó, như:

wget https://www.kernel.org/pub/software/scm/git/git-1.8.5.tar.gz
tar -xvf git-1.8.5.tar.gz
cd git-1.8.5
./configure
make
make install

Tôi nhận được lỗi sau khi nhân bản từ http://giao thức:

fatal: Unable to find remote helper for 'http'

Googling nói với tôi rằng tôi cần curl-devel và expat. Tôi không thể sử dụng yum, vì vậy tôi cũng đã xây dựng những thứ đó:

cd ..
wget http://curl.haxx.se/download/curl-7.34.0.tar.gz
tar -xvf curl-7.34.0.tar.gz
cd curl-7.34.0
./configure
make
make install

cd ..
wget http://downloads.sourceforge.net/expat/expat-2.1.0.tar.gz
tar expat-2.1.0.tar.gz
cd expat-2.1.0
./configure
make
make install

Tuy nhiên, khi xây dựng lại Git, tôi nhận được lỗi tương tự. Sau khi Googling nhiều hơn, tôi xác định rằng tôi cần chuyển các tham số sau cho Git's ./configure:

cd git-1.8.5
./configure --with-curl=<curl_install_path> --with-expat=<expat_install_path> 

Tuy nhiên, tôi không thể xác định vị trí của các đường dẫn cài đặt curl và expat.

Vì vậy, những gì tôi đã làm thay vào đó là xây dựng Git, curl và expat bằng cách sử dụng ./configure --prefix=/path/to/desired/install/path

mkdir curl
cd curl-7.34.0
./configure --prefix=/home/downloads/curl
...
mkdir expat
cd expat-2.1.0
./configure --prefix=/home/downloads/expat
...
mkdir git
cd git-1.8.5
./configure --prefix=/home/downloads/git --with-curl=/home/downloads/curl --with-expat=/home/downloads/expat
...

và từ đây tôi đã có thể sao chép với Git từ httpgiao thức. Tuy nhiên, điều này vi phạm cấu trúc tệp Linux.

Hai câu hỏi:

  1. Khi xây dựng Git từ nguồn, bạn cần bao gồm các đường dẫn cài đặt curl và expat tới ./configure. Những đường dẫn cài đặt này ở đâu khi cài đặt curl và expat mà không có prefixđối số?
  2. Tôi đã học được rằng tôi cần các đường dẫn cài đặt curl và expat khi tôi gặp lỗi và tìm kiếm nó. Có chương trình nào khác tôi cần nói với Git để tôi không gặp lỗi trong tương lai không?

một tùy chọn khác có thể chỉ đơn giản là sử dụng url ssh thay vì url http.
michas

Câu trả lời:


3

Tôi nghĩ rằng tôi sẽ đề nghị không cài đặt các mục này từ nguồn trực tiếp mà nên khai thác sức mạnh của trình quản lý gói của bạn để duy trì các gói này.

cài đặt cục bộ

Bạn có thể sử dụng một công cụ dòng lệnh như curlhoặc wgetvẫn tải xuống các gói cần thiết để cài đặt chúng bằng cách sử dụng yumhoặc rpmtrực tiếp.

$ sudo yum localinstall some.rpm
-or-
$ sudo rpm -ivh some.rpm

Tôi sẽ đề nghị tìm đến kho RepoForge cũng như EPEL cho RPM. Ví dụ các gitgói ở đây.

Một lệnh đơn giản trong thiết bị đầu cuối sẽ tải xuống:

$ wget http://pkgs.repoforge.org/git/git-1.7.10.4-1.el6.rfx.x86_64.rpm

Xây dựng lại RPM nguồn

Nếu bạn có các phiên bản mới nhất, bạn vẫn có thể sử dụng RPM nhưng thay vì tải xuống .rpmphiên bản của gói, bạn sẽ muốn có .src.rpmphiên bản. Chúng có thể được xây dựng lại bằng lệnh sau:

$ rpmbuild --rebuild some.src.rpm

Xây dựng lại tar.gz bằng cách sử dụng RPM nguồn của nhà tài trợ

Bạn cũng có thể lấy .tar.gztarball của mình và sử dụng lại .spectệp có trong phần trên .src.rpm. Bạn làm điều này thông qua các lệnh sau.

$ mkdir -p ~/rpm/{BUILD,RPMS,SOURCES,SPECS,SRPMS,tmp}

Sau đó tạo một ~/.rpmmacrostập tin.

%packager Your Name
%_topdir /home/YOUR HOME DIR/rpm
%_tmppath /home/YOUR HOME DIR/rpm/tmp

Bây giờ chúng tôi đã sẵn sàng để "cài đặt" nhà tài trợ .src.rpm.

$ rpm -ivh some.src.rpm

Điều này sẽ gửi một tarball và một .spectập tin trong ~/rpmthư mục của bạn . Sau đó, bạn có thể chỉnh sửa .spectệp này và thay thế tarball bằng tệp mới hơn.

Bây giờ để xây dựng lại nó:

$ rpmbuild -ba ~/rpm/SPECS/some.spec

Điều này sẽ tạo ra một .rpmvà một .src.rpmtập tin mới sau khi hoàn thành.

Lời khuyên bổ sung

Bạn có thể sử dụng công cụ yum-builddepđể đảm bảo rằng bạn đã cài đặt tất cả các RPM cần thiết trước khi bắt đầu.

$ sudo yum-builddep some.src.rpm

Cảm ơn vì sự trả lời. Tuy nhiên, yum của tôi không hoạt động. sudo yum localinstall ....rpmđã cho tôi lỗi yum như bình thường (Không thể truy xuất siêu dữ liệu của kho lưu trữ). sudo rpm -ivh ....rpmđã cho tôi `lỗi: Các phụ thuộc không thành công: <pack_name> là cần thiết bởi git-all 'Tôi sẽ thử phương thức src.
Matthew Moisen

@MatthewMoisen - bạn cần tải xuống tất cả các tệp .rpm cần thiết và thực hiện a sudo rpm -ivh 1.rpm 2.rpm 3.rpm....
slm

@MatthewMoisen - Tôi cảnh báo bạn rằng tôi đã xử lý công cụ này trong hơn 20 năm. Tổng hợp những thứ này từ nguồn có thể gây khó khăn, hơn cả việc xử lý thu thập các RPM cần thiết!
slm

Tôi đã có việc tìm kiếm và tải về tất cả các file .rpm yêu cầu, ví dụ như khó khăn, git-allđòi hỏi emacs-git, git, git-arch, mỗi trong số đó yêu cầu RPM khác. Tuy nhiên, tôi sẽ thử RepoForge và báo cáo lại
Matthew Moisen

@MatthewMoisen - vâng, lợi thế của việc ở lại với repo là tất cả các pkgs cần có đều có!
slm

3

Đường dẫn cài đặt đủ dễ tìm. Hầu hết các configuretập lệnh đều khá chuẩn và thường có -hcờ in thông báo trợ giúp. Có một cái nhìn tại git:

$ ./configure -h | grep -A 2 Insta
Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [/usr/local]

Vì vậy, bạn cài đặt curlsử dụng --prefix=/home/downloads/curlvà nó đã được phát hiện bởi gitvới --with-curl=/home/downloads/curl. Do đó, nếu bạn đã cài đặt vào các vị trí mặc định, bạn sẽ chạy --with-curl=/usr/local/.

Đối với các vấn đề khác có thể, không có ý tưởng. Bạn sẽ đi qua cây cầu đó khi bạn đến đó.


Nói chung, tôi khuyên bạn nên thử tìm kiếm các gói RPM trước khi cài đặt từ nguồn. Bạn không cần yumphải cài đặt các gói RPM, bạn chỉ cần làm:

rpm -i rpmfile.rpm

Tôi đã tìm thấy RHEL 6 RPM cho gitcurltrên rpm.pbone.net . Không thể tìm thấy một chiếc RHEL 6 cho expatnhưng có nhiều loại khác nhau cho Fedora và CentOS, một trong số chúng có thể cũng phù hợp với bạn.


Quảng bá các repos này: fedoraproject.org/wiki/EPEL & repoforge.org . Chú ý các cảnh báo trên wiki CentOS này khi trộn các kho lưu trữ: wiki.centos.org/AdditableResource/Repositories
slm

@slm là repoforge thực sự an toàn? Tôi đã gặp phải một vài vấn đề với rpmforge trong những năm qua.
jordanm

@jordanm - Tôi dùng nó. Gần đây, họ đã tách riêng các gói để giải quyết việc trộn nó, bạn sẽ thấy các gói rfx bây giờ, có thể là một số gói có vấn đề, nhưng nói chung tôi đã sử dụng nó. Trộn RF với những người khác là nơi nó trở nên lộn xộn.
slm

-1

Trả lời 1. Đường dẫn cài đặt đến các gói bổ sung phụ thuộc vào cách chúng được cài đặt. Nếu bạn cài đặt chúng với tư cách quản trị viên, chúng nên được cài đặt theo tiêu chuẩn /usrhoặc /usr/sharevị trí. Một nơi nào đó đã có trên đường dẫn hệ thống. Bạn có thể tìm thấy điều này từ config.loghoặc các bản ghi khác do tập lệnh cấu hình để lại. Hơn nữa, một số quản trị viên có thể chọn cài đặt các gói này trên /optthư mục viết tắt của 'gói tùy chọn'. Tuy nhiên, nếu bạn cài đặt chúng như một người dùng thông thường, bạn có thể cài đặt chúng ở bất cứ đâu bạn có quyền truy cập ghi, rất có thể là của bạn /home. Tôi thường sử dụng một vị trí như /home/myname/curl-install.

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.