産業用アプリケーションでのMagOS

この作業を行う際の目標は、多数のLinuxマシンからネットワークにサービスを提供するのにかかる時間を最小限に抑えることでした。

1.基本原則の基本的な説明
1.1。 MagOSのアプリケーション。
1.2。 テクノロジー。
1.3。 基本的な配布の選択。
2.ネットワーク構造。
2.1。 Magosサーバー。
3.ブートローダーの構成。
3.1。 ローダー文字列。
3.2。 使用されたオプション。
3.3。 使用できるオプション。
3.4。 ネットワークブート機能。
4.システムを初期化する手順。
4.1。 デフォルトのbasecfg.ini構成ファイル構造。
4.2。 システムディレクトリの構造。
4.3。 実装。
5. MagOSサーバー。
5.1。 一般的な情報。
5.2。 ネットワーク設定。
5.3。 サービスを構成します。
5.4。 プログラムリポジトリ。
5.5。 追加のサーバーデータ
5.6。 モニタリング
6.カスタムモジュール。
6.1。 カスタムモジュールを作成するための一般原則。
6.2。 モジュールの数。
6.3。 特別な目的のためのモジュール。
6.4。 モジュールの制限。
6.5。 モジュールの作成手順。
6.6。 システム更新モジュール。
6.7。 Officeソフトウェアインストールモジュール。
6.8。 ユーティリティとサーバーを備えたモジュール。
6.9。 システム設定モジュール。
7.スクリプト。
7.1。 magos-patchesへの追加。
7.2。 OSインストールスクリプト。
7.3。 ADの包含スクリプト。
7.4。 システム管理(/ root / bin)。
7.5。 magosプログラムとオペレーティングシステムの動作を修正する追加のスクリプト。
8.技術者への指示。

基本原則の基本的な説明


MagOSアプリケーション

MagOSは、広範なリストから選択されたディストリビューションの特定のビルドです。 Magea、Mandriva、Rosa、Ubuntu、Debian、Fedora、AltLinuxなどのライブディストリビューションは、アセンブリを構築するための基礎として使用できます。 MagOSの特定の要素は、変更されたカーネル(AUFSをサポートするため)、特別な方法で作成されたinitrd(UIRDを使用)、およびMagOSを制御するために設計された追加のスクリプトセットです。

MagOSでは、さまざまなディストリビューションのLiveアセンブリ(CD、DVDディスクからダウンロードするように設計されたアセンブリ)に基づいて、完全なオペレーティングシステムを作成できます。 MagOSの使用の詳細には、このアプローチのさまざまな追加の利点があります。

元の状態に復元する非常に単純なシステム。 特別なコマンドの導入により、ユーザーが行ったすべての設定をリセットし、システムを元の状態に戻すことができる場合、機器を操作する技術と比較できます。 ここでは、ユーザーデータが格納されているセクションのデータが破壊されることで同じ効果が得られます。 したがって、ディストリビューションをインストールするためのこのオプションは、教育プロセスで使用する場合に不可欠です。 上記に加えて、配布キットをフラッシュドライブにインストールする機能を追加する必要があります。これにより、学生または学生は教室だけでなく自宅でもそれを使用できます。

配布キットの2番目に重要な利点は、システムを事前設定できることです。 これは、必要なすべての構成ファイルを、ディストリビューションの不変部分(いわゆるモジュール)にパラメーターとともに含めることで実現されます。 このテクノロジーを使用して、ユーザーのコンピューターにシステムをインストールした後の管理者のアクションの数を最小限に抑えます。 この機会は、コンピュータークラスの組織だけでなく、産業企業の間でも使用できるため、多数のユーザーのコンピューターで作業する場合のインストールと構成にかかる最小限の人件費を最小限に抑えることができます。

3番目の利点は、オペレーティングシステムのこのようなアセンブリのインストールと更新が容易なことです。これは、ディスクのパーティション分割、ファイルシステムの作成、一連のファイルのコンピューターへのコピー、ブートローダーのインストールに要約されます。 産業用アプリケーションでは、適切なスクリプトを実行すると、これらすべての操作を自動的に実行できます。 インストールされたディストリビューションを更新すると、ファイルのコピーも行われます。これは、たとえばコンピューターの電源を切ったときに自動的に実行できます。

利点のいくつかには、インターネットなどから配布をネットワークでダウンロードする機能が含まれます。

MagOSの未実現機能には、安全な分散ファイルシステムにユーザーデータを保存する機能の欠如が含まれます。 このような分散ファイルシステムの実装により、ユーザーの完全な再統合が可能になります。

MagOSに関するいくつかの入門情報は、記事MagOS Linux(9月リリース)から入手できます。
テクノロジー

MagOSに含まれるLinuxカーネルの変更は、AUFSファイルシステムにパッチを含めることです。 AUFSを使用すると、ループバックインターフェイスを使用して外部ファイルシステムをファイルシステムに接続し、レイヤーケーキのようなファイルシステムを構築できます。 このような結果のファイルシステムの中間層は、ほとんどの場合RO(読み取り専用)モードで接続され、最上位層は原則としてRW(読み取り/書き込み)モードで接続され、RAMに配置できるディスクファイルシステムに投影されます、物理ディスク、ディスクイメージ、およびSquashFSファイルシステムを使用して接続された特別なモジュールのシャットダウン操作中に保存されます。

SquashFSファイルシステムを使用すると、ファイルシステムのすべての属性を保持しながら、ブロックアルゴリズムを使用して圧縮を実行できます。 MagOSでは、AUFSファイルシステムのレイヤーイメージでロード可能なモジュールを作成するために使用されます。 ブロック圧縮アルゴリズムを使用すると、モジュールファイルからデータを抽出する必要がある場合、モジュールファイル全体を解凍しないようにできます。

MagOSでは、ほとんどのディストリビューションでLinuxをブートするために使用されるinitrdディスクイメージが、システムの編成に使用されます。 「階層化された」配布ファイルシステム、プロセス構成ファイルなどを作成するスクリプトがあります。

システムの構成に必要なデータは、grub4dos / grub2 / syslinuxブートローダーで指定されたオペレーティングシステムのカーネルパラメーターを介して送信され、特別な構成ファイルMagOS.iniを使用します。 どこでどのパラメータが送信されるかは、ドキュメントに記載されています。 オペレーティングシステムの一般的な構成に関連するパラメーターは、カーネルパラメーターを使用して渡されます。 これらは、Unified Init Ram Disk(uird)パラメーターシステムに編成されています。

パラメーターについては、プロジェクトのWebサイトUIRDで説明されています。 使用されるMagosマルチディストリビューション。

産業用アプリケーションでは、ディストリビューションキットを含み、HTTP(リモートダウンロード用)、TFTP(PXE経由のリモートダウンロードサーバー)、SSH(ファイル管理用)、RSYNC(ユーザーコンピューターへのOSのインストールおよび更新用)をサポートするサーバーなしではできません。 サーバーは、MagOSを含むあらゆるディストリビューションに実装できます。 私の場合、CentOS 6ディストリビューションに基づいた仮想コンテナーが使用されました。

システムを制御するために、必要なオプションとそれらを処理するスクリプトがMagOSシステムに追加されました。

基本配布の選択

ネットワークの構築に基づいて配布キットを選択することは、常に複雑で物議を醸す作業です。 特定の分布を選択するには、多くのローカル問題を含む多くの要因を考慮する必要があります。 次の要因がありました:非常に非生産的なユーザーコンピューター、最近買収されたものの、コンピューターに保存されたため、ユーザーが座っている典型的なマシンで、わずか2ギガバイトのRAMと、あまり高速ではないデュアルコアCeleron。 このようなユーザーのコンピューターの典型的な構成は、デスクトップマネージャーの選択に制限を課します;特に、快適なユーザーエクスペリエンスの可能性を失うことなく、KDEを使用することはもはやできません。

第二に、これは要員の資格が低いという問題であり、その主な機能は決してコンピューターでの作業ではありません。 人々が長年一緒に作業しなければならなかった単一のオペレーティングシステムの長年の習慣を覚えておく必要があります。WindowsXPはサポートが中止されたため、ユーザーの職場でOSを交換する問題が実際に発生します。

デスクトップの外観を古き良きXPの外観に適応させる可能性を探り、Cinnamonに立ち寄ることにしました。 開発はまだリリースされていませんが、標準構成では、このデスクトップは非常に安定して動作し、適切なテーマをインストールすることでXPの外観に簡単に適応できます。 オペレーティングシステムの選択に影響を与える追加の要因は、職場で国内オペレーティングシステムを搭載したコンピューターを見るための状態構造の「欲求」でした。 私たちの場合、全体の選択は、Rosa OSとAlt Linux OSの間の選択に帰着しました。

Rosa OSでのかなりの経験にもかかわらず、AltLinuxとRosaのディストリビューションを比較することはRosaに有利ではありませんでした。 まず第一に、LiveDVDの一部としてCinnamonが不足していること、そして第二に、最近の配布パッケージの品質の低下が原因です。

したがって、 Cinnamonデスクトップを含むP7スターターキットアセンブリの1つであるAltLinuxが、アセンブリ作成の基礎として選択されました。 この選択のプラス面は、セットの最小構成です。これにより、自由に設定を拡張できます。

ネットワーク構造


Magosサーバー

エンタープライズネットワークには、Magosサーバーが展開された仮想化サーバーがあります。 サーバーはいくつかの機能を実行します。

まず、リモートダウンロードサーバーとして機能します。 リモートブートはTFTPを使用して実装され、ワー​​クステーションでの作業に使用されるのと同じ構成でMagOSを起動できます。 このダウンロードを使用して、機器をテストし、ワークステーションにオペレーティングシステムをインストールし、他の多くのタスクを実行できます。 さらに、ClonezillaおよびMemtestのイメージは、リモートダウンロードサーバーを使用してダウンロードされます。

MagOSを実行しているワークステーションのリモートロードはHTTPを介して行われます。HTTPの場合、Lighttpdはサーバーにインストールされ、DocumentRootはMagOSリポジトリを指します。

ワークステーションへの配布キットのインストールとワークステーションの更新は、RSYNCプロトコルを使用して実行されます。 したがって、rsyncdはサーバーにインストールされます。

サーバー管理は、SSHプロトコルを使用して実行されます。 同じプロトコルを使用して、テストコンピューターで準備されたプログラムモジュールへの変更がサーバーで更新されます。

メモリが少ないモジュールの作成に問題があったため、このコンピューターには4Gbのメモリが搭載されています。

ネットワーク統合

Windows 2008 SP2に基づいてADを展開し、すべてのネットワークコンピューターがADに含まれています。 例外なく、Linuxを実行しているコンピューター。

ブートローダーのセットアップ


