2018年3月22日木曜日

Tカード

クレジット付きTカードが期限切れになって、新しいカードが送られてきた。
日ごろから同じIDにポイントがたまるTカードが2枚あればいいのになーと思ってたんで、古いクレジットカードを2枚目のTカードとして使えるか試してみた。
何食わぬ顔でコンビニで出してみたんだがダメだった。
Tカードにも期限が設定されていたようだ。残念。

2017年2月26日日曜日

ハードディスク換装 ubuntu

ハードディスクがなんかエラーを吐きはじめた


[ 1641.504719] ata1.00: exception Emask 0x0 SAct 0x7fff SErr 0x0 action 0x0
[ 1641.504722] ata1.00: irq_stat 0x40000008
[ 1641.504724] ata1.00: failed command: READ FPDMA QUEUED
[ 1641.504727] ata1.00: cmd 60/08:08:30:50:65/00:00:5c:00:00/40 tag 1 ncq 4096 in
                        res 41/40:08:30:50:65/00:00:5c:00:00/00 Emask 0x409 (media error)
[ 1641.504728] ata1.00: status: { DRDY ERR }
[ 1641.504729] ata1.00: error: { UNC }
[ 1641.538356] ata1.00: configured for UDMA/133
[ 1641.538375] sd 0:0:0:0: [sda] tag#1 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 1641.538378] sd 0:0:0:0: [sda] tag#1 Sense Key : Medium Error [current] [descriptor]
[ 1641.538380] sd 0:0:0:0: [sda] tag#1 Add. Sense: Unrecovered read error - auto reallocate failed
[ 1641.538382] sd 0:0:0:0: [sda] tag#1 CDB: Read(10) 28 00 5c 65 50 30 00 00 08 00
[ 1641.538384] blk_update_request: I/O error, dev sda, sector 1550143536
[ 1641.538396] ata1: EH complete
ta

再起動したらinitramfsで止まる。
とりあえずここを参考にfsckでbadblockを避けるようにする。(sda6がroot)

(initramfs)$ fsck -t -y -f -c /dev/sda6
(initramfs)$ reboot

とりあえず起動はするようになったが寿命だろう。
(seagate2TBだ。もっと前に買ったHGSTのはまだ大丈夫そう。新しい奴もHGSTのやつにしたかったが大容量のものは売ってなかった。仕方ないのでWD)
動いているうちに何とかしたい。再インストールしようかとも思ったが、いろいろカスタマイズしているので、もう一度やるのはめんどくさい。
新しいハードディスクをつなげてパーティション分けてコピーする。
/bootと/を分けてないので分けている人は注意。

パーティションを分ける


fdisk /dev/sdb

