systemd-boot
systemd-boot は EFI システムパーティション (ESP) からしか EFISTUB カーネルをロードできません。カーネルを最新状態に保つために、ESP は /boot にマウントすることが推奨されています。ESP を /boot にマウントしなかった場合、カーネルと initramfs を ESP にコピーする必要があります。詳しくは EFISTUB#他の ESP マウントポイントを見てください。
このページでは ESP のマウントポイントを esp として表します (大抵の場合は /boot です)パラメータの設定やエントリーポイントを解説 。
ESP が esp にマウントされているとして、 bootctl(1) を使用して EFI システムパーティションに systemd-boot をインストールします:
上記のコマンドで systemd-boot ブートローダーが EFI パーティションにコピーされます。x64 アーキテクチャの場合は2つの同じバイナリ esp/EFI/systemd/systemd-bootx64.efi と esp/EFI/Boot/BOOTX64.EFI が ESP に転送されます。そして EFI ブートマネージャによってロードされるデフォルトの EFI アプリケーション (デフォルトブートエントリ) パラメータの設定やエントリーポイントを解説 として systemd-boot が設定されます。
- bootctl install を実行するとき、systemd-boot は ESP を /efi 、 /boot および /boot/efi に配置しようとします。 esp を別の場所に設定するには、 --esp-path=esp オプションを渡す必要があります。(詳細は bootctl(1) § OPTIONS を参照してください)。
- systemd-boot をインストールすると、既存の esp/EFI/BOOT/BOOTX64.EFI (例えば Microsoft バージョンのファイル) は上書きされます。
インストールしたら、#設定セクションに進んで systemd-boot を正しく機能させるために必要なブートローダーを追加してください。
XBOOTLDR を使用したインストール
systemd バージョン 242 以降では、カーネルと initramfs を esp パーティションから分離するために、 "Linux extended boot" タイプの別の boot パーティションを作成することができます。 XBOOTLDR [1] のパーティションタイプ GUID は "bc13c2ff-59e6-4262-a352-b275fd6f7172 である必要があります。
これは、既存の EFI システムパーティション が小さすぎる パラメータの設定やエントリーポイントを解説 Windows と Arch のデュアルブート 時に特に役立ちます。 それ以外の場合は、通常どおり esp パーティションを作成し、同じ物理ドライブに boot 用に別のパーティションを作成します。 boot のサイズは、インストールするすべてのカーネルを収容するのに十分なはずです。
- systemd-boot は、 ESP パラメータの設定やエントリーポイントを解説 の場合のようにファイルシステムチェックを行いません。 したがって、他のファイルシステムを使用することは可能ですが、 UEFI 実装が起動中にそれを読み取ることができる場合に限ります。
- "fast boot" モードが有効の場合、UEFI ファームウェアは ESP 以外のパーティションのロードをスキップすることがあります。これにより、システム起動 が XBOOTLDR パーティション上のエントリを見つけられなくなる可能性があります。XBOOTLDRを使用するには、"fast パラメータの設定やエントリーポイントを解説 パラメータの設定やエントリーポイントを解説 boot" を無効にする必要があります。
- XBOOTLDR パーティションは、system-boot が認識できるように ESP と同じ物理ディスク上になければならない場合があります。
インストール中に、 esp を /mnt/efi にマウントし、 boot を /mnt/boot にマウントします。
インストールを完了するには configure systemd-boot
EFI ブートマネージャの更新
systemd-boot の新しいバージョンがある場合は、ユーザーが任意でブートマネージャを再インストールできます。手動で実行することも、pacman フックを使用して更新を自動的にトリガすることもできます。その後、2つのアプローチについて説明します。
ノート: ブートマネージャーはスタンドアロン EFI 実行可能ファイルで、任意のバージョンを使用してシステムをブートできます (pacman は systemd-boot 自体ではなく、systemd-boot インストーラーのみをインストールするため、部分的な更新は適用されません。) パラメータの設定やエントリーポイントを解説 ただし、新しいバージョンでは新しい機能が追加されたりバグが修正されたりする可能性があるため、いずれにしても更新することをお勧めします。
手動で更新
bootctl を使用して systemd-boot をアップデートしてください。 path パラメータを指定しなかった場合 /efi , /boot , /boot/efi がチェックされます。
ESP を別の場所にマウントしている場合、 path オプションを以下のように指定します:
ノート: パラメータの設定やエントリーポイントを解説 gummiboot から移行する場合、上記のコマンドを使用してからパッケージを削除してください。パッケージを既に削除している場合、 bootctl --path=esp install を実行してください。
自動で更新
systemd サービス
バージョン 250 では、 systemd には systemd-boot-update.service が同梱されています。このサービスを 有効 にすると、次回の起動時にブートローダーが更新されます。
別の方法として pacman フック を使いたい場合は(systemd パッケージがアップグレードされた直後にブートローダをアップデートする)、以下のセクションを参照してください。
Pacman フック
systemd-boot-pacman-hook AUR パッケージには上記のアップデートを自動化する Pacman フックが含まれています。パッケージをインストールすると systemd パッケージをアップグレードしたときに毎回フックが起動するようになります。また、パッケージをインストールする代わりに、 /etc/pacman.d/hooks/ ディレクトリに以下の パラメータの設定やエントリーポイントを解説 pacman フックを作成することでも自動更新できます:
セキュアブート を有効にしている場合は、 pacman フックをインストールして、カーネルと systemd-boot が更新されたときに自動的に再署名することをお勧めします。
新しいパッケージを追加するたびに、 Target を複製する必要があります。 find ステートメントに関しては、ファイル名の条件があり、APLM フックがスペースで分割されているため、フックが適切に解析されるように、ステートメント全体を引用符で囲む必要がありました。 systemd-boot はサブディレクトリにあるため、 -maxdepth 引数を削除するように、深さも調整する必要がありました。 煩わしさを避けるために、確信が持てない場合は、テストするパッケージを再インストールして、フックと署名部分が正常に処理されるかどうかを確認してください。 詳細については、 Pacman#フック または alpm-hooks(5) を参照してください。
ローダー設定
ローダーの設定は esp/loader/loader.conf ファイルに保存され、以下のオプションで設定します:
- default – #ローダーの追加で定義されるデフォルト選択エントリ。 .conf 拡張子は付けず、 arch-* のようにワイルドカードを使うこともできます。
- timeout – デフォルトエントリが起動するまでのメニューのタイムアウト秒数。この値が設定されていない場合、起動中に Space キーを押した時だけメニューが表示されます。
- editor - カーネルパラメータの編集を可能にするかどうかの設定。 yes (デフォルト) パラメータの設定やエントリーポイントを解説 は可能になり、 no は無効になります。 init=/bin/bash を加えることで root パスワードを回避して root 権限を得ることが出来てしまうため、このオプションは no に設定することが強く推奨されています。
- auto-entries – 1 (デフォルト) パラメータの設定やエントリーポイントを解説 に設定した場合は Windows, EFI Shell, デフォルトローダーの自動エントリを表示し、 0 の場合は表示しません。
- auto-firmware – 1 (デフォルト) に設定した場合、UEFI ファームウェア設定を起動するエントリを表示し、 0 に設定した場合は表示しません。
- console-mode – UEFI コンソールモードを変更します:
- 0 の場合は 80x25;
- 1 の場合は 80x50;
- 2 以上の場合はデバイスファームウェアによって提供されている非標準モード;
- auto は適切なモードを自動的に選択します;
- max は一番解像度が高いモード;
- keep (デフォルト) はファームウェアが選択したモードを維持します;
- systemd-boot はインデント用のタブを受け入れません。代わりにスペースを使用してください。
- default と timeout はブートメニューで変更することができ、変更した場合は EFI 変数として保存されます。上記のオプションよりも優先して設定されます。
- bootctl set-default "" を使用すると、 default オプションに優先して EFI 変数をクリアできます。
- 基本的なローダーの設定ファイルは パラメータの設定やエントリーポイントを解説 /usr/share/systemd/bootctl/loader.conf に存在します。
ローダーの追加
bootctl は esp/loader/entries/*.conf からブートメニューのアイテムを検索します – 各ファイルにそれぞれひとつだけローダーを記述してください。利用可能なオプション:
- title – オペレーティングシステムの名前。必須。
- version – カーネルバージョン、同じ title のエントリが複数存在する場合にのみ表示されます。任意。
- machine-id – /etc/machine-id のマシン識別子、title と version が同じエントリが複数存在する場合にのみ表示されます。任意。
- efi – 起動する EFI プログラム、ESP ( パラメータの設定やエントリーポイントを解説 /boot ) からの相対パス。例: /vmlinuz-linux 。このオプションか linux (下を参照) のどちらか一方が必須です。
- options – EFI プログラムに渡すコマンドラインオプションまたはカーネルパラメータ。任意ですが、Linux を起動する場合 initrd=efipath と root=dev が最低限必要になります。
Linux を起動する場合、 efi と options を使う代わりに以下のオプションが使用できます:
- linux と initrd で ESP の適切なファイルの相対パスを指定します。例: /vmlinuz-linux 。この値は自動で パラメータの設定やエントリーポイントを解説 efi path と options initrd=path に翻訳されます – この文法は利便性のためにサポートされており機能に違いはありません。
arch_os というラベルが付いたパーティションから Arch を起動して Intel CPU のマイクロコードをロードするローダーファイルの例:
bootctl パラメータの設定やエントリーポイントを解説 は自動的に "Windows Boot Manager" ( /EFI/Microsoft/Boot/Bootmgfw.efi ), "EFI Shell" ( /shellx64.efi ), "EFI Default Loader" ( /EFI/BOOT/bootx64.efi ) をチェックします。また、 /EFI/Linux にカーネルファイルが存在しないかもチェックされます。これらが検出された場合、自動的に適切なエントリが生成されます ( auto-windows , auto-efi-shell , auto-efi-default )。これらのエントリを手動でローダー設定する必要はありません。ただし、(rEFInd など) 他の EFI アプリケーションは自動検出されないため、Linux カーネルを起動するには、手動で設定してエントリを作成する必要があります。
- Windows とデュアルブートする場合、Windows のデフォルトオプションである高速スタートアップを無効にすることを強く推奨します。
- 必要な場合は initrd で Intel のマイクロコードをロードしてください。例はマイクロコード#systemd-boot を参照。
- blkid -s PARTUUID -o value /dev/sdxY コマンドを使うことで root パーティションの PARTUUID を確認できます。 x はデバイス文字、 Y はパーティション番号に置き換えて下さい。確認するのは root パーティションだけで大丈夫です。 esp は確認する必要がありません。
- 設定済みのブートエントリは bootctl list コマンドで確認できます。
- サンプルエントリファイルが /usr/share/systemd/bootctl/arch.conf に存在します。 , LUKS, dm-crypt などで必要なカーネルパラメータについてはそれぞれのページを確認してください。
EFI シェルや他の EFI アプリ
EFI シェル と 他のEFIアプリケーション を ESP パラメータの設定やエントリーポイントを解説 にインストールした場合は、次のスニペットを使用できます。
ノート: efi 行のファイルパスパラメータは、"esp" マウントポイントを基準にしています。 /boot にマウントされていて、EFI バイナリが /boot/EFI/xx.efi と /boot/yy.efi にある場合は、次のようになります。 パラメータの設定やエントリーポイントを解説 パラメータをそれぞれ efi/EFI/xx.efi および efi/yy.efi として指定します。
カスタム UEFI シェルローダーのロード例:
EFI ファームウェア・セットアップの起動
EFI ブート用に設定されたほとんどのシステムファームウェアは、UEFI ファームウェアセットアップでブートするために独自の efibootmgr エントリを追加します。
ハイバネーション
パスワードで保護されたカーネルパラメータエディタ
password 設定オプションをサポートしている systemd-boot-password AUR をインストールすることもできます。 sbpctl generate を使ってオプションで指定する値を生成できます。
systemd-boot-password は以下のコマンドでインストールしてください:
ブートメニューのキー一覧
- Up/Down - エントリの選択
- Enter - 選択したエントリの起動
- d - (不揮発の EFI 変数に保存された) デフォルトエントリを選択して起動
- t/T - (不揮発の EFI 変数に保存された) タイムアウトを調整
- e - カーネルコマンドラインを編集。 editor オプションが 0 に設定されている場合は使えません
- q - 終了
- v - systemd-boot と UEFI のバージョンを表示
- p - パラメータの設定やエントリーポイントを解説 パラメータの設定やエントリーポイントを解説 現在の設定を表示
- h - キーマップを表示
- h/? - ヘルプ
- l - Linux
- w - Windows
- a - OS X
- s - EFI Shell
- 1-9 - エントリの番号
ヒントとテクニック
ブートメニューで使用できるキー
再起動後の起動対象を選択する
ブートマネージャーは systemctl コマンドに統合されており、再起動後に起動させるオプションを選択できます。例えば、カスタムカーネルのエントリファイルが esp/loader/entries/arch-custom.conf にあるとき、次のようにするとデフォルト設定はそのままにカスタムカーネルが起動します:
Unified パラメータの設定やエントリーポイントを解説 Kernel Image を使う
systemd-boot は esp/EFI/Linux/ 内の unified kernel image を検索します。 unified kernel image はカーネル、initrd、カーネルのコマンドライン、 パラメータの設定やエントリーポイントを解説 /etc/os-release およびスプラッシュスクリーンを単一ファイルに格納したもので、セキュアブート のための署名が容易に可能です。
作成した linux.efi を 署名 することもできます。
linux.efi を esp/EFI/Linux/ にコピーしてください。
Grml on ESP
Grml を ESP にインストールするには、カーネル vmlinuz 、 initramfs initrd.img 、 圧縮イメージ grml64-small.squashfs を iso ファイルから ESP パラメータの設定やエントリーポイントを解説 にコピーするだけです。そのためには、まず [2] ファイルをダウンロードして(マウントポイントは以降 mnt と表記される) ファイルをマウントします。カーネルと initramfs は mnt/boot/grml6 small/ にあり、圧縮されたイメージは mnt/live/grml64-small/ にあります。
次に、Grml 用のディレクトリを パラメータの設定やエントリーポイントを解説 ESP に作成します:
最後のステップで、システムブートローダー用のエントリを作成します。 esp/loader/entries 次の内容の grml.conf ファイルを作成します:
BIOS システムでの systemd-boot
ブートローダーの仕様 に従う BIOS システム用のブートローダーが必要な場合は、 BIOS パラメータの設定やエントリーポイントを解説 システムで systemd-boot を押してサービスを開始できます。 Clover ブートローダーは BIOS システムからの起動をサポートし、シミュレートされた EFI 環境を提供します。
トラブルシューティング
BIOS モードで起動後にインストール
BIOS モードで OS を起動したいときも systemd-boot をインストールすることは可能です。ただし、起動時に systemd-boot の EFI ファイルを実行するようにファームウェアを設定する必要があります:
- EFI シェルを使用する。
- ファームウェアのインターフェイスから起動時にロードされる EFI ファイルを設定する。
設定できる場合、インストールは簡単です: EFI シェルやファームウェアの設定インターフェイスを開いて、マシンのデフォルトの EFI ファイルを esp/EFI/systemd/systemd-bootx64.パラメータの設定やエントリーポイントを解説 efi (32ビット環境の場合 systemd-bootia32.efi ) に変更してください。
ノート: Dell の Latitude シリーズなどでは、EFI ブートを設定するために必要な全てがファームウェアのインターフェイスに揃っており、EFI シェルではコンピュータの ROM に書き込みを行えません。
efibootmgr を使って手動エントリを追加する
bootctl install コマンドが失敗した場合、 efibootmgr ユーティリティを使って EFI ブートエントリを手動で作成することができます:
フィボナッチエクスパンションの使い方!上級者の引き方と数値設定
お悩みトレーダー
フィボナッチ?
エクスパンション?
何それ?
メンター
それでは、今日は、 フィボナッチエクスパンションの基本的な使い方 から、
あまり知られていないプロが使う応用的な使い方 まで、すべて教えてあげましょう!
その 決済ポイントの目安で使えるツールが、フィボナッチエクスパンション です。
つまり、フィボナッチエクスパンションは、かなり使えるということです!
フィボナッチエクスパンションの使い方をマスターすることで、 未来のサポート・レジスタンスをある程度予測できるようになります。
フィボナッチエクスパンションの反応を確認してみよう!
パラメータの設定やエントリーポイントを解説 パラメータの設定やエントリーポイントを解説
つまり、 フィボナッチエクスパンションを使わない手はないということです。
フィボナッチエクスパンションとは
特に、トレンドフォローの決済ポイントを探るには、フィボナッチエクスパンションは非常に有効です。
(※フィボナッチエクスパンションは、エントリーポイントの絞り込みにも利用できます。)MT4のフィボナッチエクスパンションの引き方
手順①|フィボナッチエクスパンションを選択
手順②|起点となる安値から高値までクリックしたまま動かす
手順③|押し目(戻り目)を調整する
手順①|フィボナッチエクスパンションを選択
[①挿入]>[②フィボナッチ]>[エクスパンション]を選択してください。
手順②|起点となる安値から高値までクリックしたまま動かす
フィボナッチエクスパンションを選択したら、起点となる安値から高値まで、クリックしたままマウスを移動させます。
手順③|押し目(戻り目)を調整する
既に引かれたフィボナッチエクスパンションをダブルクリックします。
すると、フィボナッチエクスパンションが選択状態に入り、3点に小さな〇が表示されます。
次に、調整されていない3点目(一番右側)の〇を選択して、ドラッグしたまま押し目(戻り目)へ移動させます。
鉄板のフィボナッチエクスパンション数値設定は?
[①フィボナッチエクスパンションをダブルクリックで選択状態にする]>[②右クリック]>[③Expantionプロパティ]>[④追加]>[⑤レベル設定|説明を編集]
フィボナッチエクスパンションの基本的な利用手順
手順①|明らかなトレンドを見つける
手順②|押し目買い(戻り売り)でエントリーをする
手順③|エントリー後にフィボナッチエクスパンションを引いて決済ポイントを分析する
手順④|フィボナッチエクスパンションを参考に決済をする手順①|明らかなトレンドを見つける
手順②|押し目買い(戻り売り)でエントリーをする
手順③|エントリー後にフィボナッチエクスパンションを引いて決済ポイントを分析する
手順④|フィボナッチエクスパンションを参考に決済をする
さて、次の項目では、 フィボナッチエクスパンションを利用している方でもあまり知られていない応用的な使い方を紹介します。
上級者は使っている!フィボナッチエクスパンションの応用的な利用方法
この内容をマスターすると、 エントリーポイントを厳選できるようになります。
また、 レンジ相場もピンポイントでエントリーできるようになります。①フィボナッチエクスパンションの重複
②フィボナッチエクスパンションとフィボナッチリトレースメントのシンクロ
①フィボナッチエクスパンションの重複
フィボナッチエクスパンションの重複は、非常に強い抵抗帯になります。
フィボナッチエクスパンションの重複とは、それぞれ異なったスイングから引いたフィボナッチエクスパンションのレベルが重なることを言います。 パラメータの設定やエントリーポイントを解説
これから始めるエンタープライズ Web API 開発
本連載では、Web APIの公開/構築に興味のある方向けに、Web APIの設計や実装の課題とその解決策をご紹介します。第2回の記事では、開発者に愛されるREST APIの設計について解説しました。今回は、APIのインターフェースをSwagger仕様で定義し、それをaws-apigateway-importerというツールを使ってAmazon API Gatewayにインポートする方法について説明します。
Amazon API Gatewayとは
Amazon API GatewayはAWSの提供するマネージド・サービスです。AWS Lambdaや任意のAPIを公開するためのエントリーポイントとなり、認証、スロットリング、モニタリング、バージョン管理などのWeb API公開に一般的に必要だと考えられている機能を提供しています。この記事では、APIアプリケーションを公開するためにAmazon API GatewayをHTTPプロキシとして使います。
APIを公開するために、必ずしもAmazon API Gatewayのような独立したサービスや製品が必要なわけではありません。例えば、公開するAPIがひとつだけであれば、認証機能をAPIの機能の一部として実装することもあります。しかしながら、複数のAPIを公開する場合に、個々のAPIに依存しない共通の機能をAPIゲートウェイが提供し、クライアントはAPIゲートウェイを経由し実際のAPIにアクセスするというアーキテクチャは一般的です。 1
Amazon API Gatewayの設定の主要部分は、リソースのパスとメソッドの組み合わせに対する、Amazon API Gatewayの入出力(Method Request、Method Response)とバックエンドとの統合のための入出力(Integration Request、Integration Response)の定義です。
次のスクリーンショットはAWS管理コンソールのAmazon API Gatewayの設定画面です。/usersというリソースパスのGETメソッドに対して、Method Request、Method Response、Integration Request、Integration Responseを設定するようになっているのがわかるでしょう。
Swagger仕様とは
aws-apigateway-importer とは
aws-apigateway-importerは、Amazonの開発しているOSSのコマンドラインツールです。Swagger仕様やRAMLで書かれたAPIの定義をAmazon API Gatewayにインポートすることができます。この記事ではSwaggerを使ってインポートする方法を説明します。
Amazon API Gatewayの設定はAWSマネジメントコンソールからもおこなうことができます。しかし、RESTリソースや環境が増えてくると、設定内容や手順をドキュメント化し、人手で設定するのは苦痛です。aws-apigateway-importerのようなツール 3 パラメータの設定やエントリーポイントを解説 を使い、できる限り自動化すべきです。ツールを使うと、設定ファイルをバージョン管理することができるようになるのもメリットのひとつです。
aws-apigateway-importerの使いかた
aws-apigateway-importerはJavaで書かれたコマンドラインツールです。この記事の内容はOS X El Capitan上で動作を確認しています。但し、ソースコードの中には起動用のシェルスクリプトとバッチファイルが含まれているので、おそらく他のUnix系のOSとWindowsでも動くと思われます。現在のところソースコードのみの提供ですので、ビルド方法を後ほど説明します。
AWSのアクセスキー
実際にAmazon API Gatewayを操作するためにはAWSのアクセスキーが必要です。アクセスキーを持っていない場合は、Amazonのドキュメント「IAM ユーザーのアクセスキーの管理」を参照し、アクセスキーを作成してください。デフォルトのアクセスキーは、環境変数、Javaシステムプロパティ、AWS SDK/CLIの設定ファイル、インスタンスプロファイルのいずれかの方法で設定することができます。詳細は、Amazonのドキュメント「Providing AWS Credentials in the AWS SDK for Java」を参照してください。ここでは、環境変数を使います。
Amazon API Gateway用の定義
Swagger仕様はベンダーによる拡張をサポートするために「x-」ではじまるフィールドを予約しています。aws-apigateway-importerはこの拡張仕様を使いAmazon API Gateway固有の設定を可能にしています。以下は、この記事で使う設定の一部です。x-amazon-apigateway-integration以外にも、認証定義のためにx-amazon-apigateway-authフィールドを使うことができます。
先にも説明したように、Amazon API Gatewayの設定はリソースのパスとメソッドの組み合わせに対しておこないます。この例では、/usersというパスとGETメソッドの組み合わせです。typeはIntegration RequestのIntegration typeに、uriはEndpoint URLに相当します。次のスクリーンショットは、上の定義をインポートした時に、Integration Requestに設定された内容です。
requestParametersは、Method RequestのURL Query String ParametersとIntegration パラメータの設定やエントリーポイントを解説 パラメータの設定やエントリーポイントを解説 RequestのURL Query String Parametersのマッピングです。AWS管理コンソールでは2つに分かれていますが、ここではまとめて指定します。キーはintegration.request..という形式で指定します。locationにはquerystring、path、headerのいずれかを使うことができます。それぞれ、URLのクエリストリング、URLのパス、HTTPヘッダーを意味しています。nameはユニークな任意のパラメータ名です。値の部分はmethod.request..という形式で指定します。locationとnameはintegrationと同様です。次のスクリーンショットはMethod Requestに設定された内容です。
responsesは、Method ResponseとIntegration Responseのマッピングです。ここでは、フォーマットの変換などをおこなっていないので特別な設定はおこなっていません。ソースコードに含まれているREADME.mdによると、以下のようにレスポンスのパラメータのマッピングやテンプレートの指定ができるようです。
Chef とは?
Chef(シェフ)とはインフラにおけるサーバ構成管理や、サーバへのファイル展開作業(プロビジョニング)を自動化するオープンソース・ソフトウェアです。
物理、仮想、クラウドといったさまざまなインフラに対して、サーバのあるべき構成(OS/ミドルウエア/アプリケーションなど)をセットしておくと、サーバの台数によらずその構成どおりにインフラを自動セットアップします。
複数台のサーバに対し、何度も同じ設定作業を行う必要がなくなり、サーバのデリバリーの効率化、設定時の人的ミス防止につながる便利なソフトウェアとして、近年では「Redmine」「Jenkins」と並んでIT現場での「新3種の神器」と呼ばれるほど人気があります。Chef自体はRubyで実装されています。Chefには、「Infrastructure as Code」という基本概念があり、インフラの構成管理の設定自体もプログラミング言語のコードとして扱い、RubyのDSL(Domain Specific Language: ドメイン固有言語)で記述します。この構成管理の情報を「レシピ(Recipe)」、レシピの集合体である「クックブック(Cookbook)」として定義します。
Chefは、米国Chef 社(旧Opscode社)がOSSプロジェクトとして開発を進めており、コミュニティによって開発された多くの「クックブック(Cookbook)」が公開され、それらを自由に再利用することができます。Chefには、構成を管理する「Chef Infra Server」、設定対象のサーバにインストールして動作する「Chef Infra Client」によるクライアント・サーバでの集中管理形式と、ローカルマシンから直接設定対象のサーバを管理するスタンドアロン形式「Chef Solo」があります。
※2014/06/24にChef公式ブログにてChef Soloの廃止が発表され、Chef Soloの機能を備えたChef パラメータの設定やエントリーポイントを解説 Infra Client Local Modeを利用することが推奨されています。クライアント・サーバ形式では、インフラの集中管理サーバである「Chef Infra Server」上でセットアップ対象の各サーバ情報(設定ファイル)を保存・管理し、「Chef Infra Client」が「Chef Infra Server」からの指示によってインフラを構築します。
スタンドアロン形式は「Chef Solo(Chef Infra Client local-mode)」と呼ばれ、「Chef Infra Server」を使わずにセットアップ対象の各サーバ情報に「Chef Infra Client」と設定情報をインストールして管理します。「knife solo」というCLIツールを利用することで、複数のセットアップ対象サーバにChefをインストールし、Chef Soloを実行する環境を構築できます。
Chefは多くの場合、同じ作業を実行しても同じ結果になる(※)ため、複数台のサーバに対して同じOS/ミドルウエア/アプリケーションなどをインストールし、パラメータ設定をする際などに大変便利なソフトウェアです。
そのため、最初に小さな単位でインフラを構築し、徐々にサーバ台数を追加して大規模構成に成長させていくことも容易に実現できます。
また、設定ファイルである「レシピ(Recipe)」や「クックブック(Cookbook)」は、スタンドアロン形式、クライアント・サーバ形式で共通して利用できるため、設定対象のサーバ台数が少ない場合は「Chef Solo」を利用し、サーバ台数が増加していった際には「Chef Infra Server」に切り替えるということも可能です。Chefの主な機能
- コンフィギュレーション管理機能
- プログラミング言語(Ruby)によるインフラ設定と管理
- 手順書(Cookbook)による作業の簡略化と共通化 - プロビジョニング機能
- 設定ファイルの自動配布と反映 - システムインテグレーション機能
- サーバ間の動的なシステムインテグレーションと大規模インフラの構築の実現
- Chef Soloでの小規模なサーバ構築 - データ収集機能
- 各ノードと通信し、運用環境に関するさまざまなデータを保存 - 世代管理機能
- パラメータの設定やエントリーポイントを解説 過去の設定ファイルの保存とロールバックの実現
Chefの特徴
- 構成管理の自動化によるサーバデリバリーの効率化、設定時の人的ミス防止
- 構成管理プロセスを記載するのではなく、最終的な設定状態を記載する
- プログラミング言語(Ruby)を用いたインフラ構築・設定管理ができる
- ライセンス費用はゼロで、無料で使用できる(有償保守サポートを依頼する場合は別途費用がかかる)
- 冪等性
- スケーラビリティ
- 設定ファイルが多数公開されている
- 料理を意識した用語である
Chefの動作環境
- Chef Infra Server OS
- Amazon Linux 2 (x86_64)
- CentOS 7、8 (x86_64)
- Oracle Enterprise Linux 7、8 (x86_64)
- Red Hat Enterprise Linux 7、8 (x86_64)
- SUSE Linux Enterprise Server 12、15 (x86_64)
- Ubuntu Server パラメータの設定やエントリーポイントを解説 16.04、18.04、20.04 (x86_64)
- IBM AIX 7.1、7.2 (powerpc)
- Amazon Linux 2 (x86_64、aarch64)
- CentOS 8 (x86_64、aarch64)
- CentOS 7 (x86_64、ppc64le、ppc64、aarch64)
- CentOS 6 (x86_64)
- Debian 10、11(x86_64、aarch64)
- Debian 9(x86_64)
- FreeBSD 11、12(amd64)
- Mac OS X 10.15、11、12 (x86_64、aarch64)
- Oracle Enterprise Linux 7、8 (x86_64、aarch64)
- Oracle Enterprise Linux 6 (x86_64)
- Red Hat Enterprise Linux 8 (x86_64、s390x、aarch64)
- Red Hat Enterprise Linux 7 (x86_64、s390x、ppc64le、ppc64、aarch64)
- Red Hat Enterprise Linux 6 (x86_64、s390x)
- Oracle Solaris パラメータの設定やエントリーポイントを解説 11.3、11.4 (sparc、i86pc)
- SUSE Enterprise 15 (x86_64、s390x、aarch64)
- SUSE Enterprise 12 (x86_64、s390x)
- Ubuntu Server 16.04、18.04、20.04 (x86_64、aarch64)
- Windows 8.1、10、11 (x86、x64)
- Windows Server パラメータの設定やエントリーポイントを解説 2012、2012r2、2016、2019、2022 (x86、x64)
Chefと同類のソフトウェア
商用ソフトウェア製品では、HP Insight Orchestration、Microsoft System Center Orchestrator 2012、同じOSSではPuppet、Ansible、Crowbarが同様の機能を提供しています。
Chefのライセンス
Chefのライセンスは、Apache License 2.0です。
Apache License(アパッチ・ライセンス)のコードが使用されていることの明記を条件に、ソースコードの自由な改変と使用、複製、再頒布などが認められています。
また、開発元にChef社が提供する「Enterprise Chef」といったノード数単位のサブスクリプションライセンスも提供されています。Chefのライセンスについてご不明な点がありましたら、お気軽にお問い合わせください。属性名は語尾に Attribute を付けることになっています。 例えば、標準で用意されている属性には ObsoleteAttribute や ConditionalAttribute などといった名前のものがあります。 また、これらを C# から利用する場合、語尾の Attribute は省略してもかまいません。 したがって、前者は Obsolete 、 後者は Conditional という名前で使用できます。
例として、 Conditional 属性を使用してみましょう。 Conditional 属性とは、 特定の条件下でのみ実行されるメソッドを定義するために使用する属性です。 例えば、以下のようにして使用します。
SHOW_INTERMEDIATE という名前のシンボルが定義されている場合、 以下のように、ソートの途中段階のデータが表示されます。
一方、 SHOW_INTERMEDIATE という名前のシンボルが定義されていない場合、 以下のように、結果のみが表示されます。
ちなみに、以下のように , で区切るか、複数の [] を並べることで複数の属性を指定することが出来ます。
定義済み属性
Conditional 以外にも、標準ライブラリによって提供されている定義済み属性がいくつかあります。 そのうちのいくつかを以下に挙げます。 「付与した属性を誰が使うか」で分類しています。
コンパイラが利用
Ver. 2.0
開発ツール
Visual Studio などの開発ツールが利用します。 いずれも、 System.ComponentModel 名前空間です。
パラメータの設定やエントリーポイントを解説
属性名 効果 CategoryAttribute
DefaultValueAttribute
DescriptionAttribute
BrowsableAttributeコンポーネントクラス(簡単に言うと Windows アプリケーションのボタンやテキストボックス等のこと)のプロパティに対してこれらの属性を指定することで、 パラメータの設定やエントリーポイントを解説 Visual Studio のプロパティ エディタで値を編集することが出来るようになります。 Visual Studio のプロパティ エディター
実行エンジン
.NET Framework の パラメータの設定やエントリーポイントを解説 「IL」 実行エンジンが利用します。 いずれも、 System.Runtime.InteropServices 名前空間です。
属性名 効果 DllImportAttribute ネイティブ な DLL からメソッドをインポートします。 (DllImport 属性を付けたメソッドを宣言するだけで、ネイティブ な DLL のメソッドを利用できます。 ネイティブ DLL 側に特別な処理を書く必要は全くありません。) ComImportAttribute パラメータの設定やエントリーポイントを解説Unmanaged な DLL から COM クラスをインポートします。 ライブラリ
ASP.NET
属性名 効果 System.パラメータの設定やエントリーポイントを解説 Web.Services.WebMethodAttribute XML Web Service を使用してリモートにあるメソッドを呼び出すことが出来ます。 WCF(Windows Communication Foundation)
属性名 効果 System.ServiceModel.OperationContractAttribute
System.ServiceModel.ServiceContractAttribute
System.Runtime.Serialization.DataContractAttributeWCF のサービスや、サービスで使うデータに付けます。 データ検証
System.ComponentModel.DataAnnotations.Validator クラスを使って、 データが満たすべき条件(null であってはいけないとか、値の範囲とか)を検証します。 いずれも、 System.ComponentModel.DataAnnotations 名前空間です。
属性名 効果 RequiredAttribute 必須である(null や空文字を認めない)ことを示します。 RangeAttribute 値の範囲を指定します。 StringLengthAttribute 文字列の最大長/最小長を指定します。 Visual Studio 組み込みの単体テスト機能で利用します。 いずれも、 Microsoft.VisualStudio.TestTools.UnitTesting 名前空間です。
属性名 効果 TestClassAttribute テスト メソッドを含むクラスを識別するために使用されます。 TestMethodAttribute テスト メソッドの識別に使用します。 プログラム自体に関する情報
一部の属性は、実行ファイルのプロパティに表示されます。 例えば、以下のようなプログラムにより、 AssemblyDescription という属性をアセンブリに付けたとします。
AssemblyDescription に与えた文字列は、このプログラムのコメントとして、 explorer から参照することができます。 このソースコードをコンパイルした結果の実行ファイルのプロパティを開くと、 以下のようになります。
実行ファイルのプロパティ
属性の対象
属性を付ける場所によって属性の対象は変わります。 例えば、クラスの直前に属性を付ければクラスに属性が適用されますし、 メソッド定義の直前に属性を付ければメソッドに属性が適用されます。 以下にその例を挙げます。
しかし、属性を付ける位置によっては属性の対象が曖昧になることがあります。 メソッドそのものとメソッドの戻り値に属性を適用したい場合がその典型例です。 以下にその例を挙げます。
対象名 説明 assembly アセンブリ(簡単に言うと、プログラムの実行に必要なファイルをひとまとめにした物のこと)が対象になります。 module モジュール(1つの実行ファイルやDLLファイルのこと)が対象になります。 type クラスや構造体、列挙型やデリゲート(後述)等の型が対象になります。 field フィールド(要するにメンバー変数のこと)が対象になります。 method メソッドが対象になります。 event イベント(後述)が対象になります。 property プロパティが対象になります。 param メソッドの引数が対象になります。 return メソッドの戻り値が対象になります。 このうち、 パラメータの設定やエントリーポイントを解説 return は先ほど説明したとおり、 メソッドそのものに対する属性と区別するために必ず付ける必要があります。 また、 assembly および module も指定が必須です。
プロパティ、イベントと属性の対象
プロパティやイベントは、 内部的にはフィールドやメソッドも作られます。 その結果、属性の指定先もいろいろと増えます。
- プロパティやイベント自身
- get / set や、 add / remove アクセサーに対応するメソッド
- set , add , remove が受け取っている value 引数
- 自動実装の場合、バック フィールドも生成されるので、そのフィールド
Ver. 7.3
C# 7.2 以前では自動プロパティでフィールドに対して属性指定する方法がなく、 もし必要なら、自動実装をやめて手動でプロパティを実装しなおさなければなりませんでした。
ちなみに、この「修正」は一応、破壊的変更になります。 この問題を踏むことはほとんどないとは思いますが、以下のコードは、C# 7.2まではコンパイルできて、7.3ではコンパイルできなくなります。
属性の自作
属性の実態は System.Attribute クラスの派生クラスです 。 System.Attribute クラスを継承したクラスを作成することで、 新しい属性を自作することが出来ます。
ここでは例として、クラスの作者を記録しておくための属性 Author を作成します。 まずは最も基本的な部分を作成します。
見てのとおり、何の変哲もないクラスです。 ただ、 System.Attribute を継承していて、 AttributeUsage 属性が付いています。 AttributeUsage により、その属性の用途を指定することが出来ます。 この例の場合、 Author 属性は対象が指定されていて、 パラメータの設定やエントリーポイントを解説 クラスまたは構造体にのみ適用できる属性になります。
属性パラメータで指定した引数は属性クラスのコンストラクタに渡されます。 したがって、この例の場合、 AuthorAttribute クラスのコンストラクタに文字列 "Andrei Hejilsberg" が渡されます。 その結果生成された AuthorAttribute クラスのインスタンス情報がこのクラスのメタデータとして残されます。
また、属性クラスの public なフィールドやプロパティは名前付きパラメータと呼ばれる方法で設定することが出来ます。 例として、先ほど作成した Author 属性の パラメータの設定やエントリーポイントを解説 affiliation フィールドを設定してみましょう。
この例の Affiliation="Microsoft" の部分が名前付きパラメータです。 このように、通常の属性パラメータの後ろに , で区切って「 フィールド名 = 値 」と書くことでフィールドの値を設定できます。 (プロパティの場合もまったく同様にして値を設定できます。)
Attribute にも AllowMultiple と Inherited という2つの名前付きパラメータがあります。
AllowMultiple には同じ属性を同じ対象に複数回適用できるかどうかを指定します。 true の場合は適用可能、false の場合は適用不可になります。 Inherited には属性が継承されるかどうかを指定します。 true の場合はクラスの継承時に属性も一緒に継承され、 false の場合には属性は継承されません。
先ほどの Author 属性の場合、 1つのクラスを複数人で開発することもありえますし、 AllowMultiple は true にすべきでしょう。 また、派生クラスと基底クラスの作者が同じとは限りませんから、 Inherited は false とすべきです。 以上のことを踏まえ、 Author 属性を書き直すと以下のようになります。
属性情報の取得
リフレクション機能を用いて属性情報を出得することが出来ます。 具体的には、 Attribule クラスの GetCustomAttribute メソッドや GetCustomAttributes メソッドを用いて属性を取得します。 取得したい属性の AllowMultiple パラメータが false の場合は GetCustomAttribute メソッドを、 AllowMultiple パラメータが true の場合や、 全ての属性を取得したい場合には GetCustomAttributes メソッドを使用します。
例として、クラス及びそのクラス中の public メソッドに適用された全ての Author 属性を取得するプログラムを以下に示します。
ジェネリックな属性
Ver. 11
C# 11.0 で、属性をジェネリック クラスにできるようになりました。 これまでだと、以下のように引数で typeof を使って型を渡すことになっていました。
関連記事
コメント