learnGitBranchingでgitのブランチ操作を学んでみてる
こんにちは
最近知り合いに「gitの事で質問あるんだけど」って言われてまともに答えれなかった。
エンジニアなら知ってて当然レベル?のことを雰囲気で行っているのはまずいってことで、薦められた 「 learnGItBranching 」でブランチの操作に慣れようとしています。
こんなに良いものがあるなんて知らなかった。まだ全部はやってないですけど。
これは
問題形式になっていて、ツリー構造のゴールがあってそれに合うように 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の認識がおかしかったのだ
HEADとは、現在使用しているブランチの先頭を表す名前です。デフォルトではmasterの先頭を表しています。HEADが移動することで、使用するブランチが変更されます。
だが
Gitは、あなたが今どのブランチで作業しているのかをどうやって知るのでしょうか? それを保持する特別なポインタが HEAD と呼ばれるものです。これは、Subversion や CVS といった他の 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 | presentabsent | 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 は別々のものではない。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の公式サイトのマニュアルを参考にするとわかりやすいと思います。
でも、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
構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形
シンプルな説明ですね。ポイントは"文字列にシリアライズする"です。
シリアライズは
オブジェクトなどを文字列にフォーマットにするためのデータ形。
見たほうが早い
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の詳しいことは上記の
利用したサイト
を参考にしてもらったほうがわかりやすいと思います。
さくらのクラウドハンズオン!
こんにちは
本日は
さくらインターネット株式会社東京支社にて
さくらのサーバインフラ初心者勉強会@東京
に参加させていただきました。
講師の方はエバンジェリストの寺尾 英作 (てらお えいさく)氏
スケジュールは以下のとおり
最初にさくらのクラウドの紹介がありました。
クラウドのメリットとしてスケールアウト、スケールアップはもちろのこと、ハイブリッド型の構成もできるそうです。(さくらの専用サーバー)
クラウドはスイッチやVPCルーターの設置もでき複数台のサーバーを使用したい時のやローカルとグローバルを区別したい時にもしっかり自ら構成できるのがVPSと比べて良い点だということです。VPSはプランの変更ができないのに対してクラウドならフレキシブルに対応できるので、サービス規模の予測がつかないものにも向いています。
運用するのも楽しそう。
▪️さくらのクラウドを使ったハンズオン
ハンズオンではさくらのクラウドを使い
・スイッチ
・VPCルータ
・webサーバ
・dbサーバ
の作成から設定をし、wordpressをインストールして実際にインターネット上に公開するまででした。
構成までしっかりしており、共有セグメントでwebサーバーVPCルータを動かし
スイッチの中のプライベート部でDBサーバーを動かすというものでした。
この構成を作るのは全てコントロールパネルでできるという驚き。
実際にコンソールを使うのはwebサーバーとdbサーバーの設定のみでした!
webサーバーの構築は
・wordpressを動かすためのapache、mysqlのインストール
・wordpressのインストール
・スイッチにつなげるためのイーサネットの設定
dbサーバーの構築は
・mysqlサーバーのインストール
・wordpress用のデータベースの作成
でした。これでインターネット上にwordpressが立ち上がっているのです。
かなり簡単にwordpressサーバーを立ち上げることができました。すごいです。
現在、私は新人研修として、wordpressの構築の課題を行っています。
こんなに簡単にwordpressを構築できるとなると、さくらのクラウド使いたくなってしまいます。ほんとに
▪️さくらのクラウドを使った感想
・やっぱりに日本の企業が提供しているものなので日本語のマニュアルがしかりしてるのが良い。日本語の安心感がはんぱない。コントロールパネルも結構使いやすかった。日本人向けなのかね。
・以前にMicrosoft Azureを使ったときよりもサーバーデプロイまでにかかった時間が短かったのも良かった。
・そして月額制の安心感。
とまぁやっぱり日本人ですから、日本のIaaSの方が使いやすいですような気はします。(つってAWSすら使ったことない)
契約までも日本語だからスムーズだろうし、良いですよね。
でも多分個人利用ならVPS使うんだろうな〜
って思った1日。