pepoとネットワークを語ろう

40年前からこれまでとこれからのネットワークを語る

JavaScrpitお勉強中2

2010-06-21 05:18:25 | Linux

form入力中にENTERキーを押されるとcgiへ行ってしまう

何とかENTERキーを無効にする方法が無いかと探していたら、こんな簡単なことでいいのね

 function key_press() {
/*  Enter キー無効 */
    if(window.event.keyCode == 13){
        return false;
    }  
    return true;  
}  
window.document.onkeydown = key_press;

pepo


modprobe: FATAL: Could not open 'kernel

2010-06-19 16:49:33 | Linux

initramfsでudevを走らせようと必死のパッチ

modprobe: FATAL: Could not open 'kernel/drivers/scsi/scsi_wait_scan.ko': No such file or directory

れれーと、なんやこれとgoogle様へお尋ねするが中々得られないお答え

原因は、kernelをmakeする時にfedora12上でやって

Centos5.4で実行時やるとこーなるみたい

ようするにglibcのバージョン違いによると思われる

chrootでCentos5.4環境に入りkernelをmakeすれば問題なく動く事が分かったよ

pepo


makedev: no such user: root 初心に戻りstrace

2010-06-18 19:52:30 | Linux

initramfsでudevを走らせようと必死のパッチ

ところがギッチョンMAKEDEVでエラーが

google様へお尋ねしても中々ラチがあかん

root@p-4 /]# chroot initrd/
bash-3.2# MAKEDEV loop0
makedev: no such user: root
bash-3.2# busybox whoami
root
bash-3.2# whoami
whoami: cannot find name for user id 0
busyboxのwhoamiは騙せても、本物のwhoamiは騙せません
root@p-4 initrd]# cat etc/group
root:x:0:root
disk:x:6:root
[root@p-4 initrd]# cat etc/passwd
root:x:0:0:root:/root:/bin/bash

そうこうしているうちに、なんか分からんかったらstraceしてみいとの参考文献が

