Cara mengkompilasi dan menginstal program dari sumber

39

Ini adalah masalah yang benar-benar membatasi kesenangan saya pada Linux. Jika aplikasi tidak pada repositori atau jika tidak memiliki skrip installer, maka saya benar-benar kesulitan di mana dan bagaimana menginstal aplikasi dari sumber.

Dibandingkan dengan Windows, itu mudah. Anda (cukup banyak) diharuskan untuk menggunakan aplikasi pemasang yang melakukan semua pekerjaan dalam Wizard. Dengan Linux ... tidak banyak.

Jadi, apakah Anda memiliki tips atau instruksi tentang ini atau apakah ada situs web yang secara eksplisit menjelaskan bagaimana, mengapa dan di mana menginstal program Linux dari sumber?

Nitrodist
sumber
7
"Dibandingkan dengan Windows, itu mudah. ​​Anda (cukup banyak) diharuskan untuk menggunakan aplikasi pemasang yang melakukan semua pekerjaan dalam Wizard. Dengan Linux ... tidak terlalu." Ada titik lemah dalam pertanyaan itu. Dengan Windows, Anda jarang mendapatkan kode sumber, jadi Anda berada di tangan siapa pun yang membuat paket. Jika Anda berpikir tentang ini, itu tidak jauh berbeda dari mengatakan "tidak ada paket Linux, jadi saya harus membangun dari sumber", yaitu. tidak ada cara untuk memulainya. Membangun dari sumber biasanya merupakan pilihan terakhir di * nix-land, tetapi jarang merupakan opsi di Windows-ville.
Avery Payne
2
Bahwa sedang dikatakan ... +1 benjolan untuk mengajukan pertanyaan umum yang harus dijawab untuk semua pendatang baru ke sistem * nix. :) Membangun dari sumber terkadang berarti perbedaan antara memperbaiki bug jahat dan hanya menderita sampai rilis perangkat lunak berikutnya. Ini benar-benar tidak seburuk itu, dan seperti yang ditunjukkan oleh banyak orang di sini, begitu Anda tahu apa yang harus dicari dan bagaimana melakukannya, cukup tanpa rasa sakit.
Avery Payne

Jawaban:

22

Biasanya, proyek akan memiliki situs web dengan instruksi bagaimana membangun dan menginstalnya. Google untuk itu dulu.

Sebagian besar yang akan Anda lakukan adalah:

  1. Unduh tarball (file tar.gz atau tar.bz2), yang merupakan rilis versi spesifik dari kode sumber
  2. Ekstrak tarball dengan perintah seperti tar zxvf myapp.tar.gzuntuk tarball gzip atau tar jxvf myapp.tar.bz2tarball bzipped
  3. cd ke direktori yang dibuat di atas
  4. menjalankan ./configure && make && sudo make install

Atau:

  1. Gunakan git atau svn atau apa pun untuk menarik kode sumber terbaru dari repositori sumber resmi mereka
  2. cd ke direktori yang dibuat di atas
  3. menjalankan ./autogen.sh && make && sudo make install

Konfigurasi dan autogen.sh akan menerima argumen --prefix untuk menentukan di mana perangkat lunak diinstal. Saya sarankan memeriksa Di mana saya harus meletakkan perangkat lunak yang saya kompilasi sendiri? untuk saran tentang tempat terbaik untuk menginstal perangkat lunak yang dibuat khusus.

