Jika saya membuat paket dari sumber, bagaimana saya bisa menghapus atau menghapus sepenuhnya?

137

Saya menggunakan kode sumber untuk membangun satu paket seperti di bawah ini:

./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var --libexecdir=/usr/lib --with-package-name="Myplugin" --with-package-origin="http://www.ubuntu.org/" --enable-gtk-doc --disable-static
make
make install

Namun sayangnya, saya menemukan bahwa ini adalah versi terbaru, dan memiliki banyak bug, jadi saya harus menghapusnya / uninstall. Tetapi bagaimana saya bisa melakukannya? Saya mencoba make clean; make uninstalltetapi saya masih melihatnya:

# pkg-config --list-all | grep Myplugin
myplugin-....
$ ls /usr/lib/myplugin/libXYZ.so
exist....

Bagaimana Anda menghapus ini sekarang?

YumYumYum
sumber

Jawaban:

177

Biasanya Anda bisa menggunakan:

make uninstall

atau

sudo make uninstall

jika aplikasi diinstal sebagai root.

Tetapi ini hanya akan berfungsi jika pengembang paket telah membuat aturan penghapusan yang baik.

Anda juga dapat mencoba melihat langkah-langkah yang digunakan untuk menginstal perangkat lunak dengan menjalankan:

make -n install

Dan kemudian coba untuk membalikkan langkah-langkah itu secara manual.

Di masa mendatang untuk menghindari masalah seperti itu, coba gunakan checkinstallalih-alih make installsedapat mungkin (AFAIK selalu kecuali Anda ingin tetap menggunakan versi yang dikompilasi dan paket pada saat yang bersamaan). Ini akan membuat dan menginstal file deb yang kemudian dapat dihapus dengan menggunakan manajer paket favorit Anda.

make cleanbiasanya membersihkan direktori bangunan, itu tidak menghapus paket. Ini digunakan ketika Anda ingin memastikan bahwa semuanya dikompilasi, bukan hanya file yang diubah.

Javier Rivera
sumber
Saya juga melakukannya. Tapi masih ada, seperti yang ditunjukkan pkg-config dan ls /usr/lib/myplugin/libXYZ.so
YumYumYum
36
+1 untuk digunakan checkinstall- ini membuat seluruh masalah ini menguap.
Oli
6
@Google: Jika penghapusan instalan tidak berfungsi, Anda harus melacak apa yang dilakukan pemasangan dan membatalkannya secara manual.
Javier Rivera
4
Satu hal yang perlu diingat adalah bahwa jika make installdijalankan sebagai root (misalnya, sudo make install), yang biasanya terjadi, itu virtual selalu diperlukan untuk menjalankan sudo make uninstalluntuk menghapus perangkat lunak.
Eliah Kagan
5
Jika sudah berjalan make install, Anda masih bisa menggunakan checkinstall. Biasanya checkinstallakan menimpa semua yang make installdibuat. Setelah itu baru digunakan dpkg -r <package.deb>, dan semuanya harus dihapus.
user502144
28

Saya tidak berpikir ini adalah bug, itu akan menjadi ide yang baik untuk membaca dan belajar menggunakan checkinstall ketika menginstal dari sumber.

Anda dapat menginstal checkinstall dari repositori, deskripsi singkat tentang paket;

CheckInstall melacak semua file yang dibuat atau dimodifikasi oleh skrip instalasi Anda ("make install" "make install_modules", "setup", dll), buat paket biner standar dan instal di sistem Anda agar Anda dapat menghapusnya dengan utilitas manajemen paket standar distribusi Anda.

Tautan di bawah ini mungkin bermanfaat untuk mendapatkan pemahaman yang lebih baik. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/

Sabacon
sumber
16

Ini bukan bug - kompilasi dari sumber adalah metode yang tidak didukung untuk menginstal perangkat lunak yang mem-bypass sistem manajemen paket (yang digunakan oleh Pusat Perangkat Lunak) sepenuhnya.

Tidak ada cara standar bahwa perangkat lunak yang dikompilasi dari sumber diinstal atau dihapus sehingga tidak ada cara Ubuntu tahu apa yang harus dilakukan. Perangkat lunak ini bahkan tidak terdaftar sebagai program yang diinstal.

Anda harus mengikuti instruksi distributor untuk pemasangan dan penghapusan perangkat lunak khusus tersebut. Anda juga dapat menghubungi pengembang untuk meminta mereka membuat paket Debian sehingga sistem manajemen paket dapat digunakan.

dv3500ea
sumber
3

Ini bukan bug, itu yang terjadi ketika pengembang menggunakan distribusi melalui sumber dan bukan melalui metode pengemasan asli.

