As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

learnGitBranchingでgitのブランチ操作を学んでみてる

こんにちは

最近知り合いに「gitの事で質問あるんだけど」って言われてまともに答えれなかった。

エンジニアなら知ってて当然レベル?のことを雰囲気で行っているのはまずいってことで、薦められた 「 learnGItBranching 」でブランチの操作に慣れようとしています。

k.swd.cc

こんなに良いものがあるなんて知らなかった。まだ全部はやってないですけど。

これは 問題形式になっていて、ツリー構造のゴールがあってそれに合うように git branch やら git rebase をするというものです。

最初にそれぞれのコマンドがどういう操作をするものかを説明され、webのコンソールっぽい画面でコマンドを実行し、最終的に「あなたは◯回コマンドを実行しました模範回答では◯回です。」というメッセージが表示されます。

この中でどうしても模範回答通りの回数にならないものがあってなんだかなぁってなってました。

その問題が「次のレベルに進もう」の3問目です。

演習自体は コミットの相対的な指定 ってだけなんですが、

模範回答が3回のところ、4回になってしまうのです。

その4回の時のコマンド

# 4回の時のコマンド
git checkout master
git branch -f master C6
git branch -f bugFix bugFix~3
git checkout HEAD~3

最初のmasterへのcheckoutが無駄な気がするな〜ってのはわかってるんですが何故か自分の中でそのコマンドを抜くことができなかった。それは何故か

おそらくHEADの認識がおかしかったのだ

www.backlog.jp

HEADとは、現在使用しているブランチの先頭を表す名前です。デフォルトではmasterの先頭を表しています。HEADが移動することで、使用するブランチが変更されます。

だが

Git - ブランチとは

Gitは、あなたが今どのブランチで作業しているのかをどうやって知るのでしょうか? それを保持する特別なポインタが HEAD と呼ばれるものです。これは、SubversionCVS といった他の VCS における HEAD の概念とはかなり違うものであることに注意しましょう。Git では、HEAD はあなたが作業しているローカルブランチへのポインタとなります。

この認識をもってたかった!!

結果

git branch -f master C6
git branch -f bugFix bugFix~3
git checkout HEAD~3

これでいけた。

HEADの認識関係なくてbranchコマンドを知らないだけだったのかもしれませんが、自分の頭の中で

逆説的に

branchの先頭(操作する対象)とHEADは同じ場所じゃないとだめでしょ

ってなってたんだと思います。

これからもgitの操作になれて開発効率やコードの保守性をあげていきたいとおもいます!

module:sysctl

sysctl /etc/sysctl.confのエントリを管理する。

概要

このモジュールは「sysctl」のエントリを操作した後に、必要に応じて /sbin/sysctl -p
を行います


parameter required default choices コメント
ignoreerrors no yes ・no
・yes
未知のkeyについてのエラーを無視します
name yes sysctlの変数をドット区切りのパス(別名:key)で指定します
reload no yes ・yes
・no
yesの場合はsysctl_fileが更新されていたなら /sbin/sysctl -p を実行します
noの場合はsysctl_fileが更新されていても再読み込みしません。
state no present present
absent
sysctl_fileにエントリがあるべきかどうか
sysctl_file no /etc/sysctl.conf sysctl_fileが/etc/sysctl.conf でないなら絶対パスでファイルまでのパスを指定します
sysctl_set
(added in 1.5)
no ・yes
・no
sysclt コマンドでトークンの値を確認します。そして必要であればオプション -w をセットします。
value no sysctlキーの目標値
note
etc/sysctl.confのファイルはlinuxカーネルの設定を変更するコンフィグファイルです。
keyというのは設定する対象の変数です。

エラーと戦う

エラーというものを目にするのは学生時代から数えて5年目になりました。

最初の2,3年は赤文字が出ると軽くエラーメッセージを読んでエラー文をまるまるコピペしてgoogleで検索していました。
この方法でも目の前の問題が解決することはありますが、「なぜこれで解決するんだろう?」という新たな疑問が生まれることも多々ありました。

ただこれじゃ同じような問題が起きたときの解決スピードが向上しない。そもそも経験したことのある問題だと気づかない。

問題の原因を知りどうやって対処すれば良いのかを知り、次に活かせるようになる必要がある。
じゃあどうすれば良いか、

エラーと真正面からぶつかる力をつけるのだ。

超単純で

・エラーの内容を理解するためにエラー文をもらさずすべて読み取る。

・公式ドキュメントを読む。

