2013年8月21日水曜日

Linux の コンソール(非GUI) をEmacsのキーバインドにする.




動作確認環境




OS: Fedora 18

キーボード: 英字配列キーボード

この方法では,英字配列で,Emacsバインドになると思われる.

(日本語配列のキーボードでは試してない.)







方法




結論だけ言うと,カーネルのブートオプションに KEYTABLE=emacs を追加するだけでOK.

以下は,その具体的な設定方法を書く.







具体的な設定方法




grub2の場合は, /etc/default/grub



GRUB_CMDLINE_LINUX=""


の行を




GRUB_CMDLINE_LINUX="KEYTABLE=emacs"


に書き換えて,ターミナルから,




$ grub2-mkconfig /boot/grub/grub.cfg 


を実行すればいい.




最終的には,grub.cfgには,以下のようなエントリーが追加されればOK.

カーネルを指定する. linux から始まる行の最後に KEYTABLE=emacs が入っていればよい.



menuentry 'Linux Mint 14 MATE 64-bit, 3.5.0-27-generic (/dev/sda1)' --class linuxmint --class gnu-linux --class gnu --class os {
      recordfail
      gfxmode $linux_gfx_mode
      insmod gzio
      insmod part_msdos
      insmod ext2
      set root='hd0,msdos1'
      if [ x$feature_platform_search_hint = xy ]; then
        search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  <UUID>
      else
        search --no-floppy --fs-uuid --set=root <UUID>
      fi
      linux   /boot/vmlinuz-3.5.0-27-generic root=UUID=<UUID> KEYTABLE=emacs
      initrd  /boot/initrd.img-3.5.0-27-generic
}


これは,Grub(2でないもの)にも同様に使える技である.








おまけ




起動してから,emacsバインドに変えたい時は,



$ loadkeys emacs


で,簡単に変わる.

よく,keymapの圧縮ファイルを展開して,CpasLockの部分を書き換えて… みたいは方法があるが,あれよりずっと簡単.

ただし,日本語配列でEmacsバインドに変えたい場合は,やはり,keymapの圧縮ファイルを展開して…しないといけない.



--
My Emacs Files At GitHub

2013年8月1日木曜日

Xenを動かす


ちょっと,Xenを試したくなったので,家のマシンでXenを動かしてみた.

dom0が起動するところまでやってみた(と思う.自分でもよくわかってない.).

とりあえず,メモ書き.



構成




目指す構成は以下の通り.


  • HDDにLinux Mint(sda Grub2)


  • SSDにCentOS(sdb Grub)


  • sdaのGrub2からsdbのGrubへチェインロード


  • sdbのGrubからXenを起動




HDDに入ってるLinux Mintの環境は壊してたくないのでそっとしておく.

わざわざチェインロードしているのは,Xenの設定の時に,CentOSのカーネルの場所とgrubの設定の場所を同じにした方が面倒にならなさそうだったから.






CentOSをインストール




以下のページを参考にした.

自宅サーバーにCentOS6.3とソフトをインストール | ハーレーと趣味に生きるNEXT





  • 適当なミラーサーバからCentOSのminimalのISOをダウンロード


  • USBからブートしたいので,UnetbootinでUSBにイメージを書き込み.


  • USBに もとのISOもコピーしないといけない


  • インストール時にsdbにGrubをインストールするのを忘れないように

    (デフォだとsdc(USBメモリに書き込むようになってるので変更))









sdaのGrub2の設定




以下のページを参考にした.

linux - Boot GRUB2 to GRUB or GRUB2 on another disk - Super User


  • sdaのLinux Mintの /boot/grub/grub.cfg に追加




    menuentry "Other Disk" {
    insmod part_msdos
    set root='(hd1)'
    drivemap -s hd0 hd1
    chainloader (hd1)+1
    }


    本当は /etc/grub.d/40_custom に書き込んで, update-grub を叩くべき.

    rebootし,追加したエントリーを起動すると,sdbのGrubが起動するはず.












もしsdbのGrubでメニューが表示されなかったら




以下のページを参考にした.

asterisk Fedora - EtCetera/GRUB

もし,Grubは起動するが,プロンプトしか出ないときはとりあえず.以下のコマンドを叩いて,メニューを出す.




> configfile /grub/grub.conf


表示されたメニューから,CentOSが起動したら,一度Grubをsdbにインストールし直すと,ちゃんとメニューがでるようになる.

GrubのインストールはsdbのCentOSから以下のコマンドを叩く.




# grub-install /dev/sdb







CentOSでの設定








ネットワーク設定




/etc/sysconfig/network-script/ifcfg-eth0 を編集




onboot=no


の行を