g create a new empty GPT partition table
DOSパーティションタイプは古いらしい。GPTとかいうやつにしてみる。
n add a new partition
swapとrootを作る
→間違いだった。UEFIでブートできるようにgrub用領域とかESP領域とかを作る必要があったようだ。(参照リンク
t change a partition type
swapはタイプを変更しておく
w write table to disk and exit
書き込む

フォーマット

mkswap /dev/sdb1
mkfs.ext4 /dev/sdb2

適当にマウントしてコピーする。


tar cSpf - . | tar xpf - -C /mnt/dst/

(linuxを2つ入れていたので壊れてない方から実行した。
ない場合はCD起動とかrsyncで--one-file-systemでコピーとかしたらいいはず)

rootのマウント先を変えておく


UUIDをチェック

$ ls -l /dev/disk/by-uuid/
合計 0
lrwxrwxrwx 1 root root 10  2月 26 02:35 6b0b30e8-略 -> ../../sda1
lrwxrwxrwx 1 root root 10  2月 26 03:53 8e7422d4-略 -> ../../sdb1
lrwxrwxrwx 1 root root 10  2月 26 02:35 97ecc96f-略 -> ../../sdb2
lrwxrwxrwx 1 root root 10  2月 26 02:35 d227743f-略 -> ../../sda6

コピー先のfstabを編集してチェックしたUUIDを置き換えたい先のUUIDに書き換える
# / was on /dev/sda6 during installation
UUID=d227743f-略 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda1 during installation
UUID=6b0b30e8-略 none            swap    sw              0       0
↓みたいに変える
# / was on /dev/sda6 during installation
UUID=97ecc96f-略 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda1 during installation
UUID=8e7422d4-略 none            swap    sw              0       0

次はgrubをなんとかしたい


新しい方で起動させ、そっちの方からgrubを入れる方針
update-grub2を実行すると自動的に他にインストールされているディストリを探してセットしてくれる

$ sudo update-grub2
Generating grub configuration file ...
Linux イメージを見つけました: /boot/vmlinuz-4.4.0-64-generic
Found initrd image: /boot/initrd.img-4.4.0-64-generic
Linux イメージを見つけました: /boot/vmlinuz-4.4.0-63-generic
Found initrd image: /boot/initrd.img-4.4.0-63-generic
Linux イメージを見つけました: /boot/vmlinuz-4.4.0-53-generic
Found initrd image: /boot/initrd.img-4.4.0-53-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
Found Ubuntu 16.04.1 LTS (16.04) on /dev/sda5
Found Ubuntu 16.04.1 LTS (16.04) on /dev/sdb2  <== 新しいやつ

再起動して新しいやつから起動
起動したかと思ったが、root=UUID=のところが新しいUUIDに変わってなかった。
ただのコピーである/boot/grub/grub.cfgから拾ってきているからだろう。
eキーを押して手作業でUUIDのところを変更してctrl-xで起動する。

linux   /boot/vmlinuz-4.4.0-53-generic root=UUID=d227743f-略 ro  quiet splash $vt_handoff
起動したらそっちでgrubをインストールする。

$ sudo grub-install /dev/sdb
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: warning: Embedding is not possible. GRUB can only be installed in this setup by using blocklists. However, blocklists are UNRELIABLE and their use is discouraged..
grub-install: エラー: will not proceed with blocklists.

エラーがでてインストールできなかった。まずい。
以下回復作業を色々試行錯誤。

どうやらGPTにしたのでUEFI用の何かをやらないといけなかったようだ。
UEFIでブートできるようにESP領域とやらを作る必要があるらしい。
また、grub用の領域も必要らしい。

いったん旧OSで起動し、ここを参考にgdiskでswapを削除、grub用の領域とESP領域とを作成。

1: サイズ2M, タイプ EF02(BIOS boot partition)
2: サイズ+512M, タイプ EF00(EFI System)
6: サイズは残りを割り当てる, タイプ Linux swap

パーティションIDがずれるのでsを押してsort
sdb2とかの番号が変わるので、うっかり防止のため再起動
mkswapをやり直し、UUIDが変わるのでfdiskを再編集した。

$ sudo grub-install /dev/sdb 

で、BIOSの設定を変えて再起動し確認する。
一度パーティションIDをsortする前にgrub-installしてその後sortしたら
grubのrescueで止まってしまったが、もう一度grub-installしたらOKだった。
最後、ここを参考にして、壊れているパッケージをチェックした。

$ sudo debsums_init
$ sudo debsums -cs
見つかったパッケージを
$ sudo apt install --reinstall 見つかったパッケージ

一応これでOKのはず。

2016年9月10日土曜日

flash player 23 beta for linux

今はpipelightを使ってflashの最新を使っている。
http://tthhfugapiyo.blogspot.jp/2015/07/pipelight.html

どうやらversion23からlinux版が復活しそうなようだ。(2ch情報)
pipelightは結構クラッシュするし起動が遅いので、早速移行してみる。

1.ダウンロード

http://labs.adobe.com/downloads/flashplayer.html
linux版64bitを取ってくる。

libflashplayer.so

2.有効化

pipelightを無効にして、~/.mozilla/pluginsに置いたが、古い方を優先してしまっている模様。
firefoxの設定で片方無効化しようとしても、両方無効化されてしまう。(同じプラグイン名だから?)
しょうが無いので以下にaptで入れたもの(というかaptで入れたinstallerが取ってきたもの?)
が置いてあるので、置き換えた。

/usr/lib/flashplugin-installer
動かしてみたら意外と普通に動いている。

3.デュアルディスプレイの問題

デュアルディスプレイの片面でフルスクリーンにしておき、もう片面で作業しようとすると、
フルスクリーンが解除されてしまう。
対応方法を探した。 ↓
http://www.webupd8.org/2012/10/ubuntu-multi-monitor-tweaks-full-screen.html

とりあえず読んでみて簡単そうなのは、libflashplugin.soをバイナリエディタで編集し、
_NET_ACTIVE_WINDOWを別の文字に置き換える
(_AET_ACTIVE_WINDOWとか)という方法。
やってみたらうまく行った。

付録:vimでバイナリエディタ

簡単なバイナリ編集くらいはvimでやりたいので調べてみた。↓
http://d.hatena.ne.jp/rdera/20081022/1224682665

やってみたが、エラーコードみたいなの(bash  command not found endifみたいな感じ)
で置き換えられてデータが飛んでしまう。うまく動いてないようだ。

とりあえず:help hex-editingを読んでちょっと修正。

augroup BinaryXXD
  autocmd!
  autocmd BufReadPre  *.bin let &binary =1
  autocmd BufReadPost * if &binary | silent %!xxd -g 1
  autocmd BufReadPost * set ft=xxd | endif
  autocmd BufWritePre * if &binary | %!xxd -r
  autocmd BufWritePre * endif
  autocmd BufWritePost * if &binary | silent %!xxd -g 1
  autocmd BufWritePost * set nomod | endif
augroup END

2016年8月16日火曜日

GnuCashで日本の株とか


素晴らしい物を作っている人がいたので使い方をメモっておく。

http://liosk.blog103.fc2.com/blog-entry-185.html
http://liosk.blog103.fc2.com/blog-entry-204.html
日本の株価とかがgnucashで取って来ることができる。

最新は↓にあるようだ。
https://github.com/LiosK/Finance--Quote--YahooJapan

インストール方法も書いてあるけど、
ユーザの環境変数をいじらないと行けないので、
どっちかというと古いやり方の方が好み。
よって以下のようにした。


1. GnuCash / Finance::Quoteインストール


# apt install gnucash

(libfinance-quote-perlは勝手に入るようだ。)

2. Finance::Quote::YahooJapanインストール


↓でインストール先を調べておく。
$ dpkg -L libfinance-quote-perl

必要なファイルはYahooJapan.pmだけのようなので、ダウンロードして以下に置く。

/usr/share/perl5/Finance/Quote/YahooJapan.pm

で、これが読み込まれるように/usr/share/perl5/Finance/Quote.pmの184行目あたり、
YahooJapanを追加する。

             Yahoo::USA YahooYQL ZA_UnitTrusts YahooJapan/; }

