kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

gdb的脚本使用

1)启动gdb时候

1、gdb在启动的时候,会在当前目录下查找".gdbinit"这个文件,并把它的内容作为gdb命令进行解释,所以如果我把脚本命名为".gdbinit",这样在启动的时候就会处理这些命令。
2、启动gdb的时候自动执行脚本 gdb -x your_script

2)gdb运行期间

可以使用 source script-file 来解释gdb命令脚本script-file

linux内核模块签名

linux内核模块签名 Documentation/module_signing.txt

内核在模块模块加载时使用加密签名验证,校验签名是否与已编译的内核公钥匹配。目前只支持RSA X.509验证。
签名验证在通过CONFIG_MODULE_SIG使能。打开签名同时还会强制做模块ELF元数据检查,然后再做签名验证。

公钥生成

内核编译时可以指定一系列的公钥。x509.genkey文件用来生成X509密钥。如果没有该文件,系统会自动提供一个默认的配置。Makefile会根据x509.genkey规则在内核编译根目录生成默认配置,用户可以手动更改该文件。

由此在内核编译过程中分别生成私钥和公钥文件分别为./signing_key.priv和./signing_key.x509。

默认配置是使用/dev/random生成的。如果/dev/random没有足够数据,在后台运行以下命令可以生成更多的数据:rngd -r /dev/urandom。

模块签名

设置了CONFIG_MODULE_SIG_ALL,所有模块将会自动添加签名。如果没有设置,需要手动添加:
scripts/sign-file $(MODSECKEY) $(MODPUBKEY) modules.ko
哈希算法必须为sha1, sha224, sha256, sha384, sha512。对应的加密算法必须是使能的。CONFIG_MODULE_SIG_HASH设置sign-file使用的默认算法。

MODSECKEY=<secret-key-ring-path>
加密私钥文件,默认是./signing_key.priv

MODPUBKEY=<public-key-ring-path>
加密公钥文件,默认为./signing_key.x509

签名模块裁减

签名模块裁减就是去除签名部分,在重新签名之前需要先裁减之前的签名。在打包内核模块发布时,并没有自动裁减。

加载签名模块

模块是通过insmod来加载的,模块加载时通过检查模块的签名部分来验证。

不合法签名和没有签名的模块

如果设 置了CONFIG_MODULE_SIG_FORCE或者在内核启动命令行设置了module.sig_enforce,内核将只加载带有公钥的合法签名 模块。如果都没有设置则会加载没有签名的模块。如果内核有密钥,但模块没有提供合法的签名就会被拒绝加载。下表说明了各种情况:

1
2
3
4
5
6
7
8
模块状态     许可模式    强制检查
未签名         通过      EKEYREJECTED
签名,没有公钥     ENOKEY      ENOKEY
签名,公钥       通过      通过
非法签名,公钥     EKEYREJECTED    EKEYREJECTED
签名,过期密钥     EKEYEXPIRED EKEYEXPIRED
破坏的签名       EBADMSG     EBADMSG
破坏的ELF      ENOEXEC     ENOEXEC

VMware增加磁盘空间

一 添加

选择“VM”—-“setting”并打开,将光标定位在hard Disk这一选项,然后点击下方的Add按钮
点击next,执行下一个步骤
根据提示,创建一个虚拟的磁盘,并点击下一步
按照默认的,选择SCSI格式的磁盘即可,点击next执行下一步
按照默认的点击下一步即可完成虚拟磁盘的添加

则会多出一个/dev/sd?,这里的?代表硬盘编号,第一个硬盘编号为a即sda,第 二个就是sdb,第三个是 sdc,以此类推,一般来说,如果以前没有增加过硬盘,那么原来的硬盘就是sda,通过VMware菜单增加的虚拟硬盘编号就是sdb。如果添加的第二块 硬盘是IDE硬盘,就应该看到hdb,如果是SCSI硬盘,看到的就应该是sdb。

二 分区

使用fdisk /dev/sda进入菜单项,m是列出菜单,p是列出分区表,n是增加分区,w是保存并推出。由于这里增加的磁盘只有5G,因此5G划为一个区。 对新建的磁盘进行分区及格式化的工作:
输入 fdisk /dev/sdb
终端会提示:Command (m for help):
输入:m 则会出现提示
然后根据提示输入:n
会出现下面的提示,依次输入p 和 1 即可
接着便会提示卷的起始地址和结束地址,都保持默认按回车的即可(意思是只分一个区)
输入“w”保存并推出
再次使用 “fdisk -l ”这个命令来查看会发现出现了/dev/sdb1(说明已经完成了分区工作)

三 对新建的分区进行格式化

格式化成ext3的文件系统即可
使用mkfs -t ext3 -c /dev/sda3 格式化分区
-c : 在制做档案系统前,检查该partition 是否有坏轨

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@localhost ~]# mkfs -t ext3 -c /dev/sda3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
656000 inodes, 1311305 blocks
65565 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=1346371584
41 block groups
32768 blocks per group, 32768 fragments per group
16000 inodes per group
Superblock backups stored on blocks:
	    32768, 98304, 163840, 229376, 294912, 819200, 884736


