MochiuWiki : SUSE, EC, PCB
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtの応用 - Systemdのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtの応用 - Systemd
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == サービスとは、PCの起動時に自動的に実行され、バックグラウンドで仕事をするために待機するソフトウェアのことである。<br> <br> 一般的に、サービスはグラフィカルユーザインターフェースを持たず、ユーザの操作無しに動作する。<br> 最もよく知られているサービスは、Web、メール、データベース等のサーバで、Apache、MySQL等がある。<br> <br> また、ハードウェアの検出やUSBメモリの自動統合(マウント)等もサービスによって行われる。<br> <br> サービスには、システム起動時に関連するタスクやハードウェアに関連するタスクを行う"内部サービス"と、<br> その後にユーザがインストールするサービス(通常は全てのサーバサービスを含む)の2種類がある。<br> <br> 技術用語やコンピュータ用語では、サービスは伝統的にデーモンと呼ばれている。<br> そのため、サーバコンポーネントであるsshdやmysqldのように、サービスを表すプログラムの最後の文字として"d"が用いられることが多い。<br> <br> 一方、Systemdは、システムおよびセッションマネージャ(initシステム)であり、<br> コンピュータの起動プロセスからシャットダウンまでの全動作時間にわたって、システム上で動作するすべてのサービスを管理する役割を担っている。<br> <br> プロセスは常に(可能な限り)並行して起動され、起動プロセスを可能な限り短くする。<br> ここで、.serviceで終わる設定ファイルを作成して、Systemdが制御・監視するプロセスに関するコードを保持する場合をSystemd Service Unitファイルと呼ぶ。<br> <br> Systemdには、サービス、タイマ、マウントポイント、ソケット、スワップスペース、デバイス等のユニットが存在する。<br> そのため、Systemdは管理用の設定の全てをファイルから取得する。<br> <br> Systemdの用語では、これらを"ユニット"と呼び、システム全体に適用されるユニットと各ユーザ領域にのみ適用されるユニットがある。<br> <br> ユニットには、サービスを開始するためのサービスユニットや、ある時点でのアクションを(繰り返し)実行するためのタイマユニット等、様々な種類がある。<br> <br> 各タイプのユニットファイルに共通しているのは、iniファイルに似た構造をしていることである。<br> ユニットファイルは、いくつかのセクション(多くの場合、3セクション)で構成されている。<br> <br> Systemdではセクションと呼ばれ、その中に一連のキーと値のペア(Systemdではディレクティブと呼ばれる)が格納されている。<br> <br><br> == Systemdライブラリのインストール == ==== ライセンス ==== Systemdライブラリのライセンスは、LGPL 2.1以降、または、 GPL 2.0で利用可能である。<br> <br> ==== パッケージ管理システムからインストール ==== # RHEL sudo dnf install systemd-devel # SUSE sudo zypper install systemd-devel <br> ==== ソースコードからインストール ==== Systemdのビルドに必要なライブラリをインストールする。<br> sudo zypper install meson ninja python3-Jinja2 glib2-devel dbus-1-devel p11-kit-devel libarchive-devel pcre2-devel libcurl-devel libcap-devel \ libmount-devel libfdisk-devel libblkid-devel libdw-devel libpwquality-devel passwdqc-devel libkmod-devel libbpf-devel \ zlib-devel liblz4-devel libzstd-devel xz-devel libbz2-devel \ pam-devel libgnutls-devel libopenssl-devel libopenssl-1_1-devel libcryptsetup-devel libgcrypt-devel libgpg-error-devel \ qrencode-devel libiptc-devel libidn2-devel libmicrohttpd-devel \ libxkbcommon-devel libfido2-devel tpm2-0-tss-devel libseccomp-devel libacl-devel audit-devel \ libapparmor-devel # AppArmorを使用する場合 libselinux-devel # SELinuxを使用する場合 xen-devel # Xenを使用する場合 <br> [https://github.com/systemd/systemd SystemdのGithub]にアクセスして、ソースコードをダウンロードする。<br> ダウンロードしたファイルを解凍する。<br> tar xf systemd-<バージョン>.tar.gz cd systemd-<バージョン> <br> Systemdをビルドおよびインストールする。<br> meson --prefix=<Systemdのインストールディレクトリ> -Dmode=release build ninja -C ./build -j $(nproc) ninja -C ./build install <br><br> == サンプルコード == <code>QProcess</code>クラスを使用せずに、Systemdを利用してSSHデーモンを起動する場合は、Systemdのライブラリを使用する必要がある。<br> <br> 以下の例では、Systemdのライブラリを使用してSSHデーモンを起動している。<br> # <code>sd_bus_open_system</code>関数を使用して、システムバスへの接続を開く。 #: 戻り値が負の値の場合は、接続に失敗したことを示す。 # <code>sd_bus_call_method</code>関数を使用して、SystemdのD-Busインターフェイスを介してsshd.serviceを起動する。 #: 関数の引数には、バスの接続、D-Busサービス名、D-Busオブジェクトのパス名、インターフェイス名、メソッド名、入力引数、出力引数、起動するサービス名とモードを指定する。 #: 戻り値が負の値の場合は、サービスの起動に失敗したことを示す。 #: サービスの起動に成功した場合は、成功メッセージをデバッグ出力に表示している。 # <code>sd_bus_unref</code>関数を使用して、バスの接続を閉じる。 <br> このサンプルコードを実行するには、Systemdライブラリがインストールされている必要がある。<br> また、適切な権限でプログラムを実行する必要がある。<br> <br> <u>※注意</u><br> <u>この方法は、Systemdが利用可能なシステムでのみ動作する。</u><br> <br> * QMakeを使用する場合 <syntaxhighlight lang="make"> # .proファイル CONFIG += link_pkgconfig PKGCONFIG += libsystemd </syntaxhighlight> <br> * CMakeを使用する場合 <syntaxhighlight lang="cmake"> # Package Configの使用 find_package(PkgConfig REQUIRED) # Systemdライブラリの使用 pkg_check_modules(SYSTEMD REQUIRED libsystemd) ## Systemdライブラリのバージョンを指定する場合 #pkg_check_modules(SYSTEMD REQUIRED libsystemd >= <バージョン>) target_include_directories(<your_target> PUBLIC # ...略 ${SYSTEMD_INCLUDE_DIRS} ) target_link_libraries(<your_target> # ...略 ${SYSTEMD_LIBRARIES} ) </syntaxhighlight> <br> <syntaxhighlight lang="c++"> #include <QCoreApplication> #include <QDebug> #include <systemd/sd-bus.h> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Systemdを使用してSSHデーモンを起動 sd_bus *bus = nullptr; int ret = sd_bus_open_system(&bus); if (ret < 0) { qDebug() << QString("システムD-Busの接続に失敗: %1").arg(strerror(-ret)); return -1; } ret = sd_bus_call_method(bus, "org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnit", nullptr, nullptr, "ss", "sshd.service", "replace"); if (ret < 0) { qDebug() << QString("SSHサービスの開始に失敗: %1").arg(strerror(-ret)); sd_bus_unref(bus); return -1; } qDebug() << "SSHサービスの開始に成功"; sd_bus_unref(bus); return a.exec(); } </syntaxhighlight> <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,Podman,電気回路,電子回路,基板,プリント基板 |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の応用 - Systemd
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse