- 投稿日:2020-03-31T22:52:11+09:00
Windows10でVirtualBox+Vagrantを利用してLinux環境構築のメモ
Windows10でVirtualBox+Vagrantを利用してLinux環境を構築したため、メモとして残ります。
目次
・VirtualBoxのインストール
・Vagrantのインストール
・Linux環境の構築VirtualBoxのインストール
・VirtualBox公式サイトから「Windows hosts」をクリックし、ソフトをダウンロードします。現時点の最新バージョンは、VirtualBox 6.1.4 です。
・ダウンロードしたインストーラを起動し、手順に従ってインストールします。特に必要な設定とかがないです。
・インストールができたら、以下のような画面が表示されます。
これでVirtualBoxのインストールが完了です。
Vagrantのインストール
・Vagrant公式サイトからWindows 64bitのバージョンを選択し、ダウンロードします。
・ダウンロードしたインストーラを起動し、手順に従ってインストールします。特に必要な設定とかがないです。
・インストールができたら、PCを再起動します。これでVagrantのインストールが完了です。
Linux環境の構築
Vagrantを実行するための環境を準備
Vagrantでは、フォルダ単位で仮想マシンを作成するので、ここで「test1」の実行用フォルダを作成する
例: C:\tool\vagant\test1Vagrantfileを作成する
Windowsのコマンドプロンプトを開いて、以下のコマンドを実行する
㏅ C:\tool\vagant\test1次、Vagrantfileを作成する
vagrant initこれで、test1のフォルダ下に、Vagrantfileというファイルが生成されます。
Vagrantfileを設定する
Vagrantfileファイルを開いて、以下の2か所を修正する
修正箇所1 修正前: config.vm.box = "base" 修正後: config.vm.box = "centos/7" //Centos7をインストール config.vm.hostname= "192.168.33.10" //仮想マシンのIPを設定修正箇所2(コメントアウトを外すだけ) 修正前: # config.vm.network "private_network", ip: "192.168.33.10" 修正後: config.vm.network "private_network", ip: "192.168.33.10"Vagrantfile で設定できるネットーワークについて、以下の記事を参考ください。
Vagrant 事始め 04 - Vagrant のネットワーク設定仮想マシンを起動する
Windowsのコマンドプロンプトで以下のコマンドを実行して、仮想マシンを初期起動します。
vagrant up初期起動する際、以下のエラーが出る可能性があります。
エラーメッセージ: Timed out while waiting for the machine to boot. This means that Vagrant was unable to communicate with the guest machine within the configured ("config.vm.boot_timeout" value) time period. その対策: ・管理者ユーザーから、cmdを実行してコマンドプロンプトを開く ・「dism.exe /Online /Disable-Feature:Microsoft-Hyper-V」のコマンドを実行して、Microsoft-Hyper-Vを閉じる仮想マシンの操作コマンド
仮想マシンを起動できたら、以下のコマンドで操作可能です。
仮想マシンにログイン: vagrant ssh 仮想マシンからログアウト: exit 仮想マシンを停止: vagrant halt 仮想マシンの削除: vagrant destroy
- 投稿日:2020-03-31T22:48:01+09:00
Linux環境でSSH制限
Linux環境でhosts.allow , host.denyの設定
簡単にLinux環境でローカルで試験するために設定したので、メモのために残しておきます。
/etc/hosts.allow設定
私の環境はCent OS 8でリモートアクセスの許可を/etc/hosts.allowで設定します。
IPアドレスは192.168.3.〇〇/24で、一応私だけでなく他の同じネットワーク上の方も触れるように、しました。
設定は下記です。sshd : 192.168.3.
/etc/hosts.deny設定
hosts.allowで設定した以外の全てのIPアドレスからのSSH接続を禁止します。
sshd : all
まとめ
少なくてすいません。
最近はLinuxも勉強中です。
- 投稿日:2020-03-31T22:39:15+09:00
補足:Linuxの概念とコマンド最低限
トレーニングを進める上での最低限のコマンドを紹介します。
なお、自習する場合はこちらを見ることをおすすめします。コマンド
cd
- ディレクトリを移動します。
- 単に cd と打つとhomeディレクトリに移動します。
- windowsと同じ。
ls
- ディレクトリの一覧表示(Windowsのdir)
- ls -aとすることで隠しファイルも表示します。
cat
- ファイルの中身を表示します。
pwd
- 現在いるパスを表示します。
touch
- ファイルを生成します。
rm
- ファイルやディレクトリを削除します。
- ディレクトリを削除する場合は rm -rf dirname などとする。
ファイルシステム
- 最上位は / で表します(ルートディレクトリ)。windowsでいうC:¥
- ファイルの区切り文字は / です。(インターネットのURLの区切り文字を思い出しましょう)。Windowsは¥()。
- ./ はカレンドディレクトリ。
- ../ は1つ上位ディレクトリを表す。
- 投稿日:2020-03-31T19:09:43+09:00
AWS EC2のインスタンスをt2からt3に変える
最初に
割と新しいインスタンスはただ単にインスタンスタイプを変えるだけで大丈夫だと思うのですが、古いとENAに対応していないということがあり得ます。
今回変更したかったのはまさにそういうものでした。
OSはCentOS7系でしたが、若干古かったのでENA対応していませんでした。
なので、ENAの対応から始まります。ENAについては
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.htmlENA対応確認
modinfo ena未対応の場合
modinfo: ERROR: Module ena not found.が出ると思われる
update
CentOSならyumでアップデートしてENA対応できるので
sudo yum update今回古いインスタンスだからかupdateで失敗しました。そういう場合はrepoの情報のmirrorをコメントアウト、baseurlを有効にすればいけるはず。
インスタンス再起動
aws ec2 reboot-instances --instance-ids {InstanceID}ENA対応確認
modinfo enaさっきとは違って色々表示されるはず。
ENA有効化
ENAを有効化するためにインスタンスを止める必要があります。
# インスタンスを停止 aws ec2 stop-instances --instance-ids {InstanceID} # ENAが有効か確認 aws ec2 describe-instances --instance-ids {InstanceID} --query "Reservations[].Instances[].EnaSupport"現時点では有効化されていないので、多分[]が返ってきます。
# ENA有効化 aws ec2 modify-instance-attribute --instance-id {InstanceID} --ena-support # ENAが有効か確認 aws ec2 describe-instances --instance-ids {InstanceID} --query "Reservations[].Instances[].EnaSupport"ここの確認で
[ true ]が返ってきたらOK
t3に変更
最後にt3に変更します
# 変更して aws ec2 modify-instance-attribute --instance-id {InstanceID} --attribute instanceType --value t3.{InstanceSize} # 起動 aws ec2 start-instances --instance-ids {InstanceID}無事に変更できたようです。
- 投稿日:2020-03-31T01:24:05+09:00
whileをパイプ入力で回したらexitで終わらなかった話
bashでこんなプログラムを書きました
fruits.txtapple banana orange#!/bin/bash cat fruits.txt | while read LINE do echo ${LINE} if [ $? -ne 0 ] ; then echo "エラー:${LINE}" exit 1; fi done echo "正常終了!" done解説
fruit.txtの中身をcatしてwhile文にパイプで渡して標準出力するプログラムです。
実行してみる
例えばbananaのechoで失敗した場合、期待される出力は下記となります。
apple エラー:bananaしかし実際の出力は下記となります。
エラー後にスクリプトが終了せず、後続の処理が続いていますね。apple エラー:banana orange 正常終了!原因
パイプでwhile文に渡す場合、whileループは元スクリプトの子プロセスとして
実行されてしまいます。
したがって、exit 1をしたとしてもあくまでも子プロセスしか終了せず、
メインの処理は続いてしまいます。解決策1_子プロセスの戻り値を拾う
子プロセスの戻り値1を親プロセス側で拾って親プロセスを異常終了させます。
cat fruits.txt | while read LINE do echo ${LINE} if [ $? -ne 0 ] ; then echo "エラー:${LINE}" exit 1; fi done if [ $? -ne 0 ] ; then exit 1; fi解決策2_for文を使う
for文のリストにcatの結果を指定すれば解決します。
こうすると別途catの結果を入れる変数を定義する必要もないのでスマートかと。for FRUIT in `cat fruits.txt`; do echo ${FRUIT} done