IT徒然草

IT関係のことを解説したり一人つらつら書いたり

make installしたプログラム等をさくっと削除する方法まとめ。

ソースコードからインストールしたアプリをアンインストールしたいときどうするか

私は、よく個人的なこだわりでLinuxにアプリをインストールするときにソースコードからビルド、インストールします。←結構変わり者なんですが。

アンインストールするときにはビルドシステムによってコマンドが異なります。そのため、一言では言えません。 そういうこともあり、ビルドシステム(AutotoolsやCMake)ごとにアンインストール方法を以下のようにまとめました。

ビルドシステム名(インストールするために使ったコマンド)
方法、解説、アドバイス

コマンド

Autotools(./configure && make && sudo make install)

これが一番簡単かな??Makefileのあるディレクトリで以下のコマンドを実行するだけです。

sudo make uninstall

CMake(mkdir build && cmake .. && make && sudo make install)

インストールしたファイルのリストがビルドディレクトリの中(今回の場合は、build)にinstall_manifest.txtに書き出されます。よって、

xargs sudo rm -rf < install_manifest.txt

この一発でアンインストール完了です。 rmコマンドの引数として、インストールしたファイルのリストを渡します。

QMake(Qt、qmake && make && sudo make install)

QMakeは、Qt専用のビルドシステムで、Qtのプロジェクトファイル(.pro)からMakefileを生成します。QMakeによって、アプリをインストールした場合、以下のコマンドでアンインストールできます。

sudo make uninstall

Autotoolsなどと同じようにやれば問題ありません。なお、環境によっては処理中に、「ディレクトリは空ではありません」などのメッセージが表示されますが、アンインストールはできていますので、完全無視でOKです。

Python(setuptools)、(sudo python setup.py install)

まず、インストール時に”--record install.log”オプションを書きます。なお、すでにオプション無しでインストールしてしまっている場合でも、もう一度recordオプションをつけて実行すれば問題ありません。

sudo python setup.py install --record install.log

これにより、インストールされたファイルのリストが、install.logに書き出されます。ですから、CMakeと同じ要領で、

xargs sudo rm -rf < install.log

を実行して、アンインストールします。

Meson(mkdir build && meson . build && ninja && sudo ninja install)

Mesonは最近良くGNOME系で目にするビルドシステムです。これは、AutotoolsとCMakeを合体させたようなシステムですね。 アンインストール方法は、ビルドディレクトリにて、

sudo ninja uninstall

最後に

また、新たなことが分かり次第、追記していきます。皆様のお役に立てることを願っております。

参考(ありがとうございました)

uninstallation - CMake support "make uninstall"? - Stack Overflow

setup.pyを用いてインストールしたモジュールのアンインストール方法 - Qiita

Ubuntu18.04 LTSにQt5をインストールしよう!

目次

はじめに、Qtとは?

Qtとは、クロスプラットフォームGUIフレームワークです。Linuxで書いたプログラムを、WindowsMacでもビルドし直すだけで同じように動かしたいっ!そのような方におすすめです。

Ubuntu 20.04 LTSでのQt5のインストールについて

Ubuntu 20.04のリポジトリにも18.04 LTSと同じqt5-defaultパッケージなどが存在します。こちらと同じ手順でインストール可能です。また、Qt6がリリースされました。これからのUbuntuでは、Qt6が主流になっていくことと思われます。

Qt5をインストールしよう!

