20191124のLinuxに関する記事は9件です。

cronとrtcwakeでLinuxの自動起動及び自動シャットダウン

概要

Ubuntuで録画サーバを動かしていると電気代がバカにならないので、
使わない時間帯(自分の場合は3時~20時)に合わせて、自動起動と自動シャットダウンする方法について調べてみた。

今回は以下の2つのコマンドを使います。

crontab -e

分(0-59) 時(0-23) 日(1-31) 月(1-12) 曜日(0-7) コマンド

*でワイルドカード指定が可能

rtcwake

sudo rtcwake -m [モード] -s [復帰までの秒数]

-m off シャットダウン
-m disk 休止
-m mem サスペンド

設定

今回はcronでrtcwakeコマンドをスケジュール実行させました。

# 3時にシャットダウンし、20時に起動させる場合
0 3 * * * sudo rtcwake -m off -s 61200
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

jetson nanoのmanがない

nVIDIA DEVELOPER Forumsの「Where are the man pages?」より

ファイル/etc/dpkg/dpkg.cfg.d/excludesのmanとdocの行をコメントアウトして対象のパッケージをre-インストール。

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

シェルスクリプトのちょっと実用的な数行の関数(日時 #2)

日時

前回に引き続きシェルスクリプトのちょっとした関数で、日時の続きです。

日時をUNIX時間に変換する

UNIX 時間は、UTC の 1970年1月1日からの経過秒数(エポック秒)です。整数値なので経過時間の計算や比較がしやすくなります。

# $1  日時を表す文字列
function datetime_to_epoch() {
  date -d "${1}" +'%s'
}

現在の日時をUNIX時間で出力する

date +'%s'」に名前を付けてスクリプトの可読性を良くするための関数です。

function epoch_now() {
  date +'%s'
}

使用例(タイムアウトの処理)

ループ 1回ごとに現在時刻と制限時刻を比較して継続/終了の判定をする例です。UNIX 時間なので加算と比較が簡単にできます。

TIMEOUT_SECONDS=10  # タイムアウトの秒数

# 現在時刻にタイムアウトの秒数を加算して制限時刻を得る。
limit_time=$(( $(epoch_now) + ${TIMEOUT_SECONDS} ))

# 制限時刻まで処理を続ける。
while (( $(epoch_now) <= ${limit_time} ))
do
  do_something
  sleep 1
done

UNIX時間を日時に変換

逆変換の@も忘れがちで、可読性も低いので関数にします。

# $1  日時を表す文字列
# $2  書式指定文字列(省略可 省略時は'yyyy-MM-dd hh:mm:ss'で出力する)
function epoch_to_datetime() {
  date -d "@${1}" +"${2:-%F %T}"
}

日時の差分計算

前回の「日時の加算/減算」に対して、今回は 2つの日時の差分を求める関数です。端数は切り捨てられます。

# $1  出力する差分の単位 {day|hour|minute|second}
# $2  日時を表す文字列
# $3  日時を表す文字列 $2 < $3で正の値、$2 > $3で負の値を出力する
function diff_datetime() {
  # UNIX時間に変換して、2つの日時の差分を秒単位で求める。
  local formula=$(( $(datetime_to_epoch "${3}") - $(datetime_to_epoch "${2}") ))

  case "${1}" in
    second  ) ;;
    minute  ) formula+=" / 60" ;;
    hour    ) formula+=" / 3600" ;;
    day     ) formula+=" / ( 3600 * 24 )" ;;
    *       ) return 1 ;;
  esac

  echo "${formula}" | bc
}

月初の日付

可読性のために、前回の「日時の書式設定」を使用します。
まず書式'%Y-%m-01'を使って強制的に 1日の 0時にしてから、指定の書式があればフォーマットして出力します。

# $1  日時を表す文字列
# $2  書式指定文字列(省略可 省略時は'yyyy-MM-dd'で出力する)
function first_day_of_month() {
  local first_day=$(format_datetime "${1}" '%Y-%m-01')
  format_datetime "${first_day}" "${2:-%F}"
}

月末の日付

前回の「日時の加算/減算」を使用します。
月末は日が 28 〜 31 の間で変動するので、月初のように日の強制変換ができません。そのためまず翌月の月初を取得してから、その前日を求めて当月の月末にします。

# $1  日時を表す文字列
# $2  書式指定文字列(省略可 省略時は'yyyy-MM-dd'で出力する)
function last_day_of_month() {
  # 月初の1か月後 = 翌月の月初
  local next_1st_day=$(add_datetime "$(first_day_of_month "${1}")" 1 month)

  # 翌月の月初の前日 = 当月の月末
  add_datetime "${next_1st_day}" -1 day "${2:-%F}"
}
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Amazon Linux (EC2)でdirenvをセットアップする

direnvとは?

direnvとは、ディレクトリごとに環境変数を定義することができるツール(コマンド)です。
つまり、他のディレクトリに影響を及ぼさない変数を定義できるということです。direnvによって定められた環境変数はカレントディレクトリ(自分が今いるディレクトリ)でのみ有効になります。

通常の環境変数はプロジェクト全体に作用することが一般的ですが、direnvではディレクトリごとに設定できるので、より細かく環境変数を設定したい場合などに非常に有効です。

今回はAmazon Linux(EC2インスタンス)にデプロイするときにdirenvコマンドが入っておらず困ったので、そのインストール方法を残しておきます。

お手元のMacOSにdirenvを入れたい場合などは、他のページをご覧になるとわかりやすいですが、当ページでも基本的にやっていることは同じなので一部参考になさってください。

今回の環境は以下になります。
Amazon Linux
CentOS 6

direnvのインストール

ローカルのMacOSなどでhomebrewが入っていればbrewコマンドを使ってこのように簡単にインストールすることができます。

$ brew install direnv

Amazon Linuxにhomebrewが入っている場合は上記の方法でインストールすれば良いです。(その方が簡単!)
もし、brewが入っていないよ:baby:という方は以下のようにすればhomebrewを入れることなくdirenvを無事にインストールできます。

$ cd /var/www/html
$ sudo git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo make install

この sudo make installの時点で bash: go: コマンドが見つかりませんとなった場合、それはAmazon Linuxに goが入っていないだけですので、yumで入れてあげましょう。

$ sudo yum install golang

これでgoが入るはずです。バージョンを確認します。

$ go version
go version go1.12.8 linux/amd64

確かに入っていますね。

