kritaのソースコードを読んでいて、どうしてもデバッグモードで動かしたくなったので開発環境を構築することにしました。以前kritaをビルドしたときは、ビルドに必要になるパッケージをがむしゃらに入れてしまったので、その環境が要らなくなっても関連するファイルがどれなのかが判らず消すことができませんでした。個人的には滅多に使わない環境だし結構容量を食うので、使い終わったら綺麗に消したい。そんなわけで今回はDockerを使ってビルドしてみることにします。
kritaの公式マニュアルでは結構隅の方に追いやられている方法なので、あまりおすすめできない方法なのかもしれません。ま、個人でちょっと確認に使う分にはこれでいっかな😅
以前の記事はこちら kritaをソースコードからビルドする フリーのお絵描きソフトkritaの使い方をメインに痒いところに手が届く記事の作成を目指しています。 kritaをQt Creatorを使ってデバッグできるようにしてみた フリーのお絵描きソフトkritaの使い方をメインに痒いところに手が届く記事の作成を目指しています。
基本的にはkritaの公式マニュアル通りに勧めていきますが、このマニュアルはUbuntuでのやり方をベースにしているので私の環境のfedoraに合うように適宜読み替えています。
Dockerのインストール
はじめにDockerをインストールしました。以下のDockerの公式サイトにあるfedoraへのインストール方法を参考にします。
📕Install Docker Engine on Fedora
以下は実際に実行したコマンドです。
既にdockerが入っていたら削除する
[fukari@fedora ~]$ sudo dnf remove docker
dockerのレポジトリを登録する
[fukari@fedora ~]$ sudo dnf -y install dnf-plugins-core [fukari@fedora ~]$ sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
dockerをインストールする
[fukari@fedora ~]$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
dockerを立ち上げる
[fukari@fedora ~]$ sudo systemctl start docker
サンプルを立ち上げて正しく動いていることを確認する
[fukari@fedora ~]$ sudo docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
Dockerイメージをビルドする
Dockerイメージを保存するディレクトリを作成して、dockerの設定ファイルにそのパスを指定する(どこに作るのがいいのかお作法的なものが良くわかってないので適当です)
[fukari@fedora ~]$ mkdir docker [fukari@fedora ~]$ sudo vim /etc/docker/daemon.json { "data-root" : "/home/fukari/docker/" }
dockerに設定の変更を反映したいので一旦止める
※dockerという名前で止めようとするとワーニングが出るので、docker.socketを指定
[fukari@fedora ~]$ sudo systemctl stop docker Warning: Stopping docker.service, but it can still be activated by: docker.socket [fukari@fedora ~]$ sudo systemctl stop docker.socket
停止を確認してdockerをスタートします
[fukari@fedora ~]$ sudo systemctl status docker ○ docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: inactive (dead) TriggeredBy: ○ docker.socket Docs: https://docs.docker.com [fukari@fedora ~]$ sudo systemctl start docker
kritaのdockerイメージのビルドに必要なものをダウンロードする
※krita自体のソースコードや依存関係を解決するためのファイルをダウンロードしているようです
[fukari@fedora ~]$ git clone https://invent.kde.org/dkazakov/krita-docker-env krita-auto-1 [fukari@fedora ~]$ cd krita-auto-1/ [fukari@fedora krita-auto-1]$ mkdir persistent [fukari@fedora krita-auto-1]$ cd persistent/ [fukari@fedora persistent]$ git clone https://invent.kde.org/graphics/krita.git [fukari@fedora persistent]$ cd .. [fukari@fedora krita-auto-1]$ ls Dockerfile README.md bin default-home persistent ubuntu-focal [fukari@fedora krita-auto-1]$ ./bin/bootstrap-deps.sh
dockerイメージをビルドする
[fukari@fedora krita-auto-1]$ ./bin/build_image krita-deps
Dockerイメージを実行する
dockerイメージを実行する
[fukari@fedora krita-auto-1]$ ./bin/run_container krita-deps krita-auto-1 docker: Error response from daemon: error gathering device information while adding custom device "/dev/nvidia-uvm": no such file or directory.
※エラーが出てしまいました。nvidiaのモジュールがうまく動いていないみたいなのでコマンドでロードし直します。
nvidiaのモジュールをロードする
[root@fedora dev]# nvidia-modprobe -u -c=0 [root@fedora dev]# exit ログアウト
dockerイメージを実行する
[fukari@fedora krita-auto-1]$ ./bin/run_container krita-deps krita-auto-1 [sudo] fukari のパスワード: docker: Error response from daemon: Conflict. The container name "/krita-auto-1" is already in use by container "261446c431aa5358cb0ee05f0a17339d39b9992c4ac2dab26524b9c7838e6f60". You have to remove (or rename) that container to be able to reuse that name. See 'docker run --help'.
nvidiaのエラーになったときに作られたdockerイメージと名前が被ってエラーとなったので、既にあるコンテナを削除してやり直す
[fukari@fedora krita-auto-1]$ sudo docker rm krita-auto-1 krita-auto-1 [fukari@fedora krita-auto-1]$ ./bin/run_container krita-deps krita-auto-1
イメージが実行できたので、コンテナに入る
[fukari@fedora krita-auto-1]$ ./bin/enter [sudo] fukari のパスワード: appimage@fedora:/home/appimage/appimage-workspace/krita-build>
QtCreatorのインストール
qt-creator-opensource-linux-x86_64.runがないのでqtcreator-package.tar.gz.1を解凍する(./bin/bootstrap-deps.sh の中身を見た感じこれで良さそう)
※fileコマンドでファイル形式を確認すると、番号が付いていないのは圧縮ファイルではない
appimage@fedora:/home/appimage/persistent>ls krita qtcreator qtcreator-package.tar.gz.1 krita-appimage-deps.tar qtcreator-package.tar.gz appimage@fedora:/home/appimage/persistent>tar -zxvf qtcreator-package.tar.gz.1
解凍したQtCreatorを移動して、docker上のQtCreatorを事前に用意してあるスクリプトから起動できるようにする
appimage@fedora:/home/appimage/persistent>mv qtcreator ~/
QtCreatorの実行
コンテナからログアウトして、スクリプトからQtCreatorを起動する
appimage@fedora:/home/appimage/persistent>exit logout [fukari@fedora krita-auto-1]$ ./bin/qtcreator
もしエラーが出て実行できなければ以下を実行する
[root@fedora dev]# nvidia-modprobe -u -c=0
📕Cannot (re)start a container after rebooting the host OS #288
起動できました
※何やらプラグインがロード出来てないようですが今の所無視です
QtCreatorでkritaをビルド
メニューからFile>Open File or ProjectとたどってkritaのソースコードのディレクトリにあるCMakeLists.txtを選択すると、ソースコードがQtCreatorのプロジェクトとして開かれる
左側にあるprojectsと書かれたスパナのアイコンをクリックする。Configure Projectという画面の右下にある「Configure Project」というボタンを押すとkritaのプロジェクトの設定ファイルが読み込まれる
設定ファイルを以下のcmakeのオプションを参考にデバッグ用の設定に変更する
📕Configuring the Build|Building Krita from Sourcea-Krita Manual 5.0.0 Documentation
左側の一番下にある金槌のアイコンをクリックしてビルドする
画面下にあるタブの4.Compile Outputをクリックするとビルドの進捗がわかる
ビルドが終わったら左側にあるスパナのアイコンをクリックして、実行の設定をする。デフォルトのままだとビルドディレクトリからkritaを実行しようとしてエラーになるため実行ファイルの場所をきちんと指定しないと起動しない。実行ファイルはビルドディレクトリとは違う場所に置く必要がある。
QtCreatorでkritaのデバッグ実行
左側の虫が付いた再生ボタンのアイコンをクリックしてデバッグ実行する
メモ
cmakeはそんなに使ったことがないので知識不足が否めない。しっかり調べてはいるが、深くは追いきれてないため多分変な設定をしている部分があると思う。もとの動きが分かればQtCreatorをもっと上手く扱えるだろう。あと、GPUにはいつも悩まされてばかりいる。悲しい。
はぁ〜疲れました〜!