今のところはこれで問題なく前に進めている。
エラーも公式ドキュメントも大概が英語なので、まずは英語を読むこと。
エラー文とか公式ドキュメントの分からない単語翻訳しながら読んでたら、他の環境でも活かせる力はついてくる。

問題を解決することで成長につながるし、自分の愚かさに悲しくなるし、楽しいことだらけ。

当たり前のことを当たり前と認識できる新人になろう。と思ったそんな一日

ansibleでwordpressサーバー構築する際にphpのバージョンを指定する

ansibleのgithubからwordpressのplaybookをクローンし何も考えずに実行するとPHPのバージョンが古いままだったのでPHPのバージョンを挙げるようにplaybookを書き換えた。そのときのメモです。
ベストプラクティスやクローンしたものを見るとyumリポジトリすらホストマシンからcopyモジュールを使ってマネージドマシンにコピーしている。

ってことでPHPの様々なバージョンをインストールできるremiリポジトリをマネージドマシンに登録する。ってのが一番の目的です。
まずremi.repoをホストマシンに準備します。

[remi]
name=Remi's RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/remi/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/6/remi/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/php55/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/6/php55/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php56]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/php56/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/6/php56/mirror
# NOTICE: common dependencies are in "remi-safe"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test]
name=Remi's test RPM repository for Enterprise Linux 6 - $basearch
#baseurl=http://rpms.remirepo.net/enterprise/6/test/$basearch/
mirrorlist=http://rpms.remirepo.net/enterprise/6/test/mirror
# WARNING: If you enable this repository, you must also enable "remi"
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-debuginfo]
name=Remi's RPM repository for Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/6/debug-remi/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php55-debuginfo]
name=Remi's PHP 5.5 RPM repository for Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/6/debug-php55/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-php56-debuginfo]
name=Remi's PHP 5.6 RPM repository for Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/6/debug-php56/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

[remi-test-debuginfo]
name=Remi's test RPM repository for Enterprise Linux 6 - $basearch - debuginfo
baseurl=http://rpms.remirepo.net/enterprise/6/debug-test/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

をremi.repoとしてroles/common/filesに保存します。
RPM-GPG-KEY-remiも同じく
filesの配下に保存します。

もう一つ必要なものがあります。
remi.repoでPHPをインストールしようとしたときに[libzip.4.so]が存在しないということでインストールできないです。
ですのでlibzip.4.soもyumでインストールするようにします。

playbookの記述

roles/common/のplaybookに

- name: Import rpm package libzip
  yum: name=http://rpmfind.net/linux/remi/enterprise/6/remi/x86_64/libzip-last-1.1.2-1.el6.remi.x86_64.rpm state=present

- name: Copy the REMI repository from files
  copy: src=remi.repo dest=/etc/yum.repos.d/remi.repo

- name: Import remi gpg-key
  copy: src=RPM-GPG-KEY-remi dest=/etc/pki/rpm-gpg

phpをインストールするplaybookに

yum: name=php state=present enablerepo=remi-php56

を追加しましょう。タスクの名前は何でもいいです。

この方法を知っていれば、ansibleで自由にリポジトリの選択ができるのではないでしょうか。

yumとかrpmとか

こんにちは〜

今日はサーバーにPHPをいれたいと思います。

yum install php

とよしインストール終わったっぽいな〜

ってことでPHPのバージョンを調べたい。

php -v
PHP 5.3.3 (cli) (built: Jun 22 2016 09:05:27)

とか

rpm -qa | grep php

5.3.3!?

古くないか?わからんが…

最新は7.1!?

古いじゃん…

ってことでせめて5.6ぐをインストールしたい!

でも今までなんの気にもせずにyumコマンド使ってたからバージョンの指定方法とか知らない…

ってことでyumのことを調べてみることにした!!

Yellowdog Updater Modified(yum)

https://ja.wikipedia.org/wiki/Yellowdog_Updater_Modified

RPM Package Managerのパッケージを管理するメタパッケージ管理システムである。

とかいてある。つまりRPMのパッケージを管理するシステムってことだろ?

ちょっとまったRPMってなんだ。

さっきなにげなしに「rpm -qa | grep php」とかやってたけど全然何かわからん…

ってことでRPMを調べる!!

RPM Package Manager

https://ja.wikipedia.org/wiki/RPM_Package_Manager


ソフトウェアのパッケージを管理するためのシステム (パッケージ管理システム)、及びコマンド。

わけわからん。パッケージを管理するシステムを管理するシステムがyum??

ググろう。オーソドックスに

rpm yum 違い」

