mount_osxfuse: the file system is not available (255)の解決方法

久しぶりにsshfsでリモートHDをマウントしようとしたら、まずFUSEのバージョンが古いと言われました。
FUSEはどうやって入れたっけ?!となかなか思い出せないんですが、幸い下記の「設定」画面で「FUSE」に入ると、ちゃんとアップデート機能が用意されました。

Setting FUSE

無事アップデート終わると、再度マウントしようとしたら、今度はこんなエラーが出ました。

mount_osxfuse: the file system is not available (255)

おそらくファイルシステムが更新されてないだけだと思いますが、Macを再起動します?!いあぁ〜ちょっと面倒ですね。
早速調べてしてみたら、参考1で紹介されたように、下記コマンド一発で解決できました。

sudo kextunload -b com.apple.filesystems.smbfs

Unloadするだけでいいのかなぁと思いながらも、再度マウントするとうまくできました。

参考
  1. mount_osxfuse: the OSXFUSE file system is not available (255) fuse: failed to mount file system: Undefined error: 0 #27293

Findコマンドの便利な使い方

基本的な使い方

find . -name "ファイル名"

ディレクトリー直下すべての.txtファイル検索

find . -name *.txt -type f

ファイルサイズ指定

512k以上のファイルを検索:
find . -type f -size +512k

512k以上のファイルをリストアップ:
find . -type f -size +512k -exec ls -lh {} \;
詳細が見れるようになります。

1Mb以下のファイルを削除:
find . -type f -size -1M -exec rm {} \;

詳しくは参考1が参考になります。

時間指定

5分以内修正されたファイルを検索:
find . -type f -mmin -5
直近でいじったファイルの名前が忘れた時に役に立つでしょう。

30日以上経つすべてのファイルを削除:
find . -type f -mtime +30 | xargs rm -f
バックアップスクリプト書く時に役に立ちます。

詳しくは参考2が参考になります。

  1. Linux Tips: Find All Files of a Particular Size
  2. findコマンドのmtimeオプションまとめ

さくらレンタルサーバーでGit管理ツールGitoliteの構築

Gitの管理ツールと言えば、Githubが一番有名だと思いますが、個人や小規模のプロジェクトなら、Bitbucketがおすすめです。
なぜなら、無料で使うには、Githubはソースコードを公開しなければいけないのに対して、Bitbucketではリポジトリーをプライベートに設定できて、公開しなくて良いからです。

それなら別に自前のGit管理ツールなんかいらないじゃん〜となりますが、はい、基本的には問題ありません。^^;
私Bitbucketを5年程使ってきましたが、接続できないとなったのは1〜2回でしたし、ソースコードが消えたような問題もありませんでしたので、これは問題ないと言っていいでしょう。
つまり、ここの話は一日0.11%(2/(5*365))の確率で発生する問題の対策になります。^^b

ソース置くぐらいなら、VPSなどルート権限付のサーバーも必要なく、共用サーバーは十分だと思います。
サーバーにベタでリポジトリーを作り、そこにプッシュする手もありますが、Gitoliteのようなツールを使うと楽です。

参考1の公式インストール手順でも十分ですが、gitolite/install -ln ~/binすることで、bin/の中にgitoliteのリンクが生成されるだけで、クローンしたソースファイルを残さなくてはいけないのがあまり好きではなく、参考2の公式Githubのページに紹介された手順はおすすめです。

手順は以下になります。

  1. Gitolite管理者用のsshキーを生成
  2. Gitoliteのインストール
  3. Gitoliteのセットアップ

Gitolite管理者用のsshキーを生成

以下のコマンドでsshキーが生成されます。

ssh-keygen -t rsa -b 4096 -N '' -C "メールアドレス" -f ファイル名

ここの「-N ”」部分はパスフレーズをなしにするオプションですので、必要に応じて外しても問題ありません。

このキーファイルはローカルに作成したならば、公開鍵(ファイル名.pub)だけscpなどでレンタルサーバーにアップロードすれば良いです。
逆にサーバーで生成したら、秘密鍵(拡張子がない)をローカルにダウンロードする必要があると思います。

Gitoliteのインストール

レンタルサーバーにログインして以下のコマンドを実行します。

git clone https://github.com/sitaramc/gitolite
mkdir -p $HOME/bin
gitolite/install -to $HOME/bin

