Latest Publications

SynologyのNASでMacのTimeMachine対応させた外付けHDDを使う

SynologyのNASにはUSBがあり、外付けHDDが接続可能。
MacのTimeMachineでも使っている外付けHDDを接続してデータ移動をさせようとすると
「読み込み専用」と認識されてしまい、使えなかったので、無理やり使えるようにしたメモ。

ディスクはhfsplusという形式でフォーマットされていたが、
これがこのままではSynology NASでは読み込み専用になってしまうよう。

まずは外付けHDDをMacにつなげて、terminalから

#diskutil list
で接続状況を確認。

この時には
/dev/disk4
で接続されていた。

#mount
でマウント状況を確認すると、該当ディスクは
/dev/disk4s2
となっていて、その属性に journaled というのがあるが、これを外す必要があるみたい。

#sudo diskutil disableJournal force disk4s2

とするとエラーが出たが、再度
#mount
すると journaled は外れていた。

外付けHDDをMacから外し、SynologyのNASに接続。

MacのterminalからSSHでNASに接続し、
#mount
でマウント状況を確認。
こちらでは
/dev/sdq2 on /volumeUSB1/usbshare1-2
となっていた。

属性の最初にある ro が読み取り専用を表している。
念の為NASのGUIから色々触ってみたが駄目だった。

#sudo -i
自分のパスワードEnterでrootになり
#umount /dev/sdq2
#mount -t hfsplus /dev/sdq2 /volumeUSB1/usbshare1-2
#mount
で確認すると、属性がrwになっていて、無事書き込みができるようになった。

Unable to load dynamic library ‘mcrypt.so’

PHPをアップグレードしたら、表題のエラーが出るようになった。

mcryptはphp7.2から削除されたとのこと。
エラーを出さないようにするにどうしたらいいかと色々やって、

/etc/php.d/mcrypt.iniをリネームしたら消えた。

Androidのエラー ”http://connectivitycheck.gstatic.com/generate_204″

サブ機のAndroidがある日から
“http://connectivitycheck.gstatic.com/generate_204”
にアクセスできません。

というようなエラーを出すようになった。
どんなアプリを使っていても強制的にこのエラー画面が出てくるので困る。

調べてみると、AndroidはこのURLに定期的にチェックをしに行き、
ネットに接続可能かを確かめるとのこと。
ただ、こんなエラーが出るものの他アプリではちゃんとネットにつながっている。

しばらく原因が不明だったが、一度だけエラー画面と同時に
一瞬、タイ語の画面が出た。

そのAndroidは日本ではSIMは運用していないが、
タイに旅行に行った際に買ったローミング用のSIMを2枚入れていた。
SIMは挿してはいるが使っておらず、次にどこか海外に旅行に行く時に設定するため挿したままにしていた。

もしやと思い、設定でSIMを無効にしたらエラーが出なくなった。
SIMを有効にしていると、WiFiにつながっていてもたまにSIMのデータ通信経由でチェックに行くのかもしれない。

Google広告で不承認: 機能していないリンク先

Google広告で、URLは絶対にあってるのに
「不承認: 機能していないリンク先」と出て、原因は500エラーとなる。

旧Search Consoleの「Fetch as Google」でチェックしても表示されてるし
描画もちゃんとされている。

「robots.txt テスター」でチェックしても対象になってる。

色々と調べて、新Search ConsoleのURL検査のライブテストをやったら
ここで500エラーの表示がついに出た。

現象さえ確認できれば後はチェックしていくだけで、
システムの色んなページで可能性のある部分を消しながらチェックしていき、
原因を追求。

今回の原因は
$_SERVER[‘HTTP_ACCEPT_LANGUAGE’]
をそのまま使っていたことが原因で、ブラウザで見てもエラーにはならなかった。

isset($_SERVER[‘HTTP_ACCEPT_LANGUAGE’])をかますことで解決。

Laravelのtokenエラーになる

Laravelで、それまで問題なく動いていたものが
ある日、Tokenのエラーで動かなくなった。

全く同じソースでも別環境だと動き、その環境でだけ動かない。
試行錯誤の後、Vagrantで動かしていた環境を破棄して再構築したら動くようになった。