Writing inode tables: done                           
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done


This filesystem will be automatically checked every 31 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

[root@localhost ~]# cd /
[root@localhost /]# mkdir /cm             #增加一个/cm
[root@localhost /]# mount /dev/sda3 /cm           #挂载分区到   /cm        
[root@localhost /]# df -h             #挂载后的分区情况
文件系统              容量  已用 可用 已用% 挂载点
/dev/mapper/VolGroup00-LogVol00
	                  8.6G  2.8G  5.4G  35% /
/dev/sda1              99M   12M   82M  13% /boot
tmpfs                 125M     0  125M   0% /dev/shm
/dev/sda3             5.0G  139M  4.6G   3% /cm

四 设置开机自动加载

创建加载点:mkdir /cm 挂载之后, 修改vi /etc/fstab 分区表文件,
在文件最后加上 /dev/sda3 /cm ext3 defaults 0 0 然后保存,重启即可。

(注意:修改分区表如果有误,将导致进不了linux桌面系统,但这时系统会进入commandline模式,我们可以在commandline模式下对有误的fstab进行修复更改,不过默认情况下这个commandline模式会是Read-Only file system,这意味着你的任何修改操作都是不允许的,但可以通过命令 mount / -o remount,rw 来解除这个限制)。

vm虚拟机命令行

1)开启虚拟机
1
vmrun start "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
2)停止虚拟机
1
vmrun stop "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
3)重启虚拟机
1
vmrun restart "/opt/VM_OS/RH_OS_B/Red Hat Enterprise Linux 5 64-bit.vmx" nogui|gui
4)列出正在运行的虚拟机
1
vmrun list

Linux 即时修改 启动级别 启动参数 磁盘满无法进系统 忘记密码

1、修改启动级别错误配置的方法

如果你不小心把级别设成0或6,用下边的方法补救:
1. 启动系统后,在倒计时结束前按任意键,进入grub引导界面
2. 在grub引导界面的输入‘e’,进入下一级,高亮第二行,再输入‘e’
3. 在最后输入 1[单用户模式] 按回车回到上一级(单用户模式启动不会去读取/etc/inittab) 4. 输入‘b’重启系统

也可以改其他启动参数 进行紧急引导最简单的方法是:
把 init=/bin/bash 或 init=/bin/sh 选项传递给内核

2、磁盘满导致无法进入系统

删除一些文件后重启
没法删除 说文件系统是只读的 ,重新mount 你的磁盘系统为可读写的。

1
mount -o remount,rw  /
3、忘记密码

passwd user

kexec-tools-1.102pre-164.el5 之前的有问题

kexec-tools-1.102pre-154.el5 会直接进入 dump.img,于是便看到单CPU在跑,内存只有crashkernel中大小的情况。但是指定了ext /dev/sd* 后就能正常。其他问题就是它通过网络时只会走eth0,不然就失败。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
e2fsck 1.38 (30-Jun-2005)
fsck.ext3: while determining whether /dev/sda2 is mounted.
/: recovering journal
/: clean, 100877/4653056 files, 1236284/4648809 blocks
Mounting root filesystem.
Trying mount -t ext4 /dev/sda2 /sysroot
Trying mount -t ext3 /dev/sda2 /sysroot
Using ext3 on root filesystem
Switching to new root and running init.
^MINIT: version 2.86 booting^M
	        Welcome to  CentOS release 5.8 (Final)
	        Press 'I' to enter interactive startup.
Cannot access the Hardware Clock via any known method.
Use the --debug option to see the details of our search for an access method.
Setting clock  (utc): Tue Aug  5 19:18:49 PDT 2014 [  OK  ]^M
Starting udev: [  OK  ]^M

ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5Client/en/os/SRPMS/kexec-tools-1.102pre-154.el5.src.rpm

vim mkdumprd


https://bugzilla.redhat.com/show_bug.cgi?id=788678

Hmm, after a second thought, did you put the block device mounted on /var into your /etc/kdump.conf? Something like:

ext3 /dev/sdbX #the device mounted on /var path crash #relative path inside /var

? Please share your kdump.conf if possible.

Thanks!

The point is to not touch the default kdump.conf, and mkdumprd should just work, like it does in RHEL6.

If I do put the ext3 and path directives into kdump.conf, then of course things work fine, but it shouldn’t be needed for the stock case where you just want to dump to /var/crash on your local filesystem.

Yeah… I saw how RHEL6 handles this, will try to backport it to RHEL5. Thanks!

Created attachment 594144 detailsProposed Patch v3

Ok, let’s just remove the UUID converting code.

Yep - it works now!

… almost. I’m pretty sure that the RHEL6 default mkdumprd uses makedumpfile by default so it isn’t just using “cp” to create the vmcore file.

The currently-patched version appears to just use “cp” instead.

Yeah, this is expected, because we don’t have a chance to change the default core_collector to makedumpfile on RHEL5, so “cp” is still the default one. :)

Thanks for testing!