パスワードを忘れた? アカウント作成

passer-byさんのトモダチの日記みんなの日記も見てね。 最新から新しい日記やタレこみを確認できますよ。

13575353 journal
Windows

passer-byの日記: Windows10 on vmware

日記 by passer-by

実は1年ほど前に Windows10 が creators update になってから、vmware 上の仮想マシンが画面真っ黒で使い物にならなくなっていた。アップデートしなければ普通に使えていたので古いバージョンのまま使ってきたのだけど、そろそろサポートが切れそうなんでなんとかしてみることにした。

今までは仕事の都合で入れていた某監視ソフトが悪さをしているもんだと思い込んでいた。で、それを簡単にはアンインストールできそうにないのでこの際だからと fall creators update を新規インストールして、無事に走ったように見えたのだけど。

VMware tools をインストールしたところで、やっぱり画面真っ黒になった。どうやらずっとこいつが悪さをしていたらしい。とっくにサポートの切れた VMware 7 をずーっと使ってきたのだけど、もはやこれまでか。

という訳で、画面真っ黒になってた仮想マシンを急遽ダウンロードした VMware workstation 14 で動かしたところ、無事に使うことができた。そうかサポート切れの古い仮想マシンでは最新の OS が使えないことがあるのか、と最新版ライセンスを手配中。仕事で使う物だからね、やっぱライセンスは買わないと。ただ、掛売りしてくれるところを探すのが大変なんだよなぁ……。

2018-04-15 追記:そうそう、使ってるのは HiDPI な環境なんだけど、firefox と違って GDK_SCALE=1 としないと表示が大き過ぎた。同じ gdk を使ってて何故違いが出るのかは謎だけど、個人的には HiDPI を意識せずに済む VMWare の方が好印象。

13553976 journal
UNIX

passer-byの日記: gb2312 のメール

日記 by passer-by

ここ何年か、時々 GB2312 と銘打ったメールを受け取ることがあって(英語メールに返信する形で Shift_jis に含まれない文字を含むメールを書くと、一部のメーラで生成されるらしい)、mutt で読むのに苦労していた。iconv で文字コードを GB2312 と指定しても、色々と文字化けして読めなかったりする。

調べてみると、やはり難儀した先人たちがちゃんと解決してくれていた。要するに GB2312 と言いつつ実はそれを拡張した GBK という文字セットになってるらしく、それは更に GB18030 に拡張されて中国の正式文字コードになってるという事。なので、iconv -f GB18030 -t UTF8 するとすんなり読めた。

なお、Shift_JIS や EUC-JP 環境を使ってる人は、これを更に nkf -W8 とかで受けて使うと良い。というのも、iconv は出力側文字セットに含まれてない文字を受け取ると、そこで動作を止めてしまうから。nkf なら -I オプションで ISO-2022-JP に無い文字は「〓」に変換してくれるし、知らない文字はそのまま放置して更に先に進もうと頑張ってくれる。nkf 偉い。

という訳で、以下のように日本語文字コードだけ nkf を使う変換フィルタをシェルスクリプトをでっちあげて使用中:


#!/bin/sh
# usage: $0 -f CODESET_FROM -t CODESET_TO [[[input] input] ...]

# parse the -f and -t options, and remove them from $*
while getopts f:t: name
do
    case $name in
        f) INCODE=$(echo $OPTARG | tr A-Z a-z);;
        t) OUTCODE=$(echo $OPTARG | tr A-Z a-z);;
    esac
done
shift $(($OPTIND - 1))

case ${INCODE:=iso-2022-jp} in
sjis|shift-jis|shift_jis)
    CMD="nkf -SX"
    ;;
ujis|euc-jp|eucjp)
    CMD="nkf -EX"
    ;;
iso-2022-jp*)
    CMD="nkf -JX"
    ;;
utf-8|utf8) # entry added on 2018-04-02
    CMD="nkf -WX"
    ;;
gb2312) # subset of GB18030, which includes Japanese and Korean characters.
    CMD="iconv -f gb18030 -t utf-8"
    ;;
*)
    CMD="iconv -f $INCODE -t utf-8"
    ;;
esac

case ${OUTCODE:=utf-8} in
sjis|shift-jis|shift_jis)
    if [ "${CMD%% *}" = nkf ]; then
        CMD="$CMD -sI $@" # -I added on 2018-04-02
    else
        CMD="$CMD $@ | nkf -W8X -sI"
    fi
    ;;
ujis|euc-jp|eucjp)
    if [ "${CMD%% *}" = nkf ]; then
        CMD="$CMD -eI $@" # -I added on 2018-04-02
    else
        CMD="$CMD $@ | nkf -W8X -eI"
    fi
    ;;
iso-2022-jp*)
    if [ "${CMD%% *}" = nkf ]; then
        CMD="$CMD -jI $@" # -I added on 2018-04-02
    else
        CMD="$CMD $@ | nkf -W8X -jI"
    fi
    ;;
utf-8|utf8) # entry added on 2018-04-02
    if [ "${CMD%% *}" = nkf ]; then
        CMD="$CMD -w $@"
    else
        CMD="iconv -f $INCODE -t $OUTCODE $@"
    fi
    ;;
*)
    CMD="iconv -f $INCODE -t $OUTCODE $@"
    ;;
esac

if [ $INCODE = $OUTCODE ]; then
    CMD="cat $@"
fi

eval "$CMD"

拙いコードなのはしょうがないとして、ちゃんと POSIX compliant になってるかがちょっと心配。

(追記)nkf だけを使うときに -I フラグを忘れていたのを追加。utf-8 対応エントリを入出力共に忘れていたのを追加。on 2018-04-02

13553895 journal
Firefox

passer-byの日記: モバイル版 firefox のブックマーク

日記 by passer-by

Sync 目的で firefox on iPad を使っていてブックマークを編集できないことに辟易していたのだけど、デスクトップ版からの「モバイルのブックマーク」を見ることでアクセスも編集もできることに気づいた。これでようやく並べ替えとタイトルの修正ができる……。

13502284 journal
日記

passer-byの日記: NTFS disk サルベージ(続) 4

日記 by passer-by

前回の続き。といっても少し。

HDD のクラッシュの方は機械的トラブルを想定してディスクイメージを ddrescue で吸い出してから TestDisk で救出する戦略を考えた。が、考えてみると ddrescue が走るのは Linux だが十分な大きさを持つドライブは NTFS だけだったので、急遽 Windows ホストの VMware で Linux を走らせそこから共有フォルダ機能で書き出すことに。

で、やってみると VMware からの USB 経由アクセスが死にそうなほど遅い事が判明。なのでおとなしく諦め、SSD の場合と同じく Windows から TestDisk で NTFS イメージを読んで必要なディレクトリ以下をコピーすることにした。

TestDisk の挙動を見ていると、問題のディスクは(1)最初読むのに時間がかかる(2)ある瞬間以降に全領域が等しく読めなくなる、という症状なことがわかった。ので、コピー途中で読めなくなる→ディスクの USB を抜き差しして TestDisk 再起動して失敗したサブディレクトリから再開、の繰り返しでサルベージを完了する。なんか途中から失敗しなくなってその後数日は安定して読めていたのは色々と謎。読めなくなる時はまるごとダメなので、多分電気的なトラブルなのだと思うのだけど、どーしてある時から安定したのやら。再利用は怖いので考えてないが。

13494971 journal
Debian

passer-byの日記: VMware 14 の共有フォルダ(Linux ゲスト)

日記 by passer-by

挙動不安定でクラッシュしたディスクをサルベージするのに、ddrescue というソフトでエラーセクタを適宜読み飛ばしながらディスクイメージを作って、それに対して TestDisk を実行すればよいらしい、という事がわかった。

ddrescue が走るのは Unix(Linux)。然るに十分な空きのあるディスクは Windows ボリュームのみ。なので、そのボリュームを持つマシン上の VMware で Linux を走らせて、共有フォルダ機能でホスト側ディスクにディスクイメージを作ることにする。

Linux は慣れで Debian 9 (stretch) を選択。VMware をインストールして、Debian を「最小のCD」という奴を使って導入して(GUI は無しでいく)、更に open-vm-tools パッケージを導入。これで vmware tools が走っているのと等価な状態になるので、VMware の方で共有フォルダの設定をしてから

# vmhgfs-fuse /mnt/hgfs -o auto_unmount -o allow_other

すれば /mnt/hgfs/ 以下に VMware 側で設定したフォルダがマウントされる。
ls -la /mnt/hgfs して見えるディレクトリは dr-xr-xr-x なパーミッションだが、実際に書いてみるとホスト側の設定に従って書き込みできる(この際、ホスト側の共有設定は不要)。

起動時に自動的にマウントするように設定できれば尚良いのだけど、/etc/init.d/open-vm-tools をいじってもどうもうまくいかない。きっと LSB に従った init script の書き方をわかってないだけなのだと思うのだけど……。

13488062 journal
Windows

passer-byの日記: NTFS disk サルベージ

日記 by passer-by

背景:

  1. ノート PC の内蔵 SSD を交換すると、何故か外したディスクの中身が読めなくなったりその前にdd で移行構築した筈の新ディスクの中身が消えたり(パーティション自体が消えたり)した。どうも外付け SATA I/F を通した時と PC 内蔵 SATA I/F を通した時とでディスクジオメトリの見え方が違ってしまう模様。原理は知らない。
  2. デスクトップ PC の内蔵 HDD がクラッシュした。正確には、ディスクの中身が読めなくなった。バックアップをこの何か月かサボってたらしく、その分だけでも救い出せないかと泣き付かれる。

やりたい事:
なんとか読み出せるディスクイメージから、できればパーティションを復活させる。それができなくても断片的にでもファイルを救出する。HDD の方はアクセスと共に劣化する可能性もあるので慎重に。

使ったツール:
TestDisk Windows 版。基本的にパーティションテーブルを復旧/再構築するソフトなのだが、ディスク書換の前に対象パーティションの中を読んでファイル単位で外部ディスクにコピーできるのが秀逸。

手順:
「TestDisk」の使い方を参考に実施。但し、SSD 復旧の方はパーティションを復活させるだけではダメで(復活させたパーティションの block size が 4096 bytes と、NTFS の標準値 512 bytes と異なっていた)、それが判明した時点でまずどうしても救い出したいフォルダだけを別ディスクにコピーして救い出した。
(続く)

13374211 journal
Windows

passer-byの日記: Windows10 の復旧 4

日記 by passer-by

いつものように Windows10(仮想マシン)にアップデートが来たので、適用して再起動したら起動しなくなった(それを再「起動」というのかはともかく:-)。具体的には、最初のロゴ+くるくるが表示され、それがフェードアウトしたらそれっきり。とはいえ、暫くはディスクアクセスは続いていた模様。何度再起動をかけても同じ状態になるので、セーフモード的な物に入る方法をぐぐって探した、その備忘録。

「起動に失敗する時の、Windows10 の回復オプションへの入り方」

  1. 電源を入れ、ロゴ+くるくる画面まで持っていく
  2. くるくるしている間に電源を強制切断する
  3. 上記を計2度繰り返す
  4. その次からはロゴ+「自動修復を準備しています」な画面になる

回復オプションに入ったら、以前のバージョンに戻すを選ぶなり、セーフモードで起動するなり。

13323295 journal
Firefox

passer-byの日記: firefox on linux

日記 by passer-by

Firefox を長く使っていると、こいつや OS やハードウェアの更新(バージョンアップ)に伴って色々と不都合が生じることがある(あった)。その備忘録。

HiDPI 設定
Firefox が使っている GDK の機能により、高 DPI ディスプレイ環境(GDK が DPI と画面ピクセル数から勝手に決める模様)になると勝手に全てを2倍にスケーリングして描画するようになる。ひどい仕様だと思うのだが(全て pt 単位で扱って、pixel 単位を要求してくる奴には pix → pt 変換係数を設定すれば良いだろうに)、この機能を使わないと妙に横幅が狭く描画されるページが出てきたりする。
という訳で、強制的にこれを ON にするには環境変数 GDK_SCALE を 2 に設定すればよい。整数値のみ設定可能で、1 にすると等倍描画するんじゃないかと思う(未検証)。
ところで、別に GDK_DPI_SCALE というのもあって、こちらはメニュー等のフォントのみをスケールさせる。正の実数値が設定可能な筈。例えば、GDK_SCALE=2 かつ GDK_DPI_SCALE=0.5 とすると、メニュー等だけ小さいフォントで描画される。やってみたけど、こちらをいじるメリットを感じなかったので未設定のまま。
日本語変換
いつの頃からか firefox や thunderbird で日本語入力ができなくなった事がある。メールは mutt を使っているので大きな影響は無かったのだが、暫く不便だった。
色々調べてみると、GTK_IM_MODULE を設定してやらなければならないらしい。という訳で、現在の設定は

    XMODIFIERS="@im=uim"
    GTK_IM_MODULE=xim

という状態で uim を使用。なお SCIM を使うなら

    XMODIFIERS="@im=SCIM"
    GTK_IM_MODULE=scim

だそうだ。大文字小文字の区別に意味があるのかどうかは未検証。
13323122 journal
Debian

passer-byの日記: VMwarePlayer7 on Debian 9 stretch

日記 by passer-by

Debian "stretch" がリリースされた訳で、さっそく検証も兼ねて手元のデスクトップマシンをアップグレードしたところ、今まで動いてた VMware Player 7.1.4 がウンともスンとも言わなくなった。という訳で動かすのに必要なことの備忘録。