strace -o /tmp/dump whoami
cat /tmp/dump
execve("/bin/whoami", ["whoami"], [/* 30 vars */]) = 0
brk(0)                                  = 0x8317000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686/sse2", 0xbf992308) = -1 ENOENT (No such file or directory)
open("/lib/tls/i686/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/i686", 0xbf992308)     = -1 ENOENT (No such file or directory)
open("/lib/tls/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/tls/sse2", 0xbf992308)     = -1 ENOENT (No such file or directory)
open("/lib/tls/libc.so.6", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat64("/lib/tls", 0xbf992308)          = -1 ENOENT (No such file or directory)
open("/lib/i686/sse2/libc.so.6", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/lib/i686/sse2", 0xbf992308)    = -1 ENOENT (No such file or directory)
open("/lib/i686/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
stat64("/lib/i686", 0xbf992308)         = -1 ENOENT (No such file or directory)
open("/lib/sse2/libc.so.6", O_RDONLY)   = -1 ENOENT (No such file or directory)
stat64("/lib/sse2", 0xbf992308)         = -1 ENOENT (No such file or directory)
open("/lib/libc.so.6", O_RDONLY)        = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340_\1\0004\0\0\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1608148, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77f3000
mmap2(NULL, 1332676, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x110000
mprotect(0x24f000, 4096, PROT_NONE)     = 0
mmap2(0x250000, 12288, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x13f) = 0x250000
mmap2(0x253000, 9668, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x253000
close(3)                                = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77f2000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77f26c0, limit:1048575, seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x250000, 8192, PROT_READ)     = 0
mprotect(0x755000, 4096, PROT_READ)     = 0
brk(0)                                  = 0x8317000
brk(0x8338000)                          = 0x8338000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
open("/usr/share/locale/locale.alias", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US.utf8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en_US/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en.UTF-8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en.utf8/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/locale/en/LC_IDENTIFICATION", O_RDONLY) = -1 ENOENT (No such file or directory)
geteuid32()                             = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 3
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
socket(PF_FILE, SOCK_STREAM, 0)         = 3
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK)  = 0
connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"...}, 110) = -1 ENOENT (No such file or directory)
close(3)                                = 0
open("/etc/nsswitch.conf", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/sse2/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686/sse2", 0xbf992484) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/i686/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/i686", 0xbf992484) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/sse2/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls/sse2", 0xbf992484) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/tls", 0xbf992484)      = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/sse2/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686/sse2", 0xbf992484) = -1 ENOENT (No such file or directory)
open("/usr/lib/i686/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/i686", 0xbf992484)     = -1 ENOENT (No such file or directory)
open("/usr/lib/sse2/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib/sse2", 0xbf992484)     = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_compat.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
stat64("/usr/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/lib/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/libnss_files.so.2", O_RDONLY) = -1 ENOENT (No such file or directory)
write(2, "whoami: cannot find name for use"..., 39) = 39
close(1)                                = 0
exit_group(1)                           = ?

いろいろなエラーを吐いているがどうも最後の/lib/libnss_files.so.2が無いのが致命的みたいなのですこんと、コピー!

[root@p-4 /]# cp -ap /lib/libnss_files.so.2 /initrd/lib/
[root@p-4 /]# cp -ap /lib/libnss_files-2.5.so ./lib/
root@p-4 /]# chroot initrd/
bash-3.2# MAKEDEV loop0
bash-3.2#
bash-3.2# ls /dev/
loop0  null

おーと、やりましたがな

pepo


initramfsとinitrdについて

2010-06-17 19:51:10 | Linux

initramfsとinitrd (Initial RAM Disk)はgrubなどのboot-lodaerでvmlinuz等のkernelイメージを読み込んだ後の処理を引き継いでrootfsをマウント、initを起動するものです
initrdはまず、ddコマンドで必要なサイズのファイルを作りそれをloopbackマウントしファイルシステムを構築して、その中にinit起動までに必要なコマンドやmodules詰め込みます

initrd用のMakefile
#Create pepo26.img
  dd if=/dev/zero of=${INITRD} bs=1k count=8192 2>/dev/null 1>/dev/null
  mke2fs -m 0 -q -F -N 8192 ${INITRD} 2>/dev/null 1>/dev/null
  tune2fs -i 0 -c 0 ${INITRD} 2>/dev/null 1>/dev/null
  rm -rf ${MNTPNT}/lost+found
  mount -t ext2 -o loop ${INITRD} ${MNTPNT}
  mkdir -p "${MNTPNT}/${DSTMODDIR26}"
  cp -ap ${SINITRD}/* ${MNTPNT}
     for i in ${ADDMODULES26}; do 
       mod="`find ${SRCMODDIR26}/kernel -name "$${i}.ko"  2>/dev/null`" ; 
       [ -f "$${mod}" ] && cp -af $${mod} ${MNTPNT}/${DSTMODDIR26}/; 
  done

kernelが2.6.xxからinitramfsが採用され、予めファイルサイズに制限を加えたloopbackファイルを作る必要がない為、自由度がある

PepoLinuxでは手抜きでmodulesを全てコピーして入れ込み14M程のサイズとなっています
intramfsはまず、適当なディレクトリを作りその中に必要なファイルを詰め込みcpioとgzipで固めます

initramfs用のMakefile
#Create pepo26.img
  mkdir -p "${MINITRD}/${DSTMODDIR26}"
  cp -ap ${SINITRD}/* ${MINITRD}
  cp -af ${SDRIVER} ${MINITRD}/${DSTMODDIR26}/
  cp -af ${SMODDEP} ${MINITRD}/${DSTMODDIR26}/
  umount ${MNROOT}
  (cd ${MINITRD}; find . | cpio -o -H newc ) | gzip -9c > $@.img
  rm -rf ${TMP} ${MNT} ${ISOLINUX}

initrdとinitramfsの違いはミニルートに/initがあればinitramfs
initrd場合:
イメージ: ファイルシステム (ext3など + gzip)
実装: ブロックデバイス (RAM ディスク)
実行: /linuxrc
rootfsをディレクトリへマウントして→pivot_root
/linuxrc 終了させると、カーネルがinitを起動
initramfsの場合:
イメージ アーカイブ (cpio + gzip)
実装: ファイルシステム
rootfsを適当なディレクトリへマウントして→switch_root
/init が exec /sbin/init する
実行: /init

initrdの展開
[root@~]# ll pepo.img
-rw-r--r-- 1 root root 1198051  6月  6 07:05 pepo.img
[root@~]# cat pepo.img |gzip -dc >pepo
[root@~]# mkdir t
[root@~]# mount pepo t -o loop
[root@~]# ll t/
drwxr-xr-x 2 root root  3072 11月 20  2005 bin
drwxr-xr-x 2 root root  1024  1月  9  2002 boot
drwxr-xr-x 2 root root  1024  8月 29  2004 cdrom
drwxr-xr-x 9 root root  5120  1月 24  2009 dev
drwxr-xr-x 2 root root  1024  8月 29  2004 dos
drwxr-xr-x 2 root root  1024  1月 26 21:31 etc
drwxr-xr-x 3 root root  1024  1月 26 21:31 initrdlocal
drwxr-xr-x 2 root root  1024 12月 11  2004 lib
-rwxr-xr-x 1 root root 18415 11月 25  2009 linuxrc
drwx------ 2 root root 12288  1月 26 21:31 lost+found
drwxr-xr-x 9 root root  1024  7月 25  2000 mnt
drwxr-xr-x 2 root root  1024  8月 15  1998 proc
drwxr-xr-x 3 root root  1024  9月 28  2004 root
drwxr-xr-x 2 root root  1024  1月 11  2009 sbin
drwxr-xr-x 2 root root  1024  2月  2  2006 sys
drwxrwxrwt 2 root root  1024  8月 29  2004 tmp
drwxr-xr-x 3 root root  1024 11月 19  2004 usr
drwxr-xr-x 5 root root  1024  7月 25  2000 var
[root@~]# du t/
.
.
3       t/usr
1       t/var/log
1       t/var/run
1       t/var/lock
4       t/var
2521    t/
[root@~]# vi t/linuxrc
.
.
umount /proc >/dev/null 2>&1
pivot_root . initrd >/dev/null 2>&1
exec sbin/init <>dev/console 2>&1
この後、新しいrootfsのinitが起動
initramfsの展開
[root@~]# ll pepo.img
-rw-r--r-- 1 root root 13897879  6月  6 07:14 pepo.img
[root@~]# mkdir t
[root@~]# cd t/
[root@t]# cat ../pepo.img | gzip -dc | cpio -i
67020 blocks
[root@t]# ll
total 20
drwxr-xr-x 2 root root  1640  6月  6 07:15 bin
drwxr-xr-x 2 root root    40  6月  6 07:15 boot
drwxr-xr-x 2 root root    40  6月  6 07:15 cdrom
drwxr-xr-x 2 root root    40  6月  6 07:15 dev
drwxr-xr-x 2 root root    40  6月  6 07:15 dos
drwxr-xr-x 6 root root   300  6月  6 07:15 etc
-rwxr-xr-x 1 root root 16844  6月  6 07:15 init
drwxr-xr-x 4 root root   740  6月  6 07:15 lib
drwxr-xr-x 9 root root   180  6月  6 07:15 mnt
drwxr-xr-x 2 root root    40  6月  6 07:15 proc
drwxr-xr-x 3 root root   100  6月  6 07:15 root
drwxr-xr-x 2 root root  1020  6月  6 07:15 sbin
drwxr-xr-x 2 root root    40  6月  6 07:15 sys
drwxrwxrwt 2 root root    40  6月  6 07:15 tmp
drwxr-xr-x 2 root root    40  6月  6 07:15 tmpfs
drwxr-xr-x 3 root root    60  6月  6 07:15 usr
drwxr-xr-x 5 root root   100  6月  6 07:15 var
[root@t]# du ./
.
.
3800    ./lib/udev
31212   ./lib
0       ./dos
36140   ./
[root@t]# vi init
.
.
exec switch_root "$NEWROOT" "$INIT"
この後、新しいrootfsのinitが起動

pepo


LinuxのscriptをTeraPad編集すると変なコードが

2010-06-15 19:32:26 | Linux

WindowsのTeraPadで編集したファイルをTeraTermでLinuxへファイル転送後viで編集してみるとこんな、そんな

# vi conv_get.cgi
357273277#!/bin/sh^M
CMD=/var/tmp/.QUERY_STRING.cmd^M
echo "$QUERY_STRING" | awk '{^M
  BEGIN{FS="&"}^M
  split($0,arry,"=")^M
  l=length(arry[1])^M
  i=match(arry[1],/_[0-9]+$/)^M
  j=k=arry[1]^M
  gsub(/_[0-9]+$/,"",j)^M
  m=substr(k,i+1,l)^M
  print j"["m"]="arry[2]}'^M
chmod +x $CMD^M
. $CMD^M
rm $CMD^M

上記のスクリプトが何をやっているかは想像にお任せしといてと『357273277』がTeraPadで余分に入る、これはどうしょうもないのxコマンドで削除後
# lfcut.s conv_get.cgi conv_get.cgi.old
# mv conv_get.cgi.old conv_get.cgi
# chmod +rx conv_get.cgi

随分前に作ったツールを今でもご愛用している

[root@p-4 ~]# cat /bin/lfcut.s
#!/bin/sh
# This scripts startup.s ^M cutter.
# Copyright 2000.11.8 IZAMU.KARERA
# Usage    startup.s before_txt after_txt
awk '{gsub(/15$/,"")}{print $0}' $1 > $2

pepo


PepoLinux-0.44をリリースしました。

2010-06-14 06:19:07 | Linux

PepoLinuxはX-Windowを捨てネットワークとサーバーに徹した1CDLinux、複雑なLinuxのconfigをMS-Windowsで簡単設定と64Mbyteの少ないメモリでも起動が出来る。今回は起動方式をinitramfsへ変更とudevを採用しdevの検出の精度をより向上させました。
(CentOS5.4ベース)下記ホームページからダウンロードして下さい。
http://pepolinux.sourceforge.jp/

2010.6.13:Ver0.44
1.Kernel-2.6.32.12-pepo(kernel-2.6.32.12-115.fc12.src.rpm)
2.Cetos5.4収録パッケージのバージョンUP
3.起動方式をinitrdからinitramsfsへ変更

pepo


Fedora12のsambaで書き込みが出来ない

2010-06-12 19:01:15 | Linux

Fedora12にしてからsambaで共有フォルダへ書き込みが出来ない

 [root@p-4 ~]# vi /etc/samba/smb.conf 

 [pepolinux]
       comment = Public Stuff
       path = /usr/src/pub
;       public = yes
       writable = yes
;       printable = no
;       write list = +staff

[root@p-4 ~]# ll /usr/src/
drwxrwxrwx.  2 nobody nobody 4096 2010-06-13 15:53 pub

なんでやねん!

google様へ尋ねるとSELinuxが邪魔しているそうな

システム→管理→SELinux Management→管理者のパスワード入力

選択:→ブーリアン値→スクロールバーでmodule欄→samba→

Allow samba to share any file/directory read/write→Activeをオン→

ファイル→終了

で読み書きをすることが出来るようになりました。

pepo