ローダー文字列

title AltLinux i586 cinamon save #find --set-root --ignore-floppies --ignore-cd /MagOS/MagOS.sgn kernel /AltLinux/kernel/i586/vmlinuz uird.ro=*.xzm,*/live uird.from=/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;/AltLinux/modules/i586/ uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 uird.home=/dev/sda3/AltLinux-Data/homes/ uird.changes=/dev/sda3/AltLinux-Data/changes/ users initrd /AltLinux/kernel/i586/uird.soft.cpio.xz /AltLinux/kernel/i586/uird.magos.cpio.xz 

使用されたオプション

カーネルパラメーターが多数あるため、MagOSパラメーターを強調表示するために、パラメータープレフィックス 'uird'(Unified Init Ram Disk)が導入されました。

 uird.ro=*.xzm,*/live 

uird.ro - MagOSパラメーター。 ROモードでマウントされているモジュールのフィルターを定義します。 そのため、実際のMagOSモジュールとLiveDVD AltLinux自体が機能します。

 uird.from=/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;/AltLinux/modules/i586/ 

uird.from - MagOSパラメーター。 システムのモジュールが存在するソースのリスト。 これは、モジュールとディストリビューション自体をロードするためのパスを示しています。

 uird.load=* 

uird.load - MagOSパラメーター。 ブート段階で接続する必要があるモジュールのフィルター。

 root=uird 

root-カーネルパラメーター。 ルートファイルシステムを指定します。

 rw 

rw-読み取り/書き込みモードを有効にします。

 findswap 

findswap - MagOSパラメーター。 システムを自動的にスワップに接続させます。 Linux Swapパーティションがシステム上にある場合、接続されています。 それ以外の場合、Windowsスワップファイルが検索されます。

 vga=788 

vga-カーネルパラメーター。 グラフィックモードを有効にします。

 quiet 

quiet-カーネルパラメーター。dmesgロギングの必要性を示します。

 plymouth.enable=0 

plymouth.enable-カーネルパラメーター。 オペレーティングシステムの起動中にグラフィカル画面とログ出力を制御します。

 uird.home=/dev/sda3/AltLinux-Data/homes/ 

uird.home - MagOSパラメーター。 ユーザーのホームディレクトリが保存されるソースを指定します。 MagOSの既存のバージョンのバグにより、デバイスを含む完全なパスが必要です。

 uird.changes=/dev/sda3/AltLinux-Data/changes/ 

uird.changes - MagOSパラメーター。 ルートファイルシステムへの永続的な変更が保存されるソースを指定します。

 users 

users-カーネルパラメーター。

使用できるオプション

ハードドライブに保存されたデータに暗号化を使用することは可能です。 この場合、データをパーティションに保存する代わりに、ディスクイメージへの保存を使用する必要があります。 画像の形式は次のとおりです。

  *.RWM.ENC - RW   *.ROM.ENC - RO   

uird.copy2ram [+] = -RAMにコピーされるモジュールのフィルター。 これは、大量のRAMがある場合の作業を高速化するために使用できます。
uird.copy2cache [+] = -キャッシュにコピーされるモジュールのフィルター。
uird.cache [+] = -モジュールを同期するソース。

コンピューターの電源を切るときに、MagOSファイルをサーバーと同期する代わりにキャッシュを使用することができます。 この方法の欠点には、サーバーとの交換がHTTPプロトコルを使用して実行されるという事実があり、それ自体がパフォーマンスを大幅に低下させます。 2番目の欠点は、更新オブジェクト(MagOS.iniファイル、ブートパーティション、OSパーティション自体)を分離することが難しくなることです。 リモートリポジトリをローカルまたはプライベート(INTRANET)リポジトリに同期し、システムを更新するために使用されるレイヤーキャッシュレベルと対応するuird.cacheパラメーターは、次のように設定する必要があることに注意してください。

 uird.cache=/MagOS/cache;/MagOS-Data/cache;/MagOS-Data/netlive 

各ソースには独自のディレクトリがあります。

uird.netfsopt [+] = -ネットワークFSをマウントするための追加オプション:sshfs、nfs、curlftpfs、cifs。

これらのファイルシステムを使用して、後でネットワークファイルシステムをユーザーデータセクションに接続できます。

uird.noload [+] = -ブート時にスキップする必要があるモジュールのフィルター
個々のコンピューターまたはネットワークの一部のモジュールを選択的に無効にできます。
uird.homes [+] = -ユーザーのホームディレクトリが保存されるソース(AUFSが結合されます)。

基本的に、ここでは、layer-homesユーザーのホームディレクトリレベルと対応するパラメーターを入力します:uird.homes:

 uird.homes=/MagOS-Data/homes;/MagOS-Data/home.img;nfs://magos.sibsau.ru/homes/n/e/myuser 

さまざまなソースからのすべてのユーザーディレクトリは、AUFSを介してカスケードされ、/ homeにマウントされます。 最初のソースが優先度が高く、リストの順に優先度が低くなります。 ソースがuird.home =パラメーターで指定されている場合、ソースは/ homeにマウントされます。 したがって、ホームフォルダーと異なるファイルシステムのインポジションが複数接続される可能性があります。 ユーザーのホームフォルダーのネットワークホスティングに使用できます。

ソースの種類:
/path/dir使用可能なメディア上のディレクトリ。
/dev/[..]/path/dir指定されたメディアのディレクトリ。
file-dvd.iso, file.imgディスクイメージ(ISO、ブロックデバイスイメージ);
server/path… server/path… ...-HTTP経由でアクセス可能なソース(httpfsを使用);
ssh://server/path/… ...-SSH経由でアクセス可能なソース(sshfsを使用);
server/path… server/path… ...-FTP経由でアクセス可能なソース(curlftpfsで使用);
nfs://server/path/… NFS経由で利用可能なソース。
cifs://server/path/… CIFS経由で利用可能なソース。
uird.machines= -マシン依存の永続的な変更が保存されるソース。

再入可能なユーザーを確保するために必要な、変更にマシン依存のリソースを使用することができます。

ネットワークブート機能

ネットワークブートには次のパラメーターが使用されます。

 kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/magos/AltLinux/iso/alt linux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/ uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users 

これらは同じパラメーターですが、uird.fromパラメーターの指定に注意する必要があります。

 uird.from=http://magos-server.mydomain.local/magos/AltLinux/iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/ 

これは、OSのロード元のサーバーの完全なhttp URLです。 ベースレイヤーベースレベルおよび対応するuird.fromパラメーターは、次のように設定できます。

 uird.from=/MagOS;/MagOS-Data;MagOS.iso;http://magos.sibsau.ru/repository/netlive/2014.64/MagOS 

システム初期化順序



  ├── layer-base ==> ├── layer-cache │ ├── 0 --> │ ├── 0 │ ├── 1 --> │ ├── 1 │ ├── ... --> │ └── ... │ └── ... --> │ RAM 


デフォルトのbasecfg.ini構成ファイルの構造

 uird.config=MagOS.ini uird.ramsize=70% uird.ro=*.xzm;*.rom;*.rom.enc;*.pfs;*.sfs uird.rw=*.rwm;*.rwm.enc uird.cp=*.xzm.cp,*/rootcopy uird.load=/base/,/modules/,rootcopy uird.noload= uird.from=/MagOS;/MagOS-Data uird.changes=/MagOS-Data/changes uird.cache=/MagOS-Data/cache uird.machines=/MagOS-Data/machines uird.home=/MagOS-Data/homes 

uird.basecfgが指定されていない場合、/ uird_configs / basecfg.iniがinitrd内で使用されます。

システムディレクトリ構造

  /memory/ ├── bundles -    │ ├── 00-kernel.xzm │ ├── 01-firmware.xzm │ ├── 10-core.xzm │ ├── 80-eepm-1.5.2.xzm │ └── ... -  .. ├── changes -      │ ├── etc │ ├── home │ ├── memory │ ├── run │ ├── var │ └── ... -  .. ├── data -    │ ├── cache -   │ ├── homes - homes  │ ├── machines - () │ └── from -   ├── layer-base -     │ ├── 0 -    │ ├── 1 -    (    uird.from=) │ └── ... -  .. ├── layer-cache -     │ ├── 0 -    │ ├── 1 -    (    uird.cache=) │ └── ... -  .. ├── layer-homes -   homes  │ ├── 0 -    │ ├── 1 -    (    uird.homes=) │ └── ... -  .. ├── cmdline -         └── MagOS.ini.gz -       

実装

実装は、 dracut初期化スクリプト (ベース、busyboxモジュール)とuirdスクリプト(livekitlib + uird-init)のセットに基づいています。


MagOSサーバー


一般的な情報

この場合、magos-serverはopenvzコンテナーとしてデプロイされます。 実装は重要ではありません。


サーバー実装

オペレーティングシステムCentos v6。 次のリソースが仮想コンテナに割り当てられます:CPU-2、RAM-512Mb、スワップ-1Gb、仮想ディスクサイズ40Gb。

ネットワーク設定

ifcfg-eth0で設定
 DEVICE=eth0 IPADDR=192.168.1.xxx NETMASK=255.255.255.0 NETWORK=192.168.1.0 GATEWAY=192.168.1.1 DNS1=192.168.1.xxx BROADCAST=192.168.1.255 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static 


ネットワークサービス(netstat -tunlp)
 # netstat -tunlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 494/xinetd tcp 0 0 192.168.1.xxx:80 0.0.0.0:* LISTEN 551/lighttpd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 484/sshd udp 0 0 0.0.0.0:69 0.0.0.0:* 494/xinetd 


サービスのセットアップ

Lighthttpd

打ち上げ:
 chkconfig --list lighttpd lighttpd 0:off 1:off 2:on 3:on 4:off 5:on 6:off 


設定ファイルlighttpd.conf
 var.log_root = "/var/log/lighttpd" var.server_root = "/var/www" var.state_dir = "/var/run" var.home_dir = "/var/lib/lighttpd" var.conf_dir = "/etc/lighttpd" var.vhosts_dir = server_root + "/vhosts" var.cache_dir = "/var/cache/lighttpd" var.socket_dir = home_dir + "/sockets" include "modules.conf" server.port = 80 server.use-ipv6 = "disable" server.bind = "192.168.1.xxx" server.username = "lighttpd" server.groupname = "lighttpd" server.document-root = server_root + "/" server.pid-file = state_dir + "/lighttpd.pid" server.errorlog = log_root + "/error.log" include "conf.d/access_log.conf" include "conf.d/debug.conf" server.event-handler = "linux-sysepoll" server.network-backend = "linux-sendfile" server.stat-cache-engine = "simple" server.max-connections = 1024 index-file.names += ( "index.xhtml", "index.html", "index.htm", "default.htm", "index.php" ) url.access-deny = ( "~", ".inc" ) $HTTP["url"] =~ "\.pdf$" { server.range-requests = "disable" } static-file.exclude-extensions = ( ".php", ".pl", ".fcgi", ".scgi" ) include "conf.d/mime.conf" include "conf.d/dirlisting.conf" server.follow-symlink = "enable" server.upload-dirs = ( "/var/tmp" ) 