Apacheの設定が変わってしまった時のチェック箇所

macportsのアップグレードの影響だと思うが
localhostを開いたら

It works!

というApacheのデフォルトの表示が出て愕然。
設定をしばらく触っていなかったので、どこをいじればよいか探すのに苦労した。

ps -a | grep httpd

などで動いているhttpdを探し、

httpd -V

参照しているhttpd.confの箇所がわかるので
それを書き換えれば解決。

ちなみに
/opt/local/sbin/httpd
で動いてるconfファイルが
“etc/apache2/httpd.conf”
だった時のパスは
/opt/local/etc/apache2/httpd.conf
だった。

VirtualBoxでのWindows10のネット接続が不安定になる問題の解消

Mac上のVirtualBoxで動かしているwindowsを
10にアップグレードした後で、ブラウジングがかなり不安定になった。

BeingはつながるもののYahooはつながらず、
他のサイトもリロードを繰り返すと5回に1回つながるなど。

複数のブラウザで接続したところ
各サイトごとで同じ現象がでるのでブラウザの問題ではない。

事例を調べながらWindowsの設定をかなり変更したが解決せず。
(ネットワーク周りの設定をIP V4のみにするなど)

ネットで調べても同じような現象が起きている人も見当たらなかったので
Windows10が原因ではなく、VirtualBoxが原因かと思い
ネットワーク周りの設定を変えてみた。

具体的には、VirtualBoxのネットワーク項目で
割り当てが「NAT」になっていたのを「ブリッジアダプター」に変更すると
正常に動くようになった。

Apacheのチューニング箇所

忘れがちなのでメモ。

/etc/httpd/conf/httpd.conf

<IfModule prefork.c>
のあたり。

Google Spread Sheetをプログラムから操作

昔作ってたスプレッドシートからデータを取得するプログラムが動かなくなってた。
2015年5月に昔の認証方法が使えなくなり、
OAuth2.0だけになったとか。

指定方法を忘れていたのでメモ。

GoogleのAPI Managerで該当のOAuth 2.0 クライアント IDを探す
https://console.developers.google.com/apis/credentials

クライアントID名をクリックすると詳細が表示され、

サービス アカウント
{アカウント名}
{hogehoge}@developer.gserviceaccount.com

というメールアドレス形式の表示が出る。
このメールアドレスをコピーし、
取得したいスプレッドシートで「共有」ボタンからメールアドレスを追加。

これで、このクライアントの認証で
特定のスプレッドシートにアクセスが可能になる。

1つのIPのサーバーで複数のSSLを無料で設定してみた

通常は1つのIPではSSLがひとつとなるが、
それを解決するSNIという仕組みをやってみた。

Apacheが2.2.12以降などバージョン指定があるが
現状のものが対応してた。

ブラウザによって対応の可否があるので注意が必要。
幅広い利用者へのSSLが必要な場合は従来のものが良さそう。
今時のブラウザで使えれば良いのなら問題なし。

Apacheのconfファイルを書き直すだけでできた。
非SSLのVirtualHostの設定と似た感じで
SSLのVirtualHostの設定もできるようになる。

また、1つは従来の証明書を使っていたが
それ以外はLet’s Encryptという無料で使えるサーバー証明書にチャレンジ。

鍵マークなどは出なかったりするようだが
SSL通信はちゃんとできるとのこと。

下記を参考にさせてもらった。
Let’s Encrypt の使い方 – Let’s Encrypt 総合ポータル

ドメイン指定がされている公開サーバーなら使えて、
証明書は90日間ごとに更新が必要。
cronでも自動更新の設定ができそう。

サーバーへのインストール時に
pythonのエラーが出てかなり困った。

/usr/bin/python
は2.6.6だったのに
エラーはpython2.7.11に関してでる。

そのため、
mv /usr/bin/python2.7 python2.7_old
と一時的に外すと解決した。

これがうまく行けば証明書ファイルがサーバー内に保存されるので
confファイルでそれを指定すれば良い。
通常の証明書の取得作業よりだいぶ簡単。

(追記)
取得できるのは7日間で5証明書とのことで制限があるみたい。