gosoly

ゆっくりと趣味に浸る。

CloudGarageにSambaを構築

f:id:ban367:20171201001153p:plain

CloudGarage Advent Calendar 2017 2日目です。

ロゴはちょっとサンバ感出してみました。

はじめに

「ストレージ速度が頭のおかしいCloudGarageならNASにするとめっちゃ早いんじゃね?」っと思い、試してみました。

以前、ddで測定した結果がこんな感じです。

1GB/sぐらい出てます。
クラウドサービスと比べても、この速度は異常です(褒め言葉)

そんなこんなで、高速なNASサーバーを夢見て、サクッとSambaを入れてストレージとしての速度を検証しました。

インスタンス作成

構成

  • CentOS7.3
  • ポート全開放(とりあえず試すだけなので)

他、適当に設定。

Samba構築

特に特殊なことはなく、ありふれたセットアップ方法
※悩んでも30分アレば終わる

sambaインストール

yum install samba samba-client samba-common -y

設定ファイルのバックアップ

cp /etc/samba/smb.conf /etc/samba/smb.conf.bk

設定を変更

vi /etc/samba/smb.conf

設定内容(主に追記変更箇所のみ)

[global]
        workgroup = WORKGROUP
        server string = Samba Server %v
        netbios name = centos7
        security = user
        map to guest = bad user
        dns proxy = no
        dos charset = CP932
        unix charset = UTF8

~~~~~~~~~~~~~~
省略
~~~~~~~~~~~~~~

[Share]
        path = /samba/share/
        browsable = yes
        writable = yes
        guest ok = yes
        read only = no

共有ディレクトリ設定

上でpathに設定したディレクトリを生成

mkdir -p /samba/share
chmod -R 0777 /samba/share
chown -R nobody:nobody /samba/share

自動起動設定

systemctl enable smb.service
systemctl enable nmb.service

再起動

systemctl restart smb.service
systemctl restart nmb.service

サーバーのユーザーの追加

useradd bany
passwd bany
# 任意のユーザー名

sambaにユーザーを紐付け

pdbedit -a bany
pdbedit --list

完成!

あとはPCにネットワークストレージを追加するだけ。

もともとインスタンスにファイアーウォールやSELinuxが設定されていないので、この状態で繋がるはずです。
繋がらなかったら家のネット環境でポートが殺されているかもです。
※我が家はルーターにポートが殺されていて格闘しましたw

本格的に運用を考える場合は、セキュリティに十分気をつけて構築を行ってください。

MacでSambaのストレージが遅いとき

パケット証明でSMBの接続が遅くなってしまう場合は、以下でパケット証明を無効化することで改善

公式の案内

sudo su -
echo "[default]" > /etc/nsmb.conf
echo signing_required=no >> /etc/nsmb.conf

ストレージ速度結果

AmorphousDiskMarkを使い、ストレージの速度を測定しました。

結果このような数値に…(あまりにも速度が出なかったので50MiBで検証)

f:id:ban367:20171130231204p:plain:w300

めっちゃ遅い… 実際に転送したら1GBに3分ぐらいかかりました。

なるべく早いところでっと思い、回線速度は以下の条件で試したのですが、何が悪かったのかこんな速度でした。

f:id:ban367:20171130231213p:plain:w300

まとめ

こんな結果がオチになってしまいましたが、ネットワーク設定次第?でもっと良い速度が出るのではないかと思います。
※もしかしてサーバーへの転送速度の限界?

こちら、詳しいクラウドガレージャーがいらっしゃれば、何かコメント残していただけるとうれしいです!

お次は、@ore-publicさんです。よろしくお願いします!

iPhoneXとiPhone6sのカメラ比較

f:id:ban367:20171103175756j:plain

初期設定を終わらせ、無事にデータ移行も完了したので、今まで使っていた6sをさよならバイバイする前にかんたんにカメラの比較をしてみました。

撮り比べ

通常のカメラアプリの写真モードでの撮影です。
夜景に強くなったみたいなので、夕暮れ時に試し撮りしました。

iPhone6s

f:id:ban367:20171103180104j:plain

暗いです、肉眼よりもだいぶ暗いです。
ノイズも多め。

iPhoneX

f:id:ban367:20171103180116j:plain

驚きの明るさ、F1.8の高級コンデジクラスと張り合える予感もする…

雑記

LightroomのアプリがXに対応しDNG形式で撮影できたらコンデジは本格的にいらない気がしてきた。
※一応Lightroomのカメラは使えますが、下のカメラでは撮影してないようなので、Xへの対応が楽しみです。

ここまで撮れると家に埋まってるXQ1よりも綺麗に取れる気がする…

WindowsServerにWordpressを導入する

DSCF0599.jpg

表題の作業をすることがあったので備忘録として。
※今後OSの選択肢が合ったら、間違いなく使いたくはないOSベスト1です(笑)

Windowsの設定

以下の項目について設定の確認

  • Windowsアップデートの自動更新設定
  • 日本語化
    • AWSの場合デフォルト英語でわかりにくいので
  • タイムゾーンの設定
  • ファイルの拡張子表示(一応)

IISのログを自動削除

そのままだと結構な速度でログがたまり容量を圧迫するので適当な期間で削除する設定

システムとセキュリティ > 管理ツール > タスクスケジューラ > 基本タスクの作成

参考リンク

タスクスケジューラの基本的な使い方(Windows 7/8.x/10編) (1/2):Tech TIPS - @IT

とりあえず2週間分の設定

forfiles /P "C:\inetpub\logs\LogFiles\W3SVC1" /M *.log /C "cmd /c if @isdir==FALSE del /s @path" /D -14

IISのインストール

参考リンク

WordPress を Windows Server 2012 R2 にインストールする: ある SE のつぶやき

手順

インストーラーに従いインストール

  • 役割と機能の追加にてWebサーバー(IIS)を選択

WordPressのインストール

Web Platform Installerをダウンロードし実行

https://www.microsoft.com/web/downloads/platform.aspx

手順

PHPの設定

パーマリンクをカスタムすることを想定しTEMPディレクトリを設定

php.iniの下記を変更しIISを再起動する。
※Web Platform Installerからインストールすると自動的に設定が記述されているのでよく確認すること

upload_tmp_dir = “C:\TEMP/”

WordPress/wp-content/uploadsフォルダに、IUSR、IIS_USRSのアクセス権限をフルアクセスを付与

wp-config.phpに作業用ディレクトリの指定を表記

define (‘WP_TEMP_DIR’, ‘C:\TEMP/’);

以上でおしまい。

セットアップはかんたんなのですが、フォルダのパーミッション等がわかりにくく、それ関係のエラーなどが起きたときにわかりにくい!
自動起動やWebサーバーの再起動などもどうにもわかりにくい…

Windowsでしかできないっということがない限りはWindowsServerは選択肢から外すのがきっと吉。

Nginxのログを圧縮してローテートさせる

DSCF0316.jpg

Nginxのaccess.logとerror.logのローテートを行った際の設定メモ

やりたかったこと

  • 任意のディレクトリにlogを保存
  • 圧縮して保存
  • ファイル名にはローテート時の日時を入れる

cronあたりで組んでおかないとできないかと思ったのですが、logrotateにシェルスクリプトを書くことでどうにかなるようでしたので、そちらで実装

設定

設定の変更

vi /etc/logrotate.d/nginx

変更内容