構成ファイルvhosts.d / magos.conf
 $HTTP["host"] == "magos-server.mydomain.local" { var.server_name = "magos-server.mydomain.local" server.name = server_name include "conf.d/trigger_b4_dl.conf" server.document-root = vhosts_dir + "/magos/" accesslog.filename = log_root + "/" + server_name "/access.log" } 


Conf.d / dirlisting.conf構成ファイル
 dir-listing.activate = "enable" dir-listing.hide-dotfiles = "disable" dir-listing.exclude = ( "~$" ) dir-listing.encoding = "UTF-8" dir-listing.hide-header-file = "disable" dir-listing.show-header = "disable" dir-listing.hide-readme-file = "disable" dir-listing.show-readme = "disable" 


Tftpd

起動(/etc/xinetd.d/tftp :)
 service tftp { socket_type = dgram protocol = udp wait = yes user = root server = /usr/sbin/in.tftpd server_args = -s /var/lib/tftpboot disable = no per_source = 11 cps = 100 2 flags = IPv4 } 


構成ファイル/var/lib/tftpboot/pxelinux.cfg/default
 default menu.c32 prompt 0 timeout 300 ONTIMEOUT local MENU TITLE PXE Menu #    –   HD LABEL Boot from hard disk localboot 0x80 LABEL AltLinux-net MENU LABEL AltLinux-net kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/magos/AltLinux x/iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/magos/AltLinux/modules/i586/ ui rd.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users append initrd=images/uird.magos.cpio.xz LABEL AltLinux-net testing MENU LABEL AltLinux-net testing kernel images/vmlinuz uird.ro=*.xzm,*/live uird.from=http://magos-server.mydomain.local/testing/AltLinux /iso/altlinux-p7-cinnamon-latest-i586.iso;http://magos-server.mydomain.local/testing/AltLinux/modules/i586 / uird.load=* root=uird rw findswap vga=788 quiet plymouth.enable=0 users append initrd=images/uird.magos.cpio.xz 


リポジトリは、magosと呼ばれる動作中の部分と、testingと呼ばれるテスト部分の2つの部分で構成されています。作業リポジトリは、ユーザーワークステーションソフトウェアをインストールおよび更新するように設計されています。インストールされたソフトウェアの予備テストは、テストリポジトリで実行されます。ブートメニューを使用すると、作業リポジトリとテストリポジトリの両方からオペレーティングシステムをロードできます。

Rsync

起動(/etc/xinetd.d/rsync):
 service rsync { disable = no flags = IPv4 socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } 


設定ファイル/etc/rsyncd.conf
 use chroot = yes max connections = 100 syslog facility = local5 pid file = /var/run/rsyncd.pid [magos] path = /var/www/magos comment = whole MagOS boot [testing] path = /var/www/testing comment = whole MagOS boot 


sshd

打ち上げ:
 # chkconfig –list sshd sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off 


構成ファイル/ etc / ssh / sshd_config
 Protocol 2 SyslogFacility AUTHPRIV PasswordAuthentication yes ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials yes UsePAM yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS X11Forwarding no Subsystem sftp /usr/libexec/openssh/sftp-server 


プログラムリポジトリ

プログラムリポジトリ構造には、重要なファイルとディレクトリのみが表示されます。

マゴス

 ├──AltLinux │ ├──iso │ │ └──altlinux-p7-cinnamon-latest-i586.iso │ ├──kernel │ │ └──i586 │ │ ├──uird.magos.cpio.xz │ │ ├──uird.soft.cpio.xz │ │ └──vmlinuz │ └──modules │ └──i586 │ ├──00-kernel.xzm │ ├──01-firmware.xzm │ ├──03-1-nvidia-current.xzm │ ├──03-2-nvidia304.xzm │ ├──03-9-fglrx.xzm │ ├──80-eepm-1.5.2.xzm │ ├──80-uird.soft.xzm │ ├──90-magos-patches.xzm │ ├──99-squashfs-tools.32.xzm │ ├──99-u10-update.xzm │ ├──99-u40-office4.xzm │ ├──99-u50-utils.xzm │ ├──99-u99-default.xzm │ ├──MagOS.ini │ └──update.txt ├──AltLinux-Data │ ├──cache │ ├──changes │ ├──homes │ ├──machines │ ├──MagOS-Data.sgn │ ├──modules │ ├──optional │ └──rootcopy └──boot ├──grub4dos │ ├──install.lin │ ├──install.win │ └──local │ └──menu.lst ├──syslinux └──tools 

検査

 ├──AltLinux │ ├──iso │ │ └──altlinux-p7-cinnamon-latest-i586.iso │ ├──kernel │ │ └──i586 │ │ ├──uird.magos.cpio.xz │ │ ├──uird.soft.cpio.xz │ │ └──vmlinuz │ └──modules │ └──i586 │ ├──00-kernel.xzm │ ├──01-firmware.xzm │ ├──03-1-nvidia-current.xzm │ ├──03-2-nvidia304.xzm │ ├──03-9-fglrx.xzm │ ├──80-eepm-1.5.2.xzm │ ├──80-uird.soft.xzm │ ├──90-magos-patches.xzm │ ├──99-squashfs-tools.32.xzm │ ├──99-u10-update.xzm │ ├──99-u40-office4.xzm │ ├──99-u50-utils.xzm │ ├──99-u99-default.xzm │ ├──MagOS.ini │ └──update.txt ├──AltLinux-Data │ ├──cache │ ├──changes │ ├──homes │ ├──machines │ ├──MagOS-Data.sgn │ ├──modules │ ├──optional │ └──rootcopy ├──boot │ ├──grub4dos │ │ ├──install.lin │ │ ├──install.win │ │ └──local │ │ └──menu.lst │ ├──syslinux │ └──tools └──update.tar.gz 

リポジトリへの記録はシステムユーザー権限で実行されるため、対応するリポジトリへの書き込み権限を担当するグループを作成する必要があります。

 # groupadd magos # groupadd testing 

すべてのリポジトリディレクトリに権限を設定します。

 # cd /var/www # find magos -type f -exec chmod 664 {} + # find magos -type d -exec chmod 775 {} + # find testing -type f -exec chmod 664 {} + # find testing -type d -exec chmod 775 {} + 

リポジトリ所有者グループを設定します。

 # chown -R :magos magos # chown -R :testing testing 

SGIDをリポジトリディレクトリに設定します。

 # chmod g+s magos # chmod g+s testing 

追加のサーバーデータ

 yum.repos.d CentOS-Base.repo CentOS-Debuginfo.repo CentOS-fasttrack.repo CentOS-Media.repo CentOS-Vault.repo epel.repo epel-testing.repo vz.repo 

制御スクリプト

スクリプトは現在使用するために作成されたものであり、使用中に「ボックスのような」ものであると主張するものではありません。

モニタリング

毎日のスケジュールで実行されるupdate-txt.shスクリプトは、現在の日付を含むupdate.txtファイルをモジュールディレクトリに書き込みます。データをユーザーのコンピューターに同期した後、コンピューターが最後に更新された日時を簡単に確認できます。これは、長時間にわたって過負荷にならない(ユーザーがコンピューターの電源をオフにしない)コンピューターを追跡するために必要な瞬間です。

スクリプト/etc/cron.daily/update-txt.sh
 #!/bin/sh echo "magos $(date)" > /var/www/magos/AltLinux/modules/i586/update.txt echo "testing $(date)" > /var/www/testing/AltLinux/modules/i586/update.txt 


更新する

スクリプトtestig2magos_kern.sh、testig2magos_mod.shおよびtestig2magos_all.shは、テストリポジトリから作業リポジトリを更新するように設計されており、手動モードでのみ実行されます。

testig2magos_kern.sh-システムモジュールとカーネルディレクトリのみを更新します。
testig2magos_mod.sh-ユーザーモジュールのみを更新します。
testig2magos_all.sh-カーネル、iso、およびモジュールフォルダーを含む完全な更新を実行します。

どのスクリプトもMagOS.iniファイルを更新しません!

このファイルへの変更は手動でのみ行われます。

スクリプト/root/bin/testig2magos_kern.sh
 #!/bin/bash #      MagOS   magos #   testing MAGOS="/var/www/magos" TESTING="/var/www/testing" MAGOSGROUP="magos" echo "!!! UPDATE KERNEL AND MAGOS MODULES TO magos REPOSITORY FROM testing REPOSITORY" echo " =====" echo echo "Pres Rnter to continue, or Ctrl+C to abort..." read junk clear cp -ruv $TESTING/AltLinux/kernel/i586/*.xzm $MAGOS/AltLinux/kernel/i586/ cp -ruv $TESTING/AltLinux/modules/i586/[0-9]?-*.xzm $MAGOS/AltLinux/modules/i586/ find $MAGOS -type f -exec chmod 664 {} + find $MAGOS -type d -exec chmod 775 {} + chown -R :$MAGOSGROUP $MAGOS/* echo "UPDATE KERNEL AND MAGOS MODULES FROM magos REPOSITORY IT IS EXECUTED" 


スクリプト/root/bin/testig2magos_mod.sh
 #!/bin/bash #    MagOS   magos #   testing MAGOS="/var/www/magos" TESTING="/var/www/testing" MAGOSGROUP="magos" echo "!!! UPDATE MODULES TO magos REPOSITORY FROM testing REPOSITORY" echo " =====" echo echo "Pres Rnter to continue, or Ctrl+C to abort..." read junk clear cp -ruv $TESTING/AltLinux/modules/i586/[0-9]??-*.xzm $MAGOS/AltLinux/modules/i586/ find $MAGOS -type f -exec chmod 664 {} + find $MAGOS -type d -exec chmod 775 {} + chown -R :$MAGOSGROUP $MAGOS/* echo "UPDATE MODULES FROM magos REPOSITORY IT IS EXECUTED" 


スクリプト/root/bin/testig2magos_all.sh
 #!/bin/bash #     magos #   testing,      iso MAGOS="/var/www/magos" TESTING="/var/www/testing" MAGOSGROUP="magos" echo "!!! UPDATE ALL MAGOS REPOSITORY magos FROM testing REPOSITORY" echo " =====" echo echo "Pres Rnter to continue, or Ctrl+C to abort..." read junk clear cp -ruv $TESTING/AltLinux/iso/ $MAGOS/AltLinux/iso/ cp -ruv $TESTING/AltLinux/kernel/i586/*.xzm $MAGOS/AltLinux/kernel/i586/ cp -ruv $TESTING/AltLinux/modules/i586/*.xzm $MAGOS/AltLinux/modules/i586/ find $MAGOS -type f -exec chmod 664 {} + find $MAGOS -type d -exec chmod 775 {} + chown -R :$MAGOSGROUP $MAGOS/* echo "UPDATE magos REPOSITORY IT IS EXECUTED" 


カスタムモジュール


カスタムモジュールを作成するための一般原則

知っておくべきこと

MagOSでモジュールを作成する場合、ユーザーとグループの作成に関連する1つの重要な機能を考慮する必要があります。モジュールを作成すると、変更されたpasswd、group、shadowなどのファイルがその中に保存されます。ただし、次のモジュールを作成してepm2xzmスクリプトで「見る」ためには、モジュール名が「NN-」テンプレートと一致する必要があります。モジュールの名前がこのテンプレートと一致しない場合、作成される後続の各モジュールは、最初のモジュールと同様に、基本的なMagOSモジュールのみに基づいて作成されます。これにより、認証ファイルが最も痛くなります。システムユーザーを作成し、異なるモジュールにインストールされたプログラムは同じUIDとGIDを受け取り、異なるモジュールで作成されたpasswdファイルは後続のレイヤーによって上書きされます。その結果、基礎となるモジュールにインストールされているプログラムは動作しなくなります。

この問題を解決するには、2つの方法があります。1つのモジュール内でシステムアカウントを作成するプログラムをグループ化するか、上記のテンプレートに従ってモジュール名を設定します。

モジュールを作成するスクリプトは、モジュール名として独自の名前を使用するように記述されています。99-u30-example.shというスクリプトは、99-u30-example.xzmというモジュールを作成します。

モジュールの数

ベースモジュールには重複するファイルやディレクトリがないため、ベースモジュールを接続する順序は重要ではありません。ただし、ユーザーモジュールを接続する順序は重要です。ユーザーモジュールにベースモジュールファイルの修正が含まれており、AltLinuxディストリビューションへのMagOS適応の場合、このような状況が観察される場合、それらはaufsの上位レイヤーに配置され、システムレイヤーの後に接続されます。モジュールはシステムに接続され、名前でソートされるため、モジュールの名前は重要です。最後のシステムモジュールの名前は「99-」で始まるため、「99?-」で始まるユーザーモジュールの名前を使用することをお勧めします。これにより、名前でディレクトリを並べ替えると、システムモジュールの後に表示されます。

特別な目的のモジュール

特別な目的を持つ2つのモジュールを区別することをお勧めします:オペレーティングシステムの現在の更新が配置されているモジュール。最初にインストールすることをお勧めします。したがって、推奨される名前は「99-u10-update」です。また、オペレーティングシステムとそのプログラムに適合した設定ファイルを含むモジュール。最後にインストールすることをお勧めします。設定を使用してモジュールを作成する場合、いくつかのルールを遵守する必要があります。


これらの規則に従って、基礎となるモジュールを再組み立てするときにシステムからモジュールを除外することはできず、システム管理スクリプトがその中に配置される場合があります。

モジュールの制限

モジュールの数に制限はありません(デフォルトでは最大127に設定できます)が、プログラムをモジュールに分割する際に妥協点を確認することをお勧めします。まず、基礎となるモジュールを再構築するとき、後でロードする必要があるすべてのモジュールを切断する必要があります。そして、そのようなモジュールを再構築した後、モジュール内のプログラムが更新または変更されていない場合でも、後続のすべてのモジュールを再構築することをお勧めします。これは、ライブラリの依存関係によるものです。したがって、ユーザーモジュールの数が多くならないようにする必要があります。

2番目の制限は、他方では、モジュールが再構築されるコンピューターのリソース要件です。モジュールへのプログラムのインストール中、ファイルシステムはデフォルトでRAMに配置されるため、インストールされるプログラムの数は必要なRAMのサイズに直接関係します。そのため、Libreofficeをインストールするには、コンピューターに約3 GBの空きRAMが必要です。この制限を解消するには、モジュールを作成するための一時ファイルを配置するためのディレクトリを特別に準備する必要があります。

したがって、使用する必要のあるモジュールの最小数は3で、最適な数は4モジュールです。

モジュールの作成手順

モジュールの組み立て手順は次のとおりです。

  1. 更新ツール/root/bin/loadupdate.shをダウンロードします。
  2. OSの再起動中にシステムの更新を無効にします。/etc/sysconfig/MagOSおよび/mnt/livemedia/MagOS.iniファイルで変数AUTOUPDATE = Noを設定します。
  3. .bak拡張子を追加して、更新されたモジュールと後続のすべてのモジュールの名前を変更します(他の拡張子は許可されません)。
  4. モジュールをビルドします。要求に応じて、モジュールをmagos-serverサーバーに保存します。
  5. 変更を正しく有効にするためにコンピューターを再起動します。
  6. 後続のすべてのモジュールに対して手順3〜5を繰り返します。

新しいプログラムをインストールする方法

プログラムの検索、インストール、および構成の方法は次のとおりです。



オペレーティングシステムが更新されたモジュールが最も簡単です。更新の数は、配布リリース以降の経過時間によって異なります。更新回数が重要になる場合は、iso分布イメージの更新を検討する必要があります。更新は手動モードでのみ実行され、他のすべてのモジュールの再アセンブリが必要になるため、更新期間はシステム管理者の裁量に任されています。

スクリプト99-u10-update.sh
 #!/bin/sh . conf/devel.conf NAME=`echo $0 | sed 's/\.\///'| sed 's/\..*//'` . lib/mv.sh $NAME epm2xzm $NAME upgrade $NAME.xzm rm -rf $NAME mkdir $NAME xzm2dir $NAME.xzm $NAME . lib/delhlam.sh $NAME dir2xzm $NAME $NAME.xzm . lib/update.sh $NAME 


Officeソフトウェアインストールモジュール

このモジュールには、サービスアカウントの作成を必要としないエンドユーザー向けのアプリケーションが含まれています。アプリケーションのリストはそれほど大きくはありませんが、多数の依存パッケージがあるため、このモジュールは非常に大きくなっています。

スクリプト99-u10-office4.sh
 #!/bin/sh . conf/devel.conf NAME=`echo $0 | sed 's/\.\///'| sed 's/\..*//'` . lib/mv.sh $NAME epm2xzm $NAME -i 'java-1.7.0-openjdk LibreOffice4-langpack-ru LibreOffice4-integrated file-roller LibreOffice4 LibreOffice4-gnome foomatic-db lsof foo2zjs foo2zjs-apps foo2zjs-fwdownloader mozilla-plugin-adobe-flash mozilla-plugin-mozplugger mozilla-plugin-totem totem-plugins fonts-ttf-ms' rm -rf $NAME mkdir $NAME xzm2dir $NAME.xzm $NAME rm -rf $NAME/etc/urpmi $NAME/etc/.java . lib/delhlam.sh $NAME dir2xzm $NAME $NAME.xzm . lib/update.sh $NAME 


ユーティリティとサーバーを備えたモジュール

このモジュールには、ユーザーサービスレコードとその依存コンポーネントの作成を必要とするすべてのユーティリティとサーバーが含まれています。次のユーティリティの一部をオフィスモジュールに転送することは非常に可能ですが、プログラムの重要なリストにもかかわらず、インストールされたプログラムの総数とインストール中に消費されるリソースは3ギガバイトを超えません。

プログラムを実際にインストールすることに加えて、オペレーティングシステムの一部の要素とインストールされたプログラムは、インストールスクリプトで直接構成されます。

このアプローチにより、構成ファイルの形式に変更が生じた場合、または構成ファイルのデフォルト設定が表示/変更された場合に、プログラムの更新バージョンにより正確に対応することができます。このような場合、このメカニズムは、修正された完成した構成ファイルを最終設定でモジュールに入れるよりも望ましい方法です。次に、構成設定を変更すると、モジュールの作成または更新中に構成設定がまったく検出されないという大きなリスクがあります。

使用したソフトウェアスイートについてのいくつかの言葉。コンピューターソフトウェアには、特定の要件やタスクは含まれていません。エンタープライズシステムは、アプリケーションのイントラネットレベルに移行しました。コンピューターはシンクライアントとタイプライターです。

スクリプト99-u20-utils.sh
 #!/bin/sh . conf/devel.conf NAME=`echo $0 | sed 's/\.\///'| sed 's/\..*//'` . lib/mv.sh $NAME epm2xzm $NAME -i 'samba samba-winbind alterator-auth cups-windows samba-client ntpdate ntp-utils zabbix-agent zabbix-agent-sudo perl-FusionInventory-Agent perl-FusionInventory-Agent-scripts perl-Task-FusionInventory perl-Pod-Text-Ansi alterator-fbi alterator-net-iptables italc2-client installer-feature-init-italc rsync tcpdump nmap netcat telnet sane sane-server xsane xsane-gimp2 sane-frontends yagf cuneiform cuneiform-data fonts-otf-gdouros-akkadian aspell-ru-lebedev aspell-ru-rk iperf whois rdesktop xfreerdp remmina-plugins sshpass pssh' rm -rf $NAME mkdir $NAME xzm2dir $NAME.xzm $NAME cp /usr/share/zoneinfo/Asia/Krasnoyarsk $NAME/etc/localtime cp /etc/nsswitch.conf $NAME/etc/nsswitch.conf sed -is/'^hosts: files mdns4_minimal \[NOTFOUND=return\]*'/'hosts: files dns mdns4_minimal \[NOTFOUND=return\] myhostname fallback'/ $NAME/etc/nsswitch.conf sed -is/'^# PidFile=\/var'/'PidFile=\/var'/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'^# EnableRemoteCommands=0'/'EnableRemoteCommands=1'/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'^LogFileSize='/'# LogFileSize='/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'127.0.0.1'/'192.168.0.XXX'/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'^# LogRemoteCommands=0'/'LogRemoteCommands=1'/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'^Hostname='/'# Hostname='/ $NAME/etc/zabbix/zabbix_agentd.conf sed -is/'^# Timeout=3'/'Timeout=30'/ $NAME/etc/zabbix/zabbix_agentd.conf mkdir $NAME/etc/fusioninventory echo "server = http://glpi.kompany.local/glpi/plugins/fusioninventory/" > $NAME/etc/fusioninventory/agent.cfg echo "delaytime = 3600" >> $NAME/etc/fusioninventory/agent.cfg echo "timeout = 180" >> $NAME/etc/fusioninventory/agent.cfg echo "logger = File" >> $NAME/etc/fusioninventory/agent.cfg echo "logfile = /var/log/fusioninventory.log" >> $NAME/etc/fusioninventory/agent.cfg echo "logfacility = LOG_USER" >> $NAME/etc/fusioninventory/agent.cfg echo "debug = 3" >> $NAME/etc/fusioninventory/agent.cfg mkdir $NAME/etc/cron.daily echo "#!/bin/sh" > $NAME/etc/cron.daily/fusioninventory-agent echo "" >> $NAME/etc/cron.daily/fusioninventory-agent echo "/usr/bin/fusioninventory-agent --conf-file=/etc/fusioninventory/agent.cfg" >> $NAME/etc/cron.daily/fusioninventory-agent chmod +x $NAME/etc/cron.daily/fusioninventory-agent . lib/delhlam.sh $NAME dir2xzm $NAME $NAME.xzm . lib/update.sh $NAME 