onboot=yes


と変更.

その後,rebootすればネットワークはつながった.






xenの設定




以下のページを参考にした.

HowTos/Xen/Xen4QuickStart - CentOS Wiki




以下のコマンドでXen用のCentOS(のカーネルかな?)とXenをインストール




# yum install centos-release-xen
# yum install xen



ここまで終わったあとに, /boot/grub/grub.conf を確認.

defaultのカーネルが3.4.xxx になってれば問題ない.

もしdefaultが2.6.xxxならば,3.4.xxxのほうに変える.

その後,




# /usr/bin/grub-bootxen.sh


ちなみに,grub.confのdefaultで設定しているカーネルイメージをロードするエントリーが複数あると,このスクリプトは正常に動作しないので注意.




このスクリプトを実行した後に, /boot/grub/grub.conf を再度確認してみる.

3.4.xxx.のエントリーが以下のように変わってるはず.




title CentOS (3.4.46-8.el6.centos.alt.x86_64)
root (hd0,0)
kernel /xen.gz dom0_mem=1024M,max:1024M loglvl=all guest_loglvl=all
module /vmlinuz-3.4.46-8.el6.centos.alt.x86_64 ro root=/dev/mapper/vg_xen01-lv_root rd_LVM_LV=vg_xen01/lv_swap rd_NO_LUKS KEYBOARDTYPE=pc KEYTABLE=uk rd_NO_MD LANG=en_GB rd_LVM_LV=vg_xen01/lv_root SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_DM rhgb quiet
module /initramfs-3.4.46-8.el6.centos.alt.x86_64.img


元々kernelコマンドとinitrdコマンドで読み込んでいたものがmoduleコマンドで読み込まれるようになっている.

また,kernelコマンドでは,xenのイメージ?を読み込んでいる.










動作確認




GrubからCentOS (3.4.46-8.el6.centos.alt.x8664)をブートしてみる.

ブート後,以下のコマンドを叩いてみる.




# xm --info


このコマンドを叩くと,Xenに関する情報が大量に出てくる.

もし,Xenが動作してないと,"本当にXen動いてる?"(意訳)的なメッセージが出てくる.










--
My Emacs Files At GitHub

2013年6月30日日曜日

Linuxのコンソールの文字サイズを調整する方法.


Linuxをテキストモードで起動するときの文字サイズを調整する方法.

文字サイズを調整するために,コンソールの解像度を変更する.

解像度の変更方法は,ブートオプションに




video=800x600


のように,解像度を指定するオプションを追加する.




コンソールの文字を大きくしたい時は解像度を下げればよい.

逆に,コンソールの文字を小さくしたい時は解像度を上げればよい.








--
My Emacs Files At GitHub

2013年6月18日火曜日

make コマンドに常に指定のオプションを付与する設定

コマンドラインで以下を実行.

export MAKEFLAGS='<付与するオプション>'

これを実行すれば,makeを実行するときに常に指定したオプションが付与される.
ログインするたびにこの設定を有効にするには.bashrcなどに書いておけばよい.

-j2などを指定すれば,オプションの指定を忘れて無駄に長い時間かけてビルドする,といったことを防げそうだ.

wgetを並列に走らす


ダウンロード先がバラバラでかつ,それぞれのサーバが遠くのもので,ダウンロード速度が出ないようなときがある.

そんなときに便利な技.




まず,urls.txtに1行ずつダウンロード先のurlを書いておく.

そして,以下のコマンドを実行する.




xargs -P 20 -n 1 wget -nv < urls.txt


このコマンドで最大20個のwgetが並列に走る.

また,それぞれのwgetには引数が1つずつ渡される.







--
My Emacs Files At GitHub

Emacsで複数行に文字列を挿入する方法


Emacsで以下を実行




M-x string-rectangle


もしくは




C-x r t


で可能.

自動インデントが効かないときなどに複数行右にずらす(スペースをいれる)のに便利.

左にずらす(スペースを消す)ときは M-x delete-rectangle もしくは C-x r d でOK.





--
My Emacs Files At GitHub

2013年6月16日日曜日

Haskellのclassとinstance(Javaのイメージで理解)

すぐ忘れそうなので,忘れないうちにメモ.

HaskellのclassはJavaで言うinterface.
実装すべき関数の型を定義している.
classというのは,Haskellでこれを型クラスというから.

一方,HaskellのinstanceはJavaで言うinterfaceを継承したclass.
実際は型コンストラクタができる.

もう少し良い例えがあるかもしれないが,僕はこういうイメージで理解した.

参考URL: http://learnyouahaskell.com/making-our-own-types-and-typeclasses#the-functor-typeclass