Sandy
sumber
Mengapa autogen.sh digunakan saat mendapatkan yang terbaru, tetapi configure / make digunakan untuk rilis resmi?
Louis Salin
1
Biasanya orang yang menginginkan perangkat lunak "edge edge" akan menarik rilis dari perangkat lunak kontrol versi (seperti git, subversion, atau CVS). Ini adalah "tepi pendarahan" karena mungkin belum teruji, tidak seperti tarball yang dirilis, yang (mungkin) telah dijamin berfungsi (setidaknya sebagian besar). Masuk akal?
Matt Simmons
2
@ Matt, tentu masuk akal tapi saya pikir komentar itu diarahkan lebih pada kenyataan bahwa Sandy sekarang membuatnya tampak seolah-olah ada autogen.sh di setiap trunk git'd / svn.
reiche
1
Dan seekor ayam di setiap pot ... atau sesuatu seperti itu. Heck, sesekali, saya menemukan perangkat lunak tanpa skrip konfigurasi juga. Jika ada cara mudah dan terpadu untuk melakukannya, kita tidak perlu paket ;-)
Matt Simmons
Matt benar sekali, inilah mengapa saya mengatakan "sebagian besar", dan pertama menganjurkan mencari situs web proyek. Saran autogen.sh/configure akan berlaku untuk hampir setiap modul GNOME, dan satu ton proyek lainnya juga. Beberapa proyek tidak menggunakan automake, dan hanya akan memiliki Makefile, dan Anda hanya akan berjalan make && sudo make install. Beberapa proyek Python hanya akan memiliki setup.py, yang akan Anda panggil untuk menginstal (karena tidak ada setup kompilasi nyata). Ada banyak sistem build / install lain di luar sana. Semoga file README atau INSTALL akan menjelaskan apa yang harus dilakukan.
Sandy
3

Saya hanya ingin menambahkan bahwa ada manajer paket yang mengkompilasi paket dari sumber, dan menangani semua dependensi paket, flag, dll.

Dalam sistem BSD itu ports: Menggunakan Koleksi Ports

Di Debian, apt-getmanajer paket juga dapat menginstal dari sumber: APT HOWTO: Bekerja dengan paket-paket sumber (Sama berlaku untuk Ubuntu, Linux-mint dan yang lainnya berdasarkan Debian)

Distribusi Gentoo menggunakan portagemanajer paket, yang mengkompilasi seluruh sistem hanya dari sumber: Portage Introduction .

Slackware dapat mengkompilasi paket tetapi saya tidak tahu apakah ada manajer paket untuk ini di sana .. =)

Pokoknya Anda selalu dapat mengkompilasi paket secara manual seperti Sandy yang disebutkan di atas =) Juga harus memungkinkan untuk menggunakan apt-getatau portagemanajer paket di ...

holms
sumber
1
Mengatakan "manajer paket apt-get dapat menginstal dari sumber" salah. Bagian yang dikutip menggambarkan bagaimana seseorang dapat membuat paket Debian dari sumber Debian . Bukan sumber upstream sewenang-wenang.
Faheem Mitha
2

Saya pikir yang terbaik adalah membaca dokumentasi yang datang dengan program atau aplikasi spesifik yang ingin Anda instal. Biasanya ada readmes / READMEs di dalam tarballs (arsip sumber aplikasi yang biasanya dapat Anda unduh) atau bahkan INSTALL file untuk membaca dan belajar tentang apa cara yang disukai untuk menginstal aplikasi tersebut. Singkatnya: RTFM;)

reiche
sumber
Saya datang ke sini karena README memberikan semua persyaratan untuk membangun di Linux, tetapi hanya menginstal instruksi Windows. Jawaban yang diterima bekerja untuk saya dan mungkin bekerja sebagian besar waktu. Saya pikir itu saran yang hampir lebih baik untuk mencoba rute ./configure dan pergi ke README jika tidak bekerja (mis. Hilang ketergantungan dan Anda tidak dapat membaca output kompiler).
Stephen C
1

Ringkasan untuk menggunakan Koleksi Port di FreeBSD:

Temukan Port

Port diatur berdasarkan kategori, jadi jika Anda tidak tahu kategori apa port itu, Anda harus menemukannya terlebih dahulu:

cd /usr/ports
make search name=myport

Terkadang ada terlalu banyak entri seperti itu. Saya pribadi lebih suka:

find /usr/ports -name myport* -print -depth 2

