MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtその他 - RPMパッケージのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtその他 - RPMパッケージ
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == RPM (Red Hat Package Manager) は、RHELやSUSE等のLinuxディストリビューションで使用されるパッケージ管理形式である。<br> <br> QtアプリケーションをRPMパッケージ化することにより、以下に示すようなメリットがある。<br> * 依存関係の自動解決 * バージョン管理の一元化 * アップデート配信の容易化 * システムへのクリーンなインストールとアンインストール * 複数マシンへの展開の効率化 <br><br> == 必要なソフトウェア == * Qt 5 / 6 * CMake * GCC/G++ * rpmbuildツールチェーン <br><br> == ビルド環境の構築 == RPMパッケージを作成するために必要なツールをインストールする。<br> <br> ==== RHEL ==== 必要なパッケージをインストールする。<br> <br> # RPMビルドツールのインストール sudo dnf install rpm-build rpmdevtools rpmlint # Qt開発パッケージのインストール sudo dnf install qt6-qtbase-devel qt6-qtdeclarative-devel qt6-qtquickcontrols2-devel # ビルドツールのインストール sudo dnf install cmake gcc-c++ desktop-file-utils <br> ==== SUSE ==== 必要なパッケージをインストールする。<br> <br> # RPMビルドツールのインストール sudo zypper install rpm-build rpmdevtools rpmlint # OBS (Open Build Service) クライアントのインストール (オプション) sudo zypper install osc build # Qt開発パッケージのインストール (アプリケーション開発に必要なQtパッケージ) 例: sudo zypper install qt6-base-devel qt6-declarative-devel qt6-quickcontrols2-devel # ビルドツールのインストール sudo zypper install cmake gcc-c++ desktop-file-utils update-desktop-files <br> ==== RPMビルドディレクトリの作成 ==== <code>rpmdev-setuptree</code> コマンドを実行して、RPMビルド用のディレクトリ構造を作成する。<br> rpmdev-setuptree <br> このコマンドにより、以下に示すディレクトリ構造が <u>~/rpmbuild/</u> に作成される。<br> <br> ~/rpmbuild/ ├── BUILD/ # ビルド作業ディレクトリ ├── BUILDROOT/ # インストール先のルートディレクトリ ├── RPMS/ # 生成されたRPMパッケージ ├── SOURCES/ # ソースコードのアーカイブ ├── SPECS/ # SPECファイル └── SRPMS/ # ソースRPMパッケージ <br><br> == ソースコードの準備 == RPMパッケージを作成するために、ソースコードを適切な形式で準備する。<br> <br> ==== プロジェクト構造 ==== Qtアプリケーションのプロジェクト構造は以下のようにする。<br> <br> MyQtApp-1.0.0/ ├── CMakeLists.txt ├── src/ │ └── main.cpp ├── include/ │ └── backend.h ├── qml/ │ └── Main.qml ├── resources/ │ └── icons/ │ └── myqtapp.png └── desktop/ └── myqtapp.desktop <br> ==== CMakeLists.txtの設定 ==== CMakeLists.txtにインストールルールを追加する。<br> これはRPMビルド時に <code>make install</code> コマンドでファイルを適切な場所に配置するために必要である。<br> <br> <syntaxhighlight lang="cmake"> cmake_minimum_required(VERSION 3.21) project(MyQtApp VERSION 1.0.0 LANGUAGES CXX) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_AUTOMOC ON) find_package(Qt6 6.2 REQUIRED COMPONENTS Core Quick Qml QuickControls2) qt_add_executable(appMyQtApp src/main.cpp ) qt_add_qml_module(appMyQtApp URI MyQtApp VERSION 1.0 QML_FILES qml/Main.qml ) target_link_libraries(appMyQtApp PRIVATE Qt6::Core Qt6::Quick Qt6::Qml Qt6::QuickControls2 ) # インストールルール include(GNUInstallDirs) # 実行ファイルのインストール install(TARGETS appMyQtApp RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) # デスクトップファイルのインストール install(FILES desktop/MyQtApp.desktop DESTINATION ${CMAKE_INSTALL_DATADIR}/applications ) # アイコンのインストール install(FILES resources/icons/MyQtApp.png DESTINATION ${CMAKE_INSTALL_DATADIR}/icons/hicolor/256x256/apps ) </syntaxhighlight> <br> ==== デスクトップエントリファイルの作成 ==== <u>desktop/myqtapp.desktop</u> ファイルを作成する。<br> <br> <syntaxhighlight lang="ini"> [Desktop Entry] Type=Application Name=My Qt App Comment=Qt Application Exec=appMyQtApp Icon=myqtapp Categories=Utility;Development; Keywords=Qt;Application; Terminal=false </syntaxhighlight> <br> ==== ソースアーカイブの作成 ==== ソースコードをtar.gzアーカイブとして圧縮して、<u>~/rpmbuild/SOURCES/</u> にコピーする。<br> <br> # プロジェクトディレクトリに移動 cd /path/to/project # 親ディレクトリに移動 cd .. # ソースアーカイブを作成 tar cf MyQtApp-1.0.0.tar.gz MyQtApp-1.0.0/ # SOURCESディレクトリにコピー cp MyQtApp-1.0.0.tar.gz ~/rpmbuild/SOURCES/ <br><br> == SPECファイルの作成 == SPECファイルは、RPMパッケージのビルド手順、依存関係、メタデータを定義するファイルである。<br> <br> ==== RHEL向けSPECファイル ==== <u>~/rpmbuild/SPECS/MyQtApp.spec</u> ファイルを作成する。<br> <br> <syntaxhighlight lang="spec"> Name: MyQtApp Version: 1.0.0 Release: 1%{?dist} Summary: Qt GUI Application License: GPL-3.0-or-later URL: https://example.com/myqtapp Source0: %{name}-%{version}.tar.gz BuildRequires: cmake >= 3.21 BuildRequires: gcc-c++ BuildRequires: qt6-qtbase-devel >= 6.2 BuildRequires: qt6-qtdeclarative-devel >= 6.2 BuildRequires: qt6-qtquickcontrols2-devel >= 6.2 BuildRequires: desktop-file-utils Requires: qt6-qtbase >= 6.2 Requires: qt6-qtdeclarative >= 6.2 Requires: qt6-qtquickcontrols2 >= 6.2 %description MyQtApp is a Qt application built with C++17. This application demonstrates modern Qt Quick development practices. %prep %setup -q %build %cmake -DCMAKE_BUILD_TYPE=Release %cmake_build %install %cmake_install # デスクトップファイルの検証 desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop %post /usr/bin/update-desktop-database &> /dev/null || : /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || : %postun /usr/bin/update-desktop-database &> /dev/null || : /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &> /dev/null || : %files %license LICENSE %doc README.md %{_bindir}/appMyQtApp %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/256x256/apps/myqtapp.png %changelog * Mon Jan 27 2026 Your Name <your.email@example.com> - 1.0.0-1 - Initial release </syntaxhighlight> <br> ==== SUSE向けSPECファイル ==== SUSE系では、パッケージ名やマクロが異なる。<br> <u>~/rpmbuild/SPECS/MyQtApp.spec</u> ファイルを作成する。<br> <br> <syntaxhighlight lang="spec"> Name: MyQtApp Version: 1.0.0 Release: 1 Summary: Qt Application License: GPL-3.0-or-later Group: Productivity/Other URL: https://example.com/myqtapp Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: cmake >= 3.21 BuildRequires: gcc-c++ BuildRequires: qt6-base-devel >= 6.2 BuildRequires: qt6-declarative-devel >= 6.2 BuildRequires: qt6-quickcontrols2-devel >= 6.2 BuildRequires: update-desktop-files BuildRequires: hicolor-icon-theme Requires: libQt6Core6 >= 6.2 Requires: libQt6Gui6 >= 6.2 Requires: libQt6Quick6 >= 6.2 Requires: libQt6Qml6 >= 6.2 Requires: qt6-declarative-imports >= 6.2 Requires: qt6-quickcontrols2-imports >= 6.2 %description MyQtApp is a Qt application built with C++17. This application demonstrates modern Qt Quick development practices. %prep %setup -q %build %cmake -DCMAKE_BUILD_TYPE=Release %cmake_build %install %cmake_install # SUSE固有のデスクトップファイル処理 %suse_update_desktop_file %{name} %post %desktop_database_post %icon_theme_cache_post %postun %desktop_database_postun %icon_theme_cache_postun %files %license LICENSE %doc README.md %{_bindir}/appMyQtApp %{_datadir}/applications/%{name}.desktop %{_datadir}/icons/hicolor/256x256/apps/myqtapp.png %changelog </syntaxhighlight> <br> ==== SPECファイルの主要セクション ==== * Name *: パッケージ名を指定する。 * Version *: パッケージのバージョン番号を指定する。 * Release *: 同一バージョン内でのリリース番号を指定する。 * Summary *: パッケージの簡潔な説明を記述する。 * License *: ライセンスを指定する (SPDX形式を推奨)。 * BuildRequires *: ビルド時に必要なパッケージを指定する。 * Requires *: 実行時に必要なパッケージを指定する。 * %prep *: ソースコードの展開と準備を行う。 * %build *: ビルドコマンドを実行する。 * %install *: ビルド結果をインストールする。 * %files *: パッケージに含めるファイルを指定する。 * %changelog *: 変更履歴を記録する。 <br><br> == RPMパッケージのビルド == SPECファイルを使用してRPMパッケージをビルドする。<br> <br> ==== SPECファイルの検証 ==== ビルド前にSPECファイルの構文を検証する。<br> <br> rpmlint ~/rpmbuild/SPECS/MyQtApp.spec <br> ==== RPMパッケージのビルド ==== <code>rpmbuild</code> コマンドを使用してパッケージをビルドする。<br> <br> # バイナリRPMとソースRPMの両方をビルド rpmbuild -ba ~/rpmbuild/SPECS/MyQtApp.spec # バイナリRPMのみをビルド rpmbuild -bb ~/rpmbuild/SPECS/MyQtApp.spec # ソースRPMのみをビルド rpmbuild -bs ~/rpmbuild/SPECS/MyQtApp.spec <br> ==== rpmbuildコマンドのオプション ==== <center> {| class="wikitable" |+ rpmbuildコマンドの主要オプション |- ! オプション !! 説明 |- | -ba || バイナリRPMとソースRPMの両方をビルド |- | -bb || バイナリRPMのみをビルド |- | -bs || ソースRPMのみをビルド |- | -bp || %prepセクションのみを実行 |- | -bc || %buildセクションまで実行 |- | -bi || %installセクションまで実行 |} </center> <br> ==== ビルド成果物の確認 ==== ビルドが成功すると、以下の場所にRPMパッケージが生成される。<br> <br> # バイナリRPM ls -la ~/rpmbuild/RPMS/x86_64/ # 出力例: MyQtApp-1.0.0-1.suse15.6.x86_64.rpm # ソースRPM ls -la ~/rpmbuild/SRPMS/ # 出力例: MyQtApp-1.0.0-1.suse15.6.src.rpm <br><br> == パッケージの検証とインストール == 生成されたRPMパッケージを検証して、インストールする。<br> <br> ==== パッケージ情報の確認 ==== # パッケージ情報の表示 rpm -qip ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm # パッケージに含まれるファイル一覧 rpm -qlp ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm # パッケージの依存関係 rpm -qpR ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm <br> ==== rpmlintによる品質チェック ==== rpmlint ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm <br> ==== パッケージのインストール ==== ===== RHEL ===== # dnfを使用してインストール (依存関係を自動解決) sudo dnf install ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm ## または # rpmコマンドを使用 sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm </syntaxhighlight> <br> ===== SUSE系 ===== # zypperを使用してインストール (依存関係を自動解決) sudo zypper install ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.x86_64.rpm ## または # rpmコマンドを使用 sudo rpm -ivh ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.x86_64.rpm <br> ==== インストールの確認 ==== # パッケージがインストールされているか確認 rpm -q MyQtApp # インストールされたファイルの確認 rpm -ql MyQtApp # アプリケーションの実行 appMyQtApp <br> ==== パッケージのアンインストール ==== ===== RHEL ===== sudo dnf remove MyQtApp <br> ===== SUSE ===== sudo zypper remove MyQtApp <br><br> == Open Build Service (SUSE) == SUSEでは、Open Build Service (OBS) を使用してパッケージをビルド・配布することができる。<br> <br> ==== OBSアカウントの設定 ==== # [https://build.opensuse.org/ build.opensuse.org] でアカウントを作成する。 # <code>osc</code> コマンドを初期化する。<br>初回実行時に認証情報の入力を求められる。 # <pre>osc</pre> <br> ==== プロジェクトの作成 ==== # パッケージメタデータの作成 osc meta pkg -e home:username MyQtApp # パッケージのチェックアウト osc checkout home:username/MyQtApp cd home:username/MyQtApp <br> ==== ファイルの追加とコミット ==== # ソースアーカイブとSPECファイルをコピー cp /path/to/MyQtApp-1.0.0.tar.gz . cp /path/to/MyQtApp.spec . # ファイルを追加 osc add MyQtApp-1.0.0.tar.gz MyQtApp.spec # コミット (自動的にビルドが開始される) osc commit -m "Initial commit of MyQtApp 1.0.0" </syntaxhighlight> <br> ==== ビルド状況の確認 ==== # ビルド結果の確認 osc results home:username MyQtApp # ビルドログの確認 osc buildlog home:username MyQtApp openSUSE_Tumbleweed x86_64 # ビルド済みパッケージのダウンロード osc getbinaries home:username MyQtApp openSUSE_Tumbleweed x86_64 <br><br> == GPG署名とリポジトリの作成 == パッケージを配布する場合は、GPG署名とリポジトリの作成を行う。<br> <br> ==== GPG鍵の作成 ==== # GPG鍵の生成 gpg --gen-key # 鍵IDの確認 gpg --list-keys <br> ==== RPMパッケージへの署名 ==== # ~/.rpmmacrosファイルに署名設定を追加 echo '%_gpg_name Your Name <your.email@example.com>' >> ~/.rpmmacros # パッケージに署名 rpm --addsign ~/rpmbuild/RPMS/x86_64/MyQtApp-1.0.0-1.suse15.6.x86_64.rpm <br> ==== YUMリポジトリの作成 (RHEL) ==== # createrepoのインストール sudo dnf install createrepo_c # リポジトリディレクトリの作成 mkdir -p ~/myrepo/packages cp ~/rpmbuild/RPMS/x86_64/*.rpm ~/myrepo/packages/ # リポジトリメタデータの作成 createrepo ~/myrepo/ <br><br> == トラブルシューティング == ==== ビルドエラー: 依存パッケージが見つからない ==== * 原因 *: BuildRequiresに指定したパッケージがインストールされていない。 * 解決方法 *: <syntaxhighlight lang="text"> # RHEL sudo dnf builddep ~/rpmbuild/SPECS/MyQtApp.spec # SUSE sudo zypper si -d MyQtApp </syntaxhighlight> <br> ==== ビルドエラー: ファイルが見つからない ==== * 原因 *: %filesセクションで指定したファイルがBUILDROOTに存在しない。 * 解決方法 *# CMakeLists.txtの <code>install()</code> コマンドを確認する。 *# <code>%install</code> セクションでファイルが正しくコピーされているか確認する。 *# ファイルパスが正しいか確認する。 <br> ==== rpmlint警告: no-documentation ==== * 原因 *: パッケージにドキュメントファイルが含まれていない。 * 解決方法 *: SPECファイルの%filesセクションに以下を追加する。 *: <syntaxhighlight lang="spec"> %doc README.md %license LICENSE </syntaxhighlight> <br> ==== Qt6ライブラリが見つからない ==== * 原因 *: Qt6のライブラリパスが正しく設定されていない。 * 解決方法 *: <syntaxhighlight lang="sh"> # Qt6のインストールパスを確認 qmake6 -query QT_INSTALL_PREFIX qmake6 -query QT_INSTALL_LIBS # 環境変数を設定 export LD_LIBRARY_PATH=$(qmake6 -query QT_INSTALL_LIBS):$LD_LIBRARY_PATH </syntaxhighlight> <br> ==== RHELとSUSEでのパッケージ名の違い ==== <center> {| class="wikitable" |+ ディストリビューション別 Qt 6パッケージ名 |- ! 用途 !! RHEL !! SUSE |- | Qt6 Base開発 || qt6-qtbase-devel || qt6-base-devel |- | Qt6 QML開発 || qt6-qtdeclarative-devel || qt6-declarative-devel |- | Qt6 Quick Controls || qt6-qtquickcontrols2-devel || qt6-quickcontrols2-devel |- | Qt6 Coreランタイム || qt6-qtbase || libQt6Core6 |- | Qt6 GUIランタイム || qt6-qtbase-gui || libQt6Gui6 |} </center> <br><br> == クロスディストリビューション対応 == RHELとSUSEの両方に対応するSPECファイルを作成する場合は、条件分岐を使用する。<br> <br> <syntaxhighlight lang="spec"> # ディストリビューション判定 %if 0%{?suse_version} # SUSEの設定 BuildRequires: qt6-base-devel BuildRequires: update-desktop-files %else # RHELの設定 BuildRequires: qt6-qtbase-devel BuildRequires: desktop-file-utils %endif %install %cmake_install %if 0%{?suse_version} %suse_update_desktop_file %{name} %else desktop-file-validate %{buildroot}%{_datadir}/applications/%{name}.desktop %endif </syntaxhighlight> <br> ==== ディストリビューション検出マクロ ==== * %{?suse_version} *: SUSE系の場合に定義される。 *: 例: 1500 = Leap 15.x * %{?fedora} * %{?rhel} *: RHELの場合に定義される。 *: 例: 9 = RHEL 9 *: Fedoraの場合に定義される。 *: 例: 39 = Fedora 39 * %{?dist} *: ディストリビューション識別子 *: 例: .fc39, .el9 <br><br> == 関連情報 == * [https://rpm-software-management.github.io/ RPM公式ドキュメント] * [https://build.opensuse.org/ Open Build Service] * [https://doc.qt.io/qt-6/linux-deployment.html Qt6 Linuxデプロイメントガイド] <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:Qt]]
Qtその他 - RPMパッケージ
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse