20200331のLinuxに関する記事は5件です。

Windows10でVirtualBox+Vagrantを利用してLinux環境構築のメモ

Windows10でVirtualBox+Vagrantを利用してLinux環境を構築したため、メモとして残ります。

目次

・VirtualBoxのインストール
・Vagrantのインストール
・Linux環境の構築

VirtualBoxのインストール

VirtualBox公式サイトから「Windows hosts」をクリックし、ソフトをダウンロードします。現時点の最新バージョンは、VirtualBox 6.1.4 です。
1.png

・ダウンロードしたインストーラを起動し、手順に従ってインストールします。特に必要な設定とかがないです。
・インストールができたら、以下のような画面が表示されます。
2.png

これでVirtualBoxのインストールが完了です。

Vagrantのインストール

Vagrant公式サイトからWindows 64bitのバージョンを選択し、ダウンロードします。
3.png

・ダウンロードしたインストーラを起動し、手順に従ってインストールします。特に必要な設定とかがないです。
・インストールができたら、PCを再起動します。

これでVagrantのインストールが完了です。

Linux環境の構築

Vagrantを実行するための環境を準備

Vagrantでは、フォルダ単位で仮想マシンを作成するので、ここで「test1」の実行用フォルダを作成する

例:
C:\tool\vagant\test1

Vagrantfileを作成する

Windowsのコマンドプロンプトを開いて、以下のコマンドを実行する

㏅ C:\tool\vagant\test1

次、Vagrantfileを作成する

vagrant init

4.png

これで、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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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も勉強中です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

補足:Linuxの概念とコマンド最低限

トレーニングを進める上での最低限のコマンドを紹介します。
なお、自習する場合はこちらを見ることをおすすめします。

コマンド

cd

  • ディレクトリを移動します。
  • 単に cd と打つとhomeディレクトリに移動します。
  • windowsと同じ。

ls

  • ディレクトリの一覧表示(Windowsのdir)
  • ls -aとすることで隠しファイルも表示します。

cat

  • ファイルの中身を表示します。

pwd

  • 現在いるパスを表示します。

touch

  • ファイルを生成します。

rm

  • ファイルやディレクトリを削除します。
  • ディレクトリを削除する場合は rm -rf dirname などとする。

ファイルシステム

  • 最上位は / で表します(ルートディレクトリ)。windowsでいうC:¥
  • ファイルの区切り文字は / です。(インターネットのURLの区切り文字を思い出しましょう)。Windowsは¥()。
  • ./ はカレンドディレクトリ。
  • ../ は1つ上位ディレクトリを表す。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS EC2のインスタンスをt2からt3に変える

最初に

割と新しいインスタンスはただ単にインスタンスタイプを変えるだけで大丈夫だと思うのですが、古いとENAに対応していないということがあり得ます。
今回変更したかったのはまさにそういうものでした。
OSはCentOS7系でしたが、若干古かったのでENA対応していませんでした。
なので、ENAの対応から始まります。

ENAについては
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/enhanced-networking-ena.html

ENA対応確認

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}

無事に変更できたようです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

whileをパイプ入力で回したらexitで終わらなかった話

bashでこんなプログラムを書きました

fruits.txt
apple
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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む