GNU/Linux >> Belajar Linux >  >> Linux

Cara Menginstal Perangkat Lunak dari Kode Sumber… dan Menghapusnya Setelahnya

Ringkasan:Panduan terperinci ini menjelaskan cara menginstal program dari kode sumber di Linux dan cara menghapus perangkat lunak yang diinstal dari kode sumber.

Salah satu kekuatan terbesar dari distribusi Linux Anda adalah manajer paketnya dan repositori perangkat lunak terkait. Dengan mereka, Anda memiliki semua alat dan sumber daya yang diperlukan untuk mengunduh dan menginstal perangkat lunak baru di komputer Anda dengan cara yang sepenuhnya otomatis.

Namun terlepas dari semua upaya mereka, pengelola paket tidak dapat menangani setiap kasus penggunaan. Mereka juga tidak dapat mengemas semua perangkat lunak yang tersedia di luar sana. Jadi masih ada situasi di mana Anda harus mengkompilasi dan menginstal perangkat lunak baru sendiri. Bagi saya, alasan paling umum, sejauh ini, saya harus mengkompilasi beberapa perangkat lunak adalah ketika saya perlu menjalankan versi yang sangat spesifik, atau memodifikasi kode sumber dengan menggunakan beberapa opsi kompilasi yang bagus.

Jika kebutuhan Anda termasuk dalam kategori yang terakhir, kemungkinan Anda sudah tahu apa yang harus dilakukan. Namun, bagi sebagian besar pengguna Linux, mengkompilasi dan menginstal perangkat lunak dari kode sumber untuk pertama kalinya mungkin terlihat seperti upacara inisiasi:agak menakutkan; tetapi dengan janji memasuki dunia baru yang penuh kemungkinan dan tempat prestise dalam komunitas istimewa.