stretch の各種ライブラリ非互換への対応
「ウンともスンとも言わない」原因がこれで、stretch で更新された共有ライブラリに一部不足するシンボルがある。ので、/etc/vmware/bootstrap に以下を加える:
/etc/vmware/bootstrap に加えた内容

# setup force shipped-version libraly use
for lib in \
  libgio-2.0.so.0 \
  libpango-1.0.so.0 \
  libatspi.so.0
do
    LD_LIBRARY_PATH=/usr/lib/vmware/lib/$lib/:$LD_LIBRARY_PATH
done
export LD_LIBRARY_PATH
linux 4.9 への対応
例によってカーネルドライバのコンパイルが通らなくなったので、各所を参考に手を加える。結局、/usr/lib/vmware/modules/source/ にある以下のファイルの中身を変更した:
/usr/lib/vmware/modules/source/vmmon.tar の中身の差分

diff -ruNb vmmon-only.org/linux/hostif.c vmmon-only/linux/hostif.c
--- vmmon-only.org/linux/hostif.c 2016-05-05 17:18:54.000000000 +0900
+++ vmmon-only/linux/hostif.c 2017-06-27 17:22:04.000000000 +0900
@@ -1166,8 +1166,16 @@
        int retval;

        down_read(&current->mm->mmap_sem);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+ retval = get_user_pages((unsigned long)uvAddr, numPages, 0, ppages, NULL);
+#else
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+ retval = get_user_pages((unsigned long)uvAddr, numPages, 0, 0, ppages, NULL);
+ #else
        retval = get_user_pages(current, current->mm, (unsigned long)uvAddr,
                                                        numPages, 0, 0, ppages, NULL);
+ #endif
+#endif
        up_read(&current->mm->mmap_sem);

        return retval != numPages;
@@ -1630,7 +1638,11 @@
                                                              global_page_state(NR_SLAB_UNRECLAIMABLE) +
                                                              global_page_state(NR_UNEVICTABLE) +
                                                              hugePages + reservedPages;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)
+ unsigned int anonPages = global_page_state(NR_ANON_MAPPED);
+#else
        unsigned int anonPages = global_page_state(NR_ANON_PAGES);
+#endif
        unsigned int swapPages = BYTES_2_PAGES(linuxState.swapSize);

        if (anonPages > swapPages) {

/usr/lib/vmware/modules/source/vmnet.tar の中身の差分

diff -ruNb vmnet-only.org/netif.c vmnet-only/netif.c
--- vmnet-only.org/netif.c 2016-05-05 17:18:55.000000000 +0900
+++ vmnet-only/netif.c 2017-06-27 17:15:32.000000000 +0900
@@ -465,7 +465,11 @@
        VNetSend(&netIf->port.jack, skb);

        netIf->stats.tx_packets++;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0)
+ netif_trans_update(dev);
+#else
        dev->trans_start = jiffies;
+#endif

        return 0;
  }
diff -ruNb vmnet-only.org/userif.c vmnet-only/userif.c
--- vmnet-only.org/userif.c 2016-05-05 17:18:55.000000000 +0900
+++ vmnet-only/userif.c 2017-06-26 19:29:28.000000000 +0900
@@ -113,8 +113,16 @@
        int retval;

        down_read(&current->mm->mmap_sem);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+ retval = get_user_pages(addr, 1, 0, &page, NULL);
+#else
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+ retval = get_user_pages(addr, 1, 1, 0, &page, NULL);
+ #else
        retval = get_user_pages(current, current->mm, addr,
                                                      1, 1, 0, &page, NULL);
+ #endif
+#endif
        up_read(&current->mm->mmap_sem);

        if (retval != 1) {

12507456 journal
ソフトウェア

passer-byの日記: VMware player ライセンス

日記 by passer-by

VMware player の商用利用ライセンスとして VMware fusion の物が使えていたのだけれど、player Pro 12 ではこれが使えなかった。調べてみると、player 7 までは大丈夫だけど 12 では新たにライセンスが必要っぽい。ライセンス販売ページに、player 6/7 からのアップグレードという選択肢があるので。

という訳で player 7 をダウンロードしてきて別途購入の fusion のライセンスキーを入れると、無事アクティベートできた。やれやれ。

今まで player 6 を使っていたのが Windows10 をゲストとして入れると時々異常終了するようになったのでアップグレードしたのだけど、その前にゲストとして Windows10 を指定するというのを試してみるべきだったか。そもそもその選択肢があったのか、今となってはわからないが。あ、player 7 ではちゃんと windows 10 が選択できた。

typodupeerror

私は悩みをリストアップし始めたが、そのあまりの長さにいやけがさし、何も考えないことにした。-- Robert C. Pike

読み込み中...