Debian笔记(5) - User Mode Linux

make-kpkg –append-to-version=-skas –added-patches=skas kernel_image modules_image –initrd

/usr/sbin/chroot sid-root /usr/bin/env -i HOME=/root TERM=”$TERM=”$TERM” PS1=’\u:\w\$ ‘ PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash –login +h

apt-get install bridge-utils uml-utilities screen

adduser user1 uml-net
adduser user2 uml-net
chgrp uml-net /dev/net/tun
chmod 660 /dev/net/tun

apt-get install user-mode-linux

Package: user-mode-linux
Priority: extra
Section: misc
Installed-Size: 61196
Maintainer: User Mode Linux Maintainers <pkg-uml-pkgs@lists.alioth.debian.org>
Architecture: i386
Version: 2.6.17-1um-2
Depends: uml-utilities (>= 20040406-1)
Suggests: x-terminal-emulator, rootstrap, user-mode-linux-doc, slirp, kernel-patch-skas
Filename: pool/main/u/user-mode-linux/user-mode-linux_2.6.17-1um-2_i386.deb
Size: 24933278

mv rootfs.i686.ext2 root_fs

sudo ~/sid-root/usr/bin/linux.uml con1=pts umid=woody
sudo screen /dev/pts/3

linux rootfstype=hostfs rootflags=/ rw mem=48M init=/bin/sh LD_ASSUME_KERNEL=2.4.1 quiet

Links:

http://www.monkeyhelper.com/2006/06/installing_user_mode_linux_on.html
http://uml.nagafix.co.uk/
http://tavi.debian.org.tw/UserModeLinux

http://www.landley.net/code/UML.html

Debian笔记(4) - 内核编译

传入编译所需变量
% MAKEFLAGS=”CC=gcc-3.2″ make-kpkg …

/etc/mkinitrd/mkinitrd.conf中更改initrd使用cramfs之外的其他fs
$Get_Root make-kpkg –revision=custom.1.0 kernel_image
$Get_Root make-kpkg –initrd –revision=custom.1.0 kernel_image

make-kpkg clean
make-kpkg -rootcmd fakeroot –append-to-version -custom.${VER} \
–revision custom.${VER} kernel_image modules-image

To create a source or header package, run
% make-kpkg clean
% $Get_Root make-kpkg –revision=custom.1.0 kernel_source
% $Get_Root make-kpkg –revision=custom.1.0 kernel_headers

Similarly, the documentation package is built by:
% $Get_Root make-kpkg –revision=custom.1.0 kernel_doc

Or if you want to generate the whole package,
% $Get_Root make-kpkg –revision=custom.1.0 \
–pgpsign=”Your pgp ID” buildpackage
Note that this needs a pgp key.
(Get_Root is whatever you need to become root — fakeroot or
sudo are examples that come to mind).
Here is a nice, practical example:
% make-kpkg -rfakeroot –append-to-version $(hostname) \
–revision $(date +’%Y%m%d’)

/etc/kernel-pkg.conf

摘自:
http://debian.linuxsir.org/book/reference/lyoo/ch-kernel.html
/usr/share/doc/kernel-package/README.gz

Debian笔记(3) - chroot环境

main # cd / ; mkdir /sid-root
main # debootstrap sid /sid-root http://ftp.debian.org/debian/
… watch it download the whole system
main # echo “proc-sid /sid-root/proc proc none 0 0” >> /etc/fstab
main # mount proc-sid /sid-root/proc -t proc
main # cp /etc/hosts /sid-root/etc/hosts
main # chroot /sid-root /bin/bash
chroot # apt-setup # set-up /etc/apt/sources.list
chroot # vi /etc/apt/sources.list # point the source to unstable
chroot # dselect # you may use aptitude, install mc and vim 🙂

从sarge安装chroot环境中的sid时
debootstrap –exclude=base-config,ipchains,libnewt0.51,libsigc++-1.2-5c102,slang1a-utf8 sid /sid-root http://debian.cn99.com/debian/
最终在如下步骤失败,尚未找到解决方案
I: Extracting libstdc++5…
mount: error while loading shared libraries: libdevmapper.so.1.02: cannot open shared object file: No such file or directory
W: Failure trying to run: chroot /home/qiuyu/sid-root mount -t proc proc /proc
umount: /home/qiuyu/sid-root/dev/pts: not mounted
umount: /home/qiuyu/sid-root/dev/shm: not mounted
umount: /home/qiuyu/sid-root/proc/bus/usb: not found
umount: /home/qiuyu/sid-root/proc: not mounted

http://www.backports.org/更新debootstrap版本后继续
参考:
http://www.debianhelp.org/node/1169
http://forums.debian.net/viewtopic.php?t=7840&sid=ce51f774b45788eb465ce71f771f1e90