ここまでやれば、$HOME/binの下に以下のようなファイルが増えると思います。

VERSION		commands	gitolite-shell	syntactic-sugar
VREF		gitolite	lib		triggers

Gitoliteのセットアップ

ステップ1で準備した公開鍵のファイル名をgitkey.pubだとすれば良いです。

$HOME/bin/gitolite setup -pk gitkey.pub

そうすることで、$HOME/.ssh/authorized_keysの一番最後に以下のようなものが追加されるはずです。

# gitolite start
command="/home/レンタルサーバーユーザー名/gitolite/src/gitolite-shell 管理者用sshキー",no-port-forwarding
...(中略)...
# gitolite end

さくらインターネットさんのレンタルサーバーは既に$HOME/binを$PATHに入れてますので、再ログイン(もしくはsource $HOME/.cshrcかな?!)すればgitoliteコマンドが使えるようになるはずです。

終わりに

gitoliteコマンドの確認できたら、サーバーからクローンしたgitoliteディレクトリはもう不要ですので、消しても問題ありません。
(いえいえ、是非消してください。)

ここまでがレンタルサーバーにおいてのgitolite構築手順です。結構簡単でしたね。

使い方に関しては別途書く予定です!^^;

参考:
  1. quick install and setup
  2. sitaramc/gitolite

UbuntuでMongoDBのユーザー認証有効化

久しぶりにRailsのプロジェクトを再構築しようとしたら、当時メモしたMongoDBのユーザー認証有効化コマンドdb.addUser打つと下記のエラーが出来ました。

TypeError: db.addUser is not a function

調べて見たところ、認証の有効化は変わったようです。

この記事は基本的に下部参考の情報をかき集めてUbuntuで特化したものになります。

環境:
Ubuntu: 18.04.1 LTS
MongoDB: v3.6.3

管理者ユーザーの追加:

use admin
db.createUser(
  {
    user: "任意の管理者ユーザー名",
    pwd: "管理者のパスワード",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

一般ユーザーの追加:

use データベース名
db.createUser(
  {
    user: "任意の一般ユーザー名",
    pwd: "一般ユーザーのパスワード",
    roles: [ { role: "readWrite", db: "データベース名" } ]
  }
)

※基本的には日本語をそれに応じたものに変えればコピペできるようになってます。

認証を有効化:

$ sudo vi /etc/mongodb.conf

22行あたりの#auth = trueのコメントアウトを外します:

auth = true

MongoDBを再起動します:

$ sudo service mongodb restart

認証の有効化は以上です。
以降ログインする場合は

use データベース名
db.auth("ユーザー名","パスワード");
#1が返ってきたら成功

でログインできます。

認証が有効にした後に一般ユーザー追加した場合、上記の一般ユーザー追加手順の前に、まず管理者としてログイン必要があります。
その場合は以下になります。

use admin
db.auth("管理者名","管理者パスワード");
#1が返ってきたら続きは上記一般ユーザー追加手順

ちなみに、なぜ再構築のような面倒くさいことするかというと、2年前にDigitalOceanで作ったサーバー(そちらでは「Droplet」と言いますが)は512MBメモリ+20GBディスクで毎月$5でしたが、最近となっては同じ毎月$5で1Gメモリ+25GBディスクになっています。

うぅん〜あなたなら、どちら取ります?!^^;

はい、そこの「イメージ作れば簡単に移せるじゃん?」と思うあなた、天才です!
私自身がそう思ったのはこの記事を書いてるただ今です!

実際スナップショットとってみたら、スペックが違ってもちゃんとイメージからDroplet作れるようです。
#最後まで作ってませんが、「Create Droplet」で最新$5タイプを選択できるところまで確認しました。
僕がその発想なかったのは、「2年前そのサーバーにデプロイしたプロジェクトはこの2年間ずっとステージング環境で動かしたから、これを機にプロダクション環境で作り変えようと思ったから」という言い訳にしましょう!^^;


参考:
  1. Enable Auth #公式
  2. MongoDB の アクセス制御 (ユーザー認証) を 有効化する 方法 #Windows環境
  3. MongoDBのユーザ管理 #CentOS環境
  4. Ubuntu 16.04 LTS で MongoDB の認証を有効にする方法 #管理者ユーザーの追加紹介のみ