AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

IIS で運用してるウェブサービスのファイルアップロード機能で 404 エラーが出たとき

404 - ファイルまたはディレクトリが見つかりません

こんなやつ。

IIS の扱えるファイルサイズには制限がある

  • IIS マネージャ を開いて左ペインから、本エラーの出たサイトを選択する。
  • 中央ペインのアイコンに 要求フィルター アイコンがあるのでダブルクリックして開く(古いと 要求のフィルタリング という名前かも )
  • 右ペインに 機能設定の編集 が表示されるのでクリックする
  • 許可されたコンテンツ最大長 の項目が、 IIS で扱えるファイルの最大サイズ

たぶん標準は 10Mbyte とかそこらじゃないか?

タイムアウトを考慮せず 100000000 ( 100Mbyte ) とか 1000000000 ( 1Gbyte ) にしてしまえば良いのでは? って感じです!

Mojave のインストール USB を作成する

三連休中に Mojave に開発環境切り替えようとしてずっと寝てました。 艦これのイベントもE-1すらクリアしていないので今日は寝かせないぜぐへへ。

ここみれ

support.apple.com

mac の空き容量を 10Gbyte 確保する

のっけから難題というか、一番これが困りました。利用中の MacbookPro は Late2015 の一番やすいやつなので、 SSD が 128Gbyte 仕様なのです。 (コード書いたり、VirtualBox や Docker を動かすつもりがなかったのでその選択だったのですが、いま普通にコード書いてるしなんなら VirtualBox でエクスポートしてきた環境が保守作業で必要となり……うごご) で、AppStore からインストーラ取得するにしても、上記のように 10Gbyte は空き容量が確保できてないと「空き容量足りないからだめだよ」とはねられます。結局、

と、これらを削除することでなんとか空き容量を確保しました……。 ちなみに VirtualBox は維持するのが無理とわかっていたので、早い段階で外付けの SSD に逃がしていますが、 USB2.0 のため、 I/O が集中するとマウントが解除されて、仮想マシンイメージが破壊されたりして辛いです……。

AppStore からインストーラをダウンロードする

アップデート、みたいに書かれてて怖いですが、そのままボタンを押すとダウンロードが始まるでそれで構いません。 ダウンロード終了後は、インストール開始するウィンドウ開いてしまってヒエッとなりますが、右上の「macOS Mojave Installer」とかそんなやつから終了できます。

16Gbyte 以上の空き容量がある USB メモリを用意する

インストーラを実行すると、対象を一度フォーマットするので専用の USB メモリを用意したほうが良いですネ。以前までは 8Gbyte あればよかった気がするのですが、今回は 16Gbyte 必要とのことで……。作成したインストーラ 6Gbyte ちょっとしかないので、 8Gbyte でも良いきがするんだけどなー。

ターミナルからコマンドを実行する

El Capitan 環境で下記コマンドから作成しましたが、 --applicationpath は必要ありませんでした。

sudo /Applications/Install\ macOS\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/MyVolume

ちなみに、サイトによってはこれに追加ファイルをダウンロードするなどオプションを付与しているケースもありましたが、僕の環境ではなんかよくわからんけどエラーが出て Copy 開始する段階で処理が中断されるので、上記コマンドだけで実行しました。

以上です

調達してきた USB メモリは TOSHIBA のインポート品で 16Gbyte で税込み 700 円しませんでした。この週末に、既存の SSD の内容をクローンした HDD 作って、新規インストールする予定です。以降がわりとめんどいんだぁ……。

phpenv で libphp5.so を生み出す場合

CentOS なんかに phpenv を入れた時、以下の作業手順だと、 ~/.phpenv/ 以下にすべてが収まる。

phpenv のインストール

curl -L https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | bash
vi ~/.bashrc
git clone git://github.com/CHH/php-build.git ~/.phpenv/plugins/php-build
exec $SHELL -l

apxs をコンパイルオプションに追加する

今回は php 5.5.20 に用事があったので、上記のインストール先を反映すると ~/.phpenv/plugins/php-build/share/php-build/definitions/5.5.20 が、コンフィグ記載する対象となる。

configure_option "--with-mysql" "mysqlnd"
# ここ追加した
configure_option "--with-apxs2" "/usr/sbin/apxs"

install_package "https://secure.php.net/distributions/php-5.5.20.tar.bz2"
install_xdebug "2.5.5"
enable_builtin_opcache