これで先ほどのbash: go: コマンドが見つかりませんのエラーは解消されているはずですので、もう一度試しましょう。

$ cd /var/www/html/direnv
$ sudo make install

これで direnvのインストールができました:santa:
あとは .bashrcあるいは.zshrcに以下を1行記載しておきましょう。

$ sudo vim ~/.bashrc
// 末尾などに記載
eval "$(direnv hook bash)" 

あとは.bashrcの変更を読み込めばOKです。
sourceコマンドで.bashrcの変更を読み込みましょう。

$ source ~/.bashrc

これでdirenvが入ります。念のため、バージョンを確認しておきましょう。

$ direnv version
2.20.1

無事にdirenvをインストールできました:dancer:
これ以降は /var/www/html/direnv/*は不要なディレクトになりますので、削除しても構いません。

$ cd /var/www/html
$ sudo rm -r direnv/

direnvを実際に使ってみる

direnvの一番基本的な使用方法を紹介しておきます。
まず環境変数を定義したいプロジェクトprojectに移動します。
環境変数はディレクトリごとに定義すると冒頭で言いましたが、今回はprojectのルートディレクトリ/で管理してみます。

// 環境変数を定義したいあなたのディレクトリへ移動します。
$ cd /var/www/html/project
direnv: error .envrc is blocked. Run `direnv allow` to approve its content.

何やら怪しいエラーを吐いていますが、なんてことはありません。エラー文の指示通りに

$ direnv allow

としてあげましょう。
今後もこういったエラーを吐くことがありますが、その度にdirenv allowを呪文のように唱えればOKです。

さて、このディレクトリに.envrcというファイルを新しく作成して、このファイルに環境変数を定義します。

$ echo export ENV_USERNAME=hogehoge >> .envrc
$ echo export ENV_PASSWORD=hugahuga >> .envrc

これで.envrcに環境変数を定義できているはずです。
.envrcファイルの中身はこのようになっているはずです

export ENV_USERNAME=hogehoge
export ENV_PASSWORD=hugahuga

また、コマンドラインから.envrcの中身を確認することも可能です。

$ echo ${ENV_USERNAME-nope}
hogehoge // OK (nopeの場合は設定に不備があります)

$ echo ${ENV_PASSWORD-nope}
hugahuga // OK (nopeの場合は設定に不備があります)

上記のようになれば環境変数を定義できています。
実際に、このディレクトリに改めて移動すると、環境変数が有効になっていることが確認できます。

$ cd ~
// 環境変数が無効化
direnv: unloading 

$ cd /var/www/html/project
// 環境変数が有効化
direnv: loading .envrc 
direnv: export +ENV_USERNAME +ENV_PASSWORD

.envrcは絶対にcommitしない

.envrcにはパスワードなどの機密情報を記載することが一般的です。
これはgitないしはGihHubなどを使用する際の汎用的な注意点ですが、 パスワードなどの情報が記載してあるファイルは絶対にcommitしない ように注意しましょう。
これを防ぐためには、例えば.gitignore.envrcを追記してあげれば良さそうですね。

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

KVMでおうちKubernetes

ぷりぷりあぷりけーしょんずインフラ担当による ぷりぷりあぷりけーしょんず Advent Calendar 2019 の3日目

1.目標

これを作ります。

  • Master1台、Worker2台
  • CNIにはCalicoを利用してPod間通信
  • NginxPodをデプロイしてPod間通信を検証 kvm_k8s.png

2.環境

ホストOS

  • メモリ:16G
  • OS:Ubuntu18.04.2
  • KVM:
$ virsh version
Compiled against library: libvirt 4.0.0
Using library: libvirt 4.0.0
Using API: QEMU 4.0.0
Running hypervisor: QEMU 2.11.1

ゲストOS(Master,Worker01,Worker02)

  • メモリ:4G
  • OS:Ubuntu18.04.2
  • Kubernetes:1.15.3

3.仮想マシンの作成

3.1.必要パッケージのインストール

$ sudo apt install qemu-kvm libvirt-bin virtinst bridge-utils libosinfo-bin libguestfs-tools virt-top

3.2.仮想マシンの作成

3.2.1.インスタンスイメージの作成

sudo virt-install \
    --name master \
    --ram 4096 \
    --vcpus 2 \
    --disk path=/var/lib/libvirt/images/master.img,size=20,format=qcow2 \
    --os-type linux \
    --os-variant ubuntu18.04 \
    --network bridge=virbr0 \
    --graphics none \
    --console pty,target_type=serial \
    --location 'http://jp.archive.ubuntu.com/ubuntu/dists/bionic/main/installer-amd64/' \
    --extra-args 'console=ttyS0,115200n8 serial

3.2.2.仮想マシンのコンソールへアクセスする設定

最終的には仮想マシンへSSHで接続しますが、SSHやNWの基本設定の操作をするために下記の手順を踏みます。

$ sudo virsh shutdown master

$ sudo guestmount -d master -i /mnt

$ sudo ln -s /mnt/lib/systemd/getty@.service /mnt/etc/systemd/system/getty.target.wants/getty@ttyS0.service

$ sudo umount /mnt

3.2.3.仮想マシンの諸設定

  • 仮想マシンのIPアドレスを手動で設定します

    ホストOSで以下を実行

    $ sudo virsh start master --console

    ゲストOSへログイン後以下を実行

    $ sudo su -

    # vi /etc/netplan/01-netcfg.yaml

    # This file describes the network interfaces available on your system
    # For more information, see netplan(5).
    network:
    version: 2
    renderer: networkd
    ethernets:
        ens2:
        dhcp4: false
        addresses:
        - 192.168.122.2/24
        gateway4: 192.168.122.1
        nameservers:
            addresses:
            - 192.168.122.1
    

    # netplan apply

  • Kubernetesを利用可能にする

    # swapoff -a

    # vi /etc/fstab

    ## 以下の行をコメントアウト
    /swapfile                                 none            swap    sw              0       0
    

    # vi /etc/hosts

    # 作成した仮想マシンの情報を追記
    # IPアドレスは各自読み替えてください
    192.168.122.2 master
    192.168.122.3 node01
    192.168.122.4 node02
    

    # echo net.bridge.bridge-nf-call-iptables = 1 >> /etc/sysctl.conf

    # echo net.bridge.bridge-nf-call-ip6tables = 1 >> /etc/sysctl.conf

    # echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf

またこの際にホストOSから仮想マシンへSSHするユーザを作成したり、SSHのための公開鍵のコピーを行なってください。

3.2.4.仮想マシンへDocker,Kubernetesのインストール

上記に引き続き仮想マシンへログインした状態で作業してください。

公式サイトにある手順を実施していますが、バージョンを明示するため冗長ですが手順を示します。

  • Docker

    # apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

    # curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

    # apt-key fingerprint 0EBFCD88

    # add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

    # apt-get update

    # apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic containerd.io

  • Kubernetes

    # apt-get update && sudo apt-get install -y apt-transport-https curl

    # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

    # echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | tee /etc/apt/sources.list.d/kubernetes.list

    # apt-get update

    # apt-get install -y kubelet kubeadm kubectl

    # apt-mark hold kubelet kubeadm kubectl

3.3.仮想マシンを複製

ここまでの手順で作成したMaster用仮想マシンを雛形として、Worker用の仮想マシンを作成します。

$ sudo virsh shutdown master

$ sudo virt-clone --original master --name node01 --file /var/lib/libvirt/images/node01.img

これでWorker用仮想マシンが作成されたので3.2.3.のIPアドレスの手動設定だけして、仮想マシンの作成は終了です。

4.Kubernetesクラスタ作成

Masterノード

Master用仮想マシンへログインし、以下のコマンドを実行します。

--pod-network-cidrオプションはPodの所属するネットワークの指定に利用します。Calicoのデフォルトが192.168.0.0/16でKVMのネットワークとバッティングするため10.x.x.x/16で設定すると良いでしょう。

$ sudo kubeadm init --apiserver-advertise-address=192.168.122.2 --pod-network-cidr=10.64.0.0/16

(前略)
To start using your cluster, you need to run the following as a regular user:

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

You should now deploy a pod network to the cluster.
Run "kubectl apply -f [podnetwork].yaml" with one of the options listed at:
https://kubernetes.io/docs/concepts/cluster-administration/addons/

Then you can join any number of worker nodes by running the following on each as root:

kubeadm join 192.168.122.2:6443 --token 0bno9n.2h84n6b0nhl71iyy \
    --discovery-token-ca-cert-hash sha256:5fc061867c95d29841675ec575af7787a84316167a5b92e73b7f7a483579c100 

コマンドの結果にある、mkdir~chownまでのコマンドを実行することでkubectlによるKubernetesの操作が可能になります。

Workerノード

Masterノードで実行したコマンドの結果の最終行にあるコマンドを各Workerノードで実行します。

$ sudo kubeadm join 192.168.122.2:6443 --token 0bno9n.2h84n6b0nhl71iyy --discovery-token-ca-cert-hash sha256:5fc061867c95d29841675ec575af7787a84316167a5b92e73b7f7a483579c100

クラスタの確認

Masterノードで下記のコマンドを実行してNodeの状態を確認します。

$ kubectl get nodes

NAME     STATUS     ROLES    AGE    VERSION
master   NotReady   master   101s   v1.15.3
node01   NotReady   <none>   21s    v1.15.3
node02   NotReady   <none>   5s     v1.15.3

CNIを導入していないのでNodeのStatusがNotReadyですが、kubectlでNodeの情報を取得できていることがわかります。

5.Calicoのインストール

Calicoとは

DockerでデプロイしたコンテナはそのDockerのあるホスト上でのみ通信可能です。(緑矢印)

複数のホスト上でDockerを構築した場合、コンテナが外方向で通信可能な範囲は他のホストのインターフェイスまでになります。(青矢印)

ネットワークの異なる他のホストのコンテナへはアクセスできません。(紫矢印)

kvm_k8s-ページ2.png

Calicoを利用することで、Kubernetesクラスタ作成時に指定したpod-network-cidrのネットワーク内でコンテナ(Pod)間の通信が可能になります。

コンテナのIPアドレスの共有はetcdとBGPを利用します。

etcdのインストール

Calicoの設定情報やIPや各コンテナのIPを保存するためのetcdPodをデプロイします。

$ wget https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/etcd.yaml

$ kubectl apply -f etcd.yaml

Calicoのインストール

$ wget https://docs.projectcalico.org/v3.5/getting-started/kubernetes/installation/hosted/calico.yaml

$ vi calico.yaml

IPIPモードをOFFに、Calicoの利用するネットワークの設定にpod-network-cidrで指定した値を書き込みます。

217             - name: CALICO_IPV4POOL_IPIP
218               value: "off"

225             # The default IPv4 pool to create on startup if none exists. Pod IPs will be           
226             # chosen from this range. Changing this value after installation will have
227             # no effect. This should fall within `--cluster-cidr`.
228             - name: CALICO_IPV4POOL_CIDR
229               value: "10.64.0.0/16"

$ kubectl apply -f calico.yaml

configmap/calico-config created
secret/calico-etcd-secrets created
daemonset.extensions/calico-node created
serviceaccount/calico-node created
deployment.extensions/calico-kube-controllers created
serviceaccount/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrolebinding.rbac.authorization.k8s.io/calico-kube-controllers created
clusterrole.rbac.authorization.k8s.io/calico-node created
clusterrolebinding.rbac.authorization.k8s.io/calico-node created

$ kubectl get pods -A

Calicoのコンポーネントがデプロイされていることがわかります。

またCalicoをデプロイするまではステータスがPendingであった、corednsPodもRunningになっています。

NAMESPACE     NAME                                       READY   STATUS    RESTARTS   AGE
kube-system   calico-etcd-4m6k2                          1/1     Running   0          73s
kube-system   calico-kube-controllers-5d57bd4b96-4bj8s   1/1     Running   1          100s
kube-system   calico-node-jmsmd                          1/1     Running   2          100s
kube-system   calico-node-mhlnk                          1/1     Running   1          100s
kube-system   calico-node-v9ll2                          1/1     Running   1          100s
kube-system   coredns-5c98db65d4-j2h6b                   1/1     Running   0          39m
kube-system   coredns-5c98db65d4-x2shs                   1/1     Running   0          39m
kube-system   etcd-master                                1/1     Running   0          38m
kube-system   kube-apiserver-master                      1/1     Running   0          38m
kube-system   kube-controller-manager-master             1/1     Running   0          38m
kube-system   kube-proxy-2xggm                           1/1     Running   0          38m
kube-system   kube-proxy-j9j9m                           1/1     Running   0          38m
kube-system   kube-proxy-p6xnw                           1/1     Running   0          39m
kube-system   kube-scheduler-master                      1/1     Running   0          38m

6.Pod間通信の確認

冒頭にある通り、NginxPodを利用してPod間通信の確認をしていきます。

Nginxのデプロイ

$ kubectl run my-nginx --image=nginx --replicas=2 --port=80

kubectl run --generator=deployment/apps.v1 is DEPRECATED and will be removed in a future version. Use kubectl run --generator=run-pod/v1 or kubectl create instead.
deployment.apps/my-nginx created

$ kubectl get pods -o wide

Worker01,Worker02のそれぞれにNginxがデプロイされています。

Podの持つIPアドレスがCalicoで指定したネットワークになっていることも確認できます。

NAME                        READY   STATUS    RESTARTS   AGE   IP              NODE     NOMINATED NODE   READINESS GATES
my-nginx-756fb87568-f9bvd   1/1     Running   0          17h   10.64.196.130   node01   <none>           <none>
my-nginx-756fb87568-gpg99   1/1     Running   0          17h   10.64.140.64    node02   <none>           <none>

疎通確認

  • curl用Podのデプロイ

    $ kubectl run curl --image=radial/busyboxplus:curl -i --tty --rm

    別ターミナルでMasterノードへログイン後$ kubectl get podsを実行するとcurl用Podがデプロイされたことがわかります。

    今回はWorker02にデプロイされました。

    NAME                        READY   STATUS    RESTARTS     AGE   IP              NODE     NOMINATED NODE   READINESS GATES
    curl-6bf6db5c4f-vfwfd       1/1     Running   0          47s   10.64.140.65    node02   <none>           <none>
    my-nginx-756fb87568-f9bvd   1/1     Running   0          17h   10.64.196.130   node01   <none>           <none>
    my-nginx-756fb87568-gpg99   1/1     Running   0          17h   10.64.140.64    node02   <none>           <none>
    
  • 疎通確認

    [ root@curl-6bf6db5c4f-vfwfd:/ ]$ curl -I 10.64.196.130

    HTTP/1.1 200 OK
    Server: nginx/1.17.6
    Date: Sun, 24 Nov 2019 07:38:15 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
    Connection: keep-alive
    ETag: "5dd3e500-264"
    Accept-Ranges: bytes
    

    [ root@curl-6bf6db5c4f-vfwfd:/ ]$ curl -I 10.64.140.64

    HTTP/1.1 200 OK
    Server: nginx/1.17.6
    Date: Sun, 24 Nov 2019 07:42:30 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Tue, 19 Nov 2019 12:50:08 GMT
    Connection: keep-alive
    ETag: "5dd3e500-264"
    Accept-Ranges: bytes
    

    同一ホスト(Worker02)のPodはもちろん、異なるホスト(Worker01)への疎通についても確認できました。

Calicoの確認

Calicoの説明箇所でetcdBGPを利用していると書きましたが、それの確認をしてみます。

etcdctlのインストール

  • calico-etcdのバージョン確認

    $ curl http://10.96.232.136:6666/version | jq .

    % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                    Dload  Upload   Total   Spent    Left  Speed
    100    44  100    44    0     0  11000      0 --:--:-- --:--:-- --:--:-- 14666
    {
    "etcdserver": "3.3.9",
    "etcdcluster": "3.3.0"
    }
    
  • etcdctlのインストール

    $ ETCD_VER=v3.3.9

    $ GOOGLE_URL=https://storage.googleapis.com/etcd

    $ DOWNLOAD_URL=${GOOGLE_URL}

    $ curl -L ${DOWNLOAD_URL}/${ETCD_VER}/etcd-${ETCD_VER}-linux-amd64.tar.gz -o etcd-${ETCD_VER}-linux-amd64.tar.gz

    $ tar zxvf etcd-v3.3.9-linux-amd64.tar.gz

    $ sudo mv etcd-v3.3.9-linux-amd64/etcdctl /usr/local/bin/

  • etcdctlのセットアップ

    calico-etcdがVersion3を利用しているため、etcdctlでもVersion3を利用するように設定します。

    --endpointsオプションには先ほどデプロイしたetcd.yamlにあるClusterIPを指定します。

    $ alias etcd='ETCDCTL_API=3 etcdctl --endpoints=10.96.232.136:6666'

    $ etcd version

    etcdctl version: 3.3.9
    API version: 3.3
    

calico-etcdの確認

下記のコマンドでetcdに格納されているキーの一覧を取得可能です。

$ etcd get / --prefix --keys-only

先ほどデプロイしたNginxPodの情報についても格納されていることがわかります(JSONは整形してあります)。

$ etcd get /calico/resources/v3/projectcalico.org/workloadendpoints/default/node01-k8s-my--nginx--756fb87568--f9bvd-eth0

{
  "kind": "WorkloadEndpoint",
  "apiVersion": "projectcalico.org/v3",
  "metadata": {
    "name": "node01-k8s-my--nginx--756fb87568--f9bvd-eth0",
    "generateName": "my-nginx-756fb87568-",
    "namespace": "default",
    "uid": "e2b350ab-0df7-11ea-a8fd-525400f19390",
    "creationTimestamp": "2019-11-23T13:48:09Z",
    "labels": {
      "pod-template-hash": "756fb87568",
      "projectcalico.org/namespace": "default",
      "projectcalico.org/orchestrator": "k8s",
      "projectcalico.org/serviceaccount": "default",
      "run": "my-nginx"
    }
  },
  "spec": {
    "orchestrator": "k8s",
    "node": "node01",
    "containerID": "0baf28fb5c448b6850091691ad79c713f665e4915862c4d7713304414f02c210",
    "pod": "my-nginx-756fb87568-f9bvd",
    "endpoint": "eth0",
    "ipNetworks": [
      "10.64.196.130/32"
    ],
    "profiles": [
      "kns.default",
      "ksa.default.default"
    ],
    "interfaceName": "cali4ecc9d1d445",
    "mac": "ae:61:8a:0a:7b:4d"
  }
}

Calicoについてはまだまだ理解が浅いので断言はできませんが、これらの情報を利用してPod間の通信を可能にしているものと思われます。(たぶんね)

7.まとめ

ここまでで構築した環境があれば、Kubernetes上に適当なアプリケーションをデプロイするもサービスメッシュを実現するも、なんでも可能になります!

さらにこの記事で構築した環境については12/11or19のIstio構築に続きます!

参考URL

https://tech.uzabase.com/entry/2017/08/07/172411

https://thinkit.co.jp/article/14638

https://docs.projectcalico.org/v3.5/getting-started/kubernetes/

https://www.slideshare.net/okinawaopenlabs/20180119-calicopj-calicobgp

https://developers.cyberagent.co.jp/blog/archives/3132/

https://www.slideshare.net/motonorishindo/cni-124981353

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

Oracle LinuxでZabbix4.0環境構築

 Oracl LinuxでZabbix環境を構築する手順を記載します。DBはMySQL8.0、PHP7.2で構築しています。Oracle Linux独自の手順はリポジトリの箇所くらいかと思います。

 Zabbixサーバを構築してそこにZabbixエージェントも設定します。またJavaアプリケーションを監視する場合、zabbix-java-gatewayが必要になるので最後にインストール、設定しています。

 またZabbixDBについてバックアップスクリプトとリストアテストを別記事で紹介しています。

前提

・Oracle Linux Server release 7.6で構築。
・OS初期設定が完了していること(yum update,selinux無効化,firewalld無効化、timezone設定など)。
・必要なポートを開放しておくこと。
Zabbixサーバ → Zabbixエージェント 10050
Zabbixエージェント → Zabbixサーバ 10051

Zabbixサーバ構築手順

※rootのコマンドには行頭に # が、root以外は $ が付いています。

MySQL8.0

リポジトリ設定

# curl -o /etc/pki/rpm-gpg/RPM-GPG-KEY-oracle https://yum.oracle.com/RPM-GPG-KEY-oracle-ol7
# curl -o /etc/yum.repos.d/public-yum-ol7.repo http://yum.oracle.com/public-yum-ol7.repo
# vi /etc/yum.repos.d/public-yum-ol7.repo
※以下を変更
[ol7_MySQL80]
enabled=0 ⇒ 1
[ol7_developer_EPEL]
enabled=0 ⇒ 1
[ol7_developer_php72]
enabled=0 ⇒ 1

インストール

# yum install mysql-community-server mysql-community-devel

設定ファイル作成

# cp -p /etc/my.cnf /etc/my.cnf.org
# ll /etc/my.cnf*
# vi /etc/my.cnf
※以下を記載

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
default_password_lifetime = 0
skip-character-set-client-handshake
character-set-server = utf8
collation-server = utf8_general_ci
init-connect = SET NAMES utf8
default-authentication-plugin=mysql_native_password
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

innodb_dedicated_server = ON
innodb_io_capacity = 1000
innodb_io_capacity_max = 4000
innodb_max_dirty_pages_pct = 90

※default-authentication-plugin について
mysql8.0デフォルトの認証方式、caching_sha2_passwordはzabbixにまだ対応していないです。
そのため以下2つのどちらかが必要となります。
1,my.cnfに以下の設定を記載(今回の手順はこちら)。
default-authentication-plugin=mysql_native_password
2,SQLでzabbixユーザだけネイティブ認証に変更。
alter user zabbix@'localhost' identified with mysql_native_password by 'パスワード';

※innodb関連の設定について
・innodb_dedicated_server
自動的に以下innodbのメモリ、パラメータ設定をする
innodb_buffer_pool_size
innodb_log_file_size
innodb_flush_method

・innodb_io_capacity
innodb_io_capacityが小さいとバックグラウンド処理がたまってしまう。
以下指標があるがとりあえず1000、maxを4000としておく。
デフォルト値:200
RAID:500 ~ 1000
SSD:2000 ~ 5000
IO-Drive2:10000 ~ 50000

・innodb_max_dirty_pages_pct
InnoDBバッファプールを占めるダーティな領域(更新された領域)が90%を超えると、
強制的に(他の処理をブロックして)チェックポイントが行われる。
最適値が不明なのでとりあえずデフォルトの90にしておく。

データディレクトリ作成

# mkdir -p /var/lib/mysql

起動設定

# systemctl start mysqld
# systemctl status mysqld
# systemctl enable mysqld

確認

# mysql --version

初期パスワード確認

# grep 'A temporary password' /var/log/mysqld.log
例: JD2IdIJ34v#Z

初期設定 (パスワードは例)

# mysql_secure_installation
→Enter password for user root:JD2IdIJ34v#Z (上記表示されたパスワード入力)
→New password:(変更後のパスワード入力)
→Re-enter new password:(変更後のパスワード入力)
→Change the password for root ? ((Press y|Y for Yes, any other key for No) :N
→Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y
→Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y
→Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y
→Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y

DB作成

mysql -uroot -p 
mysql> CREATE DATABASE zabbix character set utf8 collate utf8_bin;

DBユーザ作成

mysql> create user zabbix@'localhost' identified by 'パスワード';
mysql> grant all on zabbix.* to zabbix@'localhost';
mysql> flush privileges;
mysql> quit

PHP

※ OracleLinuxの用意するPHP7.2では「zabbix-web-mysql」が入らないため、REMIリポジトリからPHP7.2を取得。

EPEL,REMI

# rpm -ivh https://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm
# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

リポジトリ有効化 (PHP7.3も有効化できるようになっているので、/etc/yum.repos.d/remi-php73.repoの[remi-php73]を試してもいいかも。)

# vi /etc/yum.repos.d/remi-php72.repo
※以下変更
[remi-php72]
enabled=0 ⇒ 1

emi-safeリポジトリ無効 (これを無効にしないとPHPインストールを邪魔するらしいので念の為無効化)

# vi /etc/yum.repos.d/remi-safe.repo
※以下変更
[remi-safe]
enabled=1 ⇒ 0

インストール

※PHPのバージョン7.2.XXのいくつかから、php-mbstringのインストールに鬼車5(正規表現のライブラリ)が
 必要になるためインストールしておく。
# yum --enablerepo=remi install oniguruma5
# yum install php php-gd php-bcmath php-xml php-mbstring php-pecl-mysql

確認

# php -v

Zabbix4.0

リポジトリ

# rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

インストール

# yum install zabbix-server-mysql zabbix-web-mysql zabbix-web-japanese zabbix-agent zabbix-get sendmail

データ流し込み

流し込むデータ(zabbix-server-mysql-4.X.X)のバージョン確認
# ls -ld /usr/share/doc/zabbix-server-mysql*

4.X.Xの箇所を編集
# cd /usr/share/doc/zabbix-server-mysql-4.X.X

パスワード入力流し込み(1,2分かかる)
# zcat create.sql.gz | mysql -u zabbix -p zabbix

設定

# cp -p /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org
# vi /etc/zabbix/zabbix_server.conf
※以下編集
# DBPassword=
↓
DBPassword=<ZabbixDBのパスワード>

# DBHost=localhost
↓
DBHost=localhost

※DBNameとDBUserはデフォのまま

確認

# egrep "^DBPassword=|^DBHost=|^DBName=|^DBUser=|^DBPassword" /etc/zabbix/zabbix_server.conf

php.ini設定

# cp -p /etc/php.ini /etc/php.ini.org
# sed -i 's/\;date\.timezone\ \=/date\.timezone\ \=\ Asia\/Tokyo/g' /etc/php.ini
# grep "^date.timezone" /etc/php.ini

Apache設定

# cp -p /etc/httpd/conf.d/zabbix.conf /etc/httpd/conf.d/zabbix.conf.org
# sed -i 's/<IfModule mod_php5\.c>/<IfModule mod_php7\.c>/g' /etc/httpd/conf.d/zabbix.conf
# sed -i -e "s/# php_value date.timezone Europe\/Riga/php_value date.timezone Asia\/Tokyo/g" /etc/httpd/conf.d/zabbix.conf
# egrep "mod_php|date.timezone" /etc/httpd/conf.d/zabbix.conf

起動、自動起動設定

# systemctl start zabbix-server
# systemctl enable zabbix-server
# systemctl start httpd
# systemctl enable httpd

・ブラウザでインストール作業
http://ZabbixサーバのGIP/zabbix/
⇒ Zabbixの初期設定はこちらを参考に。

メールサービス起動

# systemctl start sendmail
# systemctl enable sendmail

Zabbixエージェント設定

zabbix-agent設定

# vi /etc/zabbix/zabbix_agentd.conf
※ 環境に合わせて変更。

Server=ZabbixサーバのIP(ここでは127.0.0.1のままでよい)
ServerActive=ZabbixサーバのIP(ここでは127.0.0.1のままでよい)
Hostname=このサーバのホスト名(zabbixコンソール上でホスト名を記載するときはここと一致させること。)

監視用設定変更
※こいつは僕の好みも入ってます。

# sed -i -e "s/# RefreshActiveChecks=120/RefreshActiveChecks=120/g" /etc/zabbix/zabbix_agentd.conf
# sed -i -e "s/# AllowRoot=0/AllowRoot=1/g" /etc/zabbix/zabbix_agentd.conf
# sed -i -e "s/# EnableRemoteCommands=0/EnableRemoteCommands=1/g" /etc/zabbix/zabbix_agentd.conf
# sed -i -e "s/#    =3/Timeout=3/g" /etc/zabbix/zabbix_agentd.conf 
※"HostnameItem","HostMetadata"など設定すればコンソール上でホストを追加しなくても、ホストをzabbixサーバに自動登録することができる(https://qiita.com/rotekxyz/items/79d289853145c855cd47 )。
 どういう運用にするかは運用者に任せるので、ここでは設定しない。

サービス再起動、自動起動設定

# systemctl enable zabbix-agent
# systemctl start zabbix-agent
# systemctl status zabbix-agent

JMX監視設定

 おまけ的なものですが、TomcatなどJavaアプリケーションを監視する場合、zabbix-java-gatewayというものが必要になりますのでインストールしておきます。

zabbix-java-gatewayインストール

# yum install zabbix-java-gateway
# systemctl start zabbix-java-gateway
# systemctl enable zabbix-java-gateway

設定編集

# vi /etc/zabbix/zabbix_server.conf
※以下項目を修正
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=3

サービス再起動

# systemctl restart zabbix-server
# systemctl restart zabbix-java-gateway

監視項目の設定

ダッシュボード上でZabbixサーバに対し以下標準テンプレートを設定する。
・Template OS Linux
・Template Module ICMP Ping

メール送信テスト

 こちらを参考に、自分の個人アドレスを使ってメール配信設定をする。Zabbixサーバのzabbix-agent停止してみて、メール通知がされるかを確認する。

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

ZabbixDBについてバックアップスクリプトとリストアテスト

 ZabbixDBバックアップ関連について、バックアップスクリプトの配置とリストアテストについて記載します。
 Oracle LinuxでZabbixを構築した後の記事となります。

バックアップスクリプトの配置

※以下Zabbixサーバでの作業です。

MySQLのZabbixユーザにRELOAD権限付与

mysql -uroot -p
mysql> GRANT RELOAD ON *.* TO 'zabbix'@'localhost';
mysql> flush privileges;
mysql> quit

スクリプトを以下ディレクトリに配置

mkdir -p /usr/local/bin/ZABBIX_MYSQL_BACKUP/

 作成したディレクトリに、以下zabbix-mysql-backup.shというファイル名で配置します。
割と即席で作りましたが、スクリプトに失敗した場合メール送信するようにしています。サーバがmailコマンドでメール送信できることが前提ですが、必要なければ削除してOKかと。
 またZabbixDBユーザのパスワードを平文で記載したくないため、暗号化の方法を後述しています。

#!/bin/bash
######################################################################
#
# [処理概要]
#  MySQLのzabbixDBをdumpしてバックアップディレクトリに転送。
#  dumpをtarで圧縮し、dump自体は削除。圧縮ファイルは3世代残す。
#
# [引数]
#  なし
#
######################################################################
######################################################################
# バージョン 作成/更新者 更新日      変更内容
#---------------------------------------------------------------------
# 001-01     yu araki     YYYY/MM/DD  新規作成
######################################################################
######################################################################
# 事前処理
######################################################################
#---------------------------------------------------------------------
# 変数定義
#---------------------------------------------------------------------
# バックアップディレクトリtgzファイル数カウント用
BK_FILE_COUNT=0
# 削除するファイルの数カウント
DELETE_FILE_COUNT=0
# 実行結果格納フラグ
RESULT_FLAG=0
# 日付
TODAY=`date "+%Y%m%d"`
# タイムスタンプ
NOW=`date "+%Y-%m-%d %H:%M:%S"`
# このスクリプトのファイル名
SCRIPT_NAME=$(basename $0)
# このスクリプトのファイルパス
SCRIPT_PATH="/usr/local/bin/ZABBIX_MYSQL_BACKUP/${SCRIPT_NAME}"
# スクリプト実行ホスト名
HOST_NAME=$(hostname)
# バックアップ保持期間(日)
readonly PERIOD=3
# ローカルバックアップ格納ディレクトリ
readonly BACKUP_DIR="/backup/mysql"
# データベースバックアップファイル名
readonly BACKUP_DATABASE_FILE="zabbix_mysql_dump_${TODAY}.sql"
# 圧縮後のバックアップファイル名
readonly BACKUP_TAR_FILE="zabbix_mysql_backup_${TODAY}.tgz"
# バックアップログディレクトリ
readonly BK_LOG_DIR="/var/log/mysql_backup"
# バックアップログファイル名
readonly BACKUP_LOG="${BK_LOG_DIR}/zabbixdb_backup.log"
# バックアップエラーログファイル名
readonly BACKUP_ERROR_LOG="${BK_LOG_DIR}/zabbixdb_backup_error.log"

## Zabbix DB用変数
# DBユーザ名
readonly DB_USER="zabbix"
# DB名
readonly DB_NAME="zabbix"
# DBパスワード
readonly DB_PASSWD=$(openssl rsautl -decrypt -inkey ~/.ssh/mysql_rsa -in /usr/local/bin/ZABBIX_MYSQL_BACKUP/mysql_user_password.rsa)

## メール送信用変数
# 送信元アドレス
readonly FROM="zabbix-mysql-backup@monitor.com"
# 送信先アドレス
readonly TO="送信先アドレスを記載"
# メールタイトル
readonly SUBJECT="【zabbix mysql db】backup_error "
######################################################################
# 関数定義
######################################################################
#---------------------------------------------------------------------
# バックアップログ出力
#---------------------------------------------------------------------
function fnc_output_scriptlog() {
  (echo "$SCRIPT_NAME: $1 $NOW" >>$BACKUP_LOG) 2>/dev/null
  return $?
}

#---------------------------------------------------------------------
# アラートメール送信関数
#---------------------------------------------------------------------
function fnc_send_mail() {
  echo -e "$1 \nscript_path: $SCRIPT_PATH \nhostname: $HOST_NAME" | mail -s $SUBJECT -r $FROM $TO
  return $?
}

######################################################################
# 開始処理
######################################################################
# 開始ログ出力
echo $TODAY start daily mysql backup process. >> $BACKUP_LOG

# バックアップディレクトリ存在確認
mkdir -p $BACKUP_DIR

# バックアップログディレクトリ存在確認
mkdir -p $BK_LOG_DIR

######################################################################
# メイン処理
######################################################################
#---------------------------------------------------------------------
# MySQLのZabbixDB ローカルバックアップ
#---------------------------------------------------------------------
# バックアップファイル存在確認
FIND_FILE_COUNT=$(find $BACKUP_DIR -type f -name $BACKUP_TAR_FILE | wc -l)

# 当日分tgzファイルが存在しない場合
if [ $FIND_FILE_COUNT -eq 0 ]; then

    #MySQLローカルデータバックアップ
    MYSQL_PWD=$DB_PASSWD mysqldump --single-transaction --default-character-set=binary --flush-logs --events --quick -u${DB_USER} ${DB_NAME} >"${BACKUP_DIR}/${BACKUP_DATABASE_FILE}" 2>> $BACKUP_ERROR_LOG

    #ログ出力
    if [ "$?" = "0" ];then
        echo $NOW Mysql database backup completed. >> $BACKUP_LOG
        echo $NOW start compression of backup sql file backup. >> $BACKUP_LOG
    else
        # ログ出力、エラーメール送信
        for i in fnc_output_scriptlog fnc_send_mail ;do ${i} "Mysql database backup failed."; done
        # エラーフラグ指定
        RESULT_FLAG=1
    fi

    #バックアップファイル圧縮
    cd $BACKUP_DIR ; tar czvf ${BACKUP_TAR_FILE} ${BACKUP_DATABASE_FILE} 2>> $BACKUP_ERROR_LOG

    #ログ出力
    if [ "$?" = "0" ];then
        echo $NOW compression of backup sql is completed. delete the backup file before compression.  >> $BACKUP_LOG
        #圧縮前のファイル削除
        rm -f ${BACKUP_DIR}/${BACKUP_DATABASE_FILE} 2>> $BACKUP_ERROR_LOG
    else
        # ログ出力、エラーメール送信
        for i in fnc_output_scriptlog fnc_send_mail ;do ${i} "compression of backup sql is failed."; done
        #圧縮前のファイル削除
        rm -f ${BACKUP_DIR}/${BACKUP_DATABASE_FILE} 2>> $BACKUP_ERROR_LOG
        # エラーフラグ指定
        RESULT_FLAG=1
    fi

# 既に当日分のtgzファイルが存在する場合
else
    #ログ出力
    echo $NOW because today backup exists, skip backup process. >> $BACKUP_LOG
fi

#---------------------------------------------------------------------
# tgzファイルが3世代より多く存在する場合の処理
#---------------------------------------------------------------------
# バックアップ完了確認
if [ $RESULT_FLAG -eq 0 ]; then

    # バックアップディレクトリ内tgzファイルカウント
    BK_FILE_COUNT=$(ls -l $BACKUP_DIR/zabbix_mysql_backup_*.tgz | wc -l) 2>> $BACKUP_ERROR_LOG
    DELETE_FILE_COUNT=`expr $BK_FILE_COUNT - $PERIOD` 2>> $BACKUP_ERROR_LOG

    # 3世代より多く存在する場合
    if [ $DELETE_FILE_COUNT -gt 0 ]; then
        # tgzファイル削除
        cd $BACKUP_DIR ; rm -f $(ls -lt zabbix_mysql_backup_*.tgz | tail -${DELETE_FILE_COUNT} | awk '{ print $9;}') 2>> $BACKUP_ERROR_LOG
        # ログ出力
        echo $NOW delete the three days before files from backup directory. >> $BACKUP_LOG
    else
        # ログ出力
        echo $NOW there were no files of three days before in backup directory. >> $BACKUP_LOG
    fi

else
  # バックアップが未完の場合、エラーとして終了
  echo $TODAY zabbix mysql backup process has not finished. >> $BACKUP_LOG

  exit 1
fi

######################################################################
# 終了処理
######################################################################
#終了ログ出力
echo $TODAY finished daily backup process. >> $BACKUP_LOG

exit 0

スクリプト権限付与

chmod +x /usr/local/bin/ZABBIX_MYSQL_BACKUP/zabbix-mysql-backup.sh

ZabbixDBユーザのパスワード暗号化

スクリプトにDBユーザのパスワードを平文で記載するのが嫌なため、暗号化させます。

移動

cd /usr/local/bin/ZABBIX_MYSQL_BACKUP/

パスワード暗号化用の鍵を生成

ssh-keygen -t rsa -f ~/.ssh/mysql_rsa

rsa作成

echo 'ZabbixDBユーザのパスワード' | openssl rsautl -encrypt -inkey ~/.ssh/mysql_rsa > mysql_user_password.rsa

rsaの情報でログインできるか確認

mysql -u zabbix -p`openssl rsautl -decrypt -inkey ~/.ssh/mysql_rsa -in mysql_user_password.rsa`

リストアテスト

上記スクリプトでとったバックアップを使いリストアテストをします。

解凍

cd /backup/mysql/
tar -xzvf mysql_backup_YYYYMMDD.tgz

ZabbixDBを削除

mysql -uroot -p

drop database zabbix;

⇒Zabbixコンソール上でDBエラーが表示されることを確認

ZabbixDBを再作成

CREATE DATABASE zabbix character set utf8 collate utf8_bin;

リストア

mysql -u zabbix -pパスワード -D zabbix --default-character-set=binary < mysql_dump_YYYYMMDD.sql

⇒Zabbixコンソール上で動作が問題ないことを確認。

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

Diginnosタブレットにlinuxを載せ替える①

Diginnos Windowsタブレットにlinuxを載せる

すこし(?)前のwindowsタブレットにlinuxをのせたい
非常に安い割に液晶がきれいで買ったものの動作がもっさりしすぎて眠っていた

そもそも動作する保証がないため、いろいろ試行錯誤する日記のような記録のつもり

 ハードウェアスペック

型番 DG-D10IW3
液晶 10.1型ワイド 1920x1200 光沢
プロセッサー型番 Atom x5-Z8300
動作周波数 定格 1.44GHz/ バースト 1.88GHz
コア数 / スレッド数 4 / 4
メモリ 2GB
内部ストレージ 32GB eMMC
バッテリー駆動時間 約7.5時間 (JEITA2.0)
薄さ 9.6mm

32bitのwindowsが紐付けられていたが、64bitCPUが入っていた
しかも4コア4スレッドって、、、、

 やること(予定)

  • windowsのライセンス・ソフトウェア情報を退避する(バックアップする)
  • linuxを入れてみる?
  • ハードウェアとの互換性を確認する

きっと何回もやり直すんだろうなーと。。。

最終目標

  • linuxが正常に起動する
  • 動画が見れる
  • pdf等の文章が見れる 
  • wifi・タッチパネル等のハードが最低限使える

windowsライセンスの退避

windows ライセンスはデジタルライセンス認証ができるらしい
自身のマイクロソフトアカウントと紐付けることで、条件付きではあるが移行や再インストールができるらしい

やりかたは。。。
いろんな人が乗っけているのでここでは割愛する

とりあえずwindowsのライセンスさえ抑えておけばどうとでもなるのでその他は特に何もしない
  
  
  
  
  

今回はここまで
次回はArchLinuxをいれたいなー
以上

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

見様見真似でlinux の仮想環境をVisual BOXで作ったド初心者メモ

ついに!!
休日に一緒に勉強を教えてくれる友達ができた!!!\(^o^)/

3人でなんかアプリ作りながら勉強しようぜ!

って話してて
その友達にまず言われたのが

「とりあえずLinuxの環境作りましょうか!」

!?

Windowsしか使ったことないし、
そもそもLinuxって何者!?
ってレベルで、

名前は聞いたことある、別のOSなんでしょ?
Windowsにお別れを告げないといけないってこと?
待ってくれ心の準備が、、

なんて思ってたら全然そんなことなくて
仮想の環境を作って
そこにリモートデスクトップみたいな感じで繋ぐだけらしい...!

安心して
教えてもらうことに。

横で教えてもらいながらなので、すごい速度で進んでいく。
すごい。できる人と勉強するのってすごい!

ただ教えてもらいながらすると、進行速度が上がる分、
「今自分が何してるのか」
「なんでそんなことするのか」
整理できないまま、環境だけができていく。。

このままじゃあ、自分が次誰かに教える番は一生こない。。
もっかいおんなじことができない。

ってことで忘れないうちにここにメモすることにしました!

時間がないので取り合ず殴り書き&スクショペタペタです!
自分のためのメモなので、、多少の分かりにくさはご了承ください...!

<使用するツール(ツールであってる?笑)>
Virtual BOX
https://www.oracle.com/virtualization/technologies/vm/downloads/virtualbox-downloads.html

ubuntu
https://jp.ubuntu.com/download

<ツールについて簡単に解説>

●Virtualbox(バーチャルボックス)は、使用しているPCに仮想環境を構築して、他のOSをインストールすることができる仮想化ソフトです。

つまり、Windows使ってる人もMac使ってる人も、これを使えば、パソコンの中でパラレルワールドみたいなところを作って別のOSを使うことができるんです!

●ubuntuはLinuxの数あるディストリビューションのひとつ
ディストリビューションとはLinuxの種類のこと!
LinuxのUserになるぜ!と言っても
いろんな特徴を持ったやつがいて選ばないといけないんですね~

ポケモントレーナーになるぜ!っていっても
アチャモ、ミズゴロー、キモリからまずは選ばないといけないみたいな感じですかね

その中でもubuntuはとにかく初心者に使いやすいディストリビューション!
最初のジム戦は岩タイプだからキモリが使いやすいみたいな感じですかね?笑

分かりにくいですね、すみません。
よくわからない方は侍さん見てください。めちゃくちゃ分かりやすいです。
→ubuntuとは?
https://eng-entrance.com/what-is-ubuntu

<全体の作業の流れ>

①Virtualboxをダウンロード、インストール(リンクは上に!)
②ubuntuをダウンロード(リンクは上に!)
③Virtualboxの設定→ストレージ→空→右の青いDVDアイコン→ダウンロードしたubuntuのファイルを選択!
image.png
image.png
④起動!

これでLinuxの仮想環境ができます!

仮想の環境でubuntuの設定がたくさんあるんですが、
スクショとってなかったので説明が難しい。笑

また時間があったら追記します!

番外編
lenovoのUserさんの場合、
これだけだと④で起動できずエラーになってしまいます。。
→解決方法はこちら!
https://support.lenovo.com/jp/ja/solutions/ht500006

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