魔法使いの卵

WEBエンジニアの卵の成長記録

yumコマンドで環境を破壊した話と教訓

結論

  • 思考停止して以下のコマンドを叩くと環境が壊れた
yum install -y パッケージ名
yum update -y パッケージ名

経緯

  1. 必要なパッケージがあった
  2. パッケージを導入した
  3. 環境が壊れた(依存するパッケージのVersionを確認していない為)

教訓

  • 現環境でパッケージを変更する際は必ず依存しているパッケージのVersionの確認しておくこと

最近プライベートで活動していたこと

はじめに

最近ブログ書いてなかったので最近プライベートでやっていたことを晒しておく

某スタートアップの手伝い

  • 社長が技術の話が分からずサポートしてほしいと言われたので以下のことをしていた(声をかけられた時にはすでに炎上していた)
    • エンジニアと非エンジニアのパイプ役
    • エンジニアのタスク管理と進捗管理
    • 技術的質問に関するケア(主にgitと環境周り)

個人的に問題だと感じた点

  • 開発環境(動作環境)を持っているのが一人のエンジニアだけ
  • コードが会社の資産のはずなのに一人のエンジニアのPCの中にしかない
    • エンジニアが飛んだ時のリスクヘッジなどが一切できていなかった
  • コードをVersion管理していない
  • 共通で動作確認する環境がない
  • タスクが属人化していた
  • 挙げだすときりがないのでetc...

個人的によかった点

  • gitを導入するとどうよくなるのかわかってもらえた
  • gitのワークショップ的なことを行い実際に開発していくフローをしってもらった
  • コードレビューの文化を取り込むようにしてみた
  • 非エンジニアとエンジニアをちゃんと繋げれたらお互いハッピーになれることを知った
    • リリースまでに色々な調整をやってた
  • 無事リリースできた

懸念点

  • 環境もコードもひとまず動けばおk的なかんじでやっていたので今後つらい思いしそうだなーとおもいました。

感想

  • スタートアップってこんなかんじなんだなーというのが体験できました。

instantSpaceCentOS72をつくってみた

instantSpaceCentOS72の情報

github.com

作った理由

  • 環境を自由に切り替えながら開発がしたかった(今後このへんも対応予定)
  • 毎回初回のセットアップがめんどくさかったので自動化した

なんでシェルスクリプトなの?

ちょっとした変更で利用者に学習コストを要求しないため

今後追加する機能

  • rbenb
  • bundler
  • phpenv
  • nvm
  • apache
  • jenkins
  • java

今後の課題

  • 鍵の扱いをもっといいかんじにしたい
  • nginxをrpmで管理できるようにする
  • windowsOSへの対応
  • オプションで実行するシェルスクリプトの切り替え

最後に

  • アプリケーションの開発がしたいからひとまずこのあたりでリリースしてみた

2016年前半の振り返り

前置き

  • なんだかんだ2016年も半分終わってしまった
  • この半年何を学んできて仕事で何してるのか振り返っておく
  • 具体的なことはかけないのでざっくり
  • 半年ぐらい何を独学したのかもざっくり

この半年何してたの?仕事編

  • 去年から変わった点

    • 今の部長になって業務でもコードを書かせてもらえてるので今度ちゃんとお礼を言わなきゃ
    • ユーザに対してどうすればサービスの価値を当たり前のように提供できるか評価してもらえるかという考え
    • 言えばだいたい何でもやらせてもらえてるので何やっても楽しい
  • プロジェクトの開発環境の構築

    • 仮想環境で開発環境を作ったけどもっとよく出来る気がする
    • コードだけではなくて環境も変化に強くあるべきだと痛感
    • このへんはもう少し学習してよりよい環境を目指していきたい
  • プロジェクトの開発

    • 仕事でコードかけるの最高に楽しい
    • レビューで色々な知見を授けてもらえてるので幸せすぎて死にそう
  • 既存サービス

    • 色々書けないことが多い
    • 改修するためのルール作りや仕組み作りなどをしていた
    • 今後もサービスとして当たり前の価値をユーザに届けるだけではなくて、付加価値を評価してもらえるように改善しまくる予定
    • 結局、僕達エンジニアが辛くないようにすればするほど要望に答えやすくなるし早く動けるので現在はその期間だとおもってる
    • チーム文化を新しく作り直してる

今年の残りはなにするの?仕事編

  • 従来の業務と平行してどんどん改善を続けていく
  • 現チーム及びサービスで溜まった知見等は社内で共有
  • 最終的には既存サービス全ての品質向上を目指したい(その為にまずは今見ているサービスから)
  • 要望には早く対応できるようにする
    • 過去の遺産や技術的負債を潰して今までよりも早く動けるようにしたい

この半年なにしてたの?プライベート

  • webアプリつくってた

    • TwitterのAPIが実はもうなくなってるやつとしらなくて頓挫
  • Laravel5.1独学した

    • なんだかんだ今年に入ってちゃんと触り始めた
    • もっと触りまくって僕もLaravelと仲良くなりたい
  • 開発環境構築の自動化

    • Provisioningするためのシェル書いてた
    • もう少しよりよくこのへんも知識がなくてもすぐに必要な環境が誰でも作れるってぐらいの使いやすさを目指したい
  • さくらVPSを契約した

    • ネットワーク周りやセキュリティの勉強になった
    • 仮想環境では得られなかった危機感を感じれた
    • リテラシーが向上した
    • どんどんせっかく借りてるので知見をためていくために使っていく
  • VirtualBoxでVagrantBoxを1から作った

    • とても勉強になった
    • 当たり前のことを当たり前に知れた

今年の半年はなにするの?プライベート

  • 自分が使いたいものがあるのでLaravelをつかった開発
  • 今年中にphpunitは普通にかけるようになりたいのでその辺りまで
  • laravelのコアのコードを読んでみる
  • ガンガンプライベートでもコードを書く(環境はできた)

まとめ

  • 仕事たのしい
  • 開発たのしい
  • 環境作るのたのしい
  • 不眠症辛い

  • 成長しているというよりも今までの積み重ねだなーと感じた(振り返って)

CentOS72(1511)x64のVagrantBoxを作った

はじめに

f:id:raichel:20160701000712p:plain

  • 作るきっかけは上記の一言です。

作業環境環境

環境 バージョン
OS XEI Capitan バージョン10.11.4
VirtualBox バージョン5.0.24
Vagrant バージョン1.8.1

入れておきたいVagrantプラグイン

目指す成果物

  • 最小構成のCentOS72(1511)x64のbox

VirtualBox仮想マシンを作成する

f:id:raichel:20160630223750p:plain

  • ハードディスクのタイプを選択し可変サイズで作成する

f:id:raichel:20160630223806p:plain

f:id:raichel:20160630223826p:plain

f:id:raichel:20160630223837p:plain

  • 読み込ませると以下になる

f:id:raichel:20160701011756p:plain

  • オーディオを有効化のチェックを外す

f:id:raichel:20160630223918p:plain

  • ネットワークのアダプター1を開きポートフォワーディングをクリックする

f:id:raichel:20160630223931p:plain

  • 1レコードを作成する(以下)

f:id:raichel:20160630223948p:plain

  • アダプター2を開きホストオンリーアダプターを選択する

f:id:raichel:20160630224001p:plain

  • ポートを開きUSBをクリックしチェックを外す

f:id:raichel:20160630224015p:plain

  • 設定後は以下になる

f:id:raichel:20160630224033p:plain

CentOS側の設定

  • CentOS7をインストールする

f:id:raichel:20160630231711p:plain

  • 言語を選択する
    • 僕はUSキーボードなのでEnglish English(United States)を選択

f:id:raichel:20160630231724p:plain

f:id:raichel:20160630231741p:plain

  • あとは以下の状態と同じ設定ができてればおk
    • できていたら右下の青いボタンをクリック

f:id:raichel:20160630231805p:plain

  • rootユーザの設定の設定

  • ユーザの設定は以下

f:id:raichel:20160630231828p:plain

  • 設定完了後は右下の青いボタンを押して再起動

f:id:raichel:20160630231848p:plain

ユーザの情報

アカウント Password グループ
root vagrant wheel
vagrant vagrant

Macのターミナルから作成した仮想マシンに接続する

ssh -p 2222 root@localhost

sudoコマンドの設定

vagrantユーザがパスワード無しでsudo実行可能とする。

  • 設定ファイルを開く
visudo
  • 設定を以下のように変更する
Defaults    requiretty

         ↓
          
# Defaults    requiretty
%vagrant  ALL=(ALL)       NOPASSWD:ALL

selinuxの無効化

  • 設定ファイルを変更する
vi /etc/sysconfig/selinux
  • 以下のように設定を変更する
# enforcingからdisabledに変更
SELINUX=disabled

firewallを停止する

systemctl stop firewalld
systemctl disable firewalld

sshの設定

  • vagrantSSHする際に使用するInsecure Private Keyを登録しておく。
mkdir /home/vagrant/.ssh
chmod 700 /home/vagrant/.ssh
curl https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub >> /home/vagrant/.ssh/authorized_keys
chmod 600 /home/vagrant/.ssh/authorized_keys
chown -R vagrant:vagrant /home/vagrant/.ssh

パッケージマネージャーの更新

  • パッケージマネージャーを更新する
yum update -y
  • 仮想環境を再起動する
reboot

Guest Additionsインストール

  • Guest Additionsをインストールする

    1. VirtualBox(別ウィンドウで起動している)のメニューからDevicesを選択
    2. Devicesの中に Install Guest Additions CD image... をクリック
  • Guest Additionsをマウントするディレクトリを作成する

mkdir -p /mnt/cdrom
  • Guest Additionsをマウントする
mount -r /dev/cdrom /mnt/cdrom
  • VBoxLinuxAdditions.runを実行する
sh /mnt/cdrom/VBoxLinuxAdditions.run
  • 以下のエラーは関係ないので無視

