Linuxカンフースタイル:設定の同期

Linuxおよび同様のオペレーティングシステムの最高の品質の1つは、それらの深いカスタマイズです。気に入らないものがある場合は、ファイルを微調整することで簡単に変更できる可能性が高くなります。たとえば、あらゆる手段で人気のあるコマンドシェルであるbashについて考えてみます。コマンドラインプロンプトを変更する必要がある場合、これは非常に実行可能です。Tab



大文字と小文字を区別しないファイル名の自動補完を可能にするキーが必要な場合も、それは問題ではありません。通常、これらの設定は.bashrc



、ユーザーのホームディレクトリあるいわゆる「プロファイルファイル」の1つで実行されます 誰かが1台のコンピューターで作業している場合、その人は設定に問題はありません。それはファイルに貢献します







.bashrc



、および他の同様のファイルでは、必要な変更が行われ、システムが自分でカスタマイズされ、希望どおりに動作する環境で動作します。誰かが複数のコンピューターを使用しなければならない場合、問題が発生します。おそらく、Webサーバー、デスクトップコンピューター、ファイアウォールの役割を果たすマシン、および数十のRaspberryPiについて話しているのでしょう。これらすべてのシステムを同じに構成するにはどうすればよいですか?また、すべて同じ方法で構成した後、どのようにして設定を最新の状態に保つのですか?



設定を同期するためのいくつかのオプション



実際、Linuxシステムの設定を同期する方法はいくつかあります。これらの設定は通常、ある種のファイルに保存されるため、ほとんどすべての同期メカニズムを使用して問題を解決できます。これには少し時間がかかりますが、その結果、あなたはあなたが望むことを達成することができます。すべての構成ファイルを1つのディレクトリに配置し、これらのファイルへのシンボリックリンクをホームディレクトリの適切な場所に配置できるとします。さらに、を使用してrsync



、このフォルダを異なるシステム間で同期できます。



Gitに精通している場合は、この問題を解決するための別のオプションについてすでに推測しています。ここでは、設定を同期する機能に加えて、構成ファイルで何がいつ変更されたかを知る機会もあります。実際、私はGitを使用するための珍しい方法の資料にいて、それについて話し、Gitに基づいたシステム設定の同期を示しています。しかし最近、Goで書かれたchezmoiというシステムがあり、私の設定とはまったく異なる設定の同期方法を使用していることを発見しました



Chezmoiの機能



プロジェクトリポジトリのデータによると、chezmoi



ユーザーは次のオプションを利用できます。



  • ホームディレクトリファイルの望ましい状態の宣言的な説明。
  • テンプレートを使用してファイルを作成します。
  • 作業のセキュリティは、Bitwarden、LastPass、およびキーのローカルストレージ用のいくつかのプログラムとの統合によって保証されます。
  • アトミック更新処理のサポート。これにより、システムが「中間」状態になるのを防ぎます。
  • 複数のオペレーティングシステムのサポート。
  • 実行が計画されているアクションについてユーザーに通知され、「テスト実行」モードがサポートされます。
  • 高速作業、chezmoi



    バージョン制御システムと組み合わせて使用​​するものを選択する機能


それはすべて非常に面白そうです。さまざまなオペレーティングシステムにユーティリティをインストールする手順には独自の特性があり、対応する手順はプロジェクトリポジトリにあります。



chezmoiを使用する



機能へのアクセスを提供する実行可能ファイルchezmoi



は、当然のことながら、プロジェクトの名前を繰り返します。いくつかのコマンドをサポートしていますが、その中で次の点に注意してください。



  • add



    -システムによって管理されるファイルのリストにファイルを追加します。
  • edit



    -ファイル編集。
  • diff



    -ファイルの作業バージョンに含まれるのを保留している変更がある場合は、それを確認します。
  • apply



    -ファイルの作業バージョンに承認待ちの変更を含める。


新しいファイルがシステムに追加されると、そのコピーがディレクトリに配置され~/.local/share/chezmoi



ます。バージョン制御システムとの互換性のためにchezmoi



、名前がピリオドで始まるこのディレクトリ内のファイルを無視します。したがって、たとえばファイルをシステム.bashrc



追加すると、そのファイルの名前は自動的にに変更されdot_bashrc



ます。



可能性がchezmoi



これに限定れている場合、このユーティリティには特筆すべきことは何もありません。ここで最も興味深いのは、ファイルコピーの同期です。この問題を解決するためにchezmoi



、外部バージョン制御システムを使用します。しかし、設定が同期されている一部のコンピューターに特別な設定が必要な場合はどうなりますか?



特別な設定のサポート



たとえば、デスクトップコンピュータでは、カスタムコマンドラインプロンプトを使用する必要があります。また、サーバー、ファイアウォール、およびRaspberry Piコンピューターでは、通常の招待に満足するでしょう。これは、各コンピューターのファイル.bashrc



に、特別なパラメーター値が存在する必要があることを意味しますPS1







これは、data



ファイルのセクションに適切なエントリを追加することで実行できますchezmoi.yaml



。実際、ここではさまざまな形式、特に-JSON



とを使用できますTOML



。このファイルは、コンピューターごとに一意です。テンプレートファイルに変更を加えることができます。たとえば、chezmoi.yaml



デスクトップコンピュータには、PS1String



、コマンドラインプロンプトの複雑な設定を説明し、Raspberry Piの同じファイルに、同様のエントリがすでにはるかに簡単に配置されています。



テンプレートとして使用される特定のファイル(たとえば、ファイル.bashrc



)をシステムに追加するには、-T



コマンドオプションを使用する必要がありますadd



。に基づくテンプレートファイル.bashrc



の名前はdot_bashrc.tmpl