この場合、値はディストリビューションキットのデフォルト値とは異なるため、タイムゾーン設定はこの構成ファイルで実行され、指定されたMagOSパラメーターの標準設定は正しく機能しません(cp / usr / share / zoneinfo / Asia / Krasnoyarsk $ NAME / etc / localtime)。

AltLinuxディストリビューションの設定で奇妙なエラーが修正されています。ローカルネットワークのドメイン名がlocal(cp /etc/nsswitch.conf $ NAME / etc / nsswitch.conf sed -is / 'で終わる場合、ローカルネットワーク上のコンピューターの名前は解決されません。 ^ホスト:ファイルmdns4_minimal \ [NOTFOUND = return \] * '/'ホスト:ファイルdns mdns4_minimal \ [NOTFOUND = return \] myhostname fallback '/ $ NAME / etc / nsswitch.conf)。

構成ファイルzabbix_agentdが構成されます。これにより、ユーザーのコンピューターのステータスをリアルタイムで監視できます。これは、ダウンタイムを削減するのに十分重要です。

fusioninventory-agentの構成ファイルは、GLPIテクニカルサポート自動化システムと連携して動作し、機器およびソフトウェアの自動インベントリを可能にするユーティリティです。

システム設定モジュール

システム設定モジュールにはインストールされたプログラムは含まれておらず、モジュールカタログの単なるパッカーです。これは主な関心事です。

スクリプト99-u99-default.sh
 #!/bin/sh . conf/devel.conf NAME=`echo $0 | sed 's/\.\///'| sed 's/\..*//'` . lib/mv.sh $NAME dir2xzm $NAME $NAME.xzm . lib/update.sh $NAME 

etc / moduleディレクトリには、次のディレクトリと構成ファイルが含まれます。

sudoers
 -r-------- 1 root root 730 Aug 20 15:42 ./sudoers 


パスワードなしで管理者にsudo操作を許可するための行が入力されました(sshプロトコルを使用して並列操作を実行するために必要)。

X11
 ./X11: total 8 drwxr-xr-x 2 root root 4096 Aug 21 12:42 xinit drwxr-xr-x 2 root root 4096 Aug 21 12:42 xorg.conf.d 


事前設定されたキーボードロケールスイッチ:

etc / X11 / xinit / Xkbmap
 option grp:alt_shift_toggle -variant , -layout us,ru -model pc104 


キーボードのセットアップ:

etc / X11 / xorg.conf.d / 00-keyboard.conf
 # Read and parsed by systemd-localed. It's probably wise not to edit this file # manually too freely. Section "InputClass" Identifier "system-keyboard" MatchIsKeyboard "on" Option "XkbLayout" "us,ru" EndSection 


./apt
 total 8 drwxr-xr-x 2 root root 4096 Jun 9 09:45 sources.list.d drwxr-xr-x 2 root root 4096 Jun 9 09:42 vendors.list.d 


fusioninventory-agentをインストールするための自動インポートリポジトリが追加されました。

etc / apt / sources.list.d / autoimports-p7.list
 rpm [cronbuild] ftp://ftp.altlinux.ru/pub/distributions/ALTLinux/autoimports/Sisyphus/ noarch autoimports /etc/apt/vendors.list.d/autoimports-p7.list simple-key "cronbuild" { Fingerprint "DE73F3444C163CCD751AC483B584C633278EB305"; Name "Cronbuild Service <cronbuild@altlinux.org>"; } simple-key "cronport" { Fingerprint "F3DBF34AB0CC0CE638DF7D509F61FBE7E2C322D8"; Name "Cronport Service <cronport@altlinux.org>"; } 


./italc
 total 4 drwxr-xr-x 3 root root 4096 Jul 17 18:19 keys 


italcプログラムのキーがインストールされます。

./lightdm
 total 12 -rw-r--r-- 1 root root 909 Jun 8 13:03 lightdm-gtk-greeter.conf -rw-r--r-- 1 root root 4536 Jun 8 13:18 lightdm.conf 


自動ログインモードが無効になり、追加の設定が行われます。

etc / lightdm / lightdm-gtk-greeter.conf
 [greeter] logo=/usr/share/design/current/icons/large/altlinux.png background=/usr/share/design/current/backgrounds/default.png icon-theme-name=gnome show-language-selector=false show-indicators=a11y;power 


etc / lightdm / lightdm.conf
 [LightDM] minimum-vt=7 user-authority-in-system-dir=true log-directory=/var/log/lightdm run-directory=/var/run/lightdm cache-directory=/var/cache/lightdm xsessions-directory=/etc/lightdm/sessions [SeatDefaults] xserver-command=/usr/bin/X greeter-hide-users=true session-wrapper=/etc/X11/Xsession [XDMCPServer] [VNCServer] 

./net
 total 8 drwxr-xr-x 3 root root 4096 Jul 16 12:35 ifaces -rw-r--r-- 1 root root 1987 Jul 16 12:44 sysctl.conf 


ネットワークインターフェイスとファイアウォールは事前に構成されています。

./pam.d
 total 4 -rw-r----- 1 root root 237 Aug 24 11:28 reboot 


etc / pam.d / reboot
 auth required pam_nologin.so auth sufficient pam_rootok.so auth sufficient pam_console.so #auth required pam_deny.so auth required pam_permit.so account required pam_permit.so password required pam_deny.so 


./skel
 total 16 drwxr-xr-x 8 root root 4096 Jun 8 16:17  drwxr-xr-x 2 root root 4096 Jun 8 16:17  drwxr-xr-x 2 root root 4096 Jun 8 16:17  drwxr-xr-x 2 root root 4096 Jun 8 16:17   


skelディレクトリには、環境およびユーザープログラムの事前設定を実行するファイルが含まれています。

./sysconfig:
 total 8 -rw-r–r– 1 root root 75 Jun 8 13:11 i18n 


etc / sysconfig / i18n
 SYSFONT=UniCyr_8x16 LANG=ru_RU.utf8 


./systemd
 total 8 drwxr-xr-x 5 root root 4096 Aug 20 18:52 system drwxr-xr-x 2 root root 4096 Aug 20 18:51 user 


デフォルトで起動されるか、配布キットにないサービスの設定は完了しました。

./xdg
 total 4 drwxr-xr-x 2 root root 4096 Jul 17 17:59 iTALC Solutions 


Italcは、元の構成とは異なる構成で使用されます。構成ファイルの多くのパラメーターが変更されるため、構成ファイルは単にデフォルトモジュールに配置されました。

/ etc / xdg / iTALCソリューション/ iTALC.conf
 [Authentication] KeyAuthenticationEnabled=1 LogonAuthenticationEnabled=0 LogonGroups="italc-admins,italc-supporters,italc-teachers,italc-students" PermissionRequiredWithKeyAuthentication=0 PermissionRequiredWithLogonAuthentication=0 PrivateKeyBaseDir=$GLOBALAPPDATA/keys/private PublicKeyBaseDir=$GLOBALAPPDATA/keys/public SameUserConfirmationDisabled=0 [DemoServer] Backend=0 Multithreaded=1 [Logging] LimittedLogFileSize=0 LogFileDirectory=$TEMP LogFileSizeLimit=-1 LogLevel=4 LogToStdErr=1 LogToWindowsEventLog=0 [Network] CoreServerPort=11100 DemoServerPort=11400 FirewallExceptionEnabled=1 HttpServerEnabled=0 HttpServerPort=5800 [Paths] GlobalConfiguration=$APPDATA/GlobalConfig.xml PersonalConfiguration=$APPDATA/PersonalConfig.xml SnapshotDirectory=$APPDATA/Snapshots [Service] Arguments= Autostart=1 HideTrayIcon=0 LockWithDesktopSwitching=1 [VNC] CaptureLayeredWindows=1 LowAccuracy=1 PollFullScreen=1 


スクリプト


システムを設計するとき、システム管理の自動化に特別な注意が払われました。その目的は、その後のメンテナンスの人件費を削減することでした。この目的のために、追加のスクリプトのセットが作成されました。これらは条件付きで2つのカテゴリに分類できます。メンテナンスとシステム管理を自動化するスクリプトとモジュールを作成するスクリプトです。モジュール保守スクリプトの主要部分については上記で説明しましたが、ここで説明するライブラリ部分は「オーバーボード」のままです。

Magos-patchesアドオン

産業用の操作では、MagOSを使用するためのタスクと条件がわずかに異なるため、MagOSコア自体の操作を自動化する手段が必要です。以下のスクリプトは、理論的にはMagOSパッチに組み込まれるべきですが、ここではそれらを個別に検討します。

起動スクリプト

スクリプト/usr/lib/magos/rc.halt/05-update.shは、コンピューターの電源を切るか再起動すると、オペレーティングシステムを自動的に更新するように設計されています。スクリプトが機能するために、3つのパラメーターがMagOS.ini構成ファイルに追加されました。

/usr/lib/magos/rc.halt/05-update.sh
 #     : Yes, No AUTOUPDATE=Yes #     : boot - UPDATE=AltLinux,boot #        rsync SRCUPDATE=192.168.1.XXX/magos 


ここで:AUTOUPDATEパラメーターは、電源がオフになったときに更新するかどうかを示します。UPDATE-更新が実行されるディレクトリの列挙。

SRCUPDATE-更新が実行されるサーバーアドレスとリポジトリ。アドレスは、IPアドレスまたはDNSサーバーの名前として指定できます。
ユーザーのコンピューターにオペレーティングシステムをインストールするときに、同じパラメーターが関係します。

スクリプトのソースコード:

/usr/lib/magos/rc.halt/05-update.sh
 #!/bin/bash # Initial script for MagOS-Linux Live operating system # This script are launching before starting init from linux-live script. # Current dir always must be set to root (/) # All system path must be relative, except initrd dirs export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin ENABLED=yes . /mnt/live/liblinuxlive [ -f /etc/sysconfig/MagOS ] && . /etc/sysconfig/MagOS #. etc/sysconfig/MagOS [ "$ENABLED" != "yes" ] && exit 0 [ "$AUTOUPDATE" != "Yes" or "$AUTOUPDATE" != "yes" ] && exit 0 [ -z "$UPDATE" -a -z "$SRCUPDATE" ] && exit 0 [ -z "$(grep changes /memory/cmdline)" ] && exit 0 [ -n "$(grep 'from=http:' /memory/cmdline)" ] && exit 0 if ! [ -z "$UPDATE" ] ;then for dirs in $(echo $UPDATE | tr ',;' ' ') ;do rsync -azr --delete --exclude=MagOS.ini rsync://$SRCUPDATE/$dirs/ /mnt/livemedia/$dirs/ done fi 


NTPサーバーを構成する既存のスクリプト/usr/lib/magos/rc.preinit.d/21-ntpの修正が実行されました。どうやら、この部分は特にAltLinuxディストリビューションに依存しているため、将来修正される可能性があります。

/usr/lib/magos/rc.preinit.d/21-ntp
 #!/bin/bash # Initial script for MagOS-Linux Live operating system # This script are launching before starting init from linux-live script. # Current dir always must be set to root (/) # All system path must be relative, except initrd dirs export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin ENABLED=yes [ "$ENABLED" != "yes" ] && exit 0 DEBUGMODE=no . /liblinuxlive 2>/dev/null || . /mnt/live/liblinuxlive . /livekitlib 2>/dev/null debug_mode "$0" "$@" . etc/sysconfig/MagOS if ! [ -z "$NTPSERVERS" ] ;then sed -is/'^server'/'#server'/ etc/ntp.conf sed -is/'^server'/'#server'/ etc/ntpd.conf for a in $(echo $NTPSERVERS | tr ',;' ' ') ;do sed -i '/^driftfile/ s/^/server '"$a"\\n/ etc/ntp.conf grep -q "restrict $a" etc/ntp.conf || echo "restrict $a noquerry notrap" >> etc/ntp.conf sed -is/'^#listen on 127.0.0.1'/'listen on 127.0.0.1'/ etc/ntpd.conf echo "server $a" >> etc/ntpd.conf done fi 


OSインストールスクリプト

特別なスクリプトを使用してOSをインストールすると、すべてのインストールで統一性を実現し、この作業を実行する技術者のミスを排除し、このプロセスを何度も高速化できます。

スクリプト/usr/share/magos/install/magosinstall.shは特殊です。ハードディスクパーティションの作成とフォーマットを実行します。リポジトリセクションをmagos-serverサーバーからコンピューターのローカルドライブにコピーし、ブートローダーをインストールします。

/usr/share/magos/install/magosinstall.sh
 #!/bin/bash # #Usage: # $1 - source catalog: magos testing # Default is magos SRC="magos" . /etc/sysconfig/MagOS SRCINI=$(echo $SRCUPDATE | cut -d "/" -f 2) if ! [ -z "$SRCINI" ];then SRC=$SRCINI fi if ! [ -z "$1" ] ;then SRC=$1 fi echo "-------------------------------------------------------" echo "INSTALL MagOS Altlinux FROM HARD DISK from $SRC !!!" echo " =========" echo echo "Press Enter to continue, or Ctrl+C to abort..." read junk clear swapoff -a echo "=======================================================" echo "Create parition table." parted -s /dev/sda mklabel msdos parted -s /dev/sda mkpart primary ext3 1 30000 parted -s /dev/sda mkpart primary linux-swap 30000 36000 parted -s /dev/sda mkpart primary ext3 36000 100% parted -s /dev/sda toggle 1 boot echo "-------------------------------------------------------" echo "=======================================================" echo "Make file systems on /dev/sda1." mkfs.ext3 -L system /dev/sda1 echo "Make file systems on /dev/sda2." mkswap /dev/sda2 echo "Make file systems on /dev/sda3." mkfs.ext3 -L data /dev/sda3 echo "-------------------------------------------------------" echo "=======================================================" mkdir /media/system && mount /dev/sda1 /media/system mkdir /media/data && mount /dev/sda3 /media/data echo "Syncing instalation data." for dirs in $(echo $UPDATE | tr ',;' ' ') ;do srv=$(echo $SRCUPDATE | cut -d '/' -f 1) if [ "$dirs" != "boot" ] ;then mkdir /media/system/$dirs rsync -azr --delete rsync://$srv/$SRC/$dirs/ /media/system/$dirs/ mkdir /media/data/$dirs-Data rsync -azr --delete rsync://$srv/$SRC/$dirs-Data/ /media/data/$dirs-Data/ else mkdir /media/system/$dirs rsync -azr --delete rsync://$srv/$SRC/$dirs/ /media/system/$dirs/ fi done rm -rf /media/system/lost+found /media/data/lost+found cd /media/system/boot/ bash ./Install_MagOS.bat $(sync) umount /dev/sda1 && rmdir /media/system umount /dev/sda3 && rmdir /media/data echo "-------------------------------------------------------" echo "Instalation is OK." echo "please reboot computer." 


スクリプトテキストから、OSがインストールされているメインパーティションに30 Gbが割り当てられ、スワップ用に6 Gbが割り当てられ、残りは変更およびホームを含むデータセクション用に予約されていることがわかります。これまでのところ、これらのパラメーターを構成ファイルに、または少なくともファイルの先頭に配置できる変数は使用されていません。

スクリプトへのパスが誤って難しく選択されることはありません。これにより、プログラムが誤って起動するのを防ぐことができます。

ADの包含スクリプト

ADSでコンピューターの電源を入れる方法は、オペレーティングシステムによって異なります。このタスクを完了するために、AltLinuxは独自のプログラムを作成しました。ただし、その機能は非常に大きく、この操作の実行を簡素化するために、独自のスクリプトが実装されました。 2つのスクリプトがあり、1つはコンソールモードで接続し、2つ目はTCLを使用してグラフィカルモードで動作します。グラフィックもテスト済みですが、コンソールモードを使用することをお勧めします。

オペレーティングシステムをインストールすると、コンピューターのホスト名はMagOSになります。コンピューターの大量インストールでは、特にコンピューターがADに含まれている場合、これは重要です。したがって、スクリプトは2つの問題を同時に解決します。コンピューターの名前を変更し、ADに含めることです。

短いメモ:コンピューター名はMagOS.iniファイルでは定義されていませんが、これらのスクリプトを使用して/ etc / sysconfig / magosファイルに直接入力されます。オペレーティングシステムの起動時に実行される他のすべてのMagOSスクリプトは、ファイル/ etc / sysconfig / magosのコンピューター名を使用します。

/usr/share/magos/ad_join/ad_join.pl
 #!/usr/bin/perl -w # MagOS-linux.ru # Author M.Fiskov use strict; #use Glib qw/TRUE FALSE/; #use Gtk3 '-init'; my $hostname=''; my $username=''; my $password=''; my $domain='mydomain'; my $realm='mydomain.local'; for (my $i=0;$i<=$#ARGV;$i++){ $_=$ARGV[$i]; (/^--help$/) && do {&usage(); exit 0}; (/^--hostname=/) && do { ($hostname=$ARGV[$i])=~s/^--hostname=//; }; (/^-h$/) && do {$hostname=$ARGV[$i+1];$i++;}; (/^--password=/) && do { ($password=$ARGV[$i]) =~s/^--password=//; }; (/^-p$/) && do {$password=$ARGV[$i+1];$i++;}; (/^--username=/) && do { ($username=$ARGV[$i]) =~s/^--username=//; }; (/^-u$/) && do {$username=$ARGV[$i+1];$i++;}; } if (open (F1,"</etc/altlinux-release") ) { close F1; &addname($hostname) && system("system-auth write ad $realm $hostname $domain $username $password") && system("systemctl restart nm b") && system("systemctl restart winbind") && system("systemctl restart smb"); &wins(); &winbind(); }else{ &addname($hostname) && system("net join -U \"".$username.'%'.$password."\"") && system("systemctl restart nmb") && system("systemct l restart winbind") && system("systemctl restart smb"); &wins(); &winbind(); }; #system("/sbin/reboot"); exit; sub usage(){ print "Join this computer from MagOS to Active Directory Service (ADS) -h or --hostname= Computer name -u or --username= ADS administrator user name -p or --password= ADS administrator password --help This usage " } sub wins(){ my @wins=split("\"",`/usr/bin/wbinfo -P`); system ("sed -i '/wins server = /d' /etc/samba/smb.conf"); my $wsed=sprintf("sed -i \'/\\[global\\]/ s/\$/\\nwins server = ".$wins[1]."\'/ /etc/samba/smb.conf"); system ($wsed); my $wgroup=sprintf("net groupmap add ntgroup=\" \" unixgroup=wheel rid=512 type=d"); system ($wgroup); $wgroup=sprintf("net groupmap add ntgroup=\" \" unixgroup=wheel rid=513 type=d"); system ($wgroup); $wgroup=sprintf("net groupmap add ntgroup=\" \" unixgroup=wheel rid=514 type=d"); system ($wgroup); } sub addname (){ my ($hostname)=@_; system ("sed -i '/netbios name =/d' /etc/samba/smb.conf"); my $ssed=sprintf("sed -i \'/\\[global\\]/ s/\$/\\n netbios name = ".$hostname."\'/ /etc/samba/smb.conf"); system ($ssed); system ("sed -i '/HOSTNAME/d' /etc/sysconfig/MagOS"); $ssed=sprintf("echo \"HOSTNAME=$hostname\" >>/etc/sysconfig/MagOS"); system ($ssed); system("hostnamectl set-hostname $hostname"); return 1; } sub winbind(){ system ("sed -is/'server string ='/';server string ='/ /etc/samba/smb.conf"); system ("sed -i '/idmap backend = /d' /etc/samba/smb.conf"); my $wsed=sprintf("sed -i \'/\\[global\\]/ s/\$/\\nidmap config $domain : backend = ad\'/ /etc/samba/smb.conf"); system ($wsed); system ("sed -i '/winbind cache time /d' /etc/samba/smb.conf"); $wsed=sprintf("sed -i \'/\\[global\\]/ s/\$/\\nwinbind cache time = 1440\'/ /etc/samba/smb.conf"); system ($wsed); } 


ドメイン名とレルムは、変数$ domainおよび$ realmのスクリプトで直接指定されることに注意してください。おそらくこれは正しい決定ではありません...