[irp posts="13491″ name="Cara Menginstal Dan Menghapus Perangkat Lunak Di Ubuntu"]

A. Menginstal perangkat lunak dari kode sumber di Linux

Dan itulah yang akan kami lakukan di sini. Untuk tujuan artikel ini, katakanlah saya perlu menginstal NodeJS 8.1.1 di sistem saya. Versi itu persis. Versi yang tidak tersedia dari repositori Debian:

sh$ apt-cache madison nodejs | grep amd64
    nodejs | 6.11.1~dfsg-1 | http://deb.debian.org/debian experimental/main amd64 Packages
    nodejs | 4.8.2~dfsg-1 | http://ftp.fr.debian.org/debian stretch/main amd64 Packages
    nodejs | 4.8.2~dfsg-1~bpo8+1 | http://ftp.fr.debian.org/debian jessie-backports/main amd64 Packages
    nodejs | 0.10.29~dfsg-2 | http://ftp.fr.debian.org/debian jessie/main amd64 Packages
    nodejs | 0.10.29~dfsg-1~bpo70+1 | http://ftp.fr.debian.org/debian wheezy-backports/main amd64 Packages

Sekarang, menginstal NodeJs di Ubuntu atau Debian cukup sederhana jika Anda melakukannya dengan manajer paket. Tapi mari kita lakukan melalui kode sumber.

Langkah 1:Mendapatkan kode sumber dari GitHub

Seperti banyak proyek sumber terbuka, sumber NodeJS dapat ditemukan di GitHub:https://github.com/nodejs/node

Jadi, ayo kita langsung ke sana.

Jika Anda tidak terbiasa dengan GitHub, git, atau sistem kontrol versi lainnya yang layak disebutkan, repositori berisi sumber terkini untuk perangkat lunak, serta riwayat semua modifikasi yang dilakukan selama bertahun-tahun pada perangkat lunak itu. Akhirnya hingga baris pertama yang ditulis untuk proyek itu. Bagi para pengembang, menyimpan sejarah itu memiliki banyak keuntungan. Bagi kami hari ini, yang utama adalah kami akan bisa mendapatkan sumber dari proyek seperti pada titik waktu tertentu. Lebih tepatnya, saya akan bisa mendapatkan sumbernya seperti ketika versi 8.1.1 yang saya inginkan dirilis. Meskipun ada banyak modifikasi sejak saat itu.

Di GitHub, Anda dapat menggunakan tombol "cabang" untuk menavigasi di antara berbagai versi perangkat lunak. "Cabang" dan "tag" adalah konsep yang agak terkait di Git. Pada dasarnya, pengembang membuat "cabang" dan "tag" untuk melacak peristiwa penting dalam riwayat proyek, seperti saat mereka mulai mengerjakan fitur baru atau saat mereka menerbitkan rilis. Saya tidak akan membahas detailnya di sini, yang perlu Anda ketahui adalah saya mencari versi yang diberi tag “v8.1.1”

Setelah memilih tag “v8.1.1”, halaman disegarkan, perubahan yang paling jelas adalah tag sekarang muncul sebagai bagian dari URL. Selain itu, Anda akan melihat tanggal perubahan file juga berbeda. Pohon sumber yang sekarang Anda lihat adalah yang ada pada saat tag v8.1.1 dibuat. Dalam beberapa hal, Anda dapat menganggap alat kontrol versi seperti git sebagai mesin perjalanan waktu, memungkinkan Anda untuk bolak-balik ke riwayat proyek.

Pada titik ini, kita dapat mengunduh sumber NodeJS 8.1.1. Anda tidak dapat melewatkan tombol biru besar yang menyarankan untuk mengunduh arsip ZIP proyek. Adapun saya, saya akan mengunduh dan mengekstrak ZIP dari baris perintah demi penjelasan. Tetapi jika Anda lebih suka menggunakan alat GUI, jangan ragu untuk melakukannya:

wget https://github.com/nodejs/node/archive/v8.1.1.zip
unzip v8.1.1.zip
cd node-8.1.1/

Mengunduh arsip ZIP berfungsi dengan baik. Tetapi jika Anda ingin melakukannya "seperti seorang profesional", saya sarankan menggunakan langsung git alat untuk mengunduh sumber. Ini tidak rumit sama sekali— dan ini akan menjadi kontak pertama yang menyenangkan dengan alat yang akan sering Anda temui:

# first ensure git is installed on your system
sh$ sudo apt-get install git
# Make a shallow clone the NodeJS repository at v8.1.1
sh$ git clone --depth 1 \
              --branch v8.1.1 \
              https://github.com/nodejs/node
sh$ cd node/

Omong-omong, jika Anda memiliki masalah, anggap saja bagian pertama artikel ini sebagai pengantar umum. Nanti saya memiliki penjelasan lebih rinci untuk distribusi berbasis Debian dan RedHat untuk membantu Anda memecahkan masalah umum.

Bagaimanapun, setiap kali Anda mengunduh sumber menggunakan git atau sebagai arsip ZIP, Anda sekarang harus memiliki file sumber yang sama persis di direktori saat ini:

sh$ ls
android-configure  BUILDING.md            common.gypi      doc            Makefile   src
AUTHORS            CHANGELOG.md           configure        GOVERNANCE.md  node.gyp   test
benchmark          CODE_OF_CONDUCT.md     CONTRIBUTING.md  lib            node.gypi  tools
BSDmakefile        COLLABORATOR_GUIDE.md  deps             LICENSE        README.md  vcbuild.bat

Langkah 2:Memahami Sistem Build program

Kami biasanya berbicara tentang "mengkompilasi sumber", tetapi kompilasi hanyalah salah satu fase yang diperlukan untuk menghasilkan perangkat lunak yang berfungsi dari sumbernya. Sistem pembangunan adalah seperangkat alat dan praktik yang digunakan untuk mengotomatisasi dan mengartikulasikan tugas-tugas yang berbeda tersebut untuk membangun perangkat lunak secara keseluruhan hanya dengan mengeluarkan beberapa perintah.

Jika konsepnya sederhana, kenyataannya agak lebih rumit. Karena proyek atau bahasa pemrograman yang berbeda mungkin memiliki persyaratan yang berbeda. Atau karena selera programmer. Atau platform yang didukung. Atau karena alasan historis. Atau… atau.. ada daftar alasan yang hampir tidak ada habisnya untuk memilih atau membuat sistem build lain. Semua itu untuk mengatakan ada banyak solusi berbeda yang digunakan di luar sana.

NodeJS menggunakan sistem build bergaya GNU, ini adalah pilihan populer di komunitas open source dan sekali lagi, cara yang baik untuk memulai perjalanan Anda.

Menulis dan menyetel sistem build adalah tugas yang cukup rumit, tetapi untuk "pengguna akhir", sistem build bergaya GNU memudahkan tugas dengan menggunakan dua alat:configure dan make .

configure file adalah skrip khusus proyek yang akan memeriksa konfigurasi sistem tujuan dan fitur yang tersedia untuk memastikan proyek dapat dibangun, pada akhirnya berurusan dengan kekhususan platform saat ini.

Bagian penting dari configure typical tugasnya adalah membuat Makefile . Itu adalah file yang berisi instruksi yang diperlukan untuk membangun proyek secara efektif.

make alat, di sisi lain, adalah alat POSIX yang tersedia di sistem mirip Unix. Ini akan membaca Makefile khusus proyek dan lakukan operasi yang diperlukan untuk membangun dan menginstal program Anda.

Namun, seperti biasa di dunia Linux, Anda masih memiliki kelonggaran dalam menyesuaikan build dengan kebutuhan spesifik Anda.

./configure --help

configure -help perintah akan menunjukkan kepada Anda semua opsi konfigurasi yang tersedia. Sekali lagi, ini sangat spesifik untuk proyek. Dan sejujurnya, kadang-kadang perlu untuk menggali ke dalam proyek sebelum sepenuhnya memahami arti dari setiap opsi konfigurasi.

Tetapi setidaknya ada satu opsi GNU Autotools standar yang harus Anda ketahui:--prefix pilihan. Ini berkaitan dengan hierarki sistem file dan tempat perangkat lunak Anda akan diinstal.

[irp posts=”14419″ name=”8 Tips Dan Trik Vim yang Akan Membuat Anda Menjadi Pengguna Pro”]

Langkah 3:FHS

Hirarki sistem file Linux pada distribusi tipikal sebagian besar mematuhi Filesystem Hierarchy Standard (FHS)

Standar itu menjelaskan tujuan dari berbagai direktori sistem Anda:/usr , /tmp , /var dan seterusnya.

Saat menggunakan GNU Autotools— dan sebagian besar sistem build lainnya— lokasi penginstalan default untuk perangkat lunak baru Anda adalah /usr/local . Manakah pilihan yang baik menurut FSH “Hirarki /usr/local digunakan oleh administrator sistem saat menginstal perangkat lunak secara lokal? Itu harus aman agar tidak ditimpa ketika perangkat lunak sistem diperbarui. Ini dapat digunakan untuk program dan data yang dapat dibagikan di antara sekelompok host, tetapi tidak ditemukan di /usr.”

/usr/local hierarki entah bagaimana mereplikasi direktori root, dan Anda akan menemukan di sana /usr/local/bin untuk program yang dapat dieksekusi, /usr/local/lib untuk perpustakaan, /usr/local/share untuk file independen arsitektur dan sebagainya.

Satu-satunya masalah saat menggunakan /usr/local pohon untuk instalasi perangkat lunak kustom adalah file untuk semua perangkat lunak Anda akan dicampur di sana. Terutama, setelah menginstal beberapa perangkat lunak, akan sulit untuk melacak ke file mana tepatnya /usr/local/bin dan /usr/local/lib milik perangkat lunak mana. Itu tidak akan menyebabkan masalah apa pun pada sistem. Lagi pula, /usr/bin hanya tentang kekacauan yang sama. Tapi itu akan menjadi masalah pada hari Anda ingin menghapus perangkat lunak yang diinstal secara manual.

Untuk mengatasi masalah itu, saya biasanya lebih suka menginstal perangkat lunak khusus di /opt sub-pohon sebagai gantinya. Sekali lagi, mengutip FHS:

_”/opt disediakan untuk instalasi paket perangkat lunak aplikasi tambahan.

Paket yang akan diinstal di /opt harus menempatkan file statisnya di pohon direktori /opt/ atau /opt/ yang terpisah, di mana adalah nama yang menjelaskan paket perangkat lunak dan adalah nama terdaftar LANANA penyedia.”_

Jadi kita akan membuat sub-direktori /opt khusus untuk instalasi NodeJS kustom kami. Dan jika suatu saat saya ingin menghapus perangkat lunak itu, saya hanya perlu menghapus direktori itu:

sh$ sudo mkdir /opt/node-v8.1.1
sh$ sudo ln -sT node-v8.1.1 /opt/node
# What is the purpose of the symbolic link above?
# Read the article till the end--then try to answer that
# question in the comment section!

sh$ ./configure --prefix=/opt/node-v8.1.1
sh$ make -j9 && echo ok
# -j9 means run up to 9 parallel tasks to build the software.
# As a rule of thumb, use -j(N+1) where N is the number of cores
# of your system. That will maximize the CPU usage (one task per
# CPU thread/core + a provision of one extra task when a process
# is blocked by an I/O operation.

Apa pun kecuali "ok" setelah make perintah telah selesai berarti ada kesalahan selama proses pembuatan. Saat kami menjalankan build paralel karena -j pilihan, tidak selalu mudah untuk mengambil pesan kesalahan mengingat volume besar keluaran yang dihasilkan oleh sistem pembangunan.

Jika ada masalah, cukup mulai ulang make , tetapi tanpa -j pilihan kali ini. Dan kesalahan akan muncul di dekat akhir keluaran:

sh$ make

Terakhir, setelah kompilasi selesai, Anda dapat menginstal perangkat lunak ke lokasinya dengan menjalankan perintah:

sh$ sudo make install

Dan ujilah:

sh$ /opt/node/bin/node --version
v8.1.1

B. Bagaimana jika terjadi kesalahan saat menginstal dari kode sumber?

Apa yang saya jelaskan di atas sebagian besar adalah apa yang dapat Anda lihat di halaman "build instruction" dari proyek yang terdokumentasi dengan baik. Tetapi mengingat tujuan artikel ini adalah untuk memungkinkan Anda mengkompilasi perangkat lunak pertama Anda dari sumber, mungkin perlu meluangkan waktu untuk menyelidiki beberapa masalah umum. Jadi, saya akan melakukan seluruh prosedur lagi, tetapi kali ini dari sistem Debian 9.0 dan CentOS 7.0 yang baru dan minimal sehingga Anda dapat melihat kesalahan yang saya temui dan bagaimana saya menyelesaikannya.

Dari Debian 9.0 “Peregangan”

[email protected]:~$ git clone --depth 1 \
                             --branch v8.1.1 \
                             https://github.com/nodejs/node
-bash: git: command not found

Masalah ini cukup mudah untuk didiagnosis dan dipecahkan. Cukup instal git paket:

[email protected]:~$ sudo apt-get install git
[email protected]:~$ git clone --depth 1 \
                             --branch v8.1.1 \
                             https://github.com/nodejs/node && echo ok
[...]
ok
[email protected]:~/node$ sudo mkdir /opt/node-v8.1.1
[email protected]:~/node$ sudo ln -sT node-v8.1.1 /opt/node

Tidak ada masalah di sini.

[email protected]:~/node$ ./configure --prefix=/opt/node-v8.1.1/
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: failed to autodetect C compiler version (CC=gcc)
Node.js configure error: No acceptable C compiler found!
        Please make sure you have a C compiler installed on your system and/or
        consider adjusting the CC environment variable if you installed
        it in a non-standard prefix.

Jelas, untuk mengkompilasi sebuah proyek, Anda memerlukan kompiler. NodeJS ditulis menggunakan bahasa C++, kita membutuhkan compiler C++. Di sini saya akan menginstal `g++`, compiler GNU C++ untuk tujuan itu:

[email protected]:~/node$ sudo apt-get install g++
[email protected]:~/node$ ./configure --prefix=/opt/node-v8.1.1/ && echo ok
[...]
ok
[email protected]:~/node$ make -j9 && echo ok
-bash: make: command not found

Satu alat lain yang hilang. Gejala yang sama. Solusi yang sama:

[email protected]:~/node$ sudo apt-get install make
[email protected]:~/node$ make -j9 && echo ok
[...]
ok
[email protected]:~/node$ sudo make install
[...]
[email protected]:~/node$ /opt/node/bin/node --version
v8.1.1

Sukses!

Harap perhatikan:Saya telah menginstal berbagai alat satu per satu untuk menunjukkan cara mendiagnosis masalah kompilasi dan menunjukkan solusi tipikal untuk menyelesaikan masalah tersebut. Tetapi jika Anda mencari informasi lebih lanjut tentang topik tersebut atau membaca tutorial lainnya, Anda akan menemukan bahwa sebagian besar distribusi memiliki "paket meta" yang berfungsi sebagai payung untuk menginstal beberapa atau semua alat yang biasa digunakan untuk mengkompilasi perangkat lunak. Pada sistem berbasis Debian, Anda mungkin akan menemukan paket build-essentials untuk tujuan itu. Dan pada distribusi berbasis Red-Hat, itu akan menjadi “Alat Pengembangan” grup.

Dari CentOS 7.0

[[email protected] ~]$ git clone --depth 1 \
                               --branch v8.1.1 \
                               https://github.com/nodejs/node
-bash: git: command not found

Perintah tidak ditemukan? Instal saja menggunakan yum pengelola paket:

[[email protected] ~]$ sudo yum install git
[[email protected] ~]$ git clone --depth 1 \
                               --branch v8.1.1 \
                               https://github.com/nodejs/node && echo ok
[...]
ok
[[email protected] ~]$ sudo mkdir /opt/node-v8.1.1
[[email protected] ~]$ sudo ln -sT node-v8.1.1 /opt/node
[[email protected] ~]$ cd node
[[email protected] node]$ ./configure --prefix=/opt/node-v8.1.1/
WARNING: failed to autodetect C++ compiler version (CXX=g++)
WARNING: failed to autodetect C compiler version (CC=gcc)
Node.js configure error: No acceptable C compiler found!

        Please make sure you have a C compiler installed on your system and/or
        consider adjusting the CC environment variable if you installed
        it in a non-standard prefix.

Anda dapat menebaknya:NodeJS ditulis menggunakan bahasa C++, tetapi sistem saya tidak memiliki kompiler yang sesuai. Yum untuk menyelamatkan. Karena saya bukan pengguna CentOS biasa, saya sebenarnya harus mencari di Internet nama persis paket yang berisi kompiler g++. Mengarahkan saya ke halaman itu:https://superuser.com/questions/590808/yum-install-gcc-g-doesnt-work-anymore-in-centos-6-4

[[email protected] node]$ sudo yum install gcc-c++
[[email protected] node]$ ./configure --prefix=/opt/node-v8.1.1/ && echo ok
[...]
ok
[[email protected] node]$ make -j9 && echo ok
[...]
ok
[[email protected] node]$ sudo make install && echo ok
[...]
ok
[[email protected] node]$ /opt/node/bin/node --version
v8.1.1

Kesuksesan. Sekali lagi.

C. Membuat perubahan pada perangkat lunak yang diinstal dari kode sumber

Anda dapat menginstal perangkat lunak dari sumbernya karena Anda memerlukan versi yang sangat spesifik yang tidak tersedia di repositori distribusi Anda, atau karena Anda ingin memodifikasi program untuk memperbaiki bug atau menambahkan fitur. Bagaimanapun, open-source adalah tentang membuat modifikasi. Jadi, saya akan menggunakan kesempatan ini untuk memberi Anda gambaran tentang kekuatan yang Anda miliki sekarang karena Anda dapat mengkompilasi perangkat lunak Anda sendiri.

Di sini, kami akan membuat perubahan kecil pada sumber NodeJS. Dan kita akan melihat apakah perubahan kita akan dimasukkan ke dalam versi kompilasi perangkat lunak:

Buka file node/src/node.cc di editor teks favorit Anda (vim, nano, gedit, ...). Dan coba temukan fragmen kode itu:

   if (debug_options.ParseOption(argv[0], arg)) {
      // Done, consumed by DebugOptions::ParseOption().
    } else if (strcmp(arg, "--version") == 0 || strcmp(arg, "-v") == 0) {
      printf("%s\n", NODE_VERSION);
      exit(0);
    } else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
      PrintHelp();
      exit(0);
    }

