コンテナ化が画像を仮想化に準備するのを簡単にした前に、CDから起動するためのカスタムISO画像を準備するのは相当な芸術でした。後に、これらの画像は仮想マシンからの起動に使用されました。すなわち、ISO画像はコンテナ画像の始祖でした。
私はWindowsのDockerクライアントと不運な出会いを数回しました。コンテナを実行していない場合でも、Windowsのメモリマネージャーは可能な限り多くのメモリを割り当てて、私が忙していたことを遅くします。そのため、WindowsのDockerクライアントを私のマシンから排除しました。
私が恨んでいるのはDockerではありません、Windowsクライアントだけです。
このステップは私を過去に遡らせることを強制しました。私はWindowsのハイパービジョン上で直接仮想マシンを実行し始めました。その後、Windows上でKubernetesクラスタを形成することは私にとって幸せの趣味となり、DZoneでの私の過去の投稿からわかるでしょう。
シューマー、なぜ足を裸にしているのか?
同じマウスクリックをHyper-Vマネージャーで仮想マシンを作成するのに何時間も続くと、私が靴作りの人間のようだと気づいたのです:私はDevOpsパイプラインを構築するために時間単価を支払っていますが、マウスクリックに時間を費やすのはどうしょう?
挑戦は受け入れられました。duckduckgoして、PowerShellを使って仮想マシンを作成できることを読みました。ここで見ることができるように、新しい仮想マシンを作成するスクリプトを持つのに1週間もかかりませんでした。
A Old Art Rediscovered
これは素晴らしいことでしたが、Ubuntu をインストールするときに、まだマウス クリックをしていることに気づきました。これを自動化するのは、もっと難しそうでした。ISO イメージを解凍し、何らかの方法で操作し、コンピュータに起動方法を指示するものをそのまま残すように注意しながら、再びパッケージ化しなければなりません。
幸いなことに、私はこれを行う方法に関する優れたガイドを見つけました。
- UbuntuのISOブートイメージを解凍します。
- コンテンツを操作する
- Xorrisoと呼ばれるアプリケーションを使って、すべてをパッケージ化します。
この古代技術の魔術師にとって、Xorrisoは魔法の杖の役割を果たす。Xorrisoには、何ページにもわたる呪術書のようなドキュメントがある。
仕上げのためのアンシブル
私からのさらなる入力なしに PowerShell から Ubuntu22 をブートできたのは大満足でしたが、次に Ubuntu が新バージョンを出すときはどうでしょうか?真のDevOpsは、プロセスをASCIIではなく、必要なときに実行できるスクリプトで文書化することを義務付けている。Ansibleは、私が午後のうちにこれを実行できたという点で、その万能性を示している。秘訣は、Ansibleにローカルアクションであることを指示することだ。言い換えれば、SSHを使ってマシンをターゲットにして指示を受けるのではなく、Ansibleコントローラーが生徒でもあるのです:
- hosts: localhost
connection: local
完全なプレイを次に示し、上で説明したことの別のビューを提供します:
# stamp_images.yml
- hosts: localhost
connection: local
become: true
vars_prompt:
- name: "base_iso_location"
prompt: "Enter the path to the base image"
private: no
default: /tmp/ubuntu-22.04.4-live-server-amd64.iso
tasks:
- name: Install 7Zip
ansible.builtin.apt:
name: p7zip-full
state: present
- name: Install Xorriso
ansible.builtin.apt:
name: xorriso
state: present
- name: Unpack ISO
ansible.builtin.command:
cmd: "7z -y x {{ base_iso_location }} -o/tmp/source-files"
- name: Copy boot partitions
ansible.builtin.copy:
src: /tmp/source-files/[BOOT]/
dest: /tmp/BOOT
- name: Delete working boot partitions
ansible.builtin.file:
path: /tmp/source-files/[BOOT]
state: absent
- name: Copy files for Ubuntu Bare
ansible.builtin.copy:
src: bare/source-files/bare_ubuntu
dest: /tmp/source-files/
- name: Copy boot config for Ubuntu bare
ansible.builtin.copy:
src: bare/source-files/boot/grub/grub.cfg
dest: /tmp/source-files/boot/grub/grub.cfg
- name: Stamp bare image
ansible.builtin.command:
cmd: xorriso -as mkisofs -r -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)' -o ../ubuntu-22.04-wormhole-autoinstall-bare_V5_1.iso --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16 --mbr-force-bootable -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img -appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 -c '/boot.catalog' -b '/boot/grub/i386-pc/eltorito.img' -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info -eltorito-alt-boot -e '--interval:appended_partition_2:::' -no-emul-boot .
chdir: /tmp/source-files
- name: Copy files for Ubuntu Atomika
ansible.builtin.copy:
src: atomika/source-files/atomika_ubuntu
dest: /tmp/source-files/
- name: Copy boot config for Ubuntu Atomika
ansible.builtin.copy:
src: atomika/source-files/boot/grub/grub.cfg
dest: /tmp/source-files/boot/grub/grub.cfg
- name: Stamp Atomika image
ansible.builtin.command:
cmd: xorriso -as mkisofs -r -V 'Ubuntu 22.04 LTS AUTO (EFIBIOS)' -o ../ubuntu-22.04-wormhole-autoinstall-atomika_V5_1.iso --grub2-mbr ../BOOT/1-Boot-NoEmul.img -partition_offset 16 --mbr-force-bootable -append_partition 2 28732ac11ff8d211ba4b00a0c93ec93b ../BOOT/2-Boot-NoEmul.img -appended_part_as_gpt -iso_mbr_part_type a2a0d0ebe5b9334487c068b6b72699c7 -c '/boot.catalog' -b '/boot/grub/i386-pc/eltorito.img' -no-emul-boot -boot-load-size 4 -boot-info-table --grub2-boot-info -eltorito-alt-boot -e '--interval:appended_partition_2:::' -no-emul-boot .
chdir: /tmp/source-files
ここで2つのイメージを準備するために使用されたXorrisoコマンドのマジックに注目してください: 1つはKubernetesをサポートしており、もう1つはサポートしていません。
唯一の注意点は、このプレイを実行するためにAnsibleがインストールされたマシンを持っていることです。
まとめ
この投稿は過去にさかのぼるが、物事がなぜそのようになったのかを理解するためには、物事が始まった場所を再訪することが重要である。さらに、Windows とコンテナーはそれほどうまく混ざり合いませんし、開発者の日々をより良いものにする方法についての調査は歓迎されるべきです。
コードの一部を紹介しましたが、プロジェクト全体はGitHubで見ることができます。
Source:
https://dzone.com/articles/ansible-and-the-pre-container-arts