/usr/share/magos/ad_join/ad_join_x.pl
 #!/usr/bin/perl -w # MagOS-linux.ru # Author M.Zaripov # No testing use strict; use Glib qw/TRUE FALSE/; use Gtk3 '-init'; #standard window creation, placement, and signal connecting my $window = Gtk3::Window->new('toplevel'); $window->signal_connect('delete_event' => sub { Gtk3->main_quit; }); $window->set_border_width(5); $window->set_position('center_always'); #this vbox will geturn the bulk of the gui my $vbox = &ret_vbox(); #add and show the vbox $window->add($vbox); $window->show(); #our main event-loop Gtk3->main(); sub ret_vbox { my $vbox = Gtk3::VBox->new(FALSE,5); $vbox->pack_start ("Gtk3::Label"->new (" Please input password to join into domain "), 0, 0, 0); # create table with 2 entries my $table1 = Gtk3::Table->new (5, 2, FALSE); my $t1l0 = Gtk3::Label->new_with_mnemonic("Domain: "); $t1l0->set_alignment (0, 0); $table1->attach_defaults ($t1l0, 0, 1, 0, 1); my $t1e0 = Gtk3::Entry->new(); $table1->attach_defaults ($t1e0, 1, 2, 0, 1); my $t1l0 = Gtk3::Label->new_with_mnemonic("workgroup: "); $t1l0->set_alignment (0, 0); $table1->attach_defaults ($t1l0, 0, 1, 1, 2); my $t1e1 = Gtk3::Entry->new(); $table1->attach_defaults ($t1e0, 1, 2, 1, 2); my $t1l0 = Gtk3::Label->new_with_mnemonic("computer name: "); $t1l0->set_alignment (0, 0); $table1->attach_defaults ($t1l0, 0, 1, 2, 3); my $t1e2 = Gtk3::Entry->new(); $table1->attach_defaults ($t1e0, 1, 2, 2, 3); my $t1l1 = Gtk3::Label->new_with_mnemonic("Domain Admin User Name: "); $t1l1->set_alignment (0, 0); $table1->attach_defaults ($t1l1, 0, 1, 3, 4); my $t1e3 = Gtk3::Entry->new(); $table1->attach_defaults ($t1e1, 1, 2, 3, 4); my $t1l2 = Gtk3::Label->new_with_mnemonic("Domain Admin Password: "); $t1l2->set_alignment (0, 0); $table1->attach_defaults ($t1l2, 0, 1, 4, 5); my $t1e4 = Gtk3::Entry->new(); $t1e2->set_visibility (FALSE); $table1->attach_defaults ($t1e2, 1, 2, 4, 5); $vbox->pack_start($table1, 0, 0 ,0); #$vbox->pack_end(Gtk3::HSeparator->new(),0, 0 ,0); # create table with 2 buttons my $table2 = Gtk3::Table->new (1, 2, FALSE); my $t2b1 = Gtk3::Button->new ('Join'); $table2->attach_defaults ($t2b1, 0, 1, 0, 1); my $t2b2 = Gtk3::Button->new ('Cancel'); $table2->attach_defaults ($t2b2, 1, 2, 0, 1); $t2b2->signal_connect (clicked => sub { Gtk3->main_quit; }); if (open (F1,"</etc/altlinux-release") ) { close F1; $t2b1->signal_connect (clicked => sub { &addname($t1e2->get_text()) || system("system-auth write ad ".$t1e0->get_text().'%'.$t1e0->get_text()." ".#domain $t1e2->get_text().'%'.$t1e2->get_text()." ".# hostname $t1e1->get_text().'%'.$t1e1->get_text()." ".# workgroup $t1e3->get_text().'%'.$t1e3->get_text()." ".# username $t1e4->get_text().'%'.$t1e4->get_text()."\"") # password || system("systemctl restart nmb") || system("systemctl restart winbind") || system("systemctl restart smb") || exit (1); }); }else{ $t2b1->signal_connect (clicked => sub { &addname($t1e2->get_text()) #hostname || system("net join -U \"". $t1e3->get_text().'%'. # username $t1e4->get_text()."\"") # password || system("systemctl restart nmb") || system("systemctl restart winbind") || system("systemctl restart smb") || exit (1); }); } $vbox->pack_start($table2, 0, 0 ,0); $vbox->show_all(); return $vbox; } sub addname (){ my ($hostname)=@_; system ("sed -i '/netbios name =/d' /etc/samba/smb.conf"); my $ssed=sprintf("sed -i \'/\\[global\\]/ s/\$/\\n netbios name = ".$hostname."\'/ /etc/samba/smb.conf"); system ($ssed); system ("sed -i '/HOSTNAME/d' /etc/sysconfig/MagOS"); $ssed=sprintf("echo \"HOSTNAME=$hostname\" >>/etc/sysconfig/MagOS"); system ($ssed); system("hostnamectl set-hostname $hostname"); return 1; } 


ドメインにコンピューターを入力する操作があるため、ドメインから出力する操作が必要です。しかし、MagOSの場合、これは必要ありません。このためには、変更で対応するファイルを削除するだけで十分です。

ADの問題を修正する

コンピューターをADSに接続した後、このような問題を発見しました。コンピューターをロードした後、winbindはユーザーやグループのリストを含むADに関する情報でキャッシュを埋めるのに長い時間がかかります。同時に、内部スケジュールに従ってフリーズおよび再起動する場合がありますが、これには多くの時間がかかります(最大で30分)。この問題は、ADの内部構造の組織に関連している場合もあれば、すべての実装に共通している場合もあります。十分に空のADデータベースには問題がないことがわかっているだけです。しかし、このような問題があり、それを解決するために、次の「松葉杖」が発明されました。

経験的に、ADドメインを検出した後にwinbindを再起動すると、問題の解決に役立つことが明らかになりました。したがって、次のプログラムはsystemdを介してサービスとして起動し、winbindドメインの検出を監視してから、winbindを再起動して終了します。ユーザーのリストのコンパイルの遅延は、この場合、1〜2分です。ユーザーが自分の名前とパスワードをすぐに入力しないと、実際にはこの問題の存在に気付きません。

別の機能が同じスクリプトに割り当てられます-magos-patchesに存在するスクリプトはMagOS.iniで指定された1人のユーザーのホームフォルダーのみを更新するため、ADユーザーのホームフォルダーのシステムファイルを更新します-システム管理者、および仮想ユーザーフォルダーの更新はまったく提供されません。このスクリプトは、ドメインユーザーのホームフォルダーにない非表示のシステムファイルとディレクトリを/ etc / skelフォルダーからコピーし、フォルダーの所有者権限を割り当てます。したがって、ユーザーのホームフォルダーの設定を更新するには、対応するファイルを削除し、winbind-restartスクリプトを使用してサービスを再起動する必要があります。正しい操作に必要な条件は、指定された時間にシステムにユーザーが登録されていないことです。

ただし、コンピューターユーザーの設定を更新するサービスとしてのスクリプトを改善する必要があることに注意してください。

/ usr / sbin / winbind-restart
 #!/bin/bash export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin while [ "$(wbinfo --online-status | grep -i mydomain | cut -d ":" -f 2)" != " online" ] do $(sleep 1) done $(systemctl restart winbind) . etc/sysconfig/MagOS # update home folders from domain users if [ "$UPDATEHOME" = "yes" ] ;then DOMAIN=$(wbinfo --own-domain) if [ -d home/$DOMAIN ] ;then for LISTUSER in $(ls -1 home/$DOMAIN/); do $(cp -rHun etc/skel/.[a-zA-Z0-9]* home/$DOMAIN/$LISTUSER/) $(chown -R $LISTUSER:\  home/$DOMAIN/$LISTUSER/) done fi fi 


/etc/systemd/user/winbindrestart.service
 [Unit] Description=Samba Winbind Daemon restart from mydomain After=winbind.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/sbin/winbind-restart [Install] WantedBy=multi-user.target 


システム管理(/ root / bin)

これらのスクリプトは、産業用アプリケーション向けのAltLinuxディストリビューションに基づいてMagOSシステムを制御するように設計されています。
何らかの理由でOSの強制更新が必要な場合、次の2つのスクリプトが使用されます。最初のものはオペレーティングシステムを更新し、2番目のものは設定ファイルMagOS.iniを更新します。

オペレーティングシステム/root/bin/updatemagos.shを強制的に更新するためのスクリプト。操作が完了すると、オペレーティングシステムの自動オーバーロードが続きます。

/root/bin/updatemagos.sh
 #!/bin/bash echo "Update MagOS from Hard Disk to this computer!!!" echo echo "Press Enter to continue, or Ctrl+C to abort..." read junk clear export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin SRC=192.168.1.XXX/magos DEFAULT="AltLinux,boot" . /mnt/live/liblinuxlive [ -f /etc/sysconfig/MagOS ] && . /etc/sysconfig/MagOS [ -z "$UPDATE" -a -z "$SRCUPDATE" ] && UPDATE=$(echo "$DEFAULT") && SRCUPDATE="$SRC" if ! [ -z "$UPDATE" ] ;then for dirs in $(echo $UPDATE | tr ',;' ' ') ;do rsync -azr --delete rsync://$SRCUPDATE/$dirs/ /mnt/livemedia/$dirs/ done fi reboot 


/root/bin/updateini.sh
 #!/bin/bash # This script getting file MagOS.ini from magos server to this computer SRCI="magos-server/magos" SRC="magos" srv="magos-server" . /etc/sysconfig/MagOS export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin echo "Update MagOS.ini from Hard Disk!!!" [ -z "$SRCUPDATE" ] && SRCUPDATE="$SRCI" SRCINI=$(echo $SRCUPDATE | cut -d "/" -f 2) [ -n "$SRCUPDATE" ] && srv=$(echo $SRCUPDATE | cut -d '/' -f 1) if ! [ -z "$SRCINI" ];then SRC=$SRCINI fi if ! [ -z "$1" ] ;then SRC=$1 fi rsync -az rsync://$srv/$SRC/AltLinux/modules/i586/MagOS.ini /mnt/livemedia/AltLinux/modules/i586/MagOS.ini 


/root/bin/mnt.shは、ディスクをユーザーデータおよびオペレーティングシステムの保存に接続するための非常に単純な補助スクリプトです。

/root/bin/mnt.sh
 #!/bin/sh # mount data disk from /srv mount /dev/sda3 /srv #groupadd -g 501 magos #groupadd -g 502 testing 


loadupdateおよびsaveupdateスクリプトは、MagOSサーバーからテストマシンにモジュールとモジュールオリジナルを生成するためのスクリプトをロードし、それらに変更を加えた後にサーバーにアップロードするように設計されています。

