揮発性のメモ2

知識をメモ書きしておく

chrootで、なんかシェルがおかしい

chrootしたとき、シェルがおかしいときがある

# chroot /data/chroot_hoge
\u@\h:\w$

ショボい環境でchrootするとだいたいこうなる。

chrootしたときに起動されるシェルは $SHELL なので、
シェルが/bin/shの環境から Debian環境のchrootを起動すると
/bin/sh ⇒ /bin/dash が起動されてしまう。

回避策は

1. /bin/bash を起動する

とくに差し支えなければこれで済む

# chroot /data/chroot_hoge /bin/bash
(chroot)root@hoge:/#

2. SHELL=/bin/bash

SHELLを書き換えてしまえば良いが、なんかちょっとキモい

# SHELL=/bin/bash chroot /data/chroot_hoge
(chroot)root@hoge:/#

Cygwinで、SDカードをext4でフォーマットする

Cygwinで、SDカードをext4でフォーマットする

準備

util-linux と e2fsprogs をインストールしておく

管理者権限で起動

Cygwinを管理者権限で起動する

フォーマット

/proc/partitions を見て、SDカードがどこにあるのかアタリをつける

$ cat /proc/partitions
major minor  #blocks  name   win-mounts

    8     0 234431064 sda
    8     1    562176 sda1
    8     2 233063146 sda2   C:\
    8     3    801792 sda3
    8    16 2930266584 sdb
    8    17     16384 sdb1
    8    18 2930248704 sdb2   D:\
    8    32 2930266583 sdc
    8    33    131072 sdc1
    8    34 2930134016 sdc2   E:\
    8    48   7879680 sdd
    8    49   7878656 sdd1   F:\


cfdiskの使い勝手は 普通のLinuxといっしょ
/sbin へのパスは通ってないので、フルパスで実行

$ /sbin/cfdisk /dev/sdd


mkfs.ext4の使い勝手は 普通のLinuxといっしょ
/usr/sbin へのパスは通ってないので、フルパスで実行

$ time /usr/sbin/mkfs.ext4 /dev/sdd1


Cygwinだけでext3のファイルシステムを作る その1 - 揮発性のメモ2

Linuxで、利用可能なファイルシステムの一覧を取得する

/proc/filesystems を見ることでマウントできるファイルシステムがわかる。
nodevはブロックデバイスを使わないもの、要は仮想ファイルシステムという意味

$ cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   ramfs
nodev   bdev
nodev   proc
nodev   cpuset
nodev   cgroup
nodev   tmpfs
nodev   devtmpfs
nodev   debugfs
nodev   sockfs
nodev   pipefs
nodev   rpc_pipefs
nodev   devpts
        ext3
        ext2
        ext4
        vfat
nodev   nfs
nodev   nfs4
nodev   autofs
nodev   overlay
nodev   mqueue
nodev   ubifs

scpしたときにエラーが出る

新しめのサーバから yoctoで作ったようなショボい環境(opensshじゃなくてdropbearとか)へ scpコマンドでファイル転送すると、だいたいエラーになる

ssh-rsa で通信する

ssh-rsaを使ってくださいというエラーが出るとき

$ scp a.out root@192.168.101.80:/tmp/
Unable to negotiate with 192.168.101.80 port 22: no matching host key type found. Their offer: ssh-rsa
scp: Connection closed

新しめのサーバではssh-rsaは使わないようになっている。
ssh_configまたはscpのオプションでssh-rsaを追加する

# /etc/ssh/ssh_config.d/rsaenable.conf
HostKeyAlgorithms=+ssh-rsa
$ scp -O -oHostKeyAlgorithms=+ssh-rsa a.out root@192.168.101.80:/tmp/

SCPプロトコルを使う

sftp-serverが無いというエラーが出るとき

$ scp a.out root@192.168.101.80:/tmp/
sh: /usr/libexec/sftp-server: not found
scp: Connection closed

SFTPプロトコルではなくSCPプロトコルを使うように-Oオプションをつける

$ scp -O a.out root@192.168.101.80:/tmp/

Cygwinで、コマンドラインでtabを押したときのファイル名補完で .exe が表示されない

Cygwinで hello.exe を実行するときに、 bash上で ./he まで入力してtabを押しても ./hello で止まってしまって ./hello.exe とならない。
コマンドの引数のときの補完では ちゃんと hello.exe まで出る。
別に ./hello で普通に実行できるからいいんだけど、気分は良くない。


調べたところ、 shopt に completion_strip_exe というexeを非表示にできるオプションがあるらしい。

$ man bash
。。。
      completion_strip_exe
              If set, whenever bash sees foo.exe during completion, it
              checks if foo is the same file and strips the suffix.

これがデフォルトで有効になっていたので、.bashrc で無効にして解決した。

shopt -u completion_strip_exe


どうも海外のサイトを見ていると、これは大いに受け入れられているらしい。
どこをみても「.exeつかなくなった!やったぜ」的な反応ばっかりでビビった