参考にさしていただきました。


blog.inouetakuya.info


rpmyum は別々のものではない。yum は内部で rpm を呼び出して、rpm よりもさらに高度な機能を提供しているもの
rpm は依存関係のあるパッケージを自動ではインストールしてくれない
yum は依存関係のあるパッケージを自動でインストールしてくれる

yumでインストールすると、複数回rpmをしてくれている感じですね

yumのインストールでインストールのために必要なパッケージがないってときに

rpm -ivh

でパッケージをインストールしてから再度yumをすると成功する。なんてがあります。
(あれ?依存関係のある自動でインストールしてくれるんじゃないの?)

以前に
PHPの画像生成するためのライブラリ「GD」をyumでインストールしようとしたときにこれがおこりました。

普通に

yum install --enablerepo=remi-php56 php-gd

としたところ

Faild dependencies gd-last

「失敗した依存」とのこと。

yum list --enablerepo=remi-php56 | grep gd-last

結果は何も表示されなかった。
そして色々調べて
http://rpms.famillecollet.com/enterprise/6/remi/x86_64/
にたどり着きました。ここにはremiリポジトリrpmがファイルとして置かれている場所です。
ページ内検索で「gd-last」を検索すると
gd-last-2.2.1-2.el6.remi.x86_64.rpmがハイライトされるとおもいます。

gd-last-2.2.1-2 gd-lastのバージョン
el6 enterprise linux 6x
remi remiリポジトリ
x86_64 64bit

これを右クリックしてリンクをコピーします。

rpm -ivh http://rpms.famillecollet.com/enterprise/6/remi/x86_64/gd-last-2.2.2-1.el6.remi.x86_64.rpm

rpmパッケージを単体でインストールしてくれます。
これをして再び[依存関係のエラー]が起こったときはその依存関係のあるものをrpmでインストールすればよいのです。

rpmについてはRed Hatの公式サイトのマニュアルを参考にするとわかりやすいと思います。

https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/6/html/Deployment_Guide/sec-Installing_and_Upgrading.html


でも、rpmがいっぱいおいてある場所なんてわかんないですよね。そちらもいずれ検証したいと思います。


ちなみに
リポジトリrpmで追加するときに公開鍵が必要な場合があります。
remiリポジトリを追加するときには必要でした。そのときは

curl -O http://rpms.famillecollet.com/RPM-GPG-KEY-remi

で公開鍵(RPM-GPG-KEY)をダウンロードしてきて、

rpm --import RPM-GPG-KEY-remi

rpmに公開鍵をインポートして

sudo rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpmls

でremiリポジトリを追加して、

yum install --enablerepo=remi-php56 php

でPHP5.6はインストールできました。
gd-lastを追加したのはその後ですね。

参考にしたサイト↓
CentOSにyumリポジトリを追加 - Qiita

まだまだ触れれていない部分はありますが、とりあえず環境構築するためにはこれぐらいはわかっておかないとだめな部分ですね。
もう少し深く勉強しようと思います。

YAMLってなんだ

こんにちは。
最近DevOpsとかImutable infrastructureとかいう言葉を知って、
インフラ初心者を抜け出して応用的な事に挑戦しようとしています。
ってことで本日は
Imutable infrastructue → ansible → YAMLの流れで辿り着いてYAMLについて勉強したので、それのメモ的なやつだと思ってください!

YAMLとは?

https://ja.wikipedia.org/wiki/YAML

構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形

シンプルな説明ですね。ポイントは"文字列にシリアライズする"です。
シリアライズ

ある環境において存在しているオブジェクトを、バイト列やXMLフォーマットに変換することをいう

オブジェクトなどを文字列にフォーマットにするためのデータ形。
見たほうが早い
www.task-notes.com
こちらのサイトを参考にさせていただきました。

YAMLはシーケンスとマッピングというものでデータを表現します。
・シーケンス

- a
- b

マッピング

key1: value1
key2: value2

シーケンスが配列。マッピングがハッシュ(key:value)と覚えておいたら恐らくことたりるでしょう。
ですが、そもそも私はシーケンスが配列のデータ型を表していてマッピングがハッシュのデータ型を表しているってのがイマイチよくわかりませんでした。

だって、プログラミングする時配列作ると「配列名」がありますもんね。
arrya[3]のarrayの部分
シーケンスが配列っていわれると「ふむふむじゃあ配列自体を表すのはどこの部分だ?」ってなりました。
そんなものはないんです。無名配列みたいなものです!

- a
- b

これでいうと