コレデヨイ。 apxs が無い!と言われるときは、 httpd-devel apr apr-devel あたりを忘れていないか注意しよう。

Apache のログを簡単に解析する場合

Ruby の人なので Request-Log-Analyzer を使ってる。

グラフとか必要な、とにかく「文字ばっかり英語ばっかりわかんないわかんないわかんない!」と言い出す思考停止した相手と話すときの資料としてはあんまり良くない出力結果になるので、そういう時は素直に Windows で WeblogExpert にぶっかけるとかしたほうがいいです。

インストール

gem install request-log-analyzer --no-ri --no-rdoc

使用方法

今回は Apacheアクセスログ ( combined 形式 ) を解析します。

request-log-analyzer --apache-format combined --output HTML --file ${HTML レポートの出力ファイル名}.html ${解析対象のアクセスログ}

あんまりたくさんの情報は出ないけど、とりあえず直近のアクセスが爆発した?とか一次対応に使うには良いと思います。 障害報告書とかに使うには、ちゃんとグラフ描画してくれる GUI アプリケーション用いれば良いノデ。

cannot change locale をやっつける

cloud.vagrant あたりとか kitematic あたりから Docker のコンテナ持ってくて ja_JP.UTF8 をロケール設定すると、たまに以下のようになることがあります。

[vagrant@localhost ~]$ sudo su - root
Last login: Mon Aug  6 14:10:20 JST 2018 on pts/0
-bash: warning: setlocale: LC_CTYPE: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (ja_JP.utf8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (ja_JP.utf8): No such file or directory

なんとかする。

ロケ地:CentOS 7.5 ( Vagrant )

続きを読む

CentOS5 以前ではもう github に接続できない

書こうと思ってて忘れてたやつ。

Github に接続できない

github にリクエストを送るとこうなる。

[user@oldhost ~]$ ssh -T git@github.com
no kex alg

古いアルゴリズムがサポートされなくなった

githubengineering.com

github 君は「前々から告知してたよなぁ……?」という体で、それは正しいんじゃがワイも「気付いてなかった、そんなの……」状態であった。

具体的にどうなのか

これだけだとよくわかんねぇな?ってなると思いますが、要は CentOS5 以前の環境では OpenSSL が古いので、新しい TLS をサポートしてなく、 github と通信できなくなりました。 CentOS6 も OpenSSL をアップデートしてないと多分通信できません。最新版まで上げてあれば大丈夫。 OpenSSL 1.0.0 のいくつ位があれば大丈夫だったかは失念しましたね……。

確認方法

以下のようにコマンド叩いて、 error が返って来なければ大丈夫です。

オッケーなパターンもだいぶ OpenSSL 古くないか?!ってご指摘があるかと思いますが、手元の検証用環境なんで許してクレメンス。

CentOS 5 + OpenSSL 0.9.8l

だめなパターン

[USER@localhost ~]$ openssl version
OpenSSL 0.9.8l 5 Nov 2009

[USER@localhost ~]$ openssl s_client -connect github.com:443
CONNECTED(00000003)
24290:error:1409442E:SSL routines:SSL3_READ_BYTES:tlsv1 alert protocol version:s3_pkt.c:1061:SSL alert number 70
24290:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl handshake failure:s3_pkt.c:530:

CentOS 6 + OpenSSL 1.0.1e-fips

オッケーなパターン

[USER@localhost ~]$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013

[USER@localhost ~]$ openssl s_client -connect github.com:443
CONNECTED(00000003)
depth=2 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
verify return:1
depth=1 C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert SHA2 Extended Validation Server CA
verify return:1
depth=0 businessCategory = Private Organization, 1.3.6.1.4.1.311.60.2.1.3 = US, 1.3.6.1.4.1.311.60.2.1.2 = Delaware, serialNumber = 5157550, C = US, ST = California, L = San Francisco, O = "GitHub, Inc.", CN = github.com
verify return:1

# snip #

どうする

OpenSSL をアップデートするか、環境を投げ捨てるのが一番です。

とはいえそうそうすぐに捨てられない人もいるでしょう。 その場合は、自分のローカルに適応したい環境と同じプロジェクトを持っておき、毎回差分のあるファイルを zip なりで scp するのが良いでしょう。 rsync も考えたけど、本番とローカルじゃ多分値変わるからね……。