あとはgnucashを起動したら読み込まれているので、↓のやり方で使える。
http://liosk.blog103.fc2.com/blog-entry-185.html

2016年8月6日土曜日

apache2のuserdirとsuEXEC


Ubuntu 16.04 LTSを新たに入れたところsuphpはすでに無くなっていたようだ。興味がなくなったのでやめるっぽい。(勘弁してくれ)
ずっとアップグレードで運用していたのでわからなかった。
以前やっていた方法ではダメなのでepgrec再構築を兼ねてメモを残す。

userdir上でphpをユーザ権限で動かそうとして色々やってみたがどうにもならん。意味不明すぎる。
仕方ないのでvirtualhostで動かした。

方針

1. virtualhostを新たに定義、使いたいユーザだけSuexecUserGroupで実行ユーザを決める。
2. ユーザ用のcgi-binを用意、phpのラッパーを置く
3. phpをそのラッパーで開く

インストール


apache2
apache2-suexec-custom


(libapache2-mod-suphpはお亡くなりになったらしい)
mysql-server
php
php-cgi
php-mbstring
phpmyadmin

virtualhost

/etc/apache2/sites-available/001-user.confを作る

# conf-enabled/serve-cgi-bin.confがベース -------- ①
<IfModule mod_alias.c>
    <IfModule mod_cgi.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>

    <IfModule mod_cgid.c>
        Define ENABLE_USR_LIB_CGI_BIN
    </IfModule>




    <IfDefine ENABLE_USR_LIB_CGI_BIN>
        # ユーザごとのcgi-binをつくる
        ScriptAliasMatch ^/~(.*)/cgi-bin/(.*) "/home/$1/cgi-bin/$2"
        <Directory "/home/*/cgi-bin">
            AllowOverride None
            Options +ExecCGI -MultiViews +FollowSymlinks
            Require all granted
        </Directory>
    </IfDefine>

</IfModule>

<VirtualHost *:80>
    # 000-default.confとuserdir.confがベース
    DocumentRoot /var/www/html
    ServerName hogehoge # サーバ名
    SuexecUserGroup user1 user1 # suexecで動かすユーザ
    UserDir public_html
    UserDir disabled root

    # 000-default.confとuserdir.confがベース
    <Directory /home/user1/public_html>
        AllowOverride All
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI FollowSymLinks
        <Limit GET POST OPTIONS>
            Require all granted
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Require all denied
        </LimitExcept>
    </Directory>
</VirtualHost>



※/etc/hostsにサーバ名を書いて、それでアクセスする


userdir.confを編集

