まず、Archlinuxをインストールし、ブートサーバーに変換します。 そこから直接、新しいコンパクトなシステムを準備し、そこに最小限のグラフィカル環境と最も必要な機能(Firefoxなど)を追加します。 UEFIを搭載したコンピューター上でも、ネットワークを介してブートするようにシステムを学習します。 次に、これを読み取り専用モードに完全に変換し(ライブにします)、1台のブートサーバーで少なくとも50台の異なるコンピューターで同時にシステムを使用できるようにします。 これらはすべて、安価な100 Mbネットワーク内でも機能します。このネットワークは、さらに数回「分散」します。
ドライブがないため、ハードドライブのブックマークを恐れることはありません。 再起動後にシステムが元の状態に戻るため、クレイジーなユーザーペンが何かを壊すことはありません。 もちろん、必要な機能のみが含まれるように、起動可能なシステムを個別に変更して学習することができます。 その間に、Linuxがどのように、どのような順序でブートするか、またそれが何で構成されているかを調べます。 ご存知のように、知識は貴重であるため、無料で共有しています。
あまり議論せずに、何が起こっているのかを説明しようと試みます。時には少し先を走りますが、その後は必ず整理してください。 理解に問題がないように、既製のLinuxディストリビューションで既に作業しており、nanoまたは別のテキストエディターを使用して簡単なスクリプトを記述しようとしていることを前提としています。 ArchLinuxを初めて使用する場合、多くのことを学びます。「老人」であれば、あまり学ばないでしょうが、いずれにしてもLinuxをもっと愛することを願っています。
多くの情報がありました。 そして、確立されたハリウッドの伝統によれば、いくつかのパートのシリーズがあなたを待っています。
継続 ;
終了します。
ここで、VirtualBoxにArchlinuxをインストールします。これは、追加の設定なしで、レガシーBIOSを備えたほとんどすべてのコンピューターで複製および実行できます。 その間に、systemdを操作するための基本的なテクニックを学び、ブート時に任意のサービスとプログラムを開始するためにそれを使用する方法も学びます。 また、Linuxがブート時にどの段階を通過するかを確認し、initramfsに独自のフックを作成します。 initramfsが何であるかわかりませんか? その後、猫の下に行きます。
Archlinuxが選択された理由はたくさんあります。 最初の理由:彼は私の古い風変わりな友人であり、忠実なアシスタントです。 Gentooはインターネット上で書いているように、もっと危険なものですが、ソースからシステムを構築したくありません。 2番目の理由:既製のアセンブリには常に多くの余分なデータが含まれており、大量のデータを送信するとネットワークパフォーマンスに重大な影響を与える可能性があります。 4番目:systemdは徐々にすべてのディストリビューション、
さらにはDebianに
まで浸透します。Archlinuxの例を使用して、今後の既製のディストリビューションを深く掘り下げることができます。 このすべてのために、後で準備するシステムは、仮想マシンで実行されているサーバーからだけでなく、たとえばRaspberry PiやWestern Digital My Cloud(検証済み)などの通常のコンピューターからもネットワーク経由でダウンロードできます。 Debianで動作します。
準備作業
公式ウェブサイトのリンクから最新の画像をダウンロードして
ください 。 たとえば、モスクワでは、Yandexサーバーからのダウンロードは非常に高速です。プロセスが引きずられている場合は、他の場所でダウンロードしてみてください。 この情報はまだ有用であるため、どちらを覚えておくことをお勧めします。
VirtualBoxで、新しい仮想マシンを作成します(たとえば、1 GBのRAMと8 GBのストレージ)。 ネットワーク設定で、接続の種類「ネットワークブリッジ」と、インターネットにアクセスできる適切なネットワークアダプターを選択する必要があります。 ダウンロードしたイメージをCD-ROMに接続します。 ハードウェアの使用を開始するのが待ちきれない場合は、USBフラッシュドライブを使用して
Win32 Disk Imagerを使用して画像を記録し(Windowsで作業している場合)、そこから将来のサーバーを直接ダウンロードします。
マシンの電源を入れ、コマンドラインが表示されるのを待ち、SSHが機能しないパスワードを設定します。
passwd
次のコマンドでSSHサーバーを起動します。
systemctl start sshd
コマンドの出力を調べて、マシンのIPアドレスを見つけることは残っています。
ip addr | grep "scope global"
アドレスは「inet」の直後に示されます。
これで、Windowsユーザーは
puttyを使用してマシンに接続できるようになり、ここからコマンドをコピーして貼り付けて右クリックします。
基本設定
さらに、できるだけ簡単にArchlinuxの標準インストールについて説明します。 質問がある場合は、おそらく
初心者向けのインストールの詳細な説明に回答
があります 。 wikiはすばらしいだけでなく、英語版のwikiも関連しているので、使用してみてください。
cfdiskを使用してメディアを準備します(これは、シンプルで直感的なインターフェイスを備えたコンソールユーティリティです)。 1つのセクションで十分です。ブート可能としてマークすることを忘れないでください。
cfdisk /dev/sda
ext4でフォーマットし、HABRなどのラベルを設定します。
mkfs.ext4 /dev/sda1 -L "HABR"
将来のルートパーティションを/ mntにマウントします。
export root=/mnt mount /dev/sda1 $root
通常、Archlinuxはインターネット経由でインストールされるため、インストール後すぐに最新バージョンを入手できます。 リポジトリのリストは/etc/pacman.d/mirrorlistファイルにあります。 ディストリビューションのダウンロード元を覚えて、これらのサーバーをリストの一番最初に移動してください。これにより、次のステップで時間を大幅に節約できます。 通常、これらは現在の場所と同じ場所に地理的に配置されたサーバーです。
nano /etc/pacman.d/mirrorlist
パッケージの基本セットと開発者用セットをインストールします。
pacstrap -i $root base base-devel
次に、arch-chrootコマンドを使用して、ルートディレクトリを一時的にLinuxルートファイルシステムの構造を持つ他のディレクトリに置き換えることができるようにします。 同時に、そこから起動するプログラムは、他に何かが存在することを知りません。 私たちは、管理者権限を持つ新しいシステムで実際に自分自身を見つけます。
arch-chroot $root
コマンドラインプロンプトがどのように変更されたかに注目してください。
使用する予定の言語を選択します。 en_US.UTF-8 UTF-8およびru_RU.UTF-8 UTF-8のままにすることをお勧めします。 テキストエディターでは、反対のコメントを削除するだけです。
nano /etc/locale.gen
選択したローカライズを生成します:
locale-gen
すべてがうまくいった場合、次のようなものが表示されます。
Generating locales... en_US.UTF-8... done ru_RU.UTF-8... done Generation complete.
デフォルトで使用される言語を設定します。
echo LANG=ru_RU.UTF-8 > /etc/locale.conf
コンソールのレイアウトとフォント:
echo -e "KEYMAP=ru\nFONT=cyr-sun16\nFONT_MAP=" > /etc/vconsole.conf
タイムゾーンを指定します(モスクワ時間を使用します)。
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime
将来のサーバーの名前を思い付きます。
echo "HabraBoot" > /etc/hostname
次に、管理者パスワードを設定します。 これは主に、SSHではパスワードなしではシステムに接続できないためです。 パスワードで保護されていないシステムの不当な使用のトピックは、ここでは開発しません。
passwd
パスワードを2回入力し、パスワードが
正常に更新されたことを確認し
ます 。
ユーザー名を指定して新しいユーザーを追加し(いずれかを選択できます)、同じ理由で管理者権限とパスワードを付与します。また、Archの現在のバージョンのルートではAUR(Arch Userリポジトリは、メインリポジトリにないプログラムを含むArch Linuxユーザーコミュニティのリポジトリです):
useradd -m username
nanoで設定ファイル/ etc / sudoersを編集します。
EDITOR=nano visudo
「root ALL =(ALL)ALL」という行の直後に別の行を追加します。
username ALL=(ALL) ALL
ユーザー名のパスワードを設定します。
passwd username
次に、ブートローダーを内部ドライブにインストールして、システムがそれから単独でブートできるようにする必要があります。 GRUBをローダーとして使用することをお勧めします。これは、後で再び便利になるためです。 Archlinuxの標準pacmanパッケージマネージャーを使用してパッケージをインストールします。
pacman -S grub
ブートローダーは、内部ドライブのMBR(マスターブートレコード)に書き込みます。
grub-install --target=i386-pc --force --recheck /dev/sda
すべてがうまくいった場合、
インストールが完了したことがわかります
。 エラーは報告されていません 。
chrootの終了:
exit
そして、コマンドラインプロンプトがどのように変化したかを確認します。
ディスクラベルを使用しますが、このステートメントの詳細な説明は後で説明します。
ドライブUUIDが使用されないように、
GRUB_DISABLE_LINUX_UUID = trueの行の
コメントを外します 。
nano $root/etc/default/grub
arch-chrootを使用してブートローダー設定ファイルを再度生成します。 ログインし、1つのコマンドを実行して、自動的に終了します。
arch-chroot $root grub-mkconfig --output=/boot/grub/grub.cfg
構成ファイルで
/ dev / sda1へのすべての参照を
LABEL = HABRに置き換える必要があります。
mv $root/boot/grub/grub.cfg $root/boot/grub/grub.cfg.autoconf && cat $root/boot/grub/grub.cfg.autoconf | sed 's/\(root=\)\/dev\/sda1/\1LABEL=HABR/g' > $root/boot/grub/grub.cfg
set lang = en_USの行を変更して同じファイルで
lang = ru_RUを
設定すると、ブートローダーは優れた強力な通信を行います。
-Lスイッチを使用してfstabファイルを生成します。これにより、ジェネレーターにディスクラベルの使用を強制します。
genfstab -p -L $root > $root/etc/fstab
これでArchLinuxの基本的なインストールが完了しました。 システムは自動的に起動し、フレンドリーなロシア語のコマンドラインインターフェイスであなたを歓迎します。 その後にdhcpcdコマンドを入力すると、ほとんどの場合インターネットも機能します。 しかし、今のところ、再起動を急ぐことはありません。
例としてNTPおよびSSHを使用してsystemdを使用した起動時の起動
システムは他のコンピューターと通信するため、時間を同期する必要があります。 サーバーとクライアントの時間が異なる場合、互いに接続できなくなる可能性が高くなります。 同様に、sudoは各アクションの後にパスワードの要求を開始する場合があり、許可タイムアウトが長い期限切れになったと考えます。 そして、私たちがまだ直面しなければならないことを誰が知っていますか? 安全である。
NTP経由でインターネット経由でサーバーと時刻を同期するには、不足しているパッケージをインストールする必要があります。 arch-rootを使用できますが、新しいインストール場所をパッケージマネージャーに伝えるキーを使用して取得します。
pacman --root $root --dbpath $root/var/lib/pacman -S ntp
ロシアのサーバーから正確な時間を設定します。
mv $root/etc/ntp.conf $root/etc/ntp.conf.old && cat $root/etc/ntp.conf.old | sed 's/\([0-9]\).*\(.pool.ntp.org\)/\1.ru\2/g' | tee $root/etc/ntp.conf
ブート時に一度時間を同期するだけで十分です。 以前は、正確なタイムサービスの開始をrc.localファイルに記録していましたが、システムとサービスマネージャーsystemdが表示され、システムの起動時間を短縮するために(元々はユニットと呼ばれる)サービスを開始しようとしました。 当然、あるサービスのパフォーマンスは別のサービスの機能に依存する場合があります。 たとえば、ネットワークがコンピューター上で動作を開始する前に、インターネットを介して時刻を同期しようとすることは役に立ちません。 実行可能ファイルの名前を単に説明するだけでは、これらすべての関係を説明するのに十分ではないため、systemdから始めることは非常に重要な作業になりました。 この目的のために、拡張子が「.service」の特別なファイルが作成されました。 これらは、依存関係、実行可能ファイル名、および起動を成功させるために考慮する必要があるその他のパラメーターを示します。 特に、systemdの読み込みステージを制御するために、ターゲットが使用されます。これは、割り当てられたタスクのランレベルレベルに似ています。
wikiの詳細を読んでください。
初心者に喜ばれるように、ntpdate.serviceはすでにntpパッケージで提供されています。 サービスの起動を記述するすべてのファイルは$ root / usr / lib / systemd / system /フォルダーにあり、任意のテキストエディターで開くか、通常の方法で表示できます。 ここで、たとえば、$ root / usr / lib / systemd / system / ntpdate.service:
[Unit] Description=One-Shot Network Time Service After=network.target nss-lookup.target Before=ntpd.service [Service] Type=oneshot PrivateTmp=true ExecStart=/usr/bin/ntpd -q -n -g -u ntp:ntp [Install] WantedBy=multi-user.target
[Unit]ブロックの[Description]行に、サービスの簡単な説明が表示され、どの条件でサービスを開始する必要があります(この場合、ネットワークが開始した後、NTPサーバーが開始する前に開始します)。 正確な時間要求はブート時に1回だけ発生し、[Service]ブロックのType = oneshot行がこれを担当します。 同じブロックの行ExecStartは、サービスを開始するために実行する必要があるアクションを示します。 この場合の[インストール]ブロックでは、multi-user.targetの目標を達成するためにサービスの起動が必要であることを示しています。 [Install]ブロックと同じコンテンツを使用して、日曜大工サービスを開始することをお勧めします。
最初の実用的な例として、ntpdate.serviceの機能を少し拡張し、ハードウェアクロックの時刻をさらに修正するように依頼します。 その後、同じコンピューターでWindowsを起動すると、GMT時間が表示されるため、心配する必要はありません。
systemdサービスの標準動作の変更は次のとおりです。最初に、/ etc / systemd / system /フォルダーに、サービスのフルネームと拡張子「.d」で新しいディレクトリが作成されます。ここで、任意の名前と拡張子「.conf」を持つファイルが追加され、すでにそこにあります必要な変更が行われます。 続行:
mkdir -p $root/etc/systemd/system/ntpdate.service.d && echo -e '[Service]\nExecStart=/usr/bin/hwclock -w' > $root/etc/systemd/system/ntpdate.service.d/hwclock.conf
サービスを開始した直後に、コマンド「/ usr / bin / hwclock -w」を実行すると、ハードウェアクロックが変換されるというだけです。
自動読み込みにntpdateサービスを追加します(構文はすべてのサービスの標準です)。
arch-chroot $root systemctl enable ntpdate Created symlink from /etc/systemd/system/multi-user.target.wants/ntpdate.service to /usr/lib/systemd/system/ntpdate.service.
ご覧のとおり、ntpdate.serviceファイルへの通常のシンボリックリンクがmulti-user.target.wantsディレクトリに作成され、このファイル自体の[Install]ブロックにmulti-user.targetターゲットの記述がありました。 システムがmulti-user.targetの目標を達成するには、multi-user.target.wantsディレクトリからのすべてのサービスを開始する必要があることがわかります。
同じ方法でSSHパッケージをインストールします(ArchLinuxではopensshと呼ばれます):
pacman --root $root --dbpath $root/var/lib/pacman -S openssh
ただし、今回は自動実行のために、ソケットを使用して、接続要求を受信した後にのみSSHサーバーが起動し、RAMのデッドロードがハングしないようにします。
arch-chroot $root systemctl enable sshd.socket
標準の22番目のポートを変更せず、プロトコル2の強制使用を有効にしませんでした-私の良心のままにしておきます。
将来を見据える、またはフックを知る
見ずに将来のサーバーに接続するには、そのIPアドレスを知る必要があります。 このアドレスが静的であれば、はるかに簡単になります。 ウィキに記載されている通常の方法は、私たちには適していません。 問題は、現代のネットワークアダプターは、マザーボード上の物理的な場所に基づいて名前が付けられていることです。 たとえば、デバイス名enp0s3は、3番目のスロットのゼロPCIバス上にあるイーサネットネットワークアダプターであることを意味します(詳細は
こちら )。 あるアダプタを別のアダプタと交換するときに、システム内のデバイス名が変わらないように作成されています。 マザーボードのモデルによってネットワークカードの位置が異なる場合があるため、この動作は望ましくありません。また、VirtualBoxから実際のハードウェアにブートサーバーを転送しようとすると、ほとんどの場合、ネットワークを適切に構成するためにキーボードとモニターで起動する必要があります。 ネットワークアダプタ名は、たとえばeth0(この場所は絵文字によって予約されています)など、より予測可能になるために必要です。
なぜこれを行うのでしょうか?デバイス名の問題に対するよりエレガントな解決策があることは間違いありませんが、次のオプションは、Linuxをブートする一般的な原理を示すのに非常に適していることがわかりました。 コメントでテストした方法に慣れることを忘れないでください。
mkinitcpio-nfs-utilsパッケージをインストールすると、「net」というフックが作成されます。
pacman --root $root --dbpath $root/var/lib/pacman -S mkinitcpio-nfs-utils
デフォルトでは、すべてのハンドラファイルは/ usr / lib / initcpio /に分類されます。 通常、これらは同じ名前のペアのファイルで、1つはインストールサブディレクトリに表示され、もう1つはフックに表示されます。 ファイル自体は通常のスクリプトです。 通常、hooksフォルダーのファイルはinitramfsファイル内に格納され(後で詳しく説明します)、システムのブート時に実行されます。 ペアの2番目のファイルは、インストールフォルダーに配置されます。 その内部にはbuild()関数があります。これには、initramfsファイル生成中に実行するアクションに関する情報と、このハンドラーの目的を説明するhelp()関数が含まれています。 混乱している場合は、読み進めてください。この段落で述べられていることはすべて適切な位置に収まります。
initcpioフォルダーは/ etcディレクトリーにも存在し、インストールおよびフックのサブディレクトリーもあります。 同時に、/ usr / lib / initcpioよりも無条件の優先順位があります。つまり、両方のフォルダに同じ名前のファイルが表示される場合、initcpioを生成するとき、/ usr / lib / initcpioからではなく/ etc / initcpioからのファイルが使用されます。
ネットハンドラーの機能を少し変更する必要があるため、/ usr / lib / initcpioから/ etc / initcpioにファイルをコピーするだけです。
cp $root/usr/lib/initcpio/hooks/net $root/etc/initcpio/hooks/ && cp $root/usr/lib/initcpio/install/net $root/etc/initcpio/install/
フック/ネットファイルを次の形式にします。
cat $root/etc/initcpio/hooks/net
ファイル$ root / etc / initcpio / install / netを開いて、help()関数がip変数の内容を完全に示していることを確認します。
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
「192.168.1.100::192.168.1.1:255.255.255.0::eth0:none」のように、変数値を設定して静的IPアドレスとネットワークデバイスの名前を設定するだけです(以降、適切なネットワーク設定を使用してください)。 次のセクションでは、値が設定されている正確な場所を確認します。
それまでは、ファイル$ root / etc / initcpio / install / netから不要なものをすべて削除します。 ネットワークデバイスモジュール、上記で使用したipconfigプログラム、そしてもちろん、スクリプト自体はhooksフォルダーからロードします。これはすべての主要な作業を行います。 次のようなものが得られます。
cat $root/etc/initcpio/install/net
起動中に、systemd-udevdデバイスマネージャーがネットワークデバイスの名前を、enp0s3などの使い慣れた予測可能なネットワークインターフェイス名に変更しようとすると、失敗します。 なぜ-読んでください。
システムの起動方法
簡単にするために、通常のBIOSを検討してください。 電源を入れて初期化すると、BIOSはブート可能なデバイスのリストを順番に調べ、ブート制御を転送する先のブートローダーを見つけるまで開始します。
ドライブのMBRに記録したまさにそのようなブートローダー。 GRUBを使用し、その設定(grub.cfgファイル)で、ルートパーティションがHABRというラベルのディスク上にあることを示しました。 行全体は次のとおりです。
linux /boot/vmlinuz-linux root=LABEL=HABR rw quiet
ここでは、vmlinuz-linuxファイルについて説明します。これはシステムのコアであり、ルートシステムへのポインターはそのパラメーターです。 HABRというラベルの付いたデバイスでルートシステムを検索するようにお願いします。 各ドライブに一意のUUIDが存在することもありますが、この場合、システムを別のドライブに転送するときに、間違いなく変更する必要があります。 Linuxoidsの通常の方法でルートシステムの位置を示した場合:/ dev / sda1、この名前はUSBドライブをコンピューターの唯一のドライブとして取得するため、USBドライブから起動することはできません。 コンピューターにHABRというラベルの付いた別のドライブが存在することはまずありませんが、忘れないでください。
ここでは、グローバル変数「ip」の値が「net」ハンドラーに設定されています(ネットワークで使用されているアドレスに変更することを忘れないでください)。
linux /boot/vmlinuz-linux root=LABEL=HABR rw quiet ip=192.168.1.100::192.168.1.1:255.255.255.0::eth0:none
次の行には、initramfsファイルについての言及があります。
initrd /boot/initramfs-linux.img
次に、ロード時に次のことが行われます。GRUBブートローダーはvmlinuzファイルとinitramfsファイルを受け取り、ルートファイルシステムを探す場所を伝え、さらにロードを制御します。
initramfsという名前は、初期ramファイルシステムに由来します。 これは実際には、アーカイブにパッケージ化された通常のLinuxルートファイルシステムです。 ブート時にRAMにデプロイされ、結果としてロードしようとしているLinuxのルートファイルシステムを見つけて準備するように設計されています。 Initramfsには、これらの目的に必要なものがすべて揃っています。これは、多くの通常のコマンドを実行できる実際の「小さなLinux」だからです。 その機能は、Linuxの新しいルートファイルシステムの形成に役立つフックの助けを借りて拡張されます。
initramfsからのプログラムが作業を完了すると、さらにロード制御が準備されたルートファイルシステムのinitプロセスに転送されます。 Archlinuxはsystemdをinitプロセスとして使用します。
systemd-udevdデバイスマネージャーはsystemdの一部です。 彼は兄と同じように、システム内のすべてのデバイスを並行して検出および構成しようとします。 彼は最初の作業の1つを開始しますが、これは、ネットハンドラーがinitramfsステージでネットワークカードを初期化した後に限ります。 したがって、systemd-udevdは使用されているデバイスの名前を変更できず、名前eth0は操作の全期間にわたってネットワークカードによって保持されます。
initramfsの調理
initramfsファイルを作成するには、最初にインストールしたベースパッケージに含まれているmkinitcpioプログラムを使用します。 設定は$ root / etc / mkinitcpio.confファイルにあり、プリセットは/etc/mkinitcpio.dフォルダーにあります。 ルートファイルシステムを見つけて準備できるようにinitramfsを作成する必要があります。これにより、systemdが作業を開始します。 考えられるすべてのオプションを考慮する必要はありません。initramfsファイルのサイズを大きくしないのに最も必要なものだけで十分です。 詳細はこちら
wiki.archlinux.org/index.php/Mkinitcpio必ず自動検出ハンドラを削除してください。 この特定のコンピューターにインストールされているデバイスをチェックし、それらに必要なモジュールのみをinitramfsに残します。 システムを別のコンピューターにさらに転送する可能性を最初に考慮するため、使用する仮想マシンとハードウェアが異なる可能性が高いため、これは必要ありません。
作成したネットを含む、目的に十分なハンドラーのリストは次のとおりです。
HOOKS="base udev net block filesystems"
この行をmkinitcpio.confファイルに挿入し、古い行にコメントします。
nano $root/etc/mkinitcpio.conf
標準のLinuxプリセットに基づいて、habrプリセットを作成します。
cp $root/etc/mkinitcpio.d/linux.preset $root/etc/mkinitcpio.d/habr.preset
そして、このフォームにそれをもたらします:
cat $root/etc/mkinitcpio.d/habr.preset ALL_config="/etc/mkinitcpio.conf" ALL_kver="/boot/vmlinuz-linux" PRESETS=('default' ) default_image="/boot/initramfs-linux.img"
フォールバックブランチは必要ありません。フォールバックブランチはハンドラーから自動検出を削除します。既に削除されているため、異なる名前の同じinitramfsファイルを2回生成する必要はありません。
habrプリセットを使用して新しいinitramfsを生成します。
arch-chroot $root mkinitcpio -p habr
systemdで使用するDNS更新サービスの作成
ネットワークカードは、ネットワークとインターネットが機能するためのすべての設定を受け取ります。 ただし、サイトの名前はIPアドレスに変換されません。これは、システムがこれに使用するDNSサーバーを認識していないためです。 これらの目的のために、ブート時にsystemdが開始する独自のサービスを作成します。
そして、何か新しいことを学び、単調さを退屈させないために、ネットワークデバイスの名前に関する情報をパラメーターとして転送し、DNSサーバーのリストを外部ファイルに保存します。DNSサーバー情報は、resolvconfによって更新されます。構文は私たちに最適です: resolvconf [-m metric] [-p] -a interface <file
ここでインポートされたファイルでは、各サーバーのIPアドレスがキーワードnameserverの後の新しい行に示されています。好きなだけサーバーを指定できますが、最初の3つだけが使用されます。例としてYandexサーバーを使用します。この場合、resolvconfに渡されるファイルは次のようになります。 nameserver 77.88.8.8 nameserver 77.88.8.1
システムがネットワークが完全に動作していることを確認する前、つまりnetwork.targetの目標に到達する前に、DNSサーバーに関する情報を取得する必要があります。ブート時に一度サーバー情報を更新するだけで十分であると想定しています。そして標準的に、私たちのサービスにはmulti-user.targetターゲットが必要だと言います。次の内容のディレクトリにサービス起動ファイルを作成します。 cat $root/etc/systemd/system/update_dns@.service [Unit] Description=Manual resolvconf update (%i) Before=network.target [Service] Type=oneshot EnvironmentFile=/etc/default/dns@%i ExecStart=/usr/bin/sh -c 'echo -e "nameserver ${DNS0}\nnameserver ${DNS1}" | resolvconf -a %i' [Install] WantedBy=multi-user.target
ExecStart行でechoコマンドを実行します。このコマンドは、サーバーのリストを含むファイルをその場で生成し、パイプラインを介してresolvconfを渡します。一般に、ExecStart行で複数のコマンドを使用することはできません。さらに、パイプラインを使用することはできませんが、これらのコマンドを-cパラメーターとして/ usr / bin / shに渡すことにより、だれもがだまされました。ファイルの名前update_dns @ .serviceは@記号を使用することに注意してください。その後に変数を指定でき、「%i」を置き換えてファイル内に配置されます。したがって、EnvironmentFile = / etc / default / dns @%iという行は、EnvironmentFile = / etc / default / dns @ eth0になります。これは、変数DNS0およびDNS1の値を格納するために使用する外部ファイルの名前です。構文は、通常のスクリプトのようなものです:「変数名=変数値」。ファイルを作成します。 nano $root/etc/default/dns@eth0
そして、次の行を追加します。 DNS0=77.88.8.8 DNS1=77.88.8.1
ここで、@の後にネットワークカードの名前を指定することを忘れずに、オートロードにサービスを追加します。 arch-chroot $root systemctl enable update_dns@eth0.service
サービスを開始できるユニバーサルファイルを作成しました。普遍性は、システムに複数のネットワークアダプターがある場合、それらのそれぞれに対して独自のDNSサーバーを指定できるという事実にあります。各デバイスのサーバーのリストを含むファイルのセットを準備し、@の後の名前を個別に示すアダプターごとにサービスを開始する必要があります。最初の打ち上げ前
これで初期設定は完了です。インストールされたArchLinuxを内部ドライブからダウンロードして、変更を有効にする必要があります。完成したルートシステムを無効にします。 umount $root
そして、仮想マシンをオフにします。 poweroff
これで、ブートイメージをCD-ROMから切断するか、USBフラッシュドライブを入手してから、マシンの電源を入れて、すべてが機能することを確認できます。継続と終了。