kritaのビルド再び…今度はDockerでビルドしてデバッグ実行するよ!

kritaのソースコードを読んでいて、どうしてもデバッグモードで動かしたくなったので開発環境を構築することにしました。以前kritaをビルドしたときは、ビルドに必要になるパッケージをがむしゃらに入れてしまったので、その環境が要らなくなっても関連するファイルがどれなのかが判らず消すことができませんでした。個人的には滅多に使わない環境だし結構容量を食うので、使い終わったら綺麗に消したい。そんなわけで今回はDockerを使ってビルドしてみることにします。

kritaの公式マニュアルでは結構隅の方に追いやられている方法なので、あまりおすすめできない方法なのかもしれません。ま、個人でちょっと確認に使う分にはこれでいっかな😅

以前の記事はこちら

kritaをソースコードからビルドする

kritaをソースコードからビルドする

フリーのお絵描きソフトkritaの使い方をメインに痒いところに手が届く記事の作成を目指しています。

kritaをQt Creatorを使ってデバッグできるようにしてみた

kritaをQt Creatorを使ってデバッグできるようにしてみた

フリーのお絵描きソフトkritaの使い方をメインに痒いところに手が届く記事の作成を目指しています。

基本的にはkritaの公式マニュアル通りに勧めていきますが、このマニュアルはUbuntuでのやり方をベースにしているので私の環境のfedoraに合うように適宜読み替えています。

Dockerのインストール

はじめにDockerをインストールしました。以下のDockerの公式サイトにあるfedoraへのインストール方法を参考にします。
📕Install Docker Engine on Fedora
以下は実際に実行したコマンドです。

  1. 既にdockerが入っていたら削除する

    [fukari@fedora ~]$ sudo dnf remove docker
  2. 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
  3. dockerをインストールする

    [fukari@fedora ~]$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  4. dockerを立ち上げる

    [fukari@fedora ~]$ sudo systemctl start docker
  5. サンプルを立ち上げて正しく動いていることを確認する

    [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イメージをビルドする

  1. Dockerイメージを保存するディレクトリを作成して、dockerの設定ファイルにそのパスを指定する(どこに作るのがいいのかお作法的なものが良くわかってないので適当です)

    [fukari@fedora ~]$ mkdir docker
    [fukari@fedora ~]$ sudo vim /etc/docker/daemon.json
    {
        "data-root" : "/home/fukari/docker/"
    }
    
  2. 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
    
  3. 停止を確認して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
  4. 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 
    
    
  5. dockerイメージをビルドする

    [fukari@fedora krita-auto-1]$ ./bin/build_image krita-deps
    

Dockerイメージを実行する

  1. 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のモジュールがうまく動いていないみたいなのでコマンドでロードし直します。

    📕error gathering device information while adding custom device “/dev/nvidia-uvm“: no such file or dir

  2. nvidiaのモジュールをロードする

    [root@fedora dev]# nvidia-modprobe -u -c=0
    [root@fedora dev]# exit
    ログアウト
    
  3. 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'.
  4. 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
    
  5. イメージが実行できたので、コンテナに入る

    [fukari@fedora krita-auto-1]$ ./bin/enter 
    [sudo] fukari のパスワード:
    appimage@fedora:/home/appimage/appimage-workspace/krita-build>
    

QtCreatorのインストール

  1. 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 
  2. 解凍したQtCreatorを移動して、docker上のQtCreatorを事前に用意してあるスクリプトから起動できるようにする

    appimage@fedora:/home/appimage/persistent>mv qtcreator ~/

QtCreatorの実行

  1. コンテナからログアウトして、スクリプトからQtCreatorを起動する

    appimage@fedora:/home/appimage/persistent>exit
    logout
    [fukari@fedora krita-auto-1]$ ./bin/qtcreator
    
  2. もしエラーが出て実行できなければ以下を実行する

    open-error
    [root@fedora dev]# nvidia-modprobe -u -c=0

    📕Cannot (re)start a container after rebooting the host OS #288

  3. 起動できました

    ※何やらプラグインがロード出来てないようですが今の所無視です

    qtqreator

QtCreatorでkritaをビルド

  1. メニューからFile>Open File or ProjectとたどってkritaのソースコードのディレクトリにあるCMakeLists.txtを選択すると、ソースコードがQtCreatorのプロジェクトとして開かれる

    open-project
  2. 左側にあるprojectsと書かれたスパナのアイコンをクリックする。Configure Projectという画面の右下にある「Configure Project」というボタンを押すとkritaのプロジェクトの設定ファイルが読み込まれる

  3. 設定ファイルを以下のcmakeのオプションを参考にデバッグ用の設定に変更する

    📕Configuring the Build|Building Krita from Sourcea-Krita Manual 5.0.0 Documentation

    build-config
  4. 左側の一番下にある金槌のアイコンをクリックしてビルドする

  5. 画面下にあるタブの4.Compile Outputをクリックするとビルドの進捗がわかる

  6. ビルドが終わったら左側にあるスパナのアイコンをクリックして、実行の設定をする。デフォルトのままだとビルドディレクトリからkritaを実行しようとしてエラーになるため実行ファイルの場所をきちんと指定しないと起動しない。実行ファイルはビルドディレクトリとは違う場所に置く必要がある。

    run-config

QtCreatorでkritaのデバッグ実行

  1. 左側の虫が付いた再生ボタンのアイコンをクリックしてデバッグ実行する

    run

メモ

cmakeはそんなに使ったことがないので知識不足が否めない。しっかり調べてはいるが、深くは追いきれてないため多分変な設定をしている部分があると思う。もとの動きが分かればQtCreatorをもっと上手く扱えるだろう。あと、GPUにはいつも悩まされてばかりいる。悲しい。

はぁ〜疲れました〜!

参考