Mengapa paket biner tidak diinstal ulang oleh apt-get atau bangunan dari sumber?

1

Saya mencoba menginstal Asterisk di server Wheezy Debian saya. Untuk ini saya pertama kali melakukan yang sederhana

sudo apt-get install asterisk

Ini bekerja dengan sempurna. Setelah itu asterisk berjalan dan saya bisa memasukkan CLI dengan menggunakan:

asterisk -rvvv

Setelah beberapa mengacaukan saya membuang tanda bintang dan menginstal ulang lagi:

sudo apt-get remove --purge asterisk
sudo apt-get install asterisk

Ini berhasil diinstal ulang, dan sudo service asterisk statusditampilkan [ ok ] Asterisk PBX is running., tetapi saya tidak bisa masuk ke CLI lagi ( asterisk -rvvvkata -bash: asterisk: command not found).

Jadi saya mencoba menginstalnya dari sumber menggunakan panduan sederhana ini . Semua langkah berjalan dengan baik, dan saya bisa mendapatkan tanda bintang dan berjalan kembali. Tetapi sekali lagi, CLI menolak untuk memulai dengan yang lain -bash: asterisk: command not found).

Adakah yang tahu apa yang saya lakukan salah di sini? Atau adakah yang bisa mengarahkan saya ke arah yang benar? Semua tips dipersilahkan!

kramer65
sumber

Jawaban:

2

Bagaimana shell menemukan program Anda

Saat Anda mengetikkan foocommand-line pada shell Anda, itu akan mencari fooset path yang ditentukan oleh PATHvariabel lingkungan shell Anda (yang dapat Anda periksa dengan menjalankan echo $PATH).

Jadi tebakan saya simpe: paket asterisk yang Anda miliki sebelum menginstal ulang memiliki asteriskbiner yang terletak di tempat yang terdaftar di pengguna Anda $PATHdan paket yang diinstal kemudian menginstalnya di tempat lain.

Anda dapat memeriksa ini dengan mudah dengan mengkorelasikan echo $PATHdi shell Anda dengan output

$ dpkg -L asterisk | grep bin/asterisk

Bagaimanapun, Anda dapat menjalankan program biner Anda dengan menentukan pathname lengkapnya.

Caching resitution pathname di shell

Kemungkinan lain, meskipun kecil kemungkinannya, adalah caching resolusi pathname. Kerang interaktif, bashtermasuk, hanya mencari nama program telanjang melalui daftar $PATHsekaligus, dan kemudian ingat lokasi lengkap yang mereka temukan. Jika Anda kemudian menghapus program dari lokasi itu, shell tidak akan dapat menjalankannya lagi, bahkan jika file program sekarang dapat diakses di beberapa tempat lain yang tercantum dalam $PATH.

Anda dapat membantu shell dengan menjalankannya hash -r(silakan lihat help hashdi bashprompt Anda ).

Miscellanea

Perhatikan bahwa dalam kasus umum, ketika Anda melakukannya

apt-get remove --purge asterisk
apt-get install asterisk

yaitu, lakukan siklus hapus + instal, versi paket yang dikenal dengan sistem APT berdasarkan arsip yang disediakan untuknya telah diinstal. Artinya, jika Anda telah menginstal versi buatan tangan Anda langsung melalui dpkg -i ..., APT tidak akan berusaha untuk menemukan dan menginstal versi yang sama ini ketika Anda kemudian menghapus dan menginstal paket dengan nama yang sama.

Jika Anda ingin membuat asteriskpaket buatan tangan Anda tersedia untuk instalasi umum, Anda harus memelihara repositori Debian lokal yang tepat ( repreprojuga alat yang paling sederhana untuk digunakan, lihat juga apt-ftparchive), buat diketahui oleh sistem APT lokal Anda dan juga mungkin membuat paket dari repositori yang disukai menggunakan preferensi APT .

Kostix
sumber
1
Ternyata biner itu sebenarnya /usr/bintidak ada di PATH saya. Baru saja menambahkannya di .bashrc, yang menyelesaikannya. Terima kasih atas inspirasi dan jawaban yang luas dan luar biasa! Anda membuat hari saya!
kramer65