Gunakan *ketika mencari karena sering ada beberapa versi port yang tersedia. Argumen mendalam memastikan hasil pengembalian Anda tidak perlu berantakan dengan pertandingan yang tidak Anda inginkan.

Konfigurasi

Seringkali, Anda ingin melakukan beberapa konfigurasi; perangkat lunak seperti Apache dan Postgres praktis memerlukannya. Ada tiga pilihan utama: baris perintah, lingkungan dan membuat file konfigurasi. Untuk memulai dengan baris perintah:

make showconfig

ini akan mencantumkan opsi konfigurasi default. Jika Anda menyukai default, Anda siap untuk dikompilasi dan diinstal. Jika tidak,

make config

akan memunculkan kotak dialog di mana Anda dapat memilih opsi mana yang Anda inginkan. (Jangan menjadi bingung dengan ini dan make configureyang mengkonfigurasi port Anda dengan opsi yang Anda pilih!) Ini seringkali cukup tetapi untuk beberapa perangkat lunak, seperti Apache, sering ada konfigurasi kompleks yang tidak ditangani oleh dialog sederhana. Untuk ini, Anda juga harus melihat Makefile yang terkadang memberi Anda beberapa target tambahan untuk make yang akan memberi Anda lebih banyak informasi. Untuk melanjutkan contoh Apache

make show-modules
make show-options
make show-categories

akan memberi Anda informasi tentang pengaturan modul yang Anda pilih, opsi utas dan sejenisnya. Jika default port Anda sebagian besar baik-baik saja dan Anda hanya ingin mengubah beberapa hal, Anda juga bisa meneruskan kunci = pasangan nilai seperti variabel lingkungan:

make MYVBL1=MYVAL1 ... install clean

Anda juga dapat mengatur opsi sakelar melalui -Dopsi:

make -D MYVAR -D MYOTHERVAR ... install clean

Namun untuk konfigurasi yang kompleks, baris perintah tidak akan berfungsi dengan baik dan Anda lebih baik tidak satu pun dari dua metode pertama yang efektif. Dalam hal ini Anda dapat membuat file konfigurasi dan meneruskannya makedengan variabel __MAKE_CONF. FreeBSD memiliki file konfigurasi default: /etc/make.confyang biasanya berisi informasi tentang port yang sebelumnya diinstal dan pengaturan sistem lainnya. Untuk memulai, buat file dengan opsi port Anda, panggil ~/myport.mkdan gabungkan file itu dengan /etc/make.conf:

cat /etc/make.conf ~/myport.mk >> ~/make.myport.conf

Anda kemudian dapat memeriksa konfigurasi Anda:

make showconfig __MAKE_CONF=~/make.port.conf

dan jika semuanya terlihat baik:

make install clean __MAKE_CONF=~/make.myport.conf

WASPADALAH! Jika Anda perlu menyesuaikan pengaturan konfigurasi setelah make configureatau seluruh atau sebagian instalasi, Anda harus menghapus konfigurasi Anda terlebih dahulu :

make rmconfig

Kegagalan untuk melakukannya akan menghasilkan interaksi tak terduga antara subsistem port, makedefault port Anda dan konfigurasi yang Anda inginkan.

Itu agak banyak untuk ringkasan, tetapi kompleksitas konfigurasi sebagian besar tentang aplikasi, bukan port. Bash misalnya, tidak benar-benar memiliki opsi apa pun.

Instalasi

Ini adalah bagian yang mudah:

make install clean

atau kamu bisa

make build
make install
make clean

yang hanya mengetik.

Cukup banyak. Jelas ada lebih banyak yang dapat Anda lakukan seperti ketergantungan dependensi dan opsi konfigurasi secara rekursif, pembaruan dengan tambalan dan sebagainya. Di sini saya akan mengarahkan Anda ke bagian Ports dari Buku Pegangan , halaman manual subsistem port (info bagus tentang target make tambahan) dan makehalaman manual.

gvkv
sumber