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/
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
.
Menambahkan tautan dari /usr/local/bin
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!