[a,b]

ってだけなんです

これはデータ形です!

key1: value1
key2: value2

これも同じく

{key1:value1,key2:value2}

てだけです。
この認識で入れ子の構造も理解できました。
ハッシュの中に配列を入れる例でいうと

names:
  - Smith
  - Shelton
  - Kelly
age:
  - 18
  - 19
  - 20

{names:[Smith,Shelton,Kelly],age:[18,19,20]}

ってことです。
なんとなくわかってきましたかね。
これを理解するために
とりあえず適当にYAMLを書いてみてJSONに変換するってのをしていました。これによって自分の認識が正しいのか、シンタックスは正しいのかを判断できると思います。
利用したサイト
phiary.me
例えば

- house:
  - table:
    - dining
    - desk
  - chair
  - tv
- human:
  - father
  - mother
  - brother
  - me
- pet

みたいなYAMLを用意しておいて
これを同じように表現します

[{house:[{table:[dining,desk]},chair,tv],human:[father,mother,brother,me]},pet]

と自分の中で予想を立てておく
そして先ほどのサイトにYAMLを記述してJSONに変換することで正しいかを確認できる。
スペースとかタブとかを削除して完全に一致したら超きもちいいです。
ややこしくなったらやってみてください。

YAMLの詳しいことは上記の

利用したサイト

を参考にしてもらったほうがわかりやすいと思います。

さくらのクラウドハンズオン!

こんにちは

 

本日は

さくらインターネット株式会社東京支社にて

さくらのサーバインフラ初心者勉強会@東京

に参加させていただきました。

sakura-kanto.doorkeeper.jp

 

講師の方はエバンジェリスト寺尾 英作 (てらお えいさく)氏

 

スケジュールは以下のとおり

  • 15:00  開場、受付開始
  • 15:30  開催挨拶
  • 15:40  さくらのクラウドのご紹介
  • 16:00  クラウドハンズオンで学ぶITインフラのしくみ
  • 18:00  閉会

 

最初にさくらのクラウドの紹介がありました。

cloud.sakura.ad.jp

クラウドのメリットとしてスケールアウト、スケールアップはもちろのこと、ハイブリッド型の構成もできるそうです。(さくらの専用サーバー)

VPSクラウドの選定点などもおっしゃってました。

クラウドはスイッチやVPCルーターの設置もでき複数台のサーバーを使用したい時のやローカルとグローバルを区別したい時にもしっかり自ら構成できるのがVPSと比べて良い点だということです。VPSはプランの変更ができないのに対してクラウドならフレキシブルに対応できるので、サービス規模の予測がつかないものにも向いています。

 

運用するのも楽しそう。

 

▪️さくらのクラウドを使ったハンズオン

 

ハンズオンではさくらのクラウドを使い

・スイッチ

VPCルータ

・webサーバ

・dbサーバ

の作成から設定をし、wordpressをインストールして実際にインターネット上に公開するまででした。

 

構成までしっかりしており、共有セグメントでwebサーバーVPCルータを動かし

スイッチの中のプライベート部でDBサーバーを動かすというものでした。

 

この構成を作るのは全てコントロールパネルでできるという驚き。

実際にコンソールを使うのはwebサーバーとdbサーバーの設定のみでした!

webサーバーの構築は

wordpressを動かすためのapachemysqlのインストール

wordpressのインストール

・スイッチにつなげるためのイーサネットの設定

dbサーバーの構築は

mysqlサーバーのインストール

wordpress用のデータベースの作成

でした。これでインターネット上にwordpressが立ち上がっているのです。

 

かなり簡単にwordpressサーバーを立ち上げることができました。すごいです。

現在、私は新人研修として、wordpressの構築の課題を行っています。

こんなに簡単にwordpressを構築できるとなると、さくらのクラウド使いたくなってしまいます。ほんとに

 

▪️さくらのクラウドを使った感想

・やっぱりに日本の企業が提供しているものなので日本語のマニュアルがしかりしてるのが良い。日本語の安心感がはんぱない。コントロールパネルも結構使いやすかった。日本人向けなのかね。

・以前にMicrosoft Azureを使ったときよりもサーバーデプロイまでにかかった時間が短かったのも良かった。

・そして月額制の安心感。

 

とまぁやっぱり日本人ですから、日本のIaaSの方が使いやすいですような気はします。(つってAWSすら使ったことない)

契約までも日本語だからスムーズだろうし、良いですよね。

 

でも多分個人利用ならVPS使うんだろうな〜

って思った1日。