Qt5は、公式ウェブサイト(http://download.qt.io/)からもダウンロードが可能ですが、パスを通したり権限を変更したりと色々と面倒なところがあるため、素早くという目的で、今回はパッケージから導入したいと思います。 それでは、最初にアップデートから行います。

sudo apt update && sudo apt upgrade -y

終了したら以下のコマンドを実行してください。

sudo apt install qtbase5-dev qttools5-dev-tools qt5-default

見事、これで、Qtのベースライブラリのインストールが完了しました。パッケージのおかげで簡単ですね。

QtCreatorをインストールしよう!

これで、Qtはインストールされたわけですが、Qtのプロジェクトを作成するのはIDEなしでは少し大変なんです。 こういうときに役立つのが、QtCreator(Qtプログラミング用のIDE)です。QtCreatorもパッケージとして提供されているので、以下のコマンドでインストールできます。

sudo apt install qtcreator

動作確認をしよう!

お疲れ様でした。最後に、私が用意したHello World GUIで動作確認をしましょう。このコマンドを実行し、以下のようなウィンドウが表示されたら成功です!

リポジトリURL:https://github.com/enjoysoftware/helloworld-gui.git

git clone https://github.com/enjoysoftware/helloworld-gui.git
cd helloworld-gui
qmake
make
app/helloworld-gui

f:id:Enjoysoftware:20200430173538p:plain
HelloWorld GUI スクリーンショット

Ubuntu 18.04でdocker-composeがImportErrorが発生して動かなくなったら

 

docker-composeを実行するとImportError: No module named backports.ssl_match_hostname

 
事件はUbuntu 18.04 LTSにインストールしたdocker-composeでフツーに
sudo docker-compose up -d
と何も考えずにタイプしたら起こりました。

Traceback (most recent call last):

  File "/usr/bin/docker-compose", line 11, in

    load_entry_point('docker-compose==1.17.1', 'console_scripts', 'docker-compose')()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2693, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2324, in load

    return self.resolve()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2330, in resolve

    module = __import__(self.module_name, fromlist=['__name__'], level=0)

  File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 17, in

    from . import errors

  File "/usr/lib/python2.7/dist-packages/compose/cli/errors.py", line 11, in

    from docker.errors import APIError

  File "/usr/lib/python2.7/dist-packages/docker/__init__.py", line 2, in

    from .api import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/__init__.py", line 2, in

    from .client import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 11, in

    from .build import BuildApiMixin

  File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 9, in

    from .. import utils

  File "/usr/lib/python2.7/dist-packages/docker/utils/__init__.py", line 2, in

    from .build import tar, exclude_paths

  File "/usr/lib/python2.7/dist-packages/docker/utils/build.py", line 5, in

    from .utils import create_archive

  File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 18, in

    from .. import tls

  File "/usr/lib/python2.7/dist-packages/docker/tls.py", line 5, in

    from .transport import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/__init__.py", line 3, in

    from .ssladapter import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 21, in

    from backports.ssl_match_hostname import match_hostname

ImportError: No module named backports.ssl_match_hostname

pi@pi-M730SR:~/Desktop/wordpress-docker-compose$ docker-compose -v

Traceback (most recent call last):

  File "/usr/bin/docker-compose", line 11, in

    load_entry_point('docker-compose==1.17.1', 'console_scripts', 'docker-compose')()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 480, in load_entry_point

    return get_distribution(dist).load_entry_point(group, name)

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2693, in load_entry_point

    return ep.load()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2324, in load

    return self.resolve()

  File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 2330, in resolve

    module = __import__(self.module_name, fromlist=['__name__'], level=0)

  File "/usr/lib/python2.7/dist-packages/compose/cli/main.py", line 17, in

    from . import errors

  File "/usr/lib/python2.7/dist-packages/compose/cli/errors.py", line 11, in

    from docker.errors import APIError

  File "/usr/lib/python2.7/dist-packages/docker/__init__.py", line 2, in

    from .api import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/__init__.py", line 2, in

    from .client import APIClient

  File "/usr/lib/python2.7/dist-packages/docker/api/client.py", line 11, in

    from .build import BuildApiMixin

  File "/usr/lib/python2.7/dist-packages/docker/api/build.py", line 9, in

    from .. import utils

  File "/usr/lib/python2.7/dist-packages/docker/utils/__init__.py", line 2, in

    from .build import tar, exclude_paths

  File "/usr/lib/python2.7/dist-packages/docker/utils/build.py", line 5, in

    from .utils import create_archive

  File "/usr/lib/python2.7/dist-packages/docker/utils/utils.py", line 18, in

    from .. import tls

  File "/usr/lib/python2.7/dist-packages/docker/tls.py", line 5, in

    from .transport import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/__init__.py", line 3, in

    from .ssladapter import SSLAdapter

  File "/usr/lib/python2.7/dist-packages/docker/transport/ssladapter.py", line 21, in

    from backports.ssl_match_hostname import match_hostname

ImportError: No module named backports.ssl_match_hostname
 
...は?
しかし、aptによるとbackports.ssl_match_hostnameはすでにインストールされていました。

解決策(詳細な原因は不明です)

 
以下を走らせます。
sudo pycompile -p python-backports.ssl-match-hostname
このコマンドを実行するとモジュールの不足しているファイルが作成されます。

これで最初のコマンドがを動かし、直ったことを確認します。

参考(ありがとうございました)

 

Qt リンギストを使った翻訳のサンプルを作りました

Qt リンギストを使った翻訳のサンプルを作りました。一部作りが雑ですが、温かい目で見てください…
ソースコードGitHubで入手可能です。
https://github.com/enjoysoftware/Qt-Translate-Sample

(C)2020 EnjoySoftware All rights reserved.