Якщо я будую пакет з джерела, як я можу видалити або видалити його повністю?


137

Я використовував вихідний код для створення одного пакета, наприклад нижче:

./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

Але, на жаль, я виявив, що його остання версія має багато помилок, тому мені потрібно її видалити / видалити. Але як я можу це зробити? Я спробував, make clean; make uninstallале все-таки я бачу, що існує:

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

Як ви видалите це зараз?

Відповіді:


177

Зазвичай ви можете просто використовувати:

make uninstall

або

sudo make uninstall

якщо додаток було встановлено як root.

Але це спрацює лише в тому випадку, якщо розробник пакету подбав про те, щоб зробити гарне правило видалення.

Ви також можете спробувати ознайомитися з кроками, які використовуються для встановлення програмного забезпечення, виконавши:

make -n install

А потім спробуйте змінити ці кроки вручну.

Надалі, щоб уникнути подібних проблем, намагайтеся використовувати checkinstallзамість того, make installколи це можливо (AFAIK завжди, якщо ви не хочете одночасно зберігати як компільовану, так і упаковану версію). Він створить та встановить файл deb, який ви можете потім видалити за допомогою улюбленого менеджера пакунків.

make cleanЗазвичай очищає будівельні каталоги, він не видаляє пакет. Він використовується, коли ви хочете бути впевненими, що вся справа складена, а не лише змінені файли.


Я теж це робив. Але все-таки воно існує, як показано pkg-config та ls /usr/lib/myplugin/libXYZ.so
YumYumYum

36
+1 для використання checkinstall- це змушує всю цю проблему випаровуватися.
Олі

6
@Google: Якщо видалення не працює, вам потрібно буде відстежити, що зробили встановлення, і скасувати її вручну.
Хав'єр Рівера

4
Інша річ, яку потрібно пам’ятати, це те, що якщо make installвін запускався як root (наприклад, sudo make install), як правило, це так, то sudo make uninstallдля видалення програмного забезпечення завжди потрібно запускати віртуальний .
Елія Каган

5
Якщо ви вже запущені make install, ви все одно можете використовувати checkinstall. Зазвичай checkinstallбуде перезаписано все, що make installстворено. Після цього просто використовуйте dpkg -r <package.deb>, і все слід видалити.
user502144

28

Я не думаю, що це помилка, було б непогано прочитати і навчитися користуватися checkinstall при установці з джерела.

ви можете встановити checkinstall із сховищ, короткий опис пакета;

CheckInstall відслідковує всі файли, створені або модифіковані вашим інсталяційним сценарієм ("make install" "make install_modules", "setup" тощо), створює стандартний бінарний пакет та встановлює його у вашій системі, що дає можливість видалити його за допомогою Стандартні утиліти управління пакетами вашого дистрибутива.

Ці посилання нижче можуть бути корисними для кращого розуміння. http://en.wikipedia.org/wiki/CheckInstall

http://checkinstall.izto.org/


16

Це не помилка - компіляція з джерела - це непідтримуваний метод установки програмного забезпечення, що повністю обіходить систему управління пакунками (яка використовується Програмним центром).

Не існує стандартного способу встановлення або видалення програмного забезпечення, зібраного з джерела, так що Ubuntu не може знати, що робити. Програмне забезпечення навіть не вказано як встановлена ​​програма.

Слід дотримуватися інструкцій дистриб'ютора щодо встановлення та видалення такого користувальницького програмного забезпечення. Ви також можете зв’язатися з розробником, щоб попросити його створити пакет Debian, щоб можна було використовувати систему управління пакетами.


3

Це не помилка, це те, що відбувається, коли розробники вдаються до розповсюдження через джерело, а не за допомогою власних методів упаковки.

Ви можете отримати вихідні файли, щоб стати пакетами debian, використовуючи checkinstall або dhbuild. Чесно кажучи, на мою думку - нові користувачі повинні уникати встановлення з джерела, а розробники повинні уникати розповсюдження лише за джерелом.


Я знаю, але іноді це неминуче ... У цьому випадку це була просто маленька гра, яка насправді не потрібна, але колись назад мені довелося встановити MATLAB обчислювальний інструмент, який використовується в моєму університеті, і мені довелося встановити його джерелом, оскільки вони це зробили не маю деб-файлу для ubuntu ... Але я обов'язково пройду методи перевірки встановлення та dhbuild ... дякую
nik90

1

Мені відомо декілька пакетів, які підтримують "видалити", але багато інших, які підтримують, встановлюють DESTDIR = xxx "для поетапних установок.

Ви можете використовувати це для створення пакету, який ви встановлюєте, а не встановлювати безпосередньо з джерела. Мені не пощастило з реєстрацією, але fpm працює дуже добре.

Це також може допомогти вам видалити попередньо встановлений пакет за допомогою make install . Ви просто змусите встановити вбудований пакет над встановленим пакетом, а потім видаліть його.

Наприклад, я нещодавно використовував це для роботи з протобуфом-3.3.0. На 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 you@youraddress.com \
 --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      

Віддайте перевагу yum - rpm, якщо можете.

На 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

Віддавайте перевагу dpkg, де можна.

Я також опублікував цю відповідь на stackoverflow


0

Ми повинні домовитися про те , що робити деінсталювати б НЕ завжди працювати, тому нижче більш ініціативного рішення.

Це передбачає використання програми paco, яка доступна в програмному центрі Ubuntu. Після того, як ми встановили paco, ми можемо використовувати його в режимі журналу, коли ми "робимо встановити" програму. Paco діє як обгортка для вашого "make install" і створює журнал у каталозі / var / log / paco зі списком файлів, скопійованих у різні каталоги. Більше того, ви могли бачити файли в кінці Paco Front.

Наприклад, коли я компілював php з джерела, я зробив наступне:

paco -lp php5 "make install"

Параметр l перетворює paco в режим журналу. Це створив файл журналу в / var / log / paco з іменем php5 (ім'я, яке я вказав у команді). Він містив усі файли, які копіюються в різні стандартні місця під час встановлення. Ви можете використовувати редактор командного рядка або paco gui для перегляду файлів.

Нижче наводиться приклад отримання списку файлів за допомогою редактора командного рядка sed
(Замініть php5 своїм іменем файлу).

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

Отримавши список файлів, ви знаєте, як їх видалити, чи не так? Дійсно, ви можете передати результати вищевказаної команди в rm, використовуючи зворотні посилання, як показано нижче:

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

Робота виконана!

Примітка: Через обмеження LD_PRELOAD paco не може слідувати слідам програм suid. Див. Сторінку чоловіка.


0

Я скомпілював php-5.6.30 з джерела, не конфігуруючи його з openssl, тому мені довелося повернутися назад і встановити його з нуля. Використання make uninstall не працювало, оскільки Makefile для php не підтримує його.

Однак цей крок спрацював для мене, - я перерахував усі файли, пов’язані з php, і видалив їх вручну, мені знадобилося близько 5 хвилин, не порушуючи поту. Ви також можете скористатися цими кроками для видалення зібраного програмного забезпечення.

Замініть php програмним забезпеченням, яке потрібно видалити

whereis php

Вищевказана команда перераховує каталоги, де встановлені двійкові файли, наприклад: / usr / local / bin / php, / usr / bin / php .. видаліть кожен файл / каталог, вказаний у вашому виході.

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

Зробіть це з усіма переліченими вище файлами, і ви готові встановити нову версію з нуля.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.