Anda bisa menjadikan file sumber Anda menjadi paket debian dengan menggunakan checkinstall atau dhbuild. Sejujurnya, menurut saya - pengguna baru harus menghindari menginstal dari sumber, dan pengembang harus menghindari distribusi berdasarkan sumber saja.

RolandiXor
sumber
Saya tahu tetapi kadang-kadang itu tidak dapat dihindari ... Dalam hal ini hanya permainan kecil yang tidak benar-benar diperlukan tetapi kadang-kadang saya harus menginstal MATLAB alat komputasi yang digunakan di universitas saya dan harus menginstalnya oleh sumber sejak mereka melakukannya. tidak punya file deb untuk ubuntu ... Tapi saya pasti akan melalui metode checkinstall dan dhbuild ... terima kasih
nik90
1

Saya tahu beberapa paket yang mendukung "make uninstall" tetapi banyak lagi yang mendukung make install DESTDIR = xxx "untuk instalasi bertahap.

Anda dapat menggunakan ini untuk membuat paket yang Anda instal alih-alih menginstal langsung dari sumbernya. Saya tidak beruntung dengan checkinstall tetapi fpm bekerja dengan sangat baik.

Ini juga dapat membantu Anda menghapus paket yang sebelumnya diinstal menggunakan make install . Anda cukup memaksa menginstal paket bawaan Anda di atas paket make instal dan kemudian mencopotnya.

Sebagai contoh, saya menggunakan ini baru-baru ini untuk berurusan dengan protobuf-3.3.0. Di RHEL7:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m [email protected] \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

Lebih suka yum ke rpm jika Anda bisa.

Di Debian9:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

Lebih suka apt ke dpkg di mana Anda bisa.

Saya juga memposting jawaban ini di stackoverflow

Bruce Adams
sumber
0

Kita perlu bernegosiasi fakta bahwa membuat uninstall akan tidak selalu bekerja, jadi di bawah lebih dari solusi proaktif.

Ini melibatkan penggunaan program paco yang tersedia di Pusat Perangkat Lunak Ubuntu. Setelah kita menginstal paco, kita dapat menggunakannya dalam mode log ketika kita "membuat instal" sebuah program. Paco bertindak seperti pembungkus untuk "make install" Anda dan membuat log di direktori / var / log / paco dengan daftar file yang disalin ke berbagai direktori. Selain itu, Anda dapat melihat file-file di ujung Paco Front.

Sebagai contoh ketika saya mengkompilasi php dari sumber saya melakukan hal berikut:

paco -lp php5 "make install"

Parameter l membuat paco berjalan dalam mode log. Ini membuat file log di / var / log / paco bernama php5 (nama yang saya berikan dalam perintah). Itu berisi semua file yang disalin ke berbagai lokasi standar selama instalasi. Anda bisa menggunakan editor baris perintah atau paco gui untuk melihat file.

Di bawah ini adalah contoh mendapatkan daftar file menggunakan sed command line editor
(Ganti php5 dengan nama file Anda).

cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'

Setelah Anda mendapatkan daftar file, Anda tahu cara menghapusnya bukan? Memang, Anda bisa meneruskan hasil dari perintah di atas ke rm menggunakan backticks seperti yang ditunjukkan di bawah ini:

sudo rm `cat /var/log/paco/php5 | sed -n 's/|\(.*\)//;/^#\(.*\)/d;p'`

Pekerjaan selesai!

Catatan: Karena keterbatasan LD_PRELOAD, paco tidak dapat mengikuti jejak program suid. Lihat halaman manual.

sjsam
sumber
0

Saya telah mengompilasi php-5.6.30 dari sumber tanpa mengonfigurasinya dengan openssl, jadi saya harus kembali dan menginstalnya dari awal. Menggunakan make uninstall tidak berfungsi karena Makefile untuk php tidak mendukungnya.

Namun, langkah ini berhasil bagi saya, - Saya mencantumkan semua file yang terkait dengan php dan menghapusnya secara manual, butuh sekitar 5 menit tanpa berkeringat. Anda juga dapat menggunakan langkah-langkah ini untuk menghapus instalan perangkat lunak yang dikompilasi.

Ganti php dengan perangkat lunak yang perlu Anda hapus

whereis php

Perintah di atas daftar direktori di mana binari diinstal ex: / usr / local / bin / php, / usr / bin / php .. hapus setiap file / direktori yang tercantum dalam output Anda.

sudo rm -f /usr/local/bin/php

Lakukan ini dengan semua file yang tercantum dalam output di atas dan Anda siap untuk menginstal versi yang lebih baru dari awal.

Abhinay
sumber