sarge安装另一个chroot环境的sarge没有问题
可通过chroot sarge-root /usr/bin/env -i HOME=/root TERM=”$TERM” PS1=’\u:\w\$ ‘ PATH=/bin:/usr/bin:/sbin:/usr/sbin /bin/bash –login +h 登录消除环境变量影响

Debian笔记(2)

设置屏幕分辨率和刷新率
dpkg-reconfigure xserver-xorg
还不行的话,继续
apt-get install xdebconfigurator
xdebconfigurator

系统时钟写入CMOS
hwclock –systohc
反之
hwclock –hctosys

移除无用的locale files文件
localpurge

查看软件依赖关系
apt-cache depends packagename
apt-cache showsrc packagename|grep Build-Depends
下载网站文档
wget -r -p -np -k http://fedora.redhat.com/docs/release-notes/fc5/zh_CN/
· -r:在本机建立服务器端目录结构;
· -p: 下载显示HTML文件的所有图片;
· -np:只下载目标站点指定目录及其子目录的内容;
· -k: 转换非相对链接为相对链接。

修改系统登录信息
/etc/motd

将网卡标识与mac绑定
auto lo eth0 eth1

iface lo inet loopback

mapping eth0 eth1
map 00:37:E9:17:64:AF netA
map 00:21:E9:17:64:B5 netB

iface netA inet static
address etc…

iface netB inet static
address etc…

export http_proxy=http://xx.xx.xx.xx:xxx可以给apt设置代理
加入环境变量HISTIGNORE=”ls:cd:cat”可以让bash的历史忽略ls cd cat命令
检测nvidia显卡
~$glxgears
~$ glxinfo | grep rendering
修改用户资料
chfn userid
useradd 与 adduser 区别
useradd应该是源于unix的命令,passwd包提供.
使用时需要明确指定参数,不会自动创建家目录和对应组,
仅仅操作/etc/passwd和/etc/shadow
对应 userdel
adduser是一个交互shell脚本,发行版相关.同名包提供.
自动创建创建家目录和对应组, 引用/etc/skel/配置.
在命令执行过程中会调用 useradd.
对应deluser
没用装zhcon(装好基本系统后)看中文

jfbterm -q -c other,GB2312,iconv,UTF-8

由于需要fb支持
所以在/boot/grub/menu.lst里
加入 vga=788(或其它)

控制台快照
setterm -dump 1
1为第一个虚拟控制台
禁用ipv6

/etc/modprobe.d/aliases

#alias net-pf-10 ipv6
alias net-pf-10 off
modconf 移除 ipv6模块
使用 gdm 实现自动登录
/etc/gdm/gdm.conf
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=tony
wajig – simplified Debian package management front end
用lftp显示服务器提示信息

lftp 缺省不会显示 ftp 服务器的欢迎信息和错误信息,可以在 ~/.lftprc 里写入一行
debug 3
国内的很多站点都是GBK的代码,而现在系统默认的编码是utf8的,所以,最好再加上
set ftp:charset gbk
set file:charset utf8

系统服务
1.编写启动脚本, 并将其置于 /etc/init.d/目录下
2. 付予 可执行权限
3. 设定为启动服务

#/usr/sbin/update-rc.d <shell name> defaults

4.将其删除

#/usr/sbin/update-rc.d -f <shell name> remove

5.根据运行级别设定,例如

#/usr/sbin/update-rc.d <shell name> start 20 1 2 3 . stop 20 4 5 .

给定关键字, 查找相关命令
apropos keyword
不同控制台切换
ALT加左右箭头
开机自动打开 数字键盘
/etc/console-tools/config
# Turn on numlock by default
LEDS=+num

摘录自
http://www.linuxsir.org/bbs/showthread.php?t=228856

Debian下的X配置

apt-get install discover — 硬件识别系统
apt-get install mdetect — 鼠标自动侦测工具
apt-get install read-edid — VESA PnP监视器硬件信息收集工具

apt-get install x-window-system

安装完的配置中ps2鼠标使用/dev/psaux

重新配置XF4服务器
# dpkg-reconfigure –priority=low xserver-common
# dpkg-reconfigure –priority=low xserver-xfree86

使用aptitude安装(推荐):
gnome
gnome-session

Ref.
====
http://debian.linuxsir.org/book/reference/lyoo/ch-tune.html#s-x

Debian下Tcl8.4下的alloc: invalid block错误

问题描述:

采用tcl库编写的程序在redhat下编译运行正常通过(tcl8.3/tcl8.4),但是在Debian Sarge下运行时出现如下错误alloc: invalid block: 0x85cd938: 69 61 41

网上类似的问题描述
http://aspn.activestate.com/ASPN/Mail/Message/2606536

问题分析:

从google group中得知,Tcl_Alloc/Tcl_Free的指针和free/malloc/strdup不能混用。这是因为Debian上的tcl库使用了-DTCL_USEALLOC=1选项进行编译。该版本的库使用了内建的thread memory allocator,因此Tcl_Alloc并不等同于直接malloc返回的指针
http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/e4300a5fd97b22a7/79f0bd67ca2ad68a?lnk=st&q=alloc%3A+invalid+block&rnum=12#79f0bd67ca2ad68a

http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/2f16d826826185a4/535c21cf18b6b8dc?q=alloc%3A+invalid+block&rnum=2#535c21cf18b6b8dc

查看tcl8.4-8.4.9源码可以看到,Tcl_Alloc最终使用了TclpAlloc分配内存,该函数最终返回的是Block2Ptr(blockPtr, bucket, reqsize),两种指针的区别在于头部的MAGIC number。Thread memory allocator(generic/tclThreadAlloc.c)在操作前会做校验。

static char *
Block2Ptr(Block *blockPtr, int bucket, unsigned int
reqsize)
{
register void *ptr;

blockPtr->b_magic1 =
blockPtr->b_magic2 = MAGIC;
blockPtr->b_bucket = bucket;
blockPtr->b_reqsize = reqsize;
ptr = ((void *) (blockPtr + 1));
#if RCHECK
((unsigned char *)(ptr))[reqsize] = MAGIC;
#endif
return (char *) ptr;
}

另外,tcl.h头文件中定义了ckalloc/ckfree函数,当-DTCL_MEM_DEBUG选项未打开时,实际调用Tcl_Alloc/Tcl_Free,否则加入相应的调试信息。这对函数是系统推荐的方式

Debian笔记

fakeroot make-kpkg –append_to_version -486 –initrd \ –revision=rev.01 kernel_image

dpkg –list 所有安装的软件包
dpkg ‘list*’
dpkg –status pkgname 包的详细信息
http://debian.linuxsir.org/book/faq/etony/ch-pkgtools.zh-cn.html

如果用户想(或必须)定制内核, 建议下载使用 kernel-package 软件包, 其包含构建 kernel软件包的脚本, 并提供了创建 Debian kernel-image 软件包, 在 kernel 源文件的最上层目录运行命令:

make-kpkg kernel_image

要获取帮助, 运行

make-kpkg –help

如果没有现成的 kernel-source-version 软件包(这里 “version” 指 kernel 版本号), 则用户必须自己到 Linux站点上下载新版的 kernel(或者需要的那个版本)

在 /usr/share/doc/kernel-package/README.gz 处有 kernel-package 的详细使用说明. 主要步骤:

将 Kernel 源代码解包, 切换到新建目录.

用下面(任一)命令修改 kernel 配置:

make config (命令行界面).

make menuconfig (一个基于 ncurses 的菜单界面). 注意必须安装了 libncurses5-dev 软件包.

make xconfig (X11 界面). 需要安装相关的 X 和 Tcl/TK 软件包.

置完成后, 就会在 kernel 源文件的最上层目录生成一个 .config 文件.

执行命令: make-kpkg -rev Custom.N kernel_image, N 指用户指定的版本数字. 就会生成一个修正版为 Custom.1 的新 Debian 包, 例如 Linux 2.2.14 内核,就会是kernel-image-2.2.14_Custom.1_i386.deb.

安装生成的软件包.

运行 dpkg –install /usr/src/kernel-image-VVV_Custom.N.deb 安装内核. 安装脚本会:

运行启动加载程序, LILO(如果安装了的话),

安装放在 boot/vmlinuz_VVV-Custom.N 下定制的 kernel, 并生成相应的符号连接.

提示用户制作启动软盘, 启动盘仅包含基本内核. 见如何制作启动软盘?, 第 9.3 节.

如果使用第三方启动加载程序, 如 grub 或 loadlin, 把这个影像考到相应位置(如 /boot/grub 或 MS-DOS 分区).

dpkg –purge –force-remove-essential kernel-image-NNN 删除kernel image

http://debian.linuxsir.org/book/faq/etony/ch-kernel.zh-cn.html

不同版本软件包的文件替代
假设系统管理员或本地用户想使用 “login-local” 而不是 Debian 提供的登录程序 login.

不 要这样做:

用 login-local 将 /bin/login 覆盖掉.

包管理系统并不知道这个变化, 当 login(或其它依赖 /bin/login 的软件包)安装或升级时, 你定制的 /bin/login 就会被覆盖掉.

应该是

运行:

dpkg-divert –divert /bin/login.debian /bin/login
使将来Debian的 login 包安装时, 写入 /bin/login.debian 而不是/bin/login.

然后:

cp login-local /bin/login
将你定制的程序移到相应位置.
http://debian.linuxsir.org/book/faq/etony/ch-customizing.zh-cn.html

Page 1 of 11