build fglrx module for linux 3.17 or later
2〜3ヶ月前から最新の linux カーネル用に fglrx ドライバをビルドできなくなっていたので、しかたなく linux 3.16 を使っていました。
しかし今回パッチを見つけたのでそれを適用してビルドしました。module-assistant 使う場合にオレオレ パッチをとりあえず差し込めましたが、これでよかったのでしょうか。
一回失敗する
% module-assistant --text-mode --verbose build fglrx NOTE: You are not root but member of the src group. Mapping the base working directory to "/usr/src/modass". Found sudo, will use it for %s and dpkg commands.unpack Removing old /usr/src/modass/usr_src/modules/fglrx/ tree rm -rf /usr/src/modass/usr_src/modules/fglrx Extracting the package tarball, /usr/src/fglrx.tar.bz2, please wait... tar --bzip2 -x -f /usr/src/fglrx.tar.bz2 tar: modules: Cannot utime: Operation not permitted tar: modules: Cannot change mode to rwxr-xr-x: Operation not permitted tar: Exiting with failure status due to previous errors "/usr/share/modass/packages/default.sh" build KVERS=3.17.0-trunk-amd64 KSRC=/lib/modules/3.17.0-trunk-amd64/build KDREV=3.17.4-1~exp1 kdist_image fakeroot debian/rules kdist_clean /usr/bin/make -f debian/rules clean make[1]: Entering directory '/usr/src/modass/usr_src/modules/fglrx' test -f debian/control || cp debian/control.template debian/control dh_testroot rm -f configure-stamp rm -f fglrx.ko fglrx.mod.c *.o rm -f .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd rm -rf .tmp_versions rm -rf patch dh_clean debian/control debian/install make[1]: Leaving directory '/usr/src/modass/usr_src/modules/fglrx' fakeroot debian/rules KVERS=3.17.0-trunk-amd64 KSRC=/lib/modules/3.17.0-trunk-amd64/build KDREV=3.17.4-1~exp1 kdist_image /usr/bin/make -f debian/rules binary_modules make[1]: Entering directory '/usr/src/modass/usr_src/modules/fglrx' sed -e 's/#KVERS#/3.17.0-trunk-amd64/g' \ -e 's/#VERSION#/1:14.9+ga14.201-2/g' debian/control.template > debian/control sed 's/#KVERS#/3.17.0-trunk-amd64/g' debian/install.template > debian/install touch configure-stamp dh_testdir dh_prep /usr/bin/make -C /lib/modules/3.17.0-trunk-amd64/build SUBDIRS=/usr/src/modass/usr_src/modules/fglrx modules make[2]: Entering directory '/usr/src/linux-headers-3.17.0-trunk-amd64' Makefile:10: *** mixed implicit and normal rules: deprecated syntax make[1]: Entering directory `/usr/src/linux-headers-3.17.0-trunk-amd64' CC [M] /usr/src/modass/usr_src/modules/fglrx/firegl_public.o /usr/src/modass/usr_src/modules/fglrx/firegl_public.c:6387:12: warning: ‘KCL_fpu_save_init’ defined but not used [-Wunused-function] static int KCL_fpu_save_init(struct task_struct *tsk) ^ CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_acpi.o /usr/src/modass/usr_src/modules/fglrx/kcl_acpi.c: In function ‘KCL_ACPI_Slot_No_Hotplug’: /usr/src/modass/usr_src/modules/fglrx/kcl_acpi.c:845:21: error: ‘struct acpi_device_flags’ has no member named ‘no_hotplug’ tdev->flags.no_hotplug = true; ^ /usr/src/linux-headers-3.17.0-trunk-common/scripts/Makefile.build:262: recipe for target '/usr/src/modass/usr_src/modules/fglrx/kcl_acpi.o' failed make[5]: *** [/usr/src/modass/usr_src/modules/fglrx/kcl_acpi.o] Error 1 /usr/src/linux-headers-3.17.0-trunk-common/Makefile:1390: recipe for target '_module_/usr/src/modass/usr_src/modules/fglrx' failed make[4]: *** [_module_/usr/src/modass/usr_src/modules/fglrx] Error 2 Makefile:181: recipe for target 'sub-make' failed make[3]: *** [sub-make] Error 2 Makefile:8: recipe for target 'all' failed make[2]: *** [all] Error 2 make[2]: Leaving directory '/usr/src/linux-headers-3.17.0-trunk-amd64' debian/rules:53: recipe for target 'build' failed make[1]: *** [build] Error 2 make[1]: Leaving directory '/usr/src/modass/usr_src/modules/fglrx' debian/rules:109: recipe for target 'kdist_image' failed make: *** [kdist_image] Error 2 BUILD FAILED! See /usr/src/modass/var_cache_modass/fglrx-source.buildlog.3.17.0-trunk-amd64.1419839576 for details. Build failed. Press Return to continue...
エンター押しといてください
パッチを拾う
fglrx linux 3.17 と検索して見つけたのが https://gist.github.com/aginor/4f232d4c28aef7685282 です。なるほど no_hotplug
の代わりに別のところに ignore_hotplug
ができたんですね。
% cd /usr/src/modass/usr_src/modules/fglrx % curl -O https://gist.githubusercontent.com/aginor/4f232d4c28aef7685282/raw/c7958e092fa19b4e2603e9bd377aca89569d77fb/AMD-fglrx-3.17.patch
debian/rules を修正
build ルールの $(MAKE) 直前あたりが適当そうです。さっきの .patch で目当てのコードが書き換わるよう、こう修正してみましょう:
build: configure-stamp dh_testdir dh_prep patch kcl_acpi.c AMD-fglrx-3.17.patch $(MAKE) -C $(KSRC) SUBDIRS=$(CURDIR) modules
いつもの patch -p0 < ○.patch の書き方だとどのファイルにパッチあてるかファイル名聞かれちゃいます。
ビルド
% fakeroot debian/rules KVERS=3.17.0-trunk-amd64 KSRC=/lib/modules/3.17.0-trunk-amd64/build KDREV=3.17.4-1~exp1 kdist_image /usr/bin/make -f debian/rules binary_modules make[1]: Entering directory '/usr/src/modass/usr_src/modules/fglrx' dh_testdir dh_prep patch kcl_acpi.c AMD-fglrx-3.17.patch patching file kcl_acpi.c /usr/bin/make -C /lib/modules/3.17.0-trunk-amd64/build SUBDIRS=/usr/src/modass/usr_src/modules/fglrx modules make[2]: Entering directory '/usr/src/linux-headers-3.17.0-trunk-amd64' Makefile:10: *** mixed implicit and normal rules: deprecated syntax make[1]: Entering directory `/usr/src/linux-headers-3.17.0-trunk-amd64' CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_acpi.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_agp.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_debug.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_ioctl.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_io.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_pci.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_str.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_iommu.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl.o CC [M] /usr/src/modass/usr_src/modules/fglrx/kcl_wait.o LD [M] /usr/src/modass/usr_src/modules/fglrx/fglrx.o Building modules, stage 2. MODPOST 1 modules CC /usr/src/modass/usr_src/modules/fglrx/fglrx.mod.o LD [M] /usr/src/modass/usr_src/modules/fglrx/fglrx.ko make[2]: Leaving directory '/usr/src/linux-headers-3.17.0-trunk-amd64' dh_testdir dh_testroot dh_installdirs dh_install dh_installdocs dh_installchangelogs dh_installmodules dh_bugfiles dh_lintian dh_link dh_strip dh_compress dh_fixperms dh_installdeb dh_gencontrol -- -v1:14.9+ga14.201-2+3.17.4-1~exp1 \ -V'fglrx:Version=14.9+ga14.201' \ -V'built:using:kernel=linux (=3.17.4-1~exp1)' \ -V'built:using:fglrx=fglrx-driver (=1:14.9+ga14.201-2)' dpkg-gencontrol: warning: File::FcntlLock not available; using flock which is not NFS-safe dh_md5sums dh_builddeb --destdir=/usr/src/modass/usr_src/modules/fglrx/../.. dpkg-deb: building package `fglrx-kernel-3.17.0-trunk-amd64' in `/usr/src/modass/usr_src/modules/fglrx/../../fglrx-kernel-3.17.0-trunk-amd64_14.9+ga14.201-2+3.17.4-1~exp1_amd64.deb'. make[1]: Leaving directory '/usr/src/modass/usr_src/modules/fglrx'
お、パッケージできました。なるほど。
% ls -l ../../ total 2184 -rw-r--r-- 1 yosi src 2217200 Dec 29 17:15 fglrx-kernel-3.17.0-trunk-amd64_14.9+ga14.201-2+3.17.4-1~exp1_amd64.deb
インストール
dpkg -i 使うなりそれぞれのやり方でインストールしてください。 うちは全部 apt-get(aptitude) で把握したいのでローカルリポジトリに配置します。詳細は省略します。
% mv ../../fglrx-kernel-3.17.0-trunk-amd64_14.9+ga14.201-2+3.17.4-1\~exp1_amd64.deb /var/cache/apt-build/repository
# apt-build build-repository && aptitude update; aptitude install fglrx-kernel-3.17.0-trunk-amd64
Xorg 再起動
OS再起動してもいいけど。
# modprobe fglrx # sleep 60 && service kdm stop && sleep 60 && service kdm start
それではこれから確かめてみます。
Dvorak 配列を実用するために
Dvorak 配列は言及されることの多いわりに使っている人を見ない。私は最近5年は家でもそれ以外でもほとんど Dvorak 配列で入力してきたので、どのようにしてその環境を維持してきたのか説明し、これから始める人への一助としたい。
どこでも Dvorak を使う
私は職場 (Windows) と自宅 (Linux, Mac) の両方で Dvorak を使っている。 さらにスマホでもアルファベットをフリック入力にしてとことん QWERTY を避けた。 新しいやり方を続けたいのなら慣れたやり方を捨ててどっぷり浸かるべきだし、 QWERTY で入力する場面が残っている場合、きっといつまでも感覚の切り替えが必要になってつらい。
英語配列キーボードを使う
普通のひとはキーボードのレイアウト変更で、ソフトウェア的に Dvorak 配列を使うと思う。このとき jp106 キーボードに対してスタンダードな Dvorak マッピングというものは存在しないので、loadkeys マップなどを自分で編集することになる。Windows の場合スキャンコード入れ替えでは対応できないのでオンラインソフトを常駐させる必要すらあったかもしれない。一方 英語配列キーボード (pc104) ならば最初からOSが用意しているマップを使えるので、どのOSでも手早く始められる。
英語配列ならキートップを入れ替えて Dvorak 表示にすることもできるが、たまに他の人に使わせることがあるならやめといたほうがよい。
日本語入力では c で か行 とする
日本語は子音母音となることが多く、Dvorak を使うと右手と左手が交互に打鍵されることが多い。 だが k の文字は左手人差し指が担当(QWERTYで v の位置)なので極端に か行 が入力しづらくなる。 そこでIMEのローマ字マッピングを次のように変更しよう。
- ca -> か
- ce -> け
- ci -> き
- co -> こ
- cu -> く
- cya -> きゃ
- cye -> きぇ
- cyi -> きぃ
- cyo -> きょ
- cyu -> きゅ
ちなみに左手担当のほかの子音は p, y, q, j. じゃ行 も zy のほうが入力しやすい。
たまに他の人にキーボードを使わせる場合
上司が思ったように打てないと、Dvorak に対する風当たりが強くなってしまうかもしれない。
Windows7でDvorakとQwertyを簡単に切り替える方法の提案 - nishio-dens's diary
自分が Google IME を使って、他の人には MS IME を使わせるのでもいいと思う。
逆に自分が人のキーボードで入力しなきゃいけないとき、キーを見ないと打てなくなっている。
OSログインパスワードで使う文字を制限する
ログイン画面でユーザ名の入力不要のOSがあるが、そういう不親切なOSではパスワードを入力するときにキーボードレイアウトが間違っていることに気付きにくい。そこで、Dvorak でも QWERTY でも位置が変わらない英数字や記号だけを使ってパスワードを作ろう(このようなことを公言するべきではないかもしれない。複雑で長いパスワードにすること)。
これはさらに、Dvorak 配列を設定したコンソールに KVM over IP(リモート)で接続したときに QWERTY->Dvorak の写像が余計に入る(v を押すとコンソールは k を受け取り t を表示する)問題に対する workaround となる。なにせログインしなければ loadkeys でデフォルトマップに戻すこともできないのだから、どちらでも同じく入力できるパスワードというのは重宝するのだ。
その他
Debian Chrome で半角文字だけ文字化けする
Google Chrome のURLバーやメニューなどで、英数字が表示されるべき部分だけ全角記号やひらがなに置き換わってしまう問題が起きていた。Debian では fonts-droid パッケージを更新すると直る。
- 【Xubuntu】chrome/chromiumのタイトルやら、メニューが文字化けたときの対応方法 | ざかしんく
- xubuntu14.04 の chromium で文字化けが発生する: ふらんくらいふ
Chrome 以外にも同じ文字化けをしたアプリがあった気がして、現象も一言で言いづらいし、Debian (fontconfig) か KDE の問題か切り分けられてもいなかったので1ヶ月ほど放置していた。 さっき4〜5回ググって chrome フォント 半角 文字化け というキーワードで数ヶ月以内の記事を探したら上記の二つの記事が見つかった。
問題のパッケージをアンインストールできるかなと aptitude で見てみれば
fonts-droid 1:4.4.4r2-2
という更新があったのでとりあえずインストール
Retrieving bug reports... Done Parsing Found/Fixed information... Done Reading changelogs... Done debconf: apt-extracttemplates failed: Illegal seek (Reading database ... 456082 files and directories currently installed.) Preparing to unpack .../fonts-droid_1%3a4.4.4r2-2_all.deb ... Unpacking fonts-droid (1:4.4.4r2-2) over (1:4.4.3r1.1-1) ... Processing triggers for fontconfig (2.11.0-6.1) ... [master 1ce1037] committing changes in /etc after apt run 1 file changed, 1 deletion(-) delete mode 120000 fonts/conf.d/65-droid-sans-fonts.conf Press Return to continue.
/etc/fonts/conf.d/65-droid-sans-fonts.conf
が削除され、Chrome を再起動すると直った。
使用している Chrome は 37.0.2062.3-1 (Google 公式)
ちなみに愛用しているフォントは VL Gothic です。0 と O, I と l の区別がつきやすい。
Best practice to run PowerShell scripts from Jenkins
Step-by-step
Choose “Execute Windows batch command”.
Paste this to print out command-lines itself to the console:
@echo off type %0 echo.
- Surround your PowerShell script like this:
powershell -noprofile -command "$ErrorActionPreference = 'Stop'; Set-PsDebug -Strict; .\Do-YourJob.ps1"
- If your script contains external commands (like
.exe
s or.cmd
s), test each exit code of them by$LASTEXITCODE
:
bcp.exe blah blah if ($LASTEXITCODE -ne 0) throw "bcp exit with $LASTEXITCODE"
Explanations
$ErrorActionPreference = 'Stop'
makes powershell.exe
exit with non-zero when an exception is thrown in the script (maybe).
Set-PsDebug -Strict
causes an exception when a variable is used before its assignment, otherwise an uninitialized variable results $null
.
Usually powershell.exe
returns zero exit code (means success in Jenkins) even if the last command exit with non-zero (means failure).
The PowerShell plugin allows you to write PowerShell codes directly but I thought it would be hard to catch some kind of errors. Probably due to its invocation i.e.:
powershell.exe "& 'C:\Windows\TEMP\hudson########.ps1'"
Nexus 7 のブラウザと webview は 別物
Chrome がプリインストールされてても、アプリ内に組み込んで使える WebView はただの WebKit ですよって話。
Nexus 7 にプリインストールされてる唯一のブラウザ Chrome で 確認くん*1 を見た様子
ブラウザーとOS | Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36 |
---|---|
サポート言語 | en-US,en;q=0.8,ja;q=0.6 |
エンコードの仕様 | gzip,deflate,sdch |
MIMEの仕様 | text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 |
はてブ アプリ*2 の内部ブラウザで 診断くん*3 を見た様子
HTTP_ACCEPT_ENCODING | gzip,deflate |
---|---|
HTTP_ACCEPT | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
HTTP_ACCEPT_CHARSET | utf-8, iso-8859-1, utf-16, *;q=0.7 |
HTTP_USER_AGENT | Mozilla/5.0 (Linux; U; Android 4.3; en-us; Nexus 7 Build/JWR66Y) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 |
HTTP_ACCEPT_LANGUAGE | en-US |