です。標準のGoテンプレートメカニズムは、ユーザーchezmoi



にさまざまなオプションを提供します。さらに、chezmoi



変数を使用できるようになります。たとえば、コンピューター名とユーザー名、OSとアーキテクチャーの識別子を操作できます。



で使用される機能のおかげでchezmoi



テンプレート言語を使用すると、ユーザーは変数を使用するよりもはるかに自由になります。特にテンプレートでは、条件付きを使用できます。たとえば、次のようになります。



#  
export EDITOR=vi
 
# ,    
{{- if eq .chezmoi.hostname "work-laptop" }}
#     ~/<code>.bashrc</code>  work-laptop
{{- end }}

      
      





安全性



Chezmoi



プライベートファイルを認識し、それに応じて処理します。したがって、ディレクトリはプライベートchezmoi



であり、システムはprivate_



プライベートファイルに名前を割り当てるときにプレフィックスを使用します(たとえば、そのようなファイルの名前は次のようになりますprivate_dot_bashrc



)。



ファイルの同期を整理するために、いくつかのバージョン制御システムが使用されることが想定されています。つまり、新しいコンピューターをセットアップしたり、特定のマシンの設定を更新したりするときに、ディレクトリの内容をchezmoi



バージョン制御システムに保存されている設定のコピーと同期します。次に、構成ファイルで構成する必要のあるすべてのものと変更が適用されます。場合によっては、どの変更が適用されるかを事前に確認します。



もちろん、これは、保存されたファイルがバージョン制御システムで許可されている限り「プライベート」になることを意味します。構成ファイルをパブリックシステムに公開すると、「プライバシー」の問題がなくなることを意味します。この問題を解決する1つの方法は、テンプレートシステムを使用することであり、バージョン制御システムで構成ファイルを処理しないことです。また、コンピュータごとに固有であるため、バージョン制御システムを使用して処理しないでください。これは、とりわけ、他のファイルとは異なる方法で保存する必要があることを意味します。



構成ファイルに次のようなエントリがあるとします。



hackaday:

   password: 0xdeadbeef

      
      





パスワードは秘密にしておく必要があります。また、公開ファイルでは、次の構造を使用できます。



password = {{ .hackaday.password }}

      
      





chezmoi



使用する場合でも、で暗号化された構成ファイルを使用できますgpg







バージョン管理システム



バージョン制御システムchezmoi



について言えば、サポートされているバージョン制御システムに資料を送信するためのコマンドと、それに応じてデータをロードするためのコマンドがあります。デフォルトが使用されgit



ますが、のような他のオプションがありますhg



対応する設定は、構成ファイルで行われます。



構成ファイルの完全なセットを簡単に取得したり、構成をエクスポートしたりできるコマンドもあります。これらのコマンドについては、プロジェクトリポジトリで読むことができます。デフォルトでは、すべての作業はホームディレクトリで行われますが、必要に応じて、別のターゲットディレクトリで動作するようにプログラムを構成できます。



結果



全体として、それはchezmoi



よく考えられたプロジェクトのように思われることに注意することができます。しかしchezmoi



、設定同期システムからの切り替えを強制するようなものはここにはありませんでしたchezmoi



問題の問題を解決する方法を考えているときに偶然見つけた場合は、おそらくこの特定のプロジェクトを使用し、独自のプロジェクトを作成することはありません。テンプレーティングシステムがchezmoi



非常に優れているとは言いませんが、私のシステムは、環境に応じて異なるファイルを選択することで同様の効果を実現します。



独自の設定ファイルchezmoi



バージョン制御システムでは扱いにくい。はい、ユーザーは通常これを行う傾向がありません。設定の保存に使用されるリポジトリがプライベートである場合、またはプライベート情報が構成ファイルに含まれていない場合は、設定ファイルのオプションをこのシステムに配置できますchezmoi



(たとえば、Raspberry Piおよび通常のコンピューター用にこのファイルのバージョンがある場合があります)。次に、コンピュータを最初にセットアップするときに、適切なファイルの名前を変更できます。ただし、システム構成ファイルが単にコピーされる可能性が高くなります。構成ファイルによるアプローチchezmoi



バージョン制御では処理されないため、すべてが正しく構成されていれば、パブリックリポジトリを安全に使用してデータを保存できるという利点があります。



そして、私のシステムの運用では、プライベートリポジトリを使用することが非常に重要です。プライベートリポジトリを使用する人だけが、構成ファイルをパブリックドメインに取り込むことを気にしない場合です。ただし、すべてのファイルはバージョン制御システムを使用して処理されます。このシステムでは、習得に時間がかかるテンプレートを使用せずに、すべての変更に遅れないようにすることができます。適切なファイルに設定を配置する必要があります。システムに追加できる唯一の機能は、chezmoi



、これは、監視対象の新しいファイルを追加する機能です。私のシステムでは設定を同期できますが、手動でファイルを追加する必要があります。ファイルは特別なディレクトリに移動され、その後、ファイルエントリがシステムに追加され、シンボリックリンクが作成されます。



しかし、これはLinuxが適している点です。同じ問題を解決する方法はたくさんあります。1つが気に入らない場合は、別のものを見つけることができます。また、何も気に入らない場合は、問題なく独自の何かを作成できます。ただし、これに慣れていない多くの一般の人々がLinuxを使用する場合、これは特定の問題を引き起こします。彼らは多くの選択肢から選択しようとはせず、シンプルで明確な解決策を望んでいます。それどころか、Linuxコミュニティでは、常にすべてをすべてと比較しemacs



vi



CとPythonのどちらが優れているについて熱心に議論するのが通例です。



Linuxマシン間で設定をどのように同期しますか?










All Articles