virtualhostの設定と重複するので、userdir.confの方のuserdirを無効にする。

/etc/apache2/mods-enabled/userdir.conf を編集
<IfModule mod_userdir.c>
    UserDir public_html
    UserDir disabled root user1 #ユーザを無効にする。


suexec


suexecを有効にする。
a2enmod suexec
 suexecでphpを実行する。ユーザディレクトリごとにphpをおいてそれを実行することで、phpをユーザ権限で動作させる。
/etc/apache2/suexec/www-dataを以下のように設定

/home
public_html
①で設定したcgi-binにphpのラッパーを置く
・実行権限をつける
・他ユーザからの書き込みアクセスはNG: chmod g-w

cat php
#!/usr/bin/php-cgi

.htaccess

AddHandler cgi-script .cgi
AddHandler php-script .php
Action php-script /~user1/cgi-bin/php


a2ensite 001-user
a2enmod userdir
a2enmod actions
a2enmod auth_digest


いろいろ試行錯誤しすぎて漏れがあるかもしれない

2016年7月20日水曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)その2

前回の結果、とりあえずScanSnap Managerをwineで起動するところまでは出来た。
でも、ものすごく読み取りが遅くて実用に耐えない。しかも3枚までしか取れない。
何が問題で遅くなっているのか見てみようと思った。

遅い原因を探す(DEBUGフラグ)


https://wiki.winehq.org/Debug_Channels
を参考にデバッグフラグをつけて動かしてみた。
 +relay,+snoop

OKなとき、↓のInitializeのCALLで色々やったあと、RETで戻ってくる。
808373:0038:CALL PfuSsImgCtl.SsICSRGBInitialize(<unknown, check return>) ret=060bc073
808395:0038:RET  PfuSsImgCtl.SsICSRGBInitialize(060f023c "ScanSnap iX100") retval=00000000 ret=060bc073

NGのとき、戻ってこない。
これは、以下で戻ってこないのが原因っぽい(SsICSRGBInitializeの中で呼んでいる)
003b:Call mscms.OpenColorProfileA(001c3c58,00000001,00000001,00000003) ret=037211bb

OKの場合は、以下のような感じで、
ReadFileしたあと、FreeHeapして戻ってくるだけ





2025424 0038:Call KERNEL32.ReadFile(00000294,0c522540,00000c48,0cf0ee18,00000000) ret=7c56bb29
2025425 0038:Ret  KERNEL32.ReadFile() retval=00000001 ret=7c56bb29
2025426 0038:Call ntdll.RtlFreeHeap(00110000,00000000,0c4f51c8) ret=7c56c102
2025427 0038:Ret  ntdll.RtlFreeHeap() retval=00000001 ret=7c56c102
2025428 0038:Ret  mscms.OpenColorProfileA() retval=00000002 ret=037211bb


なのだが、NGの時は、スレッド0038はしばらく止まったあと以下のような感じでタイムアウトになる。
ロックしたまま開放されないのが原因であって、処理が遅いわけじゃないようだ。



2443843 0039:Call KERNEL32.Sleep(00000014) ret=00d7d00e
2443844 err:ntdll:RtlpWaitForCriticalSection section 0x7c575640 "handle.c: mscms_handle_cs" wait timed out in thread 003b, blocked by 0038, retrying (60 sec)
2443845 0039:Ret  KERNEL32.Sleep() retval=00000000 ret=00d7d00e

遅い原因を探す(printfデバッグ)


wineの最新をgit pullしてきて、dlls/mscms/handle.cで
mscms_handle_csの操作している前後に以下のような感じでprintfを入れて見てみる。

243     printf("%s:%d\n", __FILE__, __LINE__);
244     EnterCriticalSection( &mscms_handle_cs );
245     printf("%s:%d\n", __FILE__, __LINE__);

見てみようとしたら、動くようになってしまった。
printfの有無で動きが変わるので、タイミング的な問題のようだ。
根本的には何にも解決してないが、動くので良しとする。
(追記:やっぱり動かない。何が影響したのかわからない。)

カスタムwineをplayonlinuxで使う


wineのprefixをplayonlinuxのバイナリ置き場にする。
./configure --prefix=/home/****/.PlayOnLinux/wine/linux-x86/1-custom

あとはmake && make install


その他


これを調べてる最中にScanSnap Cloudってのがあることを知った。
これだと、PCなくてもiX100だけでキャプチャできるので、
linuxで動かすためにそこまで苦労する必要無かったかも。