Could not find the X.Org or XFree86 Window System, skipping.

  • マウントを解除する
umount /mnt/cdrom
  • 仮想ドライブからディスクを除去する
    1. VirtualBox(別ウィンドウで起動している)のメニューからDevicesを選択
    2. Devicesの中に Optical Drives をクリック
    3. Remove disk from virtual drive をクリック
    4. Force Unmount をクリック

VagrantBox作成前のお掃除

  • yumで利用したファイルのcacheを削除
yum clean all

vagrantはネットワークの設定をvagrantが行うので既存の設定ファイル等を削除する

  • ifcfg-enp0s3の削除
rm /etc/sysconfig/network-scripts/ifcfg-enp0s3
  • udevルールの削除
rm /etc/udev/rules.d/70-persistent-ipoib.rules

フラグメンテーションを解消

  • box作成時の圧縮率をあげるため
dd if=/dev/zero of=/EMPTY bs=1M
rm -f /EMPTY
  • historyを削除する
history -c

仮想マシンを終了させる

shutdown -h now

Boxを作成する前に

作業をしやすくするために行ったポートフォワーディングの設定を削除する。

f:id:raichel:20160630231901p:plain

  1. 仮想マシンの設定を開く。
  2. ネットワークのアダプター1(NAT)を選択し、「高度」の内容を展開。
  3. 下部に表示される「ポートフォワーディング」ボタンを押してメニューを表示。
  4. 作成した項目を選択してDelキーを押して削除。その後下部のOKボタンを押す。
  5. 設定画面のOKボタンを押す。

boxの作成

  • ※CentOS72(1511)x64って名前は使えないのでCentOS72x64に変更しておきます。
vagrant package --base "仮想マシンの名前" --output box名.box

今回作成したboxを使う方法は以下

  • boxを登録
vagrant box add CentOS72x64 作成したboxのディレクトリのパス/CentOS72x64.box
  • 設定ファイルの作成
vagrant init CentOS72x64
  • 起動
vagrant up
  • 接続
vagrant ssh

作るのめんどくせーからこの環境使わせろよって人向け

  • boxを登録
vagrant box add raichel/CentOS72x64
  • 設定ファイルの作成
vagrant init raichel/CentOS72x64;
  • 起動
vagrant up
  • 接続
vagrant ssh

最後に

  • 技術者なんで自分で作りました。

さくらVPSに入れたMySQL5.7の初期設定を行った

MySQL5.7 のrootユーザーの初期パスワードを取得

  • 以下コマンド
sudo cat /var/log/mysqld.log | grep root
  • 結果は以下
[Note] A temporary password is generated for root@localhost:初期パスワード

MySQL5.7の初期設定

  • 設定コマンド
mysql_secure_installation
  • 以下対話しながら設定
Securing the MySQL server deployment.

Enter password for user root:初期パスワード

The existing password for the user account root has expired. Please set a new password.

New password:8文字以上、英大文字小文字数字記号の4種類を含む

Re-enter new password:8文字以上、英大文字小文字数字記号の4種類を含む
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:8文字以上、英大文字小文字数字記号の4種類を含む

Re-enter new password:8文字以上、英大文字小文字数字記号の4種類を含む

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

MySQL5.7の設定ファイルによる設定の変更

  • 設定ファイルを開く
sudo vim /etc/my.cnf
  • 以下を[mysqld]配下の最後に追記
# MySQL サーバーのデータベースで利用する文字コードに UTF-8 を指定
character-set-server = utf8
# パスワード変更の有効期限を無効化
default_password_lifetime = 0

おもったこと

  • ここしばらくセキュリティ周りを意識しはじめた
  • パスワードなどは1Passwordで生成するようにしてる

参考元

MySQL 5.7 をインストールしたら最初に行うセットアップ | WEB ARCH LABO

さくらVPSにMySQL5.7を導入した

mariaDBを削除

 CentOS 7 には mariaDB という MySQL 互換のデータベースサーバーがデフォルトでインストールされている場合がありますので、これからインストールする MySQL と競合を起こさないように削除しておきましょう。

sudo yum remove -y mariadb-libs

MySQL公式yumリポジトリの追加

  • 以下コマンド
sudo yum localinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

yumに追加したパッケージが正しいか確認する

  • 以下コマンド
sudo yum info mysql-community-server
  • 結果は以下
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 5.7.13
リリース            : 1.el7
容量                : 151 M
リポジトリー        : mysql57-community/x86_64
要約                : A very fast and reliable SQL database server
URL                 : http://www.mysql.com/
ライセンス          : Copyright (c) 2000, 2016, Oracle and/or its 

MySQL5.7をinstallする

  • 以下コマンド
sudo yum -y install mysql-community-server

導入したMySQLのバージョンを確認する

  • 以下コマンド
mysqld --version
  • 結果は以下
mysqld  Ver 5.7.13 for Linux on x86_64 (MySQL Community Server (GPL))

MySQLを起動

sudo systemctl start mysqld.service

MySQLを自動起動

sudo systemctl enable mysqld.service