Apa yang dilakukan 'make install'?

52

Pindah dari Windows ke Linux, saya tidak dapat memahami proses menginstal perangkat lunak di Linux. Di Windows, ketika kami menjalankan file instalasi, ia menanyakan di mana Anda ingin menginstal program, kemungkinan besar hanya di folder file program. Kemudian, itu mengedit registri. Ini disebut instalasi di Windows. Apa sebenarnya artinya 'menginstal perangkat lunak' di Linux?

Misalkan saya mengunduh kode sumber, mengkonfigurasinya, dan kemudian membangun biner menggunakan make. Sekarang ini hanya biner, bukan program yang dapat digunakan. Bagaimana cara 'diinstal'? Oleh make install? Dan apa tepatnya yang dilakukan perintah ini?

KawaiKx
sumber
1
Jawaban saya untuk stackoverflow.com/questions/528399/… memberikan tinjauan singkat tentang hal-hal yang biasa dilakukan oleh make installlangkah-langkah dari sudut pandang programmer.
dmckee

Jawaban:

44

Make adalah program alur kerja tujuan umum, biasanya digunakan untuk kompilasi. Tetapi bisa digunakan untuk apa saja.

Ketika Anda melakukan sesuatu seperti "make all", program make mengeksekusi aturan bernama "all" dari file di direktori saat ini bernama "Makefile". Aturan ini biasanya memanggil kompilator untuk mengkompilasi beberapa kode sumber ke dalam binari.

Ketika Anda melakukan "make install", program make mengambil binari dari langkah sebelumnya dan menyalinnya ke beberapa lokasi yang sesuai sehingga mereka dapat diakses. Tidak seperti pada Windows, instalasi hanya perlu menyalin beberapa perpustakaan dan executables dan tidak ada persyaratan registri seperti itu. Singkatnya, "make install" hanya menyalin file yang dikompilasi ke lokasi yang sesuai.

Sharjeel
sumber
4
Secara teknis, registri bukanlah suatu keharusan - apa yang ditambahkan oleh semua penginstal hanyalah fungsi yang praktis, seperti halnya database manajer paket di Linux, bagi orang yang suka menghapus perangkat lunak.
grawity
2
@ kegembiraan Sebenarnya, di Windows diperlukan untuk mengedit registri karena berbagai alasan, seperti integrasi. Di Linux, mengintegrasikan perangkat lunak satu sama lain biasanya hanya melibatkan menyalin file atau menambahkan baris ke file konfigurasi dengan sesuatu seperti skrip post-install.
Camilo Martin
@sharjeel Akan sangat membantu untuk mengetahui bagaimana saya dapat menemukan aturan yang dinamai alldalam Makefiledan seperti apa tanda akhir bagian itu, sehingga saya bisa melihat di mana aturan pemrosesan allberhenti.
Pro Backup
36

make installmelakukan apa pun yang Makefilepenulis inginkan. Biasanya, pada titik ini, sudah terlambat untuk mengubah direktori instal, seperti yang sering diketahui sebelumnya , selama pembuatan, jadi file bantuan dan file konfigurasi dapat dirujuk dengan nama path yang benar.

Banyak proyek menggunakan GNU Autotools untuk mencoba meningkatkan portabilitas mereka di antara perbedaan perangkat keras dan sistem operasi. (Varian Unix yang berbeda menggunakan tajuk yang sedikit berbeda untuk deklarasi fungsi yang sedikit keluar dari jalur yang biasa - kecuali sebagian besar program membutuhkan satu atau yang lain dari yang dideklarasikan di lokasi yang berbeda.)

Ketika sebuah proyek menggunakan Autotools, mantra normal untuk menginstalnya adalah:

./configure
make
make install

The ./configurebiasanya memungkinkan Anda untuk menggunakan opsi baris perintah seperti --prefix /opt/apacheatau sesuatu yang mirip untuk menentukan pathname yang berbeda. /usr/local/adalah standar umum prefix. Jauh lebih mudah untuk perangkat lunak yang dibangun secara lokal untuk tinggal di satu tempat dan perangkat lunak yang disediakan distribusi untuk hidup di "direktori utama":, /usr/ /bin/dan seterusnya. (Pemaket sangat berhati-hati untuk tidak pernah menyentuh file /usr/local/- mereka tahu itu khusus untuk administrator sistem.)

Bagaimanapun, ./configure --prefix /path/to/new/prefixakan mengatur variabel dalam Makefileyang tersedia ketika mengkompilasi program, memodifikasi halaman manual sehingga mereka menunjuk ke lokasi yang benar untuk file, memodifikasi file konfigurasi, dll. Jadi makeakan membangun perangkat lunak khusus untuk lokasi instalasi yang Anda inginkan dan make installakan menginstalnya ke lokasi itu.

Sebagian besar program dapat berjalan bahkan tanpa make installlangkah akhir - hanya ./program_nameakan sering memulainya. Ini jelas merupakan hal per proyek - beberapa, seperti postfix,, qmaildll., Terdiri dari banyak bagian bergerak yang berbeda dan bergantung padanya semuanya bekerja bersama. Yang lain, suka lsatau sumungkin cukup mandiri untuk mengeksekusi denda dari direktori tempat mereka dibangun. (Ini tidak sering berguna - tetapi kadang-kadang sangat berguna.)

Namun, tidak semua proyek menggunakan Autotools - mereka besar , rumit , dan menyedihkan untuk dipelihara. Tulisan tangan Makefilejauh lebih mudah untuk ditulis, dan saya pribadi berpikir hanya mendistribusikan yang sederhana Makefiledengan variabel konfigurasi yang tersedia jauh lebih mudah pada pengembang dan pengguna keduanya. (Padahal ./configure ; make ; make installmantra itu sangat mudah bagi pengguna saat itu bekerja.)

sarnold
sumber
19

make installtidak kurang dari menjalankan installfungsi / bagian diMakefile

sascha
sumber
Benar, itu hanya suka make clean, pada dasarnya itu hanya mengeksekusi kode di bawah bagian.
Wulfric Lee
8

Yang paling penting untuk disebutkan tentang menginstal perangkat lunak di Linux adalah jauh lebih andal dan mudah untuk menginstal perangkat lunak dari distribusi Anda (ini tujuannya!). Hanya gunakan make installjika tidak ada cara lain (pertimbangkan juga program alternatif).

Kesalahan umum pengguna Windows adalah mengunduh program dari tempat yang berbeda dan mencoba menginstalnya, lupa memeriksa paket distribusi mereka, yang dapat diinstal dengan satu klik atau perintah (pada manajer paket).

Juga ingat bahwa salah satu alasan utama tidak adanya infeksi virus di Linux adalah bahwa perangkat lunak (atau harus) diinstal dari lokasi pusat (tepercaya) alih-alih dari banyak situs acak.

Sebagai catatan tambahan, sementara distribusi seperti Ubuntu selalu berisi paket yang sudah ketinggalan zaman, ada juga distribusi seperti Arch Linux yang selalu terbaru (meskipun mereka tidak menawarkan secara harfiah setiap program yang pernah dirilis untuk Linux, seperti Debian / Ubuntu).

Adapun apa yang sebenarnya akan terjadi ketika Anda menggunakan manajer paket, baik itu akan memeriksa dependensi, paket unduhan, membongkar, meletakkan semua file ke direktori yang sesuai, sesuai dengan FHS dan pedoman distribusi sendiri, dan beberapa rutinitas lain yang mungkin bisa Anda temukan tentang dari halaman manual manajer paket.

corvinus
sumber