/root/bin/saveupdate.sh
 #!/bin/bash # # This script save update folder from this computer to magos server # Fiskov MM export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin ENABLED=yes [ "$ENABLED" != "yes" ] && exit 0 . /usr/lib/magos/scripts/liblinuxlive . /etc/sysconfig/MagOS . /mnt/livemedia/update/conf/devel.conf PWD=$(echo $(pwd)) cd /mnt/livemedia/update mkdir /root/tmp/update cp -r /mnt/livemedia/update/{*.sh,lib,conf} /root/tmp/update/ for files in $(echo $(ls 9*.sh| cut -d '.' -f 1)) ;do cp /mnt/livemedia/$DISTNAME/modules/$ARCH/$files.xzm /root/tmp/update/ done cd /root/tmp tar -czf /mnt/livemedia/update.tar.gz ./update cd /mnt/livemedia/ scp /mnt/livemedia/update.tar.gz $USER@$SERVER:/var/www/$DISTTYPE/ rm -rf /root/tmp/update cd $PWD 


/root/bin/loadupdate.sh
 #!/bin/bash # # This script load update folder from magos server to this computer # export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/magos/scripts ENABLED=yes [ "$ENABLED" != "yes" ] && exit 0 PWD=$(echo $(pwd)) . /etc/sysconfig/MagOS rsync -az rsync://$SRCUPDATE/update.tar.gz /mnt/livemedia/update.tar.gz cd /mnt/livemedia/ tar -xzf update.tar.gz cd /mnt/livemedia/update for files in $(echo $(ls 9*.sh| cut -d '.' -f 1)) ;do mkdir $files xzm2dir $files.xzm $files done cd $PWD 


OSメンテナンススクリプト

オペレーティングシステムのサービスプロセスでは、たとえば、すべてのコンピューターで一度にコマンドを実行するなど、コンピューターの大量サービスのタスクが発生します。この問題を解決するためのオプションの1つは、sshプロトコルを使用し、そこで対応するコマンドを実行するコンピューターへの並列アクセスです。 hostalt-create.shスクリプトは普遍的ではなく、AltLinuxアセンブリに基づいてMagOSがインストールされているコンピューターのリストをコンパイルすることを目的としています。コンピューターを検出するには、名前の末尾が-aである必要があります。コンピューターのリストが保持されるため、徐々に拡張できます。

一般に、このソリューションは電源が入っているコンピューターに対してのみ実行されるため、本格的なソリューションとは言えません。次に、スクリプトを使用するには、パスワードなしのタスクでsudoを設定する必要があります。

コンピューターへのアクセスに使用されるユーザー名として、管理者アカウントが使用されます; AltLinuxアセンブリーでは、これはalttlinuxアカウントです。

/root/bin/hostalt-create.sh
 #!/bin/sh # create list from hostalt file from programm pssh $(nmap 192.168.1.0/24 -p T:8080 2>&1 | grep "mydomain" | grep '\-a' | cut -d " " -f 5 >> /tmp/hostalt1) $(sort -u /tmp/hostalt1 > hostalt) 


/root/bin/parallelssh.sh
 #!/bin/sh # parallelssh.sh sudo /root/bin/updateini.sh <password> echo "parallelssh.sh <\"command\"> <password>" echo "parallelssh.sh sudo \"/root/bin/updateini.sh\" <password>" echo [ -z "$2" ] && exit sshpass -p $2 pssh -x "-o StrictHostKeyChecking=no" -h hostalt -l altlinux -A -i $1 2>&1 > /tmp/ssherr.txt cat /tmp/ssherr.txt 


モジュール作成管理スクリプト

モジュールの作成を管理するためのスクリプトは、カスタムモジュールの作成とそれらのmagosサーバーへの配置を自動化するように設計されています。
スクリプトは、プロセスを自動化する構成ファイルとスクリプトのlibexecライブラリを含むプログラムの複合体であり、実際には、モジュールをアセンブルし、受信したモジュールをゴミから削除し、モジュールプログラムを調整するスクリプト自体です。

スクリプトと構成ファイルはディスクのルートディレクトリにありますが、任意の便利な場所に配置できます。前提条件は、それらが配置されているファイルシステムがUnix ACLをサポートする必要があることです。つまり、Posix互換である必要があります。

モジュールアセンブリシステム設定ファイル/update/conf/devel.conf。

 DISTTYPE="testing" DISTNAME="AltLinux" ARCH="i586" UPDETESRV=yes SERVER=192.168.0.3 USER=altlinux 

ここ:

DISTTYPE - magos -serverリポジトリディレクトリを指します。
DISTNAME-配布ディレクトリの名前。
ARCH-システムアーキテクチャ。
上記の3つのパラメーターはすべて、モジュールを含むフォルダーをサーバー上およびコンピューター内に配置するパスを決定します。
UPDETESRV-サーバーリポジトリを自動的に更新するかどうか。SERVER-magos-serverサーバーのアドレスまたはURL。
USERは、リポジトリへの書き込み権限を持つmagos-serverユーザーの名前です。このユーザーのホームフォルダーに、対応するリポジトリフォルダーへのシンボリックリンクを作成する必要があります。

モジュール作成スクリプトの例:

/update/99-u50-example.sh
 #!/bin/sh . conf/devel.conf NAME=`echo $0 | sed 's/\.\///'| sed 's/\..*//'` . lib/mv.sh $NAME epm2xzm $NAME -i 'ntpdata samba' rm -rf $NAME mkdir $NAME xzm2dir $NAME.xzm $NAME #------------------------------------------- #    cp /usr/share/zoneinfo/Asia/Krasnoyarsk $NAME/etc/localtime cp /etc/nsswitch.conf $NAME/etc/nsswitch.conf sed -is/'^hosts: files mdns4_minimal \[NOTFOUND=return\]*'/'hosts: files dns mdns4_minimal \[NOTFOUND=return\] myhostname f #-------------------------------------------- . lib/delhlam.sh $NAME dir2xzm $NAME $NAME.xzm . lib/update.sh $NAME 


モジュール作成スクリプト自体から呼び出されるスクリプト。モジュールがepm2xzmコマンドによって構築された後に残ったゴミをクリーンアップします。

/update/lib/delhlam.sh
 #!/bin/sh NAME=$1 rm -rf $NAME/etc/urpmi $NAME/var/cach/ldconfig $NAME/var/cach/ldconfig/ $NAME/var/cache/ldconfig/ $NAME/var/lib/apt $NAME/var/log/rpmpk gs rm -f $NAME/etc/ld.so.cache $NAME/etc/resolv.conf rm -f $NAME/etc/xinetd.conf $NAME/etc/group- $NAME/etc/gshadow- $NAME/etc/passwd- 


スクリプトは、設定でモジュールを無効にし、古いモジュールのバックアップコピーを作成します。

モジュールの冗長性の技術は次のとおりです。変更するモジュールの名前を変更するには、.bak拡張子を追加します。将来、モジュール作成スクリプトを数回実行して、発生したエラーを修正できます。毎回、以前のバージョンのモジュールの名前が変更され、拡張子.oldが付けられます。作業が完了したら、不要なコピーを削除する必要があります。

/update/lib/mv.sh
 #!/bin/sh NAME=$1 . conf/devel.conf if [ $NAME != "99-u99-default" ] ;then $(sh /usr/lib/magos/scripts/deactivate $NAME.xzm) fi if [ -f /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm.bak ] && [ -f /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm ] ;then $(mv -nf /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm $NAME.xzm.old) fi 


スクリプトは、モジュールをモジュールディレクトリに転送し、ネットワークリポジトリにコピーします。アクセス権を設定し、モジュールの再接続を実行します。

/update/lib/update.sh
 #!/bin/bash NAME=$1 . conf/devel.conf if [ ! -f /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm.bak ] ;then $(mv /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm.bak) fi $(mv $NAME.xzm /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm) $(chmod 664 /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm) $(chown :root /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm) if [ $NAME != "99-u99-default" ] ;then $(sh /usr/lib/magos/scripts/activate $NAME.xzm) else $(sh /usr/lib/magos/scripts/deactivate $NAME.xzm) $(sh /usr/lib/magos/scripts/activate $NAME.xzm) fi [ "$UPDETESRV" != "yes" ] && exit 0 $(scp /mnt/livemedia/$DISTNAME/modules/$ARCH/$NAME.xzm $USER@$SERVER:~/$DISTTYPE/$DISTNAME/modules/$ARCH/) 


magosプログラムとオペレーティングシステムの動作を修正する追加のスクリプト

MagOSは、/ tmpおよび/ var / tmpフォルダーをtmpfsファイルシステムに接続するためのメカニズムをまったく正しく実装していません。/ tmpをtmpfsファイルシステムに接続するためのユニットsystemdがありますが、含まれていません。これを有効にするために、シンボリックリンクが/etc/systemd/system/local-fs.target.wantsディレクトリに配置されました。

 tmp.mount -> /lib/systemd/system/tmp.mount var-tmp.mount -> ../var-tmp.mount 

ユニットvar-tmp.mountは単に実装されていません。MagOSは、VARTMPFSオプションをオンにすると、シンボリックリンク/ var / tmp→/ tmpを作成します。CUPSプリントサーバーの場合、これは有効ではないため、適切なユニットを自分で実装する必要があります。

/etc/systemd/system/var-tmp.mount
 [Unit] Description=Temporary Directory Documentation=man:hier(7) Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems DefaultDependencies=no Conflicts=umount.target Before=local-fs.target umount.target [Mount] What=tmpfs Where=/var/tmp Type=tmpfs Options=mode=1777,strictatime 


/ var / tmpディレクトリをtmpfsファイルシステムに接続するためのユニット。

/etc/systemd/system/ntp-units.d/ntpd.service
 [Unit] Description=Network Time Service After=syslog.target network.target [Service] EnvironmentFile=/etc/sysconfig/ntpd ExecStart=/usr/sbin/ntpd -d $NTPD_ARGS [Install] WantedBy=multi-user.target 


技術者への指示


MagOSモードでAlt Linuxをインストールします。


 $ su - Password: 

パスワードを入力するとき、文字は表示されません。 これは正常です。 mydomainネットワークのデフォルトパスワードが使用されます。


 # /usr/share/magos/install/magosinstall.sh 


 # /usr/share/magos/ad_join/ad_join.pl -h <hostname> -u <username> -p <password> 

どこで:

ホスト名 -コンピューターの名前。同時に、コンピューターの名前が変更されます。
ユーザー名 -mydomain.localドメイン管理者の名前。
password-ドメイン管理者mydomain.localのパスワード。

コマンドが正しく実行されると、次のように書き込まれます。

 Joined ' ' to dns domain 'mydomain.local' 

他のメッセージは無視できます。


デスクトップショートカットの削除

目的のプログラムを右クリックします。デスクトップへのショートカットを送信します。必要に応じて、ショートカットのプロパティを開き、必要なパラメーターを入力します。

著者:Goroshkin Anton Nikolaevich、Fiskov Mikhail Mikhailovich。

Source: https://habr.com/ru/post/J270337/


All Articles