でも、PCを介さず自動なのでレシートとか名刺がバラバラにJPGにされたりする。
ある程度制御したい場合はPCで使えたほうが便利。
なのでLinuxで動かすことに意味がなかったわけではない。(強がり)

あとは電波感度が良ければいいんだが。

追記


追記1:
やっぱり動かない。何が影響したのかわからない。
ログからすると、以下の2つの処理が遅いようだ。
P2ICRPPR.P2iGetDocPosMulti
P2IERASECLRBDR.P2iEraseClrBdr


2862806 1942566.330:003a:CALL P2ICRPPR.P2iGetDocPosMulti(<unknown, check return>
) ret=034b2c0f
3082841 1942605.508:003a:RET  P2ICRPPR.P2iGetDocPosMulti(0dd2cc6c,0dd2cca0,00000
000,00000000,0dd2d150) retval=00000000 ret=034b2c0f

3130018 1942619.899:003a:CALL P2IERASECLRBDR.P2iEraseClrBdr(<unknown, check retu
rn>) ret=034b37e6
3398921 1942702.424:003a:RET  P2IERASECLRBDR.P2iEraseClrBdr(0dd2cca0,0dd2cd9c,00
000000) retval=00000000 ret=034b37e6

追記2:
どうも使うwineをバージョン上げたりして変更したらしばらく使えるような感じがある。


2016年7月8日金曜日

ScanSnap iX100 on Ubuntu Linux 16.04 (wine)

前回の結果、とりあえずlinux上のソフトでScanSnap iX100を動かすことが出来たが、やっぱり使い心地は製品には及ばない。windows用のソフトを使いたいが、いちいち仮想環境を動かすのはめんどくさいから、できればwineで動かしたい。
 ScanSnap iX100はWi-Fi接続で使える機能がある。USB接続はドライバがそもそも動かないが、Wi-FiならOS関係なく動くんじゃないか?と考え、色々やった結果を以下に記す。

前準備


windows等で、Wi-Fi接続の設定をやっておく。

wineの準備


PlayOnLinuxで、wine-1.9.10-stagingを使った。文字化けしないようにwinetricksで以下を入れておく。
  • fakejapanese
  • fakejapanese_ipamona
(多分どっちかでいいと思う)

インストール


付属のCDからインストール



インストールは割とすんなり行った。
最後にUSBを接続して確認とか、Wi-Fiで確認とか、アップデートの確認とか出てくるが、USBが使えないと進めないので全部キャンセルする。
(おそらくこれはかなり重要。キャンセルせずUSBで固まったりすると、インストールが正常終了しないので、中途半端な状態になる。)

インストール後勝手に動く。PlayOnLinux Wizardが終了しないので、とりあえず一旦全部終了する。バックグラウンドで色々動いているので、それっぽいものは適当にkillしていく。
全部終わらせたらwizardが進む。

 


とりあえずはScanSnap Manager.lnkとScanSnap Managerの設定.lnkを登録しておけばいいと思う。

動かしてみる。


ScanSnapManagerを動かす。
.lnkだと起動に失敗したりする。「ScanSnap Managerの設定.lnk」の方を動かしたらいいかもしれない。



Wi-Fi接続をやってみる。



登録していないものには繋がらないようだ。
(他人にうっかり使われないようにみたいな配慮か?)

Wi-Fiにつなげる


色々ファイルを探しまわった結果、PfuSsMon.iniというのが怪しそうなので、これをWindowsから取ってきて置き換える。
コピー先:drive_c/Program Files/PFU/ScanSnap/Driver/

もう一度起動。

 

認識した。
スキャンしてみる。



ダメっぽい。

スキャンが失敗する原因


色々探しまわったら、詳しい情報が書いてあるサイトを見つけた。
なんか執念を感じるほど調べてある。すばらしい。

これを元に調べると(3) RAW画像の出力はできていて、(5)のJpgTmpへの出力ができていない。ってことで(4)のカラープロファイルのところで失敗しているっぽい。
で、もうちょっと上を見ると以下の2つを読んでいるらしい。

  • %SYSTEMROOT%\system32\spool\drivers\color\ScanSnap S1500.icm
  • %SYSTEMROOT%\system32\spool\drivers\color\sRGB Color Space Profile.icm 

このうち2個めのファイルがwineの方には無かったのでwindowsから取ってきて入れる。
コピー先:drive_c/windows/system32/spool/drivers/color/

 

よめた。
けど、変換が超遅い。
これはこれで実用にならない。

諦めた。
(と見せかけて続き