こちらのAWSドキュメントで、Amazon Linux 2 を仮想マシンで実行できるということが記載されていたので、Windows10のVirtualBoxで実際にAmazon Linux 2を起動してみました。
- 使用できる仮想化プラットフォーム
- VMWare
- KVM
- VirtualBox (Oracle VM) ※本記事で実行
- Microsoft Hyper-V
なんか、思ってたよりも構築が大変でした・・・。
思う通りに動かなくて、色々読み漁って実践して、またハマっての繰り返し(汗)
Linux・・・ちゃんと覚えよう!っと再認識。
これでLinuxの実践環境ができたので勉強します!!
目次
- 目次
- 検証環境
- 注意事項
- 1. seed.iso 起動イメージを準備する
- 2. Amazon Linux 2 VM イメージのダウンロード
- 3. VirtualBoxでAmazon Linux 2を起動してログインする
- 4. Amazon Linux 2 の初期設定
- 5. おまけ Teratermマクロ
検証環境
- 検証日: 2021/10/24
- PC環境:
- Windows10 Home Ver21H1
- VirtualBox: バージョン 6.1.28 r147628 (Qt5.6.2)`
- ゲストOS: Amazon Linux release 2 (Karoo): 4.14.248-189.473.amzn2.x86_64
- VirtualBox: バージョン 6.1.28 r147628 (Qt5.6.2)`
- Windows10 Home Ver21H1
注意事項
- コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
- 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。
- 本手順だとIPアドレスはDHCPとなります。固定化を試したのですが再起動でDHCPに戻ってしまいます。今後の課題としています。
1. seed.iso 起動イメージを準備する
AWSドキュメントで記載されている方法では、Linux か Mac でのコマンド実行が必要になります。
Windowsのみで対応したいので、今回はサンプル Seed.iso
を使用します。
1.1. サンプル Seed.isoの中身
サンプル Seed.iso
の中身は以下内容となっており、「ホスト名」「IPアドレス情報」「ログイン情報」等も含まれています。
- 初期ホスト名:
amazonlinux.onprem
- 起動後に変更可能
- IPアドレス情報:
DHCPでの取得
- 問題あり:IPアドレスの変更と固定化を検証しましたが、変更は出来るが再起動でDHCPに戻る。
- かなり調べたけれど、付け焼き刃の知識では解決できず・・・今後の課題。
- 固定IPアドレスを使用したい場合は、サンプルじゃないSeed.isoを自作した方が良いのか・・・。
- 問題あり:IPアドレスの変更と固定化を検証しましたが、変更は出来るが再起動でDHCPに戻る。
初期ログイン情報:
- 初期ユーザー名: ec2-user
- 初期パスワード: amazon
サンプル Seed.iso の
meta-data
local-hostname: amazonlinux.onprem # eth0 is the default network interface enabled in the image. You can configure # static network settings with an entry like below. #network-interfaces: | # iface eth0 inet static # address 192.168.1.10 # network 192.168.1.0 # netmask 255.255.255.0 # broadcast 192.168.1.255 # gateway 192.168.1.254
- サンプル Seed.iso の
user-data
#cloud-config # vim:syntax=yaml users: # A user by the name ec2-user is created in the image by default. - default # Following entry create user1 and assigns password specified in plain text. # Please not use of plain text password is not recommended from security best # practises standpoint - name: user1 groups: sudo sudo: ['ALL=(ALL) NOPASSWD:ALL'] plain_text_passwd: amazon lock_passwd: false # Following entry creates user2 and attaches a hashed passwd to the user. Hashed # passwords can be generated with: # python -c 'import crypt,getpass; print crypt.crypt(getpass.getpass())' - name: user2 passwd: amazon lock_passwd: false - name: user3 ssh-authorized-keys: - ssh-rsa XXXX~略~XXXX lock_passwd: true chpasswd: list: | ec2-user:amazon
1.2. サンプル Seed.isoのダウンロード
- 以下ページ内の
サンプル Seed.iso
のリンクからダウンロードページヘ進む- ステップ 1: seed.iso 起動イメージを準備する
- ファイルへのリンクURLが、ファイル更新時に変わりそうなので直リンクは貼りません
Seed.iso
をクリックしてファイルをダウンロードする
- 通常ならばダウンロードフォルダへファイルがダウンロードされます
%USERPROFILE%\Downloads
※2021/10/24 時点ではファイル名がSeed.iso
でした。 - ダウンロードしたファイルは任意のフォルダへ移動しておく
2. Amazon Linux 2 VM イメージのダウンロード
- 以下ページ内の
Oracle VirtualBox
のリンクからダウンロードページヘ進む- ステップ 2: Amazon Linux 2 VM イメージのダウンロード
- ファイルへのリンクURLが、ファイル更新時に変わりそうなので直リンクは貼りません
amzn2-virtualbox-2.0.20211001.1-x86_64.xfs.gpt.vdi
をクリックしてファイルをダウンロードする
- 通常ならばダウンロードフォルダへファイルがダウンロードされます
%USERPROFILE%\Downloads
※2021/10/24 時点ではファイル名がamzn2-virtualbox-2.0.20211001.1-x86_64.xfs.gpt.vdi
でした。 - ダウンロードしたファイルは任意のフォルダへ移動しておく
3. VirtualBoxでAmazon Linux 2を起動してログインする
- VirtualBoxを起動して
New (新規)
をクリックする - 仮想マシンの作成が開くので、必要なパラメータを入力して
次へ
をクリックする- 名前: (自由記載)
- タイプ:
Linux
- バージョン:
Red Hat (64-bit)
- 仮想マシンに割り当てるメモリ量を指定して
次へ
をクリックする
すでにある仮想ハードディスクファイルを使用する
をチェックし、右側のフォルダーマークをクリックする
追加
をクリックしてダウンロードしたVMイメージを開く- No AttachedへVMイメージが追加されるので選択して
選択
をクリックする
- 仮想マシンの作成へ戻るので、
作成
をクリックする - 作成した仮想マシンを選択して
設定(S)
をクリックする
- [ストレージ > コントローラーIDE: 空 > 光学ドライブのCDマーク > ディスクファイルを選択する] と進み、ダウンロードした
Seed.iso
を選択する
- (任意)[ネットワーク > アダプター1 > 割当] へ進み、ネットワーク構成を選択する
- 本項目は、構築したネットワーク構成に合わせて選択します
- 画像では、家庭内ネットワークと通信させたかったので
ブリッジアダプター
を選択してます
- 画像では、家庭内ネットワークと通信させたかったので
- こちらのサイトが各構成を図面で説明しているので解りやすかったです。
- 本項目は、構築したネットワーク構成に合わせて選択します
OK
をクリックして設定を閉じる- VirtualBoxを画面から作成した仮想マシンを選択して
起動
をクリックする - Amazon Linux 2 が起動しました
- 初期ログイン情報
- amazonlinux login:
ec2-user
- Password:
amazon
- amazonlinux login:
- 起動後、Seed.isoを光学ドライブから外す
- [ストレージ > コントローラーIDE: Seed.iso > 光学ドライブのCDマーク > ディスクファイルを選択する] と進み、
仮想ドライブからディスクを除去
を選択する- 外さないと次回以降も
Seed.iso
を使用して起動してしまう - CLIで
sudo eject
でも良い
- 外さないと次回以降も
- [ストレージ > コントローラーIDE: Seed.iso > 光学ドライブのCDマーク > ディスクファイルを選択する] と進み、
VirtualBox利用でのメモ
- VirtualBox画面へ入るとマウスカーソルの自由が奪われる。
- VirtualBox画面から離れる時はホストキー(デフォルト: Right Ctrl)を押下する。
- スクリーンショットを取りる場合、VirtualBox画面に入っている時はキャプチャが機能しない。
- 解決策は「ホストキーを押してVirtualBoxから離れてキャプチャする」。
4. Amazon Linux 2 の初期設定
簡易ですが初期設定をしていきます。
- Amazon Linux 2のメモ
- [su -] は正しいパスワードを打っても使えなかった。
- [sudo su -]は使用できる。ec2-userに戻る時は[exit]。
- VirtualBoxのGuest Additionsは使えない?インストールは出来たけど解像度の変更等が出来ない。
4.1. 日本語の109キーボードにする
初期状態では英語キーボード配列になっているため記号などで戸惑います。そのため、日本語の109キーボードへ設定変更します。
wikipedia: 109キーボード
106キーボードをベースに、Windowsキー2個とメニューキーを追加したもの。2019年現在はこれが主流。OADGで標準化されている。右Windowsキーを省略した108キーも存在する。
初期状態↓
# ---- VirtualBoxのコンソールで操作 ---- ## 設定 sudo localectl set-keymap jp106 sudo localectl set-keymap jp-OADG109A ## (参考)今回は利用しないが日本語環境にする時は設定する。 sudo localectl set-locale LANG=ja_JP.utf8 ## 確認 localectl
4.2. yumのパッケージ更新
# ---- VirtualBoxのコンソールで操作 ---- ## 実行 sudo yum -y update sudo yum -y upgrade ## 確認 uname -r cat /etc/system-release bash --version -v yum check-update
4.3. ホスト名の変更
初期のホスト名はamazonlinux.onprem
になっていますので、好きなものへ変更する。
# ---- VirtualBoxのコンソールで操作 ---- ## 設定 sudo hostnamectl set-hostname <ホスト名> ## 確認 hostname
4.4. ec2-userのパスワード変更
デフォルト: amazon
になっているので、任意のパスワードへ変更します。
# ---- VirtualBoxのコンソールで操作 ---- ## 変更 passwd
4.5. SSH接続の設定
# ---- VirtualBoxのコンソールで操作 ---- ## viで設定ファイルを開く sudo vi /etc/ssh/sshd_config ## 変更箇所: 1ヵ所 PasswordAuthentication no ↓ yesにする PasswordAuthentication yes ## いつも忘れるviの操作・・・ # 入力モードに入る== i # コマンドモードに戻る== esc # 保存して抜ける== :wq! # 保存しないで抜ける== :q! ## 再起動 sudo shutdown -r now ## SSHするIPアドレスの確認 ip address show eth0
以後、SSH接続が可能。
4.6. (任意)一旦シャットダウンして静止点スナップショットを取る
シャットダウンする
# ---- VirtualBoxのコンソールで操作 ---- ## 完全に電源を落とす sudo shutdown -h now ## 再起動だけなら sudo shutdown -r now
スナップショットを取る
- VirtualBoxで対象装置の
三
をクリックし、スナップショット
を選択する - スナップショットメニューが出るので
作成
をクリックする - 名前や説明を入力して
OK
をクリックする - スナップショットが作成される
4.7. Python と AWS CLI の更新
Amazon Linux 2 起動時のAWS CLIとPythonがだいぶ古く、pipも無かったです。
[ec2-user@amz-lin-cli ~]$ aws --version aws-cli/1.18.147 Python/2.7.18 Linux/4.14.248-189.473.amzn2.x86_64 botocore/1.18.6 [ec2-user@amz-lin-cli ~]$ python --version Python 2.7.18 [ec2-user@amz-lin-cli ~]$ python3 --version -bash: python3: command not found [ec2-user@amz-lin-cli ~]$ pip --version -bash: pip: command not found
4.7.1. Pythonから先に更新する
今回は Extras library (Amazon Linux 2) から、Python3.8をインストールします。
# ---- SSH接続 または VirtualBoxのコンソールで操作 ---- ## Extras library (Amazon Linux 2)のPythonバージョンを確認 amazon-linux-extras list | grep python > 44 python3.8=latest enabled [ =stable ] ## Python3.8のインストール sudo amazon-linux-extras install -y python3.8 ## 確認 python --version > Python 2.7.18 python3.8 --version > Python 3.8.5
Python3.8を入れただけだと python --version
でPython2.7が使用されます。Python3.8は python3.8 --version
と入力しないいけない状態なので、aliasを設定して python --version
でPython3.8が使用されるようにします。
# ---- SSH接続 または VirtualBoxのコンソールで操作 ---- ## alias設定 echo 'alias python=python3.8' >> ~/.bashrc source ~/.bashrc ## 確認 python --version > Python 3.8.5
同様にpipにもalias設定を行います。
# ---- SSH接続 または VirtualBoxのコンソールで操作 ---- ## 事前確認 pip --version > -bash: pip: command not found pip3.8 --version > pip 9.0.3 from /usr/lib/python3.8/site-packages (python 3.8) ## alias設定 echo 'alias pip=pip3.8' >> ~/.bashrc source ~/.bashrc ## 事後確認 pip --version > pip 9.0.3 from /usr/lib/python3.8/site-packages (python 3.8) pip3.8 --version > pip 9.0.3 from /usr/lib/python3.8/site-packages (python 3.8)
4.7.2. AWS CLI v2 をインストールする
AWS CLI は v1 と v2 の選択肢があり、変更点の説明や更新履歴はこちらです。・・・翻訳、破壊的変更って(汗)
- 破壊的変更 - AWS CLI バージョン 1 からバージョン 2 への移行
- GitHub: AWS CLI v1 の更新履歴_CHANGELOG
- GitHub: AWS CLI v2 の更新履歴_CHANGELOG
自分は以下の理由から v2 を使っています。・・・浅はかな理由ですが(汗)
- YAML出力ができる
- 自分の使い方だと、今のとこ使ってて問題無いから
LinuxコマンドでAWS CLI v2をインストールします。手順は公式ドキュメントを参照します。
# ---- SSH接続 または VirtualBoxのコンソールで操作 ---- ## 最新版のインストールファイルをダウンロード curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" ## インストーラを解凍 unzip awscliv2.zip ## インストールプログラムを実行 sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin ## 確認 aws --version > aws-cli/2.3.0 Python/3.8.8 Linux/4.14.248-189.473.amzn2.x86_64 exe/x86_64.amzn.2 prompt/off
5. おまけ Teratermマクロ
Teratermで使えるログイン/ログ取りマクロです。
拡張子 .ttl
ファイルへコピペして利用できます。
Teratermマクロのコメントアウトが ;
なので行頭にいっぱい付いてます。
;# ■ 概要 ;# ・Linux機器へSSH接続します。 ;# ・ログ取得を自動開始します。 ;# ・ログ出力フォルダは「LOG_PATH」で指定。 ;# ・ログ名 ;# YYYYMMDD-HHMMSS_HOSTNAME.log ;# ;# ■ 接続情報の設定(環境に合わせて修正してください) HOSTS_IP = '192.168.0.111' HOSTNAME = 'amz-lin-cli' USERNAME = 'ec2-user' ;↓LOGファイルが保存されるフォルダ。 LOG_PATH = 'C:\#temp\teraterm' ;↓ログインPassは下の変数を使わず、初回ログイン時に入力画面から入力し、PAS_PATHへ暗号化して保存されます。 PAS_PATH = 'C:\#temp\teraterm_pass' ;# ~~~~以下は修正不要です。~~~~ ;# ■変数等の作成 ;## ログファイル名の設定 getdate DATETIME '%Y%m%d-%H%M%S_' FULLPATH = LOG_PATH strconcat FULLPATH '\' strconcat FULLPATH DATETIME strconcat FULLPATH HOSTNAME strconcat FULLPATH '.log' ;## プロンプトの作成 PP_LINUX = '^\[' strconcat PP_LINUX USERNAME strconcat PP_LINUX '.+\]\$' ;## パスワードファイル指定(暗号化) PASSFILE = PAS_PATH strconcat PASSFILE '\' strconcat PASSFILE HOSTNAME strconcat PASSFILE '_' strconcat PASSFILE USERNAME strconcat PASSFILE '_loginpass.dat' ;## パスワード取得 getpassword PASSFILE USERNAME PASSWORD ;## SSH接続コマンド作成 COMMAND = HOSTS_IP strconcat COMMAND ':22 /ssh /2 /auth=password /user=' strconcat COMMAND USERNAME strconcat COMMAND ' /passwd=' strconcat COMMAND PASSWORD strconcat COMMAND ' /nosecuritywarning' ;# ■マクロの実行~終了 ;## 「MACRO ダイアログ」ウィンドウを非表示 ※デバッグ時はOFFにする。 show -1 ;## ログ保存先のフォルダが無ければ作成。 foldersearch LOG_PATH if result = 0 then foldercreate LOG_PATH if result <> 0 then messagebox 'A folder could not be made.' 'Making error' end endif endif ;## SSH接続 connect COMMAND ;## キーボード入力抑制(誤操作防止)開始 enablekeyb 0 ;## 接続判定(接続が出来たか確認) if result <> 2 then messagebox 'It could not be connected.' 'Connection Error' end endif ;## ログの取得開始 ;;## Linuxでバイナリするとログに残るプロンプトが変になるため「0 1」。 loginfo logfilename if result <> -1 then ;;## ログが取得中の為、一旦停止してから再度ログ取得を開始 logclose logopen FULLPATH 0 1 else ;;## ログは取得はされていないので、そのままログ取得を開始 logopen FULLPATH 0 1 endif sendln '' ;## 「Tera Term: ログ」ウィンドウを非表示(今回はOFF) ;showtt 6 ;## コマンドの実行 waitregex PP_LINUX sendln '' sendln 'date' mpause 300 sendln '' sendln 'uname -a' mpause 300 sendln '' sendln 'hostname' mpause 300 sendln '' sendln 'cat /etc/system-release' mpause 300 sendln '' sendln '' ;# キーボード入力抑制(誤操作防止)解除 enablekeyb 1