Itu ada di sekitar baris 3830 file. Kemudian ubah baris yang berisi printf untuk mencocokkan yang itu saja:

      printf("%s (compiled by myself)\n", NODE_VERSION);

Kemudian kembali ke terminal Anda. Sebelum melangkah lebih jauh— dan untuk memberi Anda lebih banyak wawasan tentang kekuatan di balik git— Anda dapat memeriksa apakah Anda telah memodifikasi file yang benar:

diff --git a/src/node.cc b/src/node.cc
index bbce1022..a5618b57 100644
--- a/src/node.cc
+++ b/src/node.cc
@@ -3828,7 +3828,7 @@ static void ParseArgs(int* argc,
     if (debug_options.ParseOption(argv[0], arg)) {
       // Done, consumed by DebugOptions::ParseOption().
     } else if (strcmp(arg, "--version") == 0 || strcmp(arg, "-v") == 0) {
-      printf("%s\n", NODE_VERSION);
+      printf("%s (compiled by myself)\n", NODE_VERSION);
       exit(0);
     } else if (strcmp(arg, "--help") == 0 || strcmp(arg, "-h") == 0) {
       PrintHelp();

Anda akan melihat tanda “-” (tanda minus) sebelum baris seperti sebelum Anda mengubahnya. Dan tanda “+” (tanda plus) sebelum baris setelah perubahan Anda.

Sekarang saatnya untuk mengkompilasi ulang dan menginstal ulang perangkat lunak Anda:

make -j9 && sudo make install && echo ok
[...]
ok

Kali ini, satu-satunya alasan kegagalan adalah karena Anda salah ketik saat mengubah kode. Jika demikian, buka kembali node/src/node.cc file di editor teks Anda dan perbaiki kesalahannya.

Setelah Anda berhasil mengkompilasi dan menginstal versi NodeJS yang baru dimodifikasi, Anda akan dapat memeriksa apakah modifikasi Anda benar-benar dimasukkan ke dalam perangkat lunak:

[email protected]:~/node$ /opt/node/bin/node --version
v8.1.1 (compiled by myself)

Selamat! Anda telah membuat perubahan pertama pada program sumber terbuka!

D. Biarkan shell menemukan perangkat lunak pembuatan kustom kami

Anda mungkin telah memperhatikan bahwa saya selalu meluncurkan perangkat lunak NodeJS saya yang baru dikompilasi dengan menentukan jalur absolut ke file biner.

/opt/node/bin/node

Berhasil. Tapi ini menjengkelkan, untuk sedikitnya. Sebenarnya ada dua cara umum untuk memperbaikinya.

Sebenarnya ada dua cara umum untuk memperbaiki masalah yang mengganggu dalam menentukan jalur absolut ke file biner,
tetapi untuk memahaminya, Anda harus terlebih dahulu mengetahui bahwa shell Anda menempatkan file yang dapat dieksekusi dengan mencarinya hanya di direktori yang ditentukan oleh variabel lingkungan PATH.

[email protected]:~/node$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Di sini, pada sistem Debian itu, jika Anda tidak secara eksplisit menentukan direktori apa pun sebagai bagian dari nama perintah, shell pertama-tama akan mencari program yang dapat dieksekusi di /usr/local/bin , maka jika tidak ditemukan ke /usr/bin , maka jika tidak ditemukan ke /bin kemudian jika tidak ditemukan ke /usr/local/games kemudian jika tidak ditemukan ke /usr/games , kemudian jika tidak ditemukan ... shell akan melaporkan kesalahan “perintah tidak ditemukan” .

Mengingat itu, kami memiliki dua cara untuk membuat perintah dapat diakses oleh shell:dengan menambahkannya ke salah satu PATH yang sudah dikonfigurasi direktori. Atau dengan menambahkan direktori yang berisi file yang dapat dieksekusi ke PATH .

Cukup menyalin biner simpul yang dapat dieksekusi dari /opt/node/bin ke /usr/local/bin akan menjadi ide yang buruk karena dengan melakukannya, program yang dapat dieksekusi tidak akan lagi dapat menemukan komponen lain yang diperlukan milik /opt/node/ (Ini adalah praktik umum bagi perangkat lunak untuk menemukan file sumber dayanya relatif terhadap lokasinya sendiri).

Jadi, cara tradisional untuk melakukannya adalah dengan menggunakan tautan simbolis:

[email protected]:~/node$ sudo ln -sT /opt/node/bin/node /usr/local/bin/node
[email protected]:~/node$ which -a node || echo not found
/usr/local/bin/node
[email protected]:~/node$ node --version
v8.1.1 (compiled by myself)

Ini adalah solusi sederhana dan efektif, terutama jika paket perangkat lunak dibuat dari hanya beberapa program yang dapat dieksekusi yang terkenal— karena Anda harus membuat tautan simbolis untuk setiap dan setiap perintah yang dapat dipanggil oleh pengguna. Misalnya, jika Anda akrab dengan NodeJS, Anda tahu npm aplikasi pendamping yang harus saya symlink dari /usr/local/bin juga. Tapi saya biarkan itu untuk Anda sebagai latihan.

Memodifikasi PATH

Pertama, jika Anda mencoba solusi sebelumnya, hapus tautan simbolik simpul yang dibuat sebelumnya untuk memulai dari status yang jelas:

[email protected]:~/node$ sudo rm /usr/local/bin/node
[email protected]:~/node$ which -a node || echo not found
not found

Dan sekarang, inilah perintah ajaib untuk mengubah PATH Anda :

[email protected]:~/node$ export PATH="/opt/node/bin:${PATH}"
[email protected]:~/node$ echo $PATH
/opt/node/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Sederhananya, saya mengganti konten PATH variabel lingkungan dengan konten sebelumnya, tetapi diawali dengan /opt/node/bin . Jadi, seperti yang dapat Anda bayangkan sekarang, shell akan melihat terlebih dahulu ke /opt/node/bin direktori untuk program yang dapat dieksekusi. Kami dapat mengonfirmasinya dengan menggunakan which perintah:

[email protected]:~/node$ which -a node || echo not found
/opt/node/bin/node
[email protected]:~/node$ node --version
v8.1.1 (compiled by myself)

Sedangkan solusi "tautan" bersifat permanen segera setelah Anda membuat tautan simbolis ke /usr/local/bin , PATH perubahan hanya efektif ke dalam shell saat ini. Saya akan meninggalkan Anda untuk melakukan riset tentang cara membuat perubahan di PATH permanen. Sebagai petunjuk, ini ada hubungannya dengan "profil" Anda. Jika Anda menemukan solusinya, jangan ragu untuk membagikannya kepada pembaca lain dengan menggunakan bagian komentar di bawah!

E. Cara menghapus perangkat lunak yang baru diinstal dari kode sumber

Karena perangkat lunak NodeJS yang dikompilasi khusus kami duduk sepenuhnya di /opt/node-v8.1.1 direktori, menghapus perangkat lunak itu tidak memerlukan usaha lebih daripada menggunakan perintah rm untuk menghapus direktori itu:

sudo rm -rf /opt/node-v8.1.1

AWAS: sudo dan rm -rf adalah koktail yang berbahaya! Selalu periksa perintah Anda dua kali sebelum menekan tombol "enter". Anda tidak akan mendapatkan pesan konfirmasi dan tidak ada penghapusan jika Anda menghapus direktori yang salah…

Kemudian, jika Anda telah memodifikasi PATH , Anda harus mengembalikan perubahan tersebut, yang tidak rumit sama sekali.

Dan jika Anda telah membuat tautan dari /usr/local/bin Anda harus menghapus semuanya:

[email protected]:~/node$ sudo find /usr/local/bin \
                                 -type l \
                                 -ilname "/opt/node/*" \
                                 -print -delete
/usr/local/bin/node

Tunggu? Di mana Neraka Ketergantungan?

Sebagai komentar terakhir, jika Anda membaca tentang mengkompilasi perangkat lunak kustom Anda sendiri, Anda mungkin pernah mendengar tentang neraka ketergantungan. Ini adalah nama panggilan untuk situasi yang menjengkelkan di mana sebelum berhasil mengkompilasi perangkat lunak, Anda harus terlebih dahulu mengkompilasi pustaka prasyarat, yang pada gilirannya memerlukan pustaka lain yang mungkin pada gilirannya tidak kompatibel dengan beberapa perangkat lunak lain yang sudah Anda miliki. terpasang.

Bagian dari tugas pengelola paket distribusi Anda adalah untuk benar-benar mengatasi ketergantungan itu dan memastikan berbagai perangkat lunak sistem Anda menggunakan pustaka yang kompatibel dan diinstal dalam urutan yang benar.

Untuk artikel ini, saya sengaja memilih untuk menginstal NodeJS karena hampir tidak memiliki dependensi. Saya mengatakan "hampir" karena, pada kenyataannya, itu telah dependensi. Tetapi kode sumber dari dependensi tersebut ada di repositori sumber proyek (di node/deps subdirektori), jadi Anda tidak perlu mengunduh dan menginstalnya secara manual sebelumnya.

Tetapi jika Anda tertarik untuk memahami lebih lanjut tentang masalah itu dan mempelajari cara mengatasinya, beri tahu saya bahwa menggunakan bagian komentar di bawah:itu akan menjadi topik yang bagus untuk artikel yang lebih lanjut!



Linux
  1. Bagaimana Mengkompilasi dan Menginstal FFmpeg dari sumber di CentOS/RHEL?

  2. Cara menginstal editor nano dari kode sumber

  3. Cara Menginstal Ruby 2.0 dan RubyGems 2.1.11 di Ubuntu 13.10 dari sumber

  1. Cara mengkompilasi dari sumber dan menginstal Nginx di VPS Debian 7 (Wheezy)

  2. Cara Menginstal dan Mengkonfigurasi Nginx dari Sumber di Linux

  3. Cara Mengkompilasi dan Menginstal Perangkat Lunak dari Kode Sumber di Linux

  1. Cara Menginstal Apache CouchDB di CentOS 6 (dari Sumber dan EPEL)

  2. Cara Menginstal MongoDB dari Sumber (dan menggunakan YUM) di Linux

  3. Cara menginstal TBB dari sumber di Linux dan membuatnya berfungsi