/var/log/nginx/*.log {
        weekly
        missingok
        rotate 1
        delaycompress
        notifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
            DIR="/log" # 保存ディレクトリ
            EXT=`date +%Y%m%d%H%M`
            for f in $1
            do
                ls $f.1 >/dev/null 2>&1
                if [ $? -eq 0 ] ; then
                    mv $f.1 $f.$EXT
                    gzip $f.$EXT
                    mv $f.$EXT.gz $DIR
                fi
            done
            /etc/init.d/nginx rotate >/dev/null 2>&1
        endscript
}

gzipを使っているので、環境次第で別途インストールまたはtarなどで代用

動作テスト

ローテートの設定の強制実行

logrotate -f /etc/logrotate.d/nginx

yumでインストールした項目をまとめてアンインストール

DSCF1287.jpg

phpやzabbixなどインストールするとphp-hoge, php-fugaなど複数のアプリケーションがインストールされるます。

バージョンとか間違えたり入れ直す際にアンインストールをするが、一つずつコピペするのはしんどいので、ワンライナーでアンインストールさせる。

インストールされている項目を取得

例としてzabbixで行います。

yum list installed | grep zabbix | awk '{print $1}' | tr '\n' ' '

まとめてアンインストール

得た結果をそのままyum removeに渡してアンインストールさせます。
上記のコマンドをバッククオートで括ることで、コマンドの引数で利用できます。

yum remove `yum list installed | grep zabbix | awk '{print $1}' | tr '\n' ' '`

awkさまさまです。

消してしまったgit stashを戻す秘術

DSCF1164.jpg

誤って使わないっと思いstashを吹き飛ばしたところ、実は必要なstashだった時に活躍するコマンド

履歴から探す

以下のコマンドでstashのリストを取得します。
ググると他にも取得の仕方があるようですが、個人的に一番わかり易いリストだと思います。

git fsck | awk '/dangling commit/ {print $3}' | xargs -J% git show --summary --oneline

どの程度stashを使っていたかによりここで地獄の度合いが変わるのですが、きちんと名前をつけていたりするとラッキーです。

復旧

stashを適応させる

git cherry-pick -n -m1 見つけたsha1

消してしまった場合を考え、重要そうなstashは名前書いておくと、こういった時に助かるっと痛感しました。

あとがき

いやほんと、ブランチ切り替えるから一旦作業stashしておいたのを消し飛ばしたときは死んだかと思いました(笑)

Zabbixのインストールでsystemdを要求される

DSCF0241.jpg

AmazonLinuxにZabbixエージェントを入れようとしたとき以下のエラーで怒られた。

Requires: systemd

どうやらsystemdがご不在だったようです。
今ゼロからAmazonLinuxを立てるとご在宅のようですが、ちょっと前に立てておいたインスタンスですとダメみたいです。

また、CentOSとほぼ同じですが、エラーしない場合のAmazonLinuxへのインストールも備忘録として下に残します。

インストールする手段

この場合、Zabbxを入れる手段として以下のパターンがあります。

  • Requires: systemdを解決させる
  • ソースからインストール
  • 見なかったことにして諦める

ちなみに1つ目は既存の環境に影響を与えかねないのでボツ。
新規サーバーなので既存なんて関係ない!って言う場合は黙ってインスタンスのOS変えるほうが懸命です。
推奨は2つ目です。

Zabbixサーバーを入れる場合色々と準備が必要ですが、エージェントのみですとソースから入れるとしても割りと楽にできます。
サーバーの方をソースよりインストールする場合は少々やり方が変わります。

ソースからインストール

公式ドキュメントはこちらです(2017/10/04の時点でバージョン2.2) https://www.zabbix.com/documentation/2.2/jp/manual/installation/install

ユーザーの追加

groupadd zabbix
useradd -g zabbix zabbix

ソースファイルの展開

wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.0/zabbix-3.0.0.tar.gz
tar -zxvf zabbix-3.0.0.tar.gz

agentを指定してインストール

cd zabbix-3.0.0
./configure --enable-agent
make install

設定の書き換え

vi /usr/local/etc/zabbix_agentd.conf

sbinへのPathが通ってないので、念のため通しておく

echo 'export PATH="/usr/local/sbin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

実行

zabbix_agentd

yumからインストール

現在最新が3.0となります(2017/10/05)
基本yumからインストールするのが楽で良いです。

レポジトリ追加

rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm

インストール

yum -y install zabbix-agent

設定書き換えて起動

service zabbix-agent start

自動起動

chkconfig zabbix-agent on

時間がなくても勉強ができるUdemyのススメ

DSCF0689.jpg

プログラムの勉強をしようと思いつつも、平日は時間がない…
かと言って休日に真剣に取り組むかというと欲望に負ける…

そんなエンジニアの助けになるのがUdemyのオンライン講座です。
※エンジニア向けの講座が大半ですが、それ以外にAdobeやデザインといった多種多様な講座があります。

少しずつでも新しい技術を、技術的に弱い部分をきちんと勉強しよう…
っと思い最近こちらを利用し始め、思っていた以上に便利なサービスなため紹介。

https://www.udemy.com/jp/www.udemy.com

1講座が激安

ページにアクセスすると飛び込んでくる1講座数万円のリスト、だがキャンペーンやアプリからのセールなど、数多くの割引があります。
しかも割引額が非常に大きく、実際は多くの講座が1,200〜1,800円で購入できます。
※むしろそれ以上の金額を払って買っている人なんていないんじゃないかな…

講座に期限がない

嬉しいことに購入した講座に期限はなく、いつまでも利用できます。
いつでも予習・復習ができるので、最初は聞くだけ流しで聞いて、あとからPCと一緒に実践してみる!っと言ったやり方もできます。

講座はアプリにダウンロードが可能

もちろんUdemyのアプリの機能になりますが、講座の動画データーをダウンロードしておくことができます。
この機能のため、移動中や通勤中にパケットや通信状況を気にすることなく利用ができます。

短い時間に利用できる

講座といったら一回受けたら終わるまで席を立てない!っというデメリットが有ると思います。
Udemyでは講座の動画の一時停止や、最後に見た場所が記憶されオンラインで共有されます。
家でPCで見て、続きは通勤中にっという使い方ができます。
また、各講座はセクションごとにわけられており、短い細かいセクションで構成されているものが多く、1つの内容に集中して取り組めるよう構成されています。

倍速再生が便利

講座の再生に倍速機能があります。
それだけなのですが、とても便利な機能です。

速度 = [0.5x, 0.75x, 1x, 1.25x, 1.5x, 2x]

選べる6速です。

早口な講師に0.75xは便利で、通常は1.25xのちょい早でサクサク聞くっというのが便利です。
知っている知識だけど一応聞いておこうっという時に1.5xや2xが重宝します。 0.5xは…使わないかな?

気軽にできる

兎にも角にもこの一言に尽きます。

セミナーなどは一気に集中して学ぶことができますが、技術的について行けなかったり「あ、今のもう一回聞きたい!」っと言ったこともあります。
また、実際に足を運ぶ敷居の高さがあります。
でもオンラインでなら、少しずつでも学ぶことができる気軽さが何と言っても便利です。

まあ、いつでもできるからっと言って結局勉強しなくなる可能性もあるので、講座を見なくても音楽の代わりに聞いておくなど、何事も習慣づけるのは大切です。

Classic Load BalancerからApplication Load Balancerに変更したときのNginxの注意点

f:id:ban367:20171001210817j:plain

AWSのClassic Load Balancer(以下、CLB)からApplication Load Balancer(以下、ALB)に変更したときに、Nginxがコケたお話。
リダイレクト設定やSSL設定をしていた場合、一手間加える必要があった…。

前置き

今まではCLBにて運用していたサイトを、サーバーを増やしALBで振り分けてサーバーの負荷を軽減し強くすることが目的。
これを成し遂げるためにCLBからALBに変え、ロードバランサーの設定を調整し、いざ接続したら「502 bad gateway」に襲われた。

旧設定

今まで使っていたNginxの設定(一部抜粋)
CMS(app)とAPI(api)はhttps、LPはhttpです。

# hoge.jpをwww.hoge.jpに統一
server {
        listen 80;
        server_name hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}
server {
        listen 443;
        server_name hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}

# ルーティング
upstream unicorn {
        server unix:/tmp/unicorn.sock;
}
server {
        listen 443;
        server_name www.hoge.jp;
        fastcgi_read_timeout 1800s;

        location ~ ^/(api|app) {
                root /home/hoge/src/public;
                ここらへんにunicron設定
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}
server {
        listen 80;
        server_name www.hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                root /home/hoge/lp-site/public;
        }
}

変わった点としては、hoge.jpからwww.hoge.jpにリダイレクトすることと、unicronを使っていることぐらいかと思います。

このような設定でALBで使おうとしたところ、怒られました…
しかもerror_logには何も出ないという辛さ。。。

新設定

ダメだった点

  • AWSロードバランサーSSL証明書を付けるだけでなく、Nginx内にもきちんと書く必要あり
  • listenの設定にdefault_serverが必要
    • リダイレクト設定をしているせいで、付けておかないと、きちんとルーティングしてくれない…

新しいNginxの設定

# hoge.jpをwww.hoge.jpに統一
server {
        listen 80;
        server_name hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}
server {
        listen 443;
        server_name hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}

# ルーティング
upstream unicorn {
        server unix:/tmp/unicorn.sock;
}
server {
        listen 443 default_server;
        server_name www.hoge.jp;
        fastcgi_read_timeout 1800s;

        ssl on;
        ssl_certificate /etc/nginx/fuga.pem;
        ssl_certificate_key /etc/nginx/fuga.key;

        location ~ ^/(api|app) {
                root /home/hoge/src/public;
                ここらへんにunicron設定
        }
        location / {
                return 301 http://www.hoge.jp$request_uri;
        }
}
server {
        listen 80;
        server_name www.hoge.jp;

        location ~ ^/(api|app) {
                return 301 https://www.hoge.jp$request_uri;
        }
        location / {
                root /home/hoge/lp-site/public;
        }
}

まとめ

CLBは割りと融通きかせてくれたみたいだけれど、ALBだとしっかりと設定しておかないとダメみたい。
手抜きっといううか、こういう細かい所の設定までしっかりと熟知しておかないと、気づくに気づけないなっとすごく痛感した。

iOSのマニアックな便利機能

f:id:ban367:20171001212459j:plain

iOS11になり、画面の明るさの自動調整がオンになったり、なにげに新しい機能が増えました。
そんな中、割と使ってないんじゃね?っという個人的に便利な機能と忘れやすい備忘録。

明るさの自動調節

一般 > アクセシビリティ > ディスプレイ調整 > 明るさの自動調節

iOS11に追加され、OSアップデートと同時に勝手にオンになっていた機能。
大多数の人が「あれ?自動調節機能有効になってる?」っと思ったものの設定がここにあります。

検索(Quick Look)

ホーム画面 > 下にスワイプ

なんかiOSが更新されちゃっかりとMacと同じぐらいに便利になっていた機能。
Macユーザーでしたらお馴染みの機能ですね。

アプリ名がわからない時に、アプリ名を検索に入れればすぐに開け、「$100」っと入れれば為替レートが表示されます。
メールや検索もデフォルトアプリに限られますが、この検索窓から操作もできます。
また、iPhoneに関してはコントロールセンターから電卓が開けますが、ここに計算式を入れれば電卓として利用できます。

AirDrop

一般 > AirDrop

Apple製品同士でデーターをやり取りする便利機能。

Macで開いているURLをiPhoneへ送信したり、ファイルを送信したりとかなり便利。
ただし、きちんと管理していないと赤の他人にデータ送ったりもできるので注意。

Siriとチャットする

一般 > アクセシビリティ > Siri > Siriniタイプ入力

多くの人が使わないSiriを気軽に使いやすくする機能。

なにげにググるより聞いたほうが早い時もあります。
黙って検索を使ったほうが便利ですが、たまには気分転換に。

ホームボタン3回押し

一般 > アクセシビリティ > ショートカット

ホームボタンをトリプルクリックした際の機能を割り当てられます。

間違えても3連打はそうそうすることがないので、ミスって使っちゃうことはほぼないです。
どちらかと言えば存在を忘れます(笑)

3D Touch

一般 > アクセシビリティ > 3D Touch

6Sから備わった機能。
結構やれることが多いのに、影に隠れた悲しいやつ。

深く押し込むようにグッとすると、対応している場合何かが起きます!
自分がよく使う例として

  • LINEに既読をつけずに中身をちら見(たまにミスって普通に開くw)
  • 文字入力中にカーソルに位置変更、文字のドラッグ
  • ChromeQRコード撮影

いざ挙げてみると対して使ってないですが、気になると押し込む癖はあって損はないかもです。

ちなみにコントロールセンターも押し込むことで今までは表示されていたAirDropの設定等を出すことができます。

設定の検索

設定やメッセージなどのアプリ

設定やメッセージアプリを起動し、下にスクロールすると検索ボックスが出てきます。
あの設定どこに合ったっけ?っと思い入れてみるとピンポイントで出してくれるスグレモノ。

あとがき

iOSが上がると機能が増えるだけでなく、さり気なく既存機能も強化されていたりするので、一度見捨てた機能ももう一度使ってみると新しい発見があるかもしれません。