ブログ - ハウツーカテゴリのエントリ
簡単なやつを作ってみた.基本的に,どこかのコピペ.
これを,login.phpとして保存してWebサーバにアップロードしてアクセスしてみると,次のような感じで表示される.
アクセスした日時がでるのがミソ.
<html>
<head><title>Secure System</title></head>
<body>
<hr>
<center>
<?php
$time = date("Y/n/j Ah:i");
print($time);
?>
</center>
<hr>
<br>
<br>
<br>
<center><h1>Secure System</h1></center>
<br>
<br>
<br>
<br>
<center>
<form action="display.php" method="post">
<table border="0">
<tr>
<td>User ID</td>
<td><input type="text" name="USERID"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="text" name="PASSWORD"></td>
</tr>
<td colspan="2" align="center">
<input type="submit" value="Login"">
</td>
</tr>
</table>
</form>
</center>
<hr>
<center>
Copyright 2018 ujp.jp
</center>
<hr>
アクセスした日時がでるのがミソ.
ヘッドレスブラウザとしてのPhantomJSを使いやすくするためのツールがCasperJSらしい.PhantomJSだけだとフォーム入力やクリックを再現する部分の記載が面倒なのだとか.それを使いやすくするのがCasperJS.
CasperJSを使うにはPhantomJSが先にインストールされている必要があると書かれています.
今回インストールしたのはCasperJS 1.1.4でした.
恒例のファイルパスの確認と,バージョンの確認.
バージョンが表示されるまでに少し,時間がかかるなぁ.
MBP2017:Documents ujpadmin$ brew info casperjs🆑
casperjs: stable 1.1.4-2, HEAD
Navigation scripting and testing tool for PhantomJS
http://www.casperjs.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/casperjs.rb
==> Dependencies
Required: phantomjs ✔
==> Options
--HEAD
Install HEAD version
MBP2017:Documents ujpadmin$
MBP2017:Documents ujpadmin $ brew install casperjs🆑
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 2 taps (homebrew/core, caskroom/cask).
==> Updated Formulae
==> Downloading https://github.com/casperjs/casperjs/archive/1.1.4-2.tar.gz
==> Downloading from https://codeload.github.com/casperjs/casperjs/tar.gz/1.1.4-2
######################################################################## 100.0%
🍺 /usr/local/Cellar/casperjs/1.1.4-2: 297 files, 7.1MB, built in 25 seconds
MBP2017:Documents ujpadmin $
恒例のファイルパスの確認と,バージョンの確認.
MBP2017:Documents ujpadmin $ which casperjs🆑
/usr/local/bin/casperjs🈁
MBP2017:Documents ujpadmin $
MBP2017:Documents ujpadmin $ casperjs --version🆑
1.1.4🈁
MBP2017:Documents ujpadmin $
ふむ.まずは一番シンプルなサンプルを拾ってきて実行.
実行して見る.
作成されたファイルを見ると,こんな感じ.
通常,Webブラウザだとスクロールして見る下の方まで全部画像化されていますね.
// ブラウザ生成
var page = require('webpage').create();
// UAを設定
page.settings.userAgent = 'iOS';
// 指定されたURLを開く.
page.open('http://www.ujp.jp', function(status) {
if (status === 'success') {
// スクリーンキャプチャ
page.render('www.ujp.jp.iOS.png');
// ブラウザ内のJavaScriptを実行
var title = page.evaluate(function() {
var title = document.title;
return title;
});
console.log(title);
}
// 終了のおまじない(必須)
phantom.exit();
});
MBP2017:PhantomJS ujpadmin$ phantomjs hoge.js🆑
UJP - Unwired Job Professional
MBP2017:PhantomJS ujpadmin $
作成されたファイルを見ると,こんな感じ.
通常,Webブラウザだとスクロールして見る下の方まで全部画像化されていますね.
macOSやiOSに搭載されているWebブラウザのSafari.描画エンジン部分のWebKitはGoogle Chromeにも採用されている.
今回取り上げるPhantomJSというのは,Webkitを使っているブラウザなんだけれど,コマンドラインで動くブラウザで,そういうカテゴリーのものを「ヘッドレスブラウザ」というらしい.つまりプレゼンテーション部分,GUI部分がない. GUIがないブラウザで何するの?というと,定型的ブラウザ操作を自動化ができる.
まずは,brewのパッケージにあるか確認して見る.
ありましたね.依存関係はOpenSSL,Xcodeのようで,macOSは10.7(Lion)以降です.早速インストール.
どこにインストールされたか確認.
普通のところなのね.
今回取り上げるPhantomJSというのは,Webkitを使っているブラウザなんだけれど,コマンドラインで動くブラウザで,そういうカテゴリーのものを「ヘッドレスブラウザ」というらしい.つまりプレゼンテーション部分,GUI部分がない. GUIがないブラウザで何するの?というと,定型的ブラウザ操作を自動化ができる.
まずは,brewのパッケージにあるか確認して見る.
MBP2017:~ ujpadmin$ brew info phantomjs🆑
phantomjs: stable 2.1.1 (bottled)
Headless WebKit scriptable with a JavaScript API
http://phantomjs.org/
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/phantomjs.rb
==> Dependencies
Required: openssl ✔
==> Requirements
Build: xcode ✔
Required: macOS >= 10.7 ✔
MBP2017:~ ujpadmin $
BP2017:~ nobuaki$ brew install phantomjs🆑
Updating Homebrew...
==> Auto-updated Homebrew!
==> Downloading https://homebrew.bintray.com/bottles/phantomjs-2.1.1.high_sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring phantomjs-2.1.1.high_sierra.bottle.1.tar.gz
🍺 /usr/local/Cellar/phantomjs/2.1.1: 50 files, 50.3MB
MBP2017:~ ujpadmin $
MBP2017:~ ujpadmin $ which phantomjs🆑
/usr/local/bin/phantomjs🈁
MBP2017:~ ujpadmin $
ちょっとした調べ物の延長で,画像の差分を抽出して見ることにした.
これ,オリジナルの画像ファイル.JPEG形式.この前行った寿司屋で食べた数の子.
そして,加工後の画像ファイル.
使っている環境には,ImageMagikをインストールしてある.この中にcompareというコマンドが.
最新だな.そして差分を取ってみる.コマンドは,比較したいファイル1と2,出力したいファイル名という感じで指定.
これ,オリジナルの画像ファイル.JPEG形式.この前行った寿司屋で食べた数の子.
そして,加工後の画像ファイル.
使っている環境には,ImageMagikをインストールしてある.この中にcompareというコマンドが.
MBP2017:Downloads ujpadmin$ which compare🆑
/usr/local/bin/compare🈁
MBP2017:Downloads ujpadmin $ /usr/local/bin/compare -version🆑
Version: ImageMagick 7.0.7-22 Q16 x86_64 2018-01-22 http://www.imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: http://www.imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules
Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib
MBP2017:Downloads ujpadmin $
今回の実行イメージはこれ.
nginxの設定ファイルの場所を確認.
Apacheで言うところのhttpd.confのようなものがnginx.confファイル.このファイルにlocationを追加.
proxy_set_headerによって受け取り側(転送先)のサーバがリクエストヘッダで本当のリクエストIPアドレスとホスト名を受け取ることができる.そうしないと全てがlocalhostになってしまう.
次に,Splunk側の設定を変更する必要がある.まずは,設定ファイルのweb.confを確認.
root_endpointパラメータにリクエスト元(今回の場合nginx)からくるパスを設定する.今回はそのままsplunkで設定.そして,tools.proxy.onパラメータをコメントを外して有効化.
nginxとSplunkの再起動が終わったら,アクセスしてみる.
残念...appServerPortsはweb.confに記載がありました.
翻訳すると「(通常は1つのポートで十分ですが)0に設定すると、代わりにsplunkdとは別の 'httpport'上のWebフロントエンドとしてアプリケーションサーバーを直接実行します。」とありますので,8065に変わって0を設定してみます.
Spunkを再起動.
まずは,nginxに接続.
http://localhost:8080
問題なければ,Splunkに接続.
http://localhost/splunk/
接続できました.うまく接続できない時は,ブラウザのキャッシュをクリアしてみてください.
nginxの設定ファイルの場所を確認.
gaia:~ server$ ls -la /usr/local/etc/nginx/🆑
total 120
drwxr-xr-x 18 server admin 612 11 23 20:46 .
drwxr-xr-x 9 server admin 306 11 23 20:46 ..
-rw-r--r-- 1 server admin 1077 11 23 20:46 fastcgi.conf
-rw-r--r-- 1 server admin 1077 11 23 20:46 fastcgi.conf.default
-rw-r--r-- 1 server admin 1007 11 23 20:46 fastcgi_params
-rw-r--r-- 1 server admin 1007 11 23 20:46 fastcgi_params.default
-rw-r--r-- 1 server admin 2837 11 23 20:46 koi-utf
-rw-r--r-- 1 server admin 2223 11 23 20:46 koi-win
-rw-r--r-- 1 server admin 3957 11 23 20:46 mime.types
-rw-r--r-- 1 server admin 3957 11 23 20:46 mime.types.default
-rw-r--r-- 1 server admin 2680 11 23 20:46 nginx.conf
-rw-r--r-- 1 server admin 2680 11 23 20:46 nginx.conf.default
-rw-r--r-- 1 server admin 636 11 23 20:46 scgi_params
-rw-r--r-- 1 server admin 636 11 23 20:46 scgi_params.default
drwxr-xr-x 2 server admin 68 11 23 20:46 servers
-rw-r--r-- 1 server admin 664 11 23 20:46 uwsgi_params
-rw-r--r-- 1 server admin 664 11 23 20:46 uwsgi_params.default
-rw-r--r-- 1 server admin 3610 11 23 20:46 win-utf
gaia:~ server$
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
location /splunk/ {🈁
proxy_set_header Host $host;🈁
proxy_set_header X-Real-IP $remote_addr;🈁
proxy_pass http://localhost:8000;🈁
}🈁
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
次に,Splunk側の設定を変更する必要がある.まずは,設定ファイルのweb.confを確認.
gaia:Splunk server$ ls -la /Applications/Splunk/etc/system/default/web.conf🆑
-r--r--r-- 1 server wheel 49972 9 13 14:06 /Applications/Splunk/etc/system/default/web.conf
gaia:Splunk server$
# Top level name for the site
#root_endpoint = /
root_endpoint = /splunk🈁
# path to static content
# The path here is automatically appended to root_endpoint defined above
static_endpoint = /static
# Set this in local/web.conf if running behind a reverse proxy to log
# the X-Forwarded-For address of the client rather than the address of the proxy
# tools.proxy.on = True
tools.proxy.on = True🈁
503 Service Unavailable
Return to Splunk home page
設定されている appServerPorts では、appserver に直接アクセスできません。
# list of ports to start python application servers on (although usually
# one port is enough) Set to 0 to instead run the application server
# directly as the web front end on 'httpport', separate from splunkd.
appServerPorts = 8065🈁
vi /Applications/Splunk/etc/system/default/web.conf
#appServerPorts = 8065
appServerPorts = 0
まずは,nginxに接続.
http://localhost:8080
問題なければ,Splunkに接続.
http://localhost/splunk/
接続できました.うまく接続できない時は,ブラウザのキャッシュをクリアしてみてください.
nginxは高速処理を目指したWebサーバ.今回はプロキシのフロントとするのを目的としてインストールしてみる.
gaia:~ server$ brew install nginx🆑
==> Installing dependencies for nginx: pcre
==> Installing nginx dependency: pcre
==> Downloading https://homebrew.bintray.com/bottles/pcre-8.41.el_capitan.bottle
######################################################################## 100.0%
==> Pouring pcre-8.41.el_capitan.bottle.tar.gz
🍺 /usr/local/Cellar/pcre/8.41: 204 files, 5.4MB
==> Installing nginx
==> Downloading https://homebrew.bintray.com/bottles/nginx-1.12.2_1.el_capitan.b
######################################################################## 100.0%
==> Pouring nginx-1.12.2_1.el_capitan.bottle.tar.gz
==> Caveats
Docroot is: /usr/local/var/www🈁
The default port has been set in /usr/local/etc/nginx/nginx.conf to 8080 so that
nginx can run without sudo.
nginx will load all files in /usr/local/etc/nginx/servers/.
To have launchd start nginx now and restart at login:
brew services start nginx🈁
Or, if you don't want/need a background service you can just run:
nginx
==> Summary
🍺 /usr/local/Cellar/nginx/1.12.2_1: 23 files, 1MB
gaia:~ server$
ターミナルで,>だけを実行してみる.
syntax errorです.文法違い.File not foundじゃなくてsyntax errorです.
こんな事を実行してみる.
いきなりリダイレクト.なんのエラーも出ない事に注目.
ファイルをみてみる.
なんだか0バイトファイルが出来ている.今日は,これによってゼロバイトファイルが出来てしまって,2時間くらい無駄にした.いや,勉強になったから良しとしましょう〜.
MBA13:~ ujpadmin$ >
-bash: syntax error near unexpected token `newline'
MBA13:~ ujpadmin $
こんな事を実行してみる.
MBA13:~ ujpadmin $ > a.txt
MBA13:~ ujpadmin $
ファイルをみてみる.
MBA13:~ ujpadmin $ ls -la a.txt
-rw-r--r-- 1 ujpadmin staff 0 12 1 01:16 a.txt
MBA13:~ ujpadmin $
タブが入っていることで思わぬ動作をすることって,意外とよくあるのだけれど,vimでも他のテキストエディタのように明示できるようになっていた.
こうしておくと,タブ,半角スペース,改行コードも表示できるようになりました.全角スペースも表示できるようになると完璧だね.
MBA13:ujpadmin$ cat .vimrc
set listchars=tab:»-,trail:-,eol:↲,extends:»,precedes:«,nbsp:%
set list
MBA13:ujpadmin$
よそ様のサーバだから詳しいことはわからないけれど,最近のRed Hatに付属しているvim(vi)は,Microsoft Wordのようにインデントしてくれる.とても煩わしい.
これをオフにするには,.vimrcに次のように設定しておく.
でもまぁこういう設定のニーズがあるということなのか.
これをオフにするには,.vimrcに次のように設定しておく.
autocmd FileType * setlocal formatoptions-=ro
SSL証明書の有効期限を調べるために,1つや2つならブラウザの鍵マークを参照すれば良いけれど,大量となると面倒なのでコマンドで取得してみる.
まずは,URLは長いので環境変数に入れてみた.
次のようにopensslコマンドを実行.
[/code]MBA13:ujpadmin$ openssl s_client -connect $FQDN:443 < /dev/null 2> /dev/null | openssl x509 -text|head -n 10
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
2a:31:85:78:f8:ec:3f:8a
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Google Inc, CN=Google Internet Authority G2
Validity
Not Before: Nov 10 15:47:36 2016 GMT
Not After : Feb 2 15:31:00 2017 GMT
MBA13:ujpadmin$
[/code] Validity=妥当性を保証する期間ということか.
まずは,URLは長いので環境変数に入れてみた.
MBA13:ujpadmin$ FQDN=www.google.co.jp
MBA13:ujpadmin$ echo $FQDN
www.google.co.jp
MBA13:ujpadmin$
[/code]MBA13:ujpadmin$ openssl s_client -connect $FQDN:443 < /dev/null 2> /dev/null | openssl x509 -text|head -n 10
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
2a:31:85:78:f8:ec:3f:8a
Signature Algorithm: sha256WithRSAEncryption
Issuer: C=US, O=Google Inc, CN=Google Internet Authority G2
Validity
Not Before: Nov 10 15:47:36 2016 GMT
Not After : Feb 2 15:31:00 2017 GMT
MBA13:ujpadmin$
[/code] Validity=妥当性を保証する期間ということか.
バッチファイルで,ファイルの有無を確認するのは簡単だけれど,ディレクトリを検査する仕組みはない.でもチェック用のファイルを作ることで,ディレクトリの有無を調べられる.
むかし,仕事で頻繁に電話でアメリカ人と英語で話をしていたおじさんが居て「流暢な英語ですね」と褒めたら「単語を知らないから言葉数が多くなるから喋れているように見えるだけだ」と言っていた.
手数が多いこの方法も,それと似ているかなぁなんて思ったりした.ただそれだけ.
SET TARGET_DIR=D:\TEST
@echo > %TARGET_DIR%\chk.txt
@if not exist %TARGET_DIR%\chk.txt goto TARGET_NOT_FOUND
@del /F/Q %TARGET_DIR%\chk.txt
@echo ディレクトリがありました.
@goto :EOF
:TARGET_NOT_FOUND
@echo ディレクトリはありませんでした.
:EOF
手数が多いこの方法も,それと似ているかなぁなんて思ったりした.ただそれだけ.
Windowsサーバのファイル共有をMacで使う時は,mountコマンドを使う.
SolarisとかLinuxだとドライブのマウントは/mntを使うような暗黙のルールになっているけれど,それと似たような感じでMacの場合は/Volumesを使う.
ここにマウントポイントを作って,マウントする.
mountコマンドにユーザパスワードをつける時は,こんな感じ.
そして運悪く?!パスワードにドルマークが入っていたりすると,マウントコマンド認証エラーになる.
パスワードにドルマークが入っている場合は,こんな感じでエスケープする.
これ,わかるのに2時間かかった...
SolarisとかLinuxだとドライブのマウントは/mntを使うような暗黙のルールになっているけれど,それと似たような感じでMacの場合は/Volumesを使う.
ここにマウントポイントを作って,マウントする.
mkdir /Volumes/fileserver
mount_smbfs //192.168.100.20/data/ /Volumes/fileserver
mountコマンドにユーザパスワードをつける時は,こんな感じ.
mount_smbfs //ujpuser:password@192.168.100.20/data/ /Volumes/fileserver
$ mount_smbfs //ujpuser:4L3$gear@192.168.100.20/data/ /Volumes/fileserver
mount_smbfs: server rejected the connection: Authentication error
$
mount -t smbfs //ujpuser:4L3\$gear@192.168.100.20/data/ /Volumes/fileserver
~と〜の違い.
~と〜
ですよ.
~〜です.
わかりやすい様に,ファイルに保存して中身を確認.
答えは,これ.
つまり,1文字目の「~」は0xEFBD9Eで,2文字目の「〜」は0xE3809Cなのである.〜が~に変換される問題だと誤解していたけれど,この問題は,一言で言うと
SJISにある「〜」をUTF-8に変換する際に「~」にするか「〜」にするかは実装次第
普通の人には関係ない.でもこれ,大問題.
あま~いアイス
おいし〜いアイス
表示上,人間の目だとどっちでも良いけれど,あいまい検索で「〜いアイス」としたら「おいし〜いアイス」しか引っかからないよね.
他にも,ー—―とか,-‐‑–−ーとかがあって.これは,仕様策定時のミスらしいけれど,将来的にエンジニアの「専門家」としての地位確保のための布石なんだとおもうね.2000年問題よりも巧妙だな.まぁ,SJISが撲滅すれば良いのだろうけれど,だいぶなくなったけれど.
~と〜
ですよ.
~〜です.
わかりやすい様に,ファイルに保存して中身を確認.
MBA13:~ $ cat wave.txt
~〜
MBA13:~ $
MBA13:~ $ hexdump wave.txt
0000000 ef bd 9e e3 80 9c 0a
0000007
MBA13:~ $
SJISにある「〜」をUTF-8に変換する際に「~」にするか「〜」にするかは実装次第
普通の人には関係ない.でもこれ,大問題.
あま~いアイス
おいし〜いアイス
表示上,人間の目だとどっちでも良いけれど,あいまい検索で「〜いアイス」としたら「おいし〜いアイス」しか引っかからないよね.
他にも,ー—―とか,-‐‑–−ーとかがあって.これは,仕様策定時のミスらしいけれど,将来的にエンジニアの「専門家」としての地位確保のための布石なんだとおもうね.2000年問題よりも巧妙だな.まぁ,SJISが撲滅すれば良いのだろうけれど,だいぶなくなったけれど.
まずは,Xcodeのバージョンを調べる.
svnのパスは次の通り.
1.7.20なので日本語対応の1.7.14より新しいバージョンだけれど,日本語ファイルに対応しているかどうかはわからないな.
$ xcodebuild -version
Xcode 7.2.1
Build version 7C1002
$
$ /Applications/Xcode.app/Contents/Developer/usr/bin/svn --version
svn, version 1.7.20 (r1667490)
compiled Jan 14 2016, 18:19:52
Copyright (C) 2014 The Apache Software Foundation.
This software consists of contributions made by many people; see the NOTICE
file for more information.
Subversion is open source software, see http://subversion.apache.org/
The following repository access (RA) modules are available:
* ra_neon : Module for accessing a repository via WebDAV protocol using Neon.
- handles 'http' scheme
- handles 'https' scheme
* ra_svn : Module for accessing a repository using the svn network protocol.
- handles 'svn' scheme
* ra_local : Module for accessing a repository on local disk.
- handles 'file' scheme
* ra_serf : Module for accessing a repository via WebDAV protocol using serf.
- handles 'http' scheme
- handles 'https' scheme
$
Eclipse 4.5(mars)は,SVN 1.8なので互換性がないので,以下のサイトからSVNKit 1.7.12を入手する.
ヘルプから新規ソフトウェアのインストールをクリックします。
作業対象に以下のURLを入れる.
http://community.polarion.com/projects/subversive/download/eclipse/3.0/update-site
ヘルプから新規ソフトウェアのインストールをクリックします。
作業対象に以下のURLを入れる.
http://community.polarion.com/projects/subversive/download/eclipse/3.0/update-site
Home Brewで最新版のSubversionをインストールしても,日本語ファイルに対応してない.例の半濁点問題だね.半濁点が入ってないとcommitできる事も多い.
それで,Subversion 1.7にする事で,日本語ファイルに対応できたという話.事前に気をつけなければいけないのは,1.9を使っているとバージョンダウンするので,リポジトリの管理バージョン(データベースあたり?)が異なるので1.7でアクセスできないから,再ダウンロードが必要になるという事.
まずは,インストールされているSubversionのバージョンを確認.
日本語に対応してないので,Subversion 1.9.4をアンインストール.
それで,Subversion 1.7にする事で,日本語ファイルに対応できたという話.事前に気をつけなければいけないのは,1.9を使っているとバージョンダウンするので,リポジトリの管理バージョン(データベースあたり?)が異なるので1.7でアクセスできないから,再ダウンロードが必要になるという事.
まずは,インストールされているSubversionのバージョンを確認.
$ 🆑brew info svn
subversion: stable 1.9.4 (bottled)🈁
Version control system designed to be a better CVS
https://subversion.apache.org/
/usr/local/Cellar/subversion/1.9.4... (148 files, 11.1M)
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/subversion.rb
==> Dependencies
Build: pkg-config ✔, scons ✔
Required: sqlite ✔, openssl ✔
Optional: gpg-agent ✘
==> Options
--universal
Build a universal binary
--with-gpg-agent
Build with support for GPG Agent
--with-java
Build Java bindings
--with-perl
Build Perl bindings
--with-python
Build with python support
--with-ruby
Build Ruby bindings
==> Caveats
svntools have been installed to:
/usr/local/opt/subversion/libexec
$
大量のファイルをupdateしようとするとこんな感じでエラーがでる.
表示されている通りsvn cleanup後に,再度svn updateすると続いて続いてダウンロードされるが,またしばらくするとエラーになる.何度もなんどもsvn cleanup;svn updateを繰り返しやればよのだけれど,とても面倒.いつ終わるか不明だし.
これは,svnのバージョン1.8以降,デフォルトの転送モードがBulkからSkeltaに変更されたことによる影響なのだそうです.
バージョンを確認してみる.
$ svn update
svn: E155004: Run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
svn: E155004: Working copy '/Users/ujpadmin/svn/doc' locked.
svn: E155004: '/Users/ujpadmin/svn/doc' is already locked.
$
これは,svnのバージョン1.8以降,デフォルトの転送モードがBulkからSkeltaに変更されたことによる影響なのだそうです.
バージョンを確認してみる.
Intelが無料で提供しているPower Gadget.
Intel® Power Gadget
https://software.intel.com/en-us/articles/intel-power-gadget
CPUが使っている電力量とか現在動作している周波数,そして温度のデータが取れるGUIツール.Mac版もあるけれどWindows,Linuxもある.
今回はそこじゃなくて,これ.
Using the Intel Power Gadget API on Mac OS X
https://software.intel.com/en-us/blogs/2012/12/13/using-the-intel-power-gadget-api-on-mac-os-x
Intel Power GadgetをインストールするとGUIツールだけれども,MRTGでグラフ化しようと思ってどうにかデータが取れないか?と思っていたら,APIが提供されていました.
そしてサンプルプログラム.
Intel Power Gadget API on Mac OS X Xcode project example download
https://software.intel.com/en-us/articles/intel-power-gadget-api-on-mac-os-x-xcode-project-example-download
これをちょっと修正すれば,リストが取れるようになります.
ダウンロードしたプロジェクトを,XCode 7.3を使ってビルドしたらいい感じでした.サンプルの改造で十分!
Intel® Power Gadget
https://software.intel.com/en-us/articles/intel-power-gadget
CPUが使っている電力量とか現在動作している周波数,そして温度のデータが取れるGUIツール.Mac版もあるけれどWindows,Linuxもある.
今回はそこじゃなくて,これ.
Using the Intel Power Gadget API on Mac OS X
https://software.intel.com/en-us/blogs/2012/12/13/using-the-intel-power-gadget-api-on-mac-os-x
Intel Power GadgetをインストールするとGUIツールだけれども,MRTGでグラフ化しようと思ってどうにかデータが取れないか?と思っていたら,APIが提供されていました.
そしてサンプルプログラム.
Intel Power Gadget API on Mac OS X Xcode project example download
https://software.intel.com/en-us/articles/intel-power-gadget-api-on-mac-os-x-xcode-project-example-download
これをちょっと修正すれば,リストが取れるようになります.
ダウンロードしたプロジェクトを,XCode 7.3を使ってビルドしたらいい感じでした.サンプルの改造で十分!
Yosemiteで/var/log/system.logを参照すると,次のような状態が.
これは19時15分09病からスリープを開始し19時15分11秒にスリープが終了したことを示しているのだけれど,その後,電源アダプタを外して机の中にしまっておいたのだが,22時15分11秒,つまりスリープしてから3直後に起き出している.Wake reason: EC.SleepTimerとあるのがそれ.
この3時間というのは,電源管理のpmset(manipulate power management setting)コマンドで確認できる.
Aug 8 19:15:09 MBA2014 kernel[0]: [0x851943000, 0x19000000]
Aug 8 19:15:09 MBA2014 kernel[0]: [0x88500a000, 0x19000000]
Aug 8 19:15:09 MBA2014 kernel[0]: [0x8a5542000, 0xe000000]
Aug 8 19:15:09 MBA2014 kernel[0]: [0x0, 0x0]
Aug 8 19:15:09 MBA2014 kernel[0]: AppleCamIn::systemWakeCall - messageType = 0xE0000280
Aug 8 19:15:09 MBA2014 kernel[0]: ARPT: 30064.571369: AirPort_Brcm43xx::powerChange: System Sleep🈁
Aug 8 19:15:09 MBA2014 kernel[0]: AppleCamIn::systemWakeCall - messageType = 0xE0000340
Aug 8 19:15:10 MBA2014 kernel[0]: IO80211AWDLPeerManager::doDisable source [handleSIOCSIFFLAGS]
Aug 8 19:15:10 MBA2014 kernel[0]: en0: BSSID changed to 00:00:de:0c:0c:0c
Aug 8 19:15:10 MBA2014 kernel[0]: en0: channel changed to 48
Aug 8 19:15:10 MBA2014 kernel[0]: AirPort: Link Down on awdl0. Reason 1 (Unspecified).🈁
Aug 8 19:15:10 MBA2014 kernel[0]: IO80211AWDLPeerManager::doDisable source [setLinkState]
Aug 8 19:15:10 MBA2014 kernel[0]: ARPT: 30065.337295: wl0: leaveModulePoweredForOffloads: Wi-Fi will turn off.
Aug 8 19:15:10 MBA2014 kernel[0]: AppleThunderboltNHIType2::prePCIWake - power up complete - took 1703 us
Aug 8 19:15:10 MBA2014 kernel[0]: AppleThunderboltGenericHAL::earlyWake - complete - took 0 milliseconds
Aug 8 19:15:10 MBA2014 kernel[0]: AirPort: Link Down on en0. Reason 8 (Disassociated because station leaving).
Aug 8 19:15:10 MBA2014 kernel[0]: en0::IO80211Interface::postMessage bssid changed
Aug 8 19:15:10 MBA2014 kernel[0]: en0: 802.11d country code set to 'X3'.
Aug 8 19:15:10 MBA2014 kernel[0]: en0: Supported channels 1 2 3 4 5 6 7 8 9 10 11 12 13 36 40 44 48 52 56 60
Aug 8 19:15:11 MBA2014 kernel[0]: AppleCamIn::systemWakeCall - messageType = 0xE0000340
Aug 8 19:15:11 MBA2014 kernel[0]: AppleThunderboltNHIType2::waitForOk2Go2Sx - retries = 3
Aug 8 22:15:11🈁 MBA2014 kernel[0]: Wake reason: EC.SleepTimer (SleepTimer)🈁
Aug 8 22:15:11 MBA2014 kernel[0]: AppleCamIn::systemWakeCall - messageType = 0xE0000340
Aug 8 22:15:11 MBA2014 kernel[0]: AppleCamIn::wakeEventHandlerThread
Aug 8 22:15:11 MBA2014 kernel[0]: Previous sleep cause: 5
Aug 8 22:15:11 MBA2014 kernel[0]: AppleHSSPIController::HandleMessage Device Wake by Host
Aug 8 22:15:11 MBA2014 kernel[0]: AppleThunderboltNHIType2::prePCIWake - power up complete - took 179148 us
Aug 8 22:15:11 MBA2014 kernel[0]: AppleThunderboltGenericHAL::earlyWake - complete - took 1 milliseconds
この3時間というのは,電源管理のpmset(manipulate power management setting)コマンドで確認できる.
ガラケー使いのオカンから「ありか゛とう゜」といようなメールが来ることがある.逆にどうやって入力したんだろうか.゜は句点(。)の代わりっぽいけれど.
逆に,Macな人と添付ファイルをやりとりすると,次の様なファイルを受け取ることがある.
これは何かのバグなのだろうと長年思っていたのだけれど,これはUnicode的にNormalization Form Canonical Decompressionという規格なのだそうだ.
濁点・半濁点だけでなく,ウムラウトも含んだこういうものを,「ダイアクリティカルマーク」というそうなのだけれど,MacのHFS+というファイルシステムではこれを採用している.
平たく言うと「パ」を「ハ」と「゜」に分離して管理するのだそうだ.なぜそれを採用したのかはわからないけれどな.
文字化けしない様に変換するには,nkfにこういうオプションをつければ良いです.
でも,Yosemiteだと「ハ゜ラメーターシート」になるけれどEl Capitanだと,へんな変換にならないね.OSが対応したのかnkfが対応したのかわからない...
逆に,Macな人と添付ファイルをやりとりすると,次の様なファイルを受け取ることがある.
ハ゜ラメーターシート.xls
濁点・半濁点だけでなく,ウムラウトも含んだこういうものを,「ダイアクリティカルマーク」というそうなのだけれど,MacのHFS+というファイルシステムではこれを採用している.
平たく言うと「パ」を「ハ」と「゜」に分離して管理するのだそうだ.なぜそれを採用したのかはわからないけれどな.
文字化けしない様に変換するには,nkfにこういうオプションをつければ良いです.
nkf --ic=UTF8-MAC
Illegal subject name missing 'courier.push.apple.com' (2.5.4.3)
- カテゴリ :
- ハウツー
- ブロガー :
- ujpblog 2016/8/9 0:37
OS X 10.10.5のYosemiteにて,/var/log/system.logをウォッチしていたら,大量にログがでていた.大量というのは,頻繁に出ているのもあるけれど,1つのエラーに対するエラー表示行数が多い.
このapsdというのは,Apple Push Notification service daemonの事で「通知センター」.多分,次のようにFirewallで通信が許可されて無いからエラーが出ている模様.
Apple のプッシュ通知が届かない場合
https://support.apple.com/ja-jp/HT203609
システム環境設定で「通知センター」の中にある不要な通知をオフにしてみた.
これで出無いはずなのだけれど.
再開させるにはコレ.
そして止めてみる.まずはプロセス確認.
停止コマンド実行.
確認.
停止した.これで,ログは出なくなるはず.
Aug 8 10:59:53 MBA2014.local apsd[77]: Illegal subject name missing 'courier.push.apple.com' (2.5.4.3): ({
label = "2.5.4.6";
"localized label" = "2.5.4.6";
type = string;
value = US;
}, {
label = "2.5.4.8";
"localized label" = "2.5.4.8";
type = string;
value = California;
}, {
label = "2.5.4.7";
"localized label" = "2.5.4.7";
type = string;
value = Cupertino;
}, {
label = "2.5.4.10";
"localized label" = "2.5.4.10";
type = string;
value = "Apple Inc.";
}, {
label = "2.5.4.3";
"localized label" = "2.5.4.3";
type = string;
value = "courier.sandbox.push.apple.com";
})
Apple のプッシュ通知が届かない場合
https://support.apple.com/ja-jp/HT203609
システム環境設定で「通知センター」の中にある不要な通知をオフにしてみた.
これで出無いはずなのだけれど.
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.apsd.plist
$ 🆑ps -ef|grep apsd
0 77 1 0 10:08AM ?? 0:01.55 /System/Library/PrivateFrameworks/ApplePushService.framework/apsd🈁
240633758 18110 14561 0 11:13AM ttys004 0:00.00 grep apsd
$
$ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.apsd.plist🆑
Password:
$
$ 🆑ps -ef|grep apsd
240633758 18198 14561 0 11:13AM ttys004 0:00.00 grep apsd
$
MacのExcel 2011で文字列カウントしていて気付いたのだけれど.VBAやワークシート関数で文字列長を調べるLenとLenBがある.LenBはByte単位.2バイト文字を1文字入れるとLenだと1だがLenBだと2となる.
半角1文字を設定しても,戻り値が2になるので調べてみたら,WindowsNT/2000/XP、Office2000以降は,UNICODEでもUCS-2エンコードを採用しているとの事.
このUCS-2だと,半角英数字1文字でも2バイト.なんだかむかし,JIS,EUC,SJISと混沌としていた時代,Unicodeになると文字コード問題を解決するための夢の規格がユニコードで,全ての文字が2バイトで表現される...と大雑把に教えてもらった事がある.それがUCS-2だったのか.
ちなみに,今一般的になっているUTF-8だと思うけれど,それだと全角文字は3バイトで,半角英数は1文字.
検証してみる.まずはLANG設定を確認.
バイト数をカウント.
2バイト.これは改行コードが最後に入っているから.16進数でダンプしてみれば確認出来る.
LF(LineFeed)の0aが入っている.次に日本語.
4バイトなので改行コードの1文字を引いて3byteとわかる.
SJISの独自拡張のCP932とか,いろいろな事があったけれど,統一規格としてのユニコード.いまはメーカプラットホーム毎に絵文字を拡張しているから,結局整理すると個性を発揮できないというデメリットを解消するため?差別化するために独自に進むしか無いという所もあるなぁ.
半角1文字を設定しても,戻り値が2になるので調べてみたら,WindowsNT/2000/XP、Office2000以降は,UNICODEでもUCS-2エンコードを採用しているとの事.
このUCS-2だと,半角英数字1文字でも2バイト.なんだかむかし,JIS,EUC,SJISと混沌としていた時代,Unicodeになると文字コード問題を解決するための夢の規格がユニコードで,全ての文字が2バイトで表現される...と大雑把に教えてもらった事がある.それがUCS-2だったのか.
ちなみに,今一般的になっているUTF-8だと思うけれど,それだと全角文字は3バイトで,半角英数は1文字.
検証してみる.まずはLANG設定を確認.
MBA13:~ ujpadmin $ env|grep LANG
NLS_LANG=Japanese_Japan.AL32UTF8
LANG=ja_JP.UTF-8
MBA13:~ ujpadmin $
MBA13:~ ujpadmin$ echo a > a.txt
MBA13:~ ujpadmin$ wc -c a.txt
2 a.txt
MBA13:~ ujpadmin$
MBA13:~ ujpadmin$ hexdump a.txt
0000000 61 0a
0000002
MBA13:~ ujpadmin$
MBA13:~ ujpadmin$ echo あ > あ.txt
MBA13:~ ujpadmin$ wc -c あ.txt
4 あ.txt
MBA13:~ ujpadmin$
SJISの独自拡張のCP932とか,いろいろな事があったけれど,統一規格としてのユニコード.いまはメーカプラットホーム毎に絵文字を拡張しているから,結局整理すると個性を発揮できないというデメリットを解消するため?差別化するために独自に進むしか無いという所もあるなぁ.
vmstatコマンドを実行してサーバの負荷状況を見る事ができるけれど,何時何分かわからない.そんな時には,このように.
vmstatの標準出力の前に,日時を表示する.とても便利.
vmstat 1 | awk '{print strftime("%/%m%d %H:%M:%S"), $0}'
bashを使っていて,思ったようにコマンド履歴が保存されてないなと思う事があるんだけど,ちゃんと調べたらコマンドヒストリは,バッファに入っていて,bashを終了させる時に.bash_historyに書き出されるのだそうです.
長時間ターミナルを開いていてタイムアウトで切断したような時は,終了処理されてないので消えちゃうんでしょう.
それで,以下のようなおまじないをしておくと,ほぼリアルタイムに.bash_historyに書き出されます.
複数ターミナルを開いていると体系だった参照ができないけれど,そんな事よりはコマンド履歴を他のターミナルでも共有できるメリットがあるね.あと,
意図せず失わないという事もね.
長時間ターミナルを開いていてタイムアウトで切断したような時は,終了処理されてないので消えちゃうんでしょう.
それで,以下のようなおまじないをしておくと,ほぼリアルタイムに.bash_historyに書き出されます.
export PROMPT_COMMAND='history -a; history -r'
意図せず失わないという事もね.
このようなファイルがある.
3行を1行に連結させたい.そんな時に使うのはpasteコマンド.
ハイフンの数だけ連結する.
この結果をカンマ区切りにしたい派愛は,-dオプションで指定する.
一応,コマンドパスを確認.
Macに最初からインストールされているpasteコマンドを実行.
$ cat list.txt
1
山田
太郎
2
鈴木
二郎
3
真田
秀吉
$
$ cat list.txt|paste -d, - - -
1,山田,太郎
2,鈴木,二郎
3,真田,秀吉
$
この結果をカンマ区切りにしたい派愛は,-dオプションで指定する.
$ cat list.txt|/usr/bin/paste -d, - - -
1,山田,太郎
2,鈴木,二郎
3,真田,秀吉
$
$ which paste
/usr/local/opt/coreutils/libexec/gnubin/paste
$
$ cat list.txt|/usr/bin/paste -d, - - -
1,山田,太郎
2,鈴木,二郎
3,真田,秀吉
$
こんなリストがある.
リストの中から,3を検索.
すると,3が含まれている全てがリストされる.
指定した数字文字に限定したい場合,文字列の行頭・行末に着目してみる.後ろにスペースが入っている条件になるので,次のようにgrepすると,ほしい結果になる.
$ cat list1.txt
1 inu
2 neko
3 nako
4 nuko
5 beko
33 geko
38 tako
6 kako4
7 mako
$
$ grep 3 list1.txt
3 nako
33 geko
38 tako
$
指定した数字文字に限定したい場合,文字列の行頭・行末に着目してみる.後ろにスペースが入っている条件になるので,次のようにgrepすると,ほしい結果になる.
$ grep "^"3" " list1.txt
3 nako
$
未だに知らないこともたくさんある.いや,世の中知らないことばかりだ.
こういった,数行の結果を標準出力するコマンドがある.
この結果を.意味はないけれど環境変数LSSに入れる.
その結果を表示する.
結果が,横一列になっている.これを改行コードを生かした状態にする方法がある.
こういった,数行の結果を標準出力するコマンドがある.
$ ls -1 /bin|head -n 5
[
bash
cat
chmod
cp
$
$ LS5=`ls -1 /bin|head -n 5`
$
$ echo $LS5
[ bash cat chmod cp
$
フォーマットとコーデックの一覧.
対応フォーマット.
コーデック.
たくさんありすぎ.何が一般なんだろうね.
対応フォーマット.
ffmpeg -formats
File formats:
D. = Demuxing supported
.E = Muxing supported
--
D 3dostr 3DO STR
E 3g2 3GP2 (3GPP2 file format)
E 3gp 3GP (3GPP file format)
D 4xm 4X Technologies
E a64 a64 - video for Commodore 64
〜以下略〜
ffmpeg -codecs
Codecs:
D..... = Decoding supported
.E.... = Encoding supported
..V... = Video codec
..A... = Audio codec
..S... = Subtitle codec
...I.. = Intra frame-only codec
....L. = Lossy compression
.....S = Lossless compression
-------
D.VI.. 012v Uncompressed 4:2:2 10-bit
D.V.L. 4xm 4X Movie
D.VI.S 8bps QuickTime 8BPS video
.EVIL. a64_multi Multicolor charset for Commodore 64 (encoders: a64multi )
.EVIL. a64_multi5 Multicolor charset for Commodore 64, extended with 5th color (colram) (encoders: a64multi5 )
D.V..S aasc Autodesk RLE
D.VIL. aic Apple Intermediate Codec
〜以下略〜
Imagemagickをインストールしてあれば,mogrifyコマンドも入っている.次の様に変換.
画像サイズを変換なのだけれど,最高品質にするためにqualityを100にしている.
動画を作成.
ここでは1枚を300ms,つまり3秒表示するMPEGファイルを作成.元画像をリサイズしていないとすぐエラーが出る.メモリ不足とかの影響かなぁ.
作成された動画を確認してみる.
情報にノイズがおおいけれど,最後の5行が動画ファイルの情報.MPEG1ビデオが作成されている事がわかります.音声なし.
MBA13:$ mogrify -quality 100 -geometry 1024x577 *.jpg
MBA13:$
動画を作成.
MBA13:$ convert -quality 100 -delay 300 *.jpg test.mpg
MBA13:$
作成された動画を確認してみる.
MBA13:$ ffmpeg -i test.mpg
ffmpeg version 3.0.2 Copyright (c) 2000-2016 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.29)
configuration: --prefix=/usr/local/Cellar/ffmpeg/3.0.2 --enable-shared
--enable-pthreads --enable-gpl --enable-version3 --enable-hardcoded-tables
--enable-avresample --cc=clang --host-cflags= --host-ldflags= --enable-opencl
--enable-libx264 --enable-libmp3lame --enable-libxvid --enable-vda
libavutil 55. 17.103 / 55. 17.103
libavcodec 57. 24.102 / 57. 24.102
libavformat 57. 25.100 / 57. 25.100
libavdevice 57. 0.101 / 57. 0.101
libavfilter 6. 31.100 / 6. 31.100
libavresample 3. 0. 0 / 3. 0. 0
libswscale 4. 0.100 / 4. 0.100
libswresample 2. 0.101 / 2. 0.101
libpostproc 54. 0.100 / 54. 0.100
Input #0, mpeg, from 'test.mpg':
Duration: 00:01:59.92, start: 0.540000, bitrate: 368 kb/s
Stream #0:0[0x1e0]: Video: mpeg1video, yuv420p(tv), 1024x577
[SAR 1:1 DAR 1024:577], 104857 kb/s, 25 fps, 25 tbr, 90k tbn, 25 tbc
At least one output file must be specified
MBA13:$
Macはずいぶん前から独自のNTPサーバを立ち上げてOSはそこに接続する様にできている.なので普段時間合わせなんて考えた事なんて無いのだけれど,Firewallで接続許可されてない何て事もある.
気がついたら,時間がかなりずれているかもしれないのだけれど,たまに以下のURLにアクセスすれば時間があっているかどうか簡単に確認できます.
情報通信研究機構
https://www.nict.go.jp/JST/JST5.html
これ,なかなか興味深いね.
公開NTPサービスについてご説明します
http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/
気がついたら,時間がかなりずれているかもしれないのだけれど,たまに以下のURLにアクセスすれば時間があっているかどうか簡単に確認できます.
情報通信研究機構
https://www.nict.go.jp/JST/JST5.html
これ,なかなか興味深いね.
公開NTPサービスについてご説明します
http://www2.nict.go.jp/aeri/sts/tsp/PubNtp/
受け取った文字列に"PM"が入っていたら,12時間加算するというロジックがあって,エラーになっていたので直すというミッション.
元のデータは12時間表記で,変換後は24時間表記.Excelとかあれば簡単なのだけれど,bashなので文字列を取り出して再構成する感じ.
それでロジック的には12:00 PMと文字列変数に代入されるけれど,PMと入っているので単純に12時間足すと24:00となる.24時00分は便宜的には存在するけれど実際にはないのでエラー.
そもそも,お昼の12時は日本だと「午前12時」なのだけれど,英米だと12:00 PMなのだと初めてちゃんと把握した.
お昼の12時のことを「正午」というけれど,それは午前12時で,12時1分は午後0時1分.夜中の12時は,あまり使わないけれど「正子」といい,午後12時で12:0AM.同じく真夜中の12時1分は午前0時1分が正解.
普段生活していて「昼の12時」「午前12時」とはいうけれど,「午後12時」とは言わないね.なんとなく「午後一番(ごごいち)」というと,13時あたりを示す言葉だからそっちは合っているのか.
つまりロジック的には文字列を取り出して"PM"だったら12を加算すればよいけれど,合計値が24だったら12にすれば良い.
元のデータは12時間表記で,変換後は24時間表記.Excelとかあれば簡単なのだけれど,bashなので文字列を取り出して再構成する感じ.
それでロジック的には12:00 PMと文字列変数に代入されるけれど,PMと入っているので単純に12時間足すと24:00となる.24時00分は便宜的には存在するけれど実際にはないのでエラー.
そもそも,お昼の12時は日本だと「午前12時」なのだけれど,英米だと12:00 PMなのだと初めてちゃんと把握した.
お昼の12時のことを「正午」というけれど,それは午前12時で,12時1分は午後0時1分.夜中の12時は,あまり使わないけれど「正子」といい,午後12時で12:0AM.同じく真夜中の12時1分は午前0時1分が正解.
普段生活していて「昼の12時」「午前12時」とはいうけれど,「午後12時」とは言わないね.なんとなく「午後一番(ごごいち)」というと,13時あたりを示す言葉だからそっちは合っているのか.
つまりロジック的には文字列を取り出して"PM"だったら12を加算すればよいけれど,合計値が24だったら12にすれば良い.
$ date -d '2016/7/6 12:00:00' "+%Y/%m/%d %H:%M:%S %p"
2016/07/06 12:00:00 PM
$
ディスク使用量のアラートは,しきい値をどこに設定するか,またその頻度をどうするかというのがある.特にあまり監視コストをかけられないような用途の場合.
早期発見のためには高頻度監視なんだけれど,そうなると通知が頻発すぎて難しい.余裕あるよう70%を閾値とした場合に,一旦71%になるとそれを解消するまではずっとアラームが上がり続ける.そしてオオカミ少年のようになり,アラーム無視され,重大事故の時に発見できなくなる.
このサーバの場合,目算で95GB程度で安定していたにもかかわらず,とある障害でエラーログを大量に吐き出し始めたら,50GBほどの大きなログファイルが生成され,最大容量の150GBとなってディスクフルになってしまった例.
わかってしまえば「ログファイルだった」のだけれど,昔のUNIXのようにファイルシステムのパーティションを複数分割しないから,どのディレクトリ,ファイルが増えたのかは手探りで探す必要がある.LinuxやMacOS Xだとfindコマンドだし,WindowsだとExplorerの検索オプションにファイルサイズを指定するところがある.
早期発見のためには高頻度監視なんだけれど,そうなると通知が頻発すぎて難しい.余裕あるよう70%を閾値とした場合に,一旦71%になるとそれを解消するまではずっとアラームが上がり続ける.そしてオオカミ少年のようになり,アラーム無視され,重大事故の時に発見できなくなる.
このサーバの場合,目算で95GB程度で安定していたにもかかわらず,とある障害でエラーログを大量に吐き出し始めたら,50GBほどの大きなログファイルが生成され,最大容量の150GBとなってディスクフルになってしまった例.
わかってしまえば「ログファイルだった」のだけれど,昔のUNIXのようにファイルシステムのパーティションを複数分割しないから,どのディレクトリ,ファイルが増えたのかは手探りで探す必要がある.LinuxやMacOS Xだとfindコマンドだし,WindowsだとExplorerの検索オプションにファイルサイズを指定するところがある.
MacBook Airのディスク空き容量が急激に減る現象が発生.調べると以下のログ領域にファイルがたくさんできている.
みていると,mds,mdworkerが暴走状態.実際には何かしらのきっかけでaslやDiagnosticMessages以下のログファイルが肥大化してそれをきっかけにmdworkerがCPUリソースを食い処理遅延が発生しエラーを吐き,syslogdにログを転送してそのログをmdworkerが読み込んで処理遅延・・・というような状態.
中身を見てもバイナリファイルだったので,サクッとファイルを消して再起動したら復旧.
/private/var/log/DiagnosticMessages
/private/var/log/asl
中身を見てもバイナリファイルだったので,サクッとファイルを消して再起動したら復旧.
タイトルのままです.Windowsのバッチプログラム.
30年くらい前に,YYYYMMDDを返すだけのCプログラムをmakeした事があるんだがな.~を使って文字列を抽出できるようになっていたとは・・・
@echo off
set YYYYMMDD=%date:~-10,4%%date:~-5,2%%date:~-2,2%
set time2=%time: =0%
set HHMMSS=%time2:~0,2%%time2:~3,2%%time2:~6,2%
echo %YYYYMMDD%
echo %HHMMSS%
30年くらい前に,YYYYMMDDを返すだけのCプログラムをmakeした事があるんだがな.~を使って文字列を抽出できるようになっていたとは・・・
MacOS Xで,NTPDが動いているのに,正しく時間があわない場合.以下の様にntp.confを編集して,サービスを再起動してみる.
iburstを付けるのがミソ.
サービスを再起動してみる.
これで暫く様子見で. これはPowerBook G4 667MHzにインストールしたMacOS X 10.4 Tigerでの事.そろそろCMOSの電池が無いので狂いまくってるのかな.
ivory:root# cat /etc/ntp.conf
#server ntp.nict.jp
server time.apple.com iburst
ivory:root#
ivory:root# ntpd -f /var/run/ntp.drift -p /var/run/ntpd.pid -c /etc/ntp.conf
ivory:root#
ivory:root# sudo SystemStarter -d restart "Network Time"
SystemStarter[13235]: Found item: Apache
〜略〜
SystemStarter[13235]: Found item: NetworkTime
〜略〜
SystemStarter[13235]: Running command (13236): /System/Library/Sta
rtupItems/NetworkTime/NetworkTime restart
Stopping network time synchronization
Starting network time synchronization
Looking for host time.apple.com and service ntp
host found : time.apple.com
SystemStarter[13235]: Finished network time synchronization (13236)
SystemStarter[13235]: none left
ivory:root#
(32)Broken pipe: core_output_filter: writing data to the network
- カテゴリ :
- ハウツー
- ブロガー :
- ujpblog 2011/9/3 3:17
先週
というエラーがでたので
を入れてみたら,なんと!
というエラーが出る様に変更されてました.これもまた情報があまり無い.別このエラーがでていても不具合は無いので放置プレイみたいだ.
Socket is not connected: core_output_filter: writing data to the network
EnableMMAP off
EnableSendfile off
(32)Broken pipe: core_output_filter: writing data to the network
Socket is not connected: core_output_filter: writing data to the network
- カテゴリ :
- ハウツー
- ブロガー :
- ujpblog 2011/8/24 21:58
Apacheのエラーログを見ていたら,こんなログが書かれていた.
ファイルシステムをNFS等でマウントしている時にでるエラーらしいけれど,使ってないので関係ないとおもうのだが...
ネットで調べたらhttpd.confに記載してあるEnableMMAPとEnableSendfileが関係するようなので,まずは確認してみる.
コメントアウトされているので,offが明示されてないのでどっちなのか解らんな. まずは,コメントを外してoffを有効化してApacheを再起動してみる.
まぁ,またしばらくしてから,ログにかき出されてないか効果を確認してみよう.
Socket is not connected: core_output_filter: writing data to the network
ネットで調べたらhttpd.confに記載してあるEnableMMAPとEnableSendfileが関係するようなので,まずは確認してみる.
#
# EnableMMAP and EnableSendfile: On systems that support it,
# memory-mapping or the sendfile syscall is used to deliver
# files. This usually improves server performance, but must
# be turned off when serving from networked-mounted
# filesystems or if support for these functions is otherwise
# broken on your system.
#
#EnableMMAP off
#EnableSendfile off
まぁ,またしばらくしてから,ログにかき出されてないか効果を確認してみよう.
普通に,ls -laと入力すると,MM DD YYYYとMM DD hh:mmの形式になる.昨年以前ならYYYYで,今年なら時分が表示されるという事.
MacOS Xで,これを常にYYYYで表示したいときは,
と入力すれば良いです.
MacOS Xで,これを常にYYYYで表示したいときは,
ls -alT
ltrace プロセスが使っているライブラリを出すツール。実行中のプロセスも可能。
strace プロセスが呼びだしたシステムコールを表示する。
strace プロセスが呼びだしたシステムコールを表示する。
訳あってNTPが使えないサーバで,日時が狂ってしまった時に合わせる方法.
Linuxだとdate -s 201104010000で合わせるけれど,MacOS Xだとdate -uを使います.
このような感じ.
フォーマットは,
つまり,
は,3月31日16時8分 2011年という意味なのですが,設定するとGMTなので,JSTは-9時間なのでこの様になります.
Linuxだとdate -s 201104010000で合わせるけれど,MacOS Xだとdate -uを使います.
このような感じ.
ivory:/Users/tiger root# date -u 033116082011
Thu Mar 31 16:08:00 GMT 2011
ivory:/Users/tiger root# date
Fri Apr 1 01:08:02 JST 2011
ivory:/Users/tiger root#
date -u 月日時分年 です.
date -u 033116082011
Fri Apr 1 01:08:02 JST 2011
sed 's/^\.*//g'
......AAA
....BBB
.......CCC
.AAA
.BBB
.CCC
curlコマンドでダウンロード行っていてタイムアウト( curl: (28) FTP response timeout )などで中断する事があります.
ダウンロードした部分の続きから再ダウンロード(レジューム,リジューム)したい場合がありますが,次のサンプルの様に実行します.
●通常のダウンロード
●レジュームする場合
ダウンロードが再開すると,"** Resuming transfer from byte position XXXX"というような感じで残りのデータ量が表示されます.
ダウンロードした部分の続きから再ダウンロード(レジューム,リジューム)したい場合がありますが,次のサンプルの様に実行します.
●通常のダウンロード
curl -O ftp://xxxx/archive.gz
●レジュームする場合
curl -C - -o archive.gz http://xxxx/archive.gz
ダウンロードが再開すると,"** Resuming transfer from byte position XXXX"というような感じで残りのデータ量が表示されます.
小さいテキストファイルだったらテキストエディタのmiを使って変換できますが,1MBを超えると動作が遅くなって使い物にならなくなります. かといってiconvを使うと微妙にエラーがでて困るので,そんな時に見つけたのが,このCharcoというツール.
返還元のファイルを指定し入力文字コード,出力文字コードを指定,出力先のファイルを指定すると変換が始まり保存されます.
今回4MBのテキストファイルの変換が問題なく実行できました.
変換形式にUTF-8やEUCはありますが,SJISやShift-JISの表記はありません.ですが,DOSJapaneseで対応できました.
ダウンロードはこちら.
http://www.marblesoftware.com/Marble_Software/Charco.html
返還元のファイルを指定し入力文字コード,出力文字コードを指定,出力先のファイルを指定すると変換が始まり保存されます.
今回4MBのテキストファイルの変換が問題なく実行できました.
変換形式にUTF-8やEUCはありますが,SJISやShift-JISの表記はありません.ですが,DOSJapaneseで対応できました.
ダウンロードはこちら.
http://www.marblesoftware.com/Marble_Software/Charco.html
ネットワークトラフィックを取得するには,つぎのOIDを使います.
IF-MIB::ifInOctets .1.3.6.1.2.1.2.2.1.10.x
IF-MIB::ifOutOctets .1.3.6.1.2.1.2.2.1.16.x
最後のxはインタフェイス番号を入れます.
snmpwalkコマンドで実行するとこんな感じ.
コミュニティ名はpublicにしていますが,各自で変更してください.
IF-MIB::ifInOctets .1.3.6.1.2.1.2.2.1.10.x
IF-MIB::ifOutOctets .1.3.6.1.2.1.2.2.1.16.x
最後のxはインタフェイス番号を入れます.
snmpwalkコマンドで実行するとこんな感じ.
ivory:/Users/ujpadmin root# snmpwalk -v 2c -c public localhost "IF-MIB::ifInOctets.4"
IF-MIB::ifInOctets.4 = Counter32: 571539656
ivory:/Users/ujpadmin
Webサイトの規定のドキュメントファイル名(index.htmlとか)がついたURLがあるかチェックできます.
Canonicalizable
http://www.nickgerner.com/canonicalizable/
問題無いか何かしらのレスポンスがあれば,次の様に表示されます.
Everything looks good so far!
うちのサイトは,ちょっと問題ありですな.
Canonicalizable
http://www.nickgerner.com/canonicalizable/
問題無いか何かしらのレスポンスがあれば,次の様に表示されます.
Everything looks good so far!
うちのサイトは,ちょっと問題ありですな.
Red Hat ES3で運営しているサーバで,messagesファイルにauditdのエラーが書き出されました.
auditdはシステム監査機能のデーモンですが,ディスクの空き容量が20%を切るまでログファイルを作成し続けます.
dfコマンドで空き容量を確認したら空き容量が85%だったので,これが原因でしょう.
/var/log/audit.dを確認すると,大量のデータが保存されていました.
auditd[xxxx]: output error
auditdはシステム監査機能のデーモンですが,ディスクの空き容量が20%を切るまでログファイルを作成し続けます.
dfコマンドで空き容量を確認したら空き容量が85%だったので,これが原因でしょう.
/var/log/audit.dを確認すると,大量のデータが保存されていました.
deferred (delivery temporarily suspended: connect to 127.0.0.1[127.0.0.1]:10024 Connection refused
- カテゴリ :
- ハウツー
- ブロガー :
- ujpblog 2010/1/19 16:25
メールサーバがハングアップして,メールが届かなくなった. メーラからメールの接続は問題無いので気づかないが,しばらくメールが届かないので不審に思う.
メールサーバはpostfixで動いているので,mail.logをみると,次の様なエラーが.
コネクションが拒否されているのはわかるのですが,このエラーで探しても情報が無いので苦労しました.
10024というのはamavisdへの接続ポート.TELNETしても繋がらない. amavisdは,amavisd-newの事で,ウイルススキャナへのパイプを行うデーモンなのですが,そこに接続できてなかった.
amavisdが起動してなかったので,手動で起動させてみたら,こんなエラー.
ホスト名がjunoってなってるけどFQDNで解決できないから起動できないという話.
以前のMacOS X Serverではホスト名が安定しないという不具合?があって,固定にしていました.システム環境設定から設定できるホスト名じゃなくて,/etc/hostconfigを編集します.
デフォルトではこの様になっています.
これを次の様にデフォルトに戻しました.
変更後,OSを再起動して問題が解消しました. しかし,今更なぜこの現象が露呈したのかが不明です.
メールサーバはpostfixで動いているので,mail.logをみると,次の様なエラーが.
deferred (delivery temporarily suspended: connect to 127.0.0.1[127.0.0.1]:10024 Connection refused
10024というのはamavisdへの接続ポート.TELNETしても繋がらない. amavisdは,amavisd-newの事で,ウイルススキャナへのパイプを行うデーモンなのですが,そこに接続できてなかった.
amavisdが起動してなかったので,手動で起動させてみたら,こんなエラー.
sh-3.2# /usr/bin/amavisd
The value of variable $myhostname is "juno", but should have been
a fully qualified domain name; perhaps uname(3) did not provide such.
You must explicitly assign a FQDN of this host to variable $myhostname
in amavisd.conf, or fix what uname(3) provides as a host's network name!
sh-3.2#
以前のMacOS X Serverではホスト名が安定しないという不具合?があって,固定にしていました.システム環境設定から設定できるホスト名じゃなくて,/etc/hostconfigを編集します.
デフォルトではこの様になっています.
sh-3.2# cat /etc/hostconfig|grep HOSTNAME
HOSTNAME=juno
sh-3.2
sh-3.2# cat /etc/hostconfig|grep HOSTNAME
HOSTNAME=-AUTOMATIC-
sh-3.2
RTX1100/RTX1200等でDHCP運用している時に,リース(貸し出し)されているIPアドレスをリリース(解放)するには,次の様に実行.
以下のコマンドでリース情報を確認.
show status dhcp
リリースする場合は,次のコマンドで.
dhcp manual release IPアドレス
リリースされたかどうかは,再度ステータスを確認.
show status dhcp
以上.
以下のコマンドでリース情報を確認.
show status dhcp
リリースする場合は,次のコマンドで.
dhcp manual release IPアドレス
リリースされたかどうかは,再度ステータスを確認.
show status dhcp
以上.
ダウンロードファイルの誤り検出の為に用いられるMD5やSHA1ですが,Windowsで検証するツールがマイクロソフトから提供されていました.
Availability and description of the File Checksum Integrity Verifier utility
http://support.microsoft.com/default.aspx?scid=kb;en-us;841290
ダウンロードしたファイルは自己展開のアーカイブなので,実行するとfciv.exeファイルが展開されます.
fciv.exeファイルにオプションを付けて実行すると,md5値等が取り出せます.
fciv.exe -md5 ファイル
fciv.exe -sha1 ファイル
Availability and description of the File Checksum Integrity Verifier utility
http://support.microsoft.com/default.aspx?scid=kb;en-us;841290
ダウンロードしたファイルは自己展開のアーカイブなので,実行するとfciv.exeファイルが展開されます.
fciv.exeファイルにオプションを付けて実行すると,md5値等が取り出せます.
fciv.exe -md5 ファイル
fciv.exe -sha1 ファイル