Chinaunix首页 | 论坛 | 博客
  • 博客访问: 182512
  • 博文数量: 28
  • 博客积分: 1226
  • 博客等级: 中尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 11:56
文章分类
文章存档

2009年(5)

2008年(9)

2007年(14)

我的朋友
最近访客

分类: LINUX

2007-02-13 09:48:35

LINUX 练习

0.Install debian.

--install everything in order to do development work later on

练习过程:安装过程没有问题。
练习总结:Debian是Linux发行版当中最自由的一种。由位于世界各地上千名的自愿者开发和维护。
熟悉apt ,dpkg 。

apt-get update
从 /etc/apt/source.list 中源的更新软件包列表, 当源的内容改变或不能确定时,运行

apt-cache search search-string
查找描述如 search-string 的软件包

apt-get install package-name
从源安装软件包及其所有依赖包

DPKG
dpkg -l [names]
列出软件包

dpkg -I pkg.deb
显示软件包相关信息

dpkg -c pkg.deb
列出软件包的内容

dpkg -S filename
显示哪个包包含这个文件

dpkg -i pkg.deb
安装软件包


**********************************************************************************************************************
1.Change the images for the desktop.

--bootsplash(Picture during startup)

练习总结:linux启动模式分为 silent mode(简单) 和 verbose mode(详细)
更改开机画面可以用bootsplash这个工具。
相关网站:
(官方网站,基本使用及相关原理)
(详尽的使用方法,基于SuSe发行版)
(bootsplash的爱好者组织的网站,资料齐全)
(Linux内核下载)
需要的工具有:内核补丁  bootsplash-3.1.6-2.6.12.diff
bootsplash工具 bootsplash-3.2.tar.bg2
所需主题 theme-Newlinux.tar.bg2 就是图片
大概过程是把内核补丁用命令patch -p1继而安装bootsplash工具。解压你下载的图片用splash -s -f /etc/bootsplash/themes/Linux/config/bootsplash-800x600.cfg > /boot/initrd-splash.img生成开机画面。

以上都是参考上的文档做的。

--wallpapers

练习总结:默认桌面的图片文件是放在/usr/share/wallpapers
鼠标修改,直接在桌面点右键选择配置桌面就可以了。
手动修改为 ~/.kde/share/config/kdesktoprc 文件中的第8行 wallpaper=”图片文件名”即可。

--mozilla splash (Picture startup during starting of Mozilla)
--evolution splash 9Picture startup during starting of Evolution)
--see wiki for hints later on


**********************************************************************************************************************
2.Download 3rd party software and try to compile/install.

--
练习总结:
tuxtype:是一个linux下经典的打字游戏,内容是一只企鹅吃字母,挺有意思的。

--
练习总结:
qhacc: 是一个linux下简单的家庭记账软件 用到了C++ qt
qt库 必须安装

--
练习总结:
gqview:是一个像ACDSee一样的看图工具,它集成了浏览图片最为常用的功能。
我安装2.0.1 版 需安装 gtk+2.4库
see wiki for hints later on



*************************************************************************************************************
3.Localization (Chinese) for GTK and QT software.

--GTK -> .po files (gqview)

练习总结:.po文件是用来把英语输出转换为其他语言(以简体中文为例)的输出的文件,是用xgettext命令生成的,
xgettext它的功能是将.c(cpp等)文件中的以下划线开始括号中(如宏定义所示)的字符串加入到.po文件中,xgettext -a -o gqview.po *.c
.po文件的头部可以加入软件包的名称、版本、翻译者的邮件地址等,po文件中以#开始的行为注释内容,
msgid后面的内容为英文,msgstr后面的内容为翻译的中文,翻译好后保存为UTF8格式。再用msgfmt命令把.po文件转换成.mo的文件,
在把.mo 文件放到目录/usr/share/locale/zh_CN/LC_MESSAGES下,将locale设为简体中文,这样GTK程序生成图形中的英文就变成了简体中文了。

--QT -> .ts files (qhacc)

练习总结:.ts文件是Qt应用的C++源代码中的可翻译文本,是一个给翻译者手工编译的信息文件。
运行lupdate(工具用来同步源程序和翻译),就会生成一个.ts文件,
该工具可以识别tr()结构和像QT_*_NOOP宏(只是个例子),产成.ts文件(通常每种语言一个)。.ts文件是XML格式,
你也可以手工编辑它们,运行lrelease(工具用来创建在发布应用程序时要用到的实时翻译文件),
以从.ts文件中得到只适用于最后使用的轻量级的信息文件(.qm文件)。
如果不会用lupdate 和lrelease工具请参考()。
--see wiki for hints later on


**************************************************************************************************************
4.Upgrade Kernal.

--/
--

编译升级2.6内核——Thizlinux2.4.22~2.6.11.10

(一)、下载
1.内核源代码:/pub/linux/kernel/v2.6/linux-2.6.11.10.tar.gz
2.内核补丁:/pub/linux/kernel/v2.6/patch-2.6.11.10.bz2
3.下载module-init-tools-3.1.tar.bz2
/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.1.tar.bz2
4.下载新的mkinitrd
ftp://195.220.108.108/linux/6/fedora/core/3/i386/os/Fedora/RPMS/mkinitrd-4.1.18-2.i386.rpm
它需要lvm2,device-mapper
ftp://195.220.108.108/linux/6/fedora/core/3/i386/os/Fedora/RPMS/device-mapper-1.00.19-2.i386.rpm
ftp://195.220.108.108/linux/6/fedora/core/3/i386/os/Fedora/RPMS/lvm2-2.00.25-1.01.i386.rpm

(二)、安装
1.解压内核源码到/usr/src,装内核补丁
将内核源码及内核补丁考到/usr/src下,执行:
cd /usr/src
rm -rf linux
tar -zxvf linux-2.6.11.10.tar.gz
ln -s linux-2.6.11.10 linux
cd linux
bunzip2 –dv patch-2.6.11.10.bz2 | patch –p1

2.安装必要工具
(1)module-init-tools-3.1.tar.bz2
./configure --prefix=/
make
make install
./generate-modprobe.conf /etc/modprobe.conf
(2)device-mapper-1.00.19-2.i386.rpm
(3)lvm2-2.00.25-1.01.i386.rpm
请用rpm -ivh --nodeps package name
(4)mkinitrd-4.1.18-2.i386.rpm

3.配置
# make mrproper
# make menuconfig
make mrproper 是清理代码树的动作,保证源代码是干净的

4.编译
make
make modules
make modules_install
make install

(三)、运行
1.编译好后修改grub,将root=LABEL=/改成root=/dev/hdc*(系统安装区);
2.reboot,选择新内核。


***************************************************************************************************************
5.RPM packaging.

--See wiki
--Later will have tutorial for it
练习总结:rpm包的制作

途径:wiki上面的资料,加上自己再网上查找的资料所学习。
这时我使系统是thiz server 7

首先要确定本地机器上是否安装了rpm包文件,rpm的主配置文件rpmrc在/usr/lib/rpm/下,也可以随便>
放在自己的工作目录下,随个人喜好。把准备要打包的源代码放入正确的目录下,我使用的是系统默认的/usr/src/redhat下。相对>
于每个需要打包的源码,制作打包文件的人需要打好的包的属性不同,所以对于.spec文件的内容也相应的不同,但是需要了解.spec 文件内的指令所代表的意思。
需要注意的是要打包的文件名字要和.spec文件内配置的文件内容名字要一致。需要打包的文件要放到SOURCES下,.spec文件要放到SPECS下,
最后生成的打包文件生成在BUILD下,>
最后 rpmbuild -bs xxx.spec 生成包文件。最后还要记得要换个机器进行测试,以避免本地机所造成的影响。

小结:制作RPM包需要开发人员做很多工作。比如不仅要懂得c/c++编程,而且还要能熟练掌握像make、autoconf、diff、 patch、tar 、install等工具的使用并能编写spec文件。但从长远来看,应用RPM,在软件包的维护和方便性方面使得开发者受益。



************************************************************************************************************
6.DEB packaging.

--See wiki
--man dpkg
--Later will have tutorial for it
练习总结:DEB包是在debian下的一种安装包,
制作.deb包的过程如下:以leafpad-0.7.9.tar.gz包为例子,
一:1先创建一个良好的工作环境,创建 leafpad 目录
# mkdir leafpad
#mv leafpad-0.7.9.tar.gz leafpad/
#tar zxvf leafpad-0.7.9.tar.gz
#cd leafpad-0.7.9
2.安装打包环境
# apt-get install dh-make dpkg-dev g++ patch make libc6-dev fakeroot libgtk2.0-dev
3.Debian 初始化
# dh_make -e winter0324@163.com -f ../leafpad-0.7.9.tar.gz
4根据需要设置Debian目录下内容
5构建 .deb 包
# dpkg-buildpackage -rfakeroot 或 #fakeroot debian/rules binary
做完以上的步骤在leafpad的上一级目录就会创建一个.deb的包了。
二:还可以不用以上的方法,直接用checkinstall -D(先执行make)直接就生成.deb包。
三:以上是把一个源码包tar.gz解压打成.deb包,如果你刚开始是个.c文件就可以借用
autoscan ,autoconf, automake等命令生成.tar.gz包。
四:如果你想把rpm包直接转成deb包可以用alien -d命令。
解.deb包用dpkg -i命令。



/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7.LFS (Install Gentoo Linux).

Advanced:
--
Easier:
--
--doc/zh_tw/gentoo-x86-quickinstall.xml

练习总结:
首先要有耐心,信心 本人机器PIII 433 128MB 内存
LFS的定义:LFS就是Linux From Scratch,从一个已有的Linux上面构建新的Linux,万全基于源代码,没有任何二进制包给你使用。
LFS5.0源码包下载位置:

LFS5.0(中文)教程下载位置:

LFS6.0源码包下载位置:


本次练习基于ThizLinux7.0 服务器版,练习完全按照教程进行。
LFS5.0源码包中没有GCC-3.3.1的安装包需要重新下载,下载地址:


步骤可以分为两部分:
第一遍安装的源码包构成一个与原系统相对独立的小系统;
第二遍安装的源码包完善这个小系统使其成为独立的操作系统。
各个软件的用途及其间的依赖关系在教程中用详细说明。
重要的是安装前的环境设置:
LFS最好独立划分一个分区(不包括源码包3G,包括源码包5G);
新建一个lfs用户,并将LFS分区挂载到用户主目录上;
设置$LFS 为用户主目录;
在$LFS下建立source文件夹(存放编译用的源码包)、tools文件夹(将软件安装到这里),在原系统的根目录下建立一个/tools链接链接到$LFS下的tools,这个很重要其好处在于:源码包第一遍安装时安装将路径定义到根目录下的/tools链接下,实际上源码包被安装在$LFS下的tools文件夹中。当第一遍安装完成,形成一个小的操作系统时$LFS将被视为根目录,这时由于源码包安装时就被定义在/tools下,这样它们可以仍然在这个小系统中运行而不产生路径错误。
另外源码包安装过程中,按照教程定点检测也非常重要。

//////////////////////////////////////////////////////////////////////////////////////
8.Write a simple GTK program to configurate Network (LAN) 代码附后

--using the `glade2` develop tools
--network configuration files are placed in /etc/sysconfig/
--


以上基本功练习需仔细体味, 才能达到效果. 除了知识的积累外,更重要的是学习能力的培养!!!

2005.10.27 TLD 于朋


#include
#include
#include
#include

#define Maxline 1024
static GtkWidget *entry1;
static GtkWidget *entry2;
gchar ip_old[100];
int strindex (gchar source[], gchar serachfor[]);
int mgrep (gchar * filename);
gchar pattern[] = "IPADDR";
void writetofile(const gchar *newip);

void
on_button_clicked (GtkWidget * button, gpointer userdata)
{
const gchar *newip = gtk_entry_get_text (GTK_ENTRY (entry2));
g_print ("new_ip:%c ", *newip);
g_print ("\n");
if(*newip != (int)NULL)
{
writetofile(newip);
system ("/etc/init.d/networking restart"); //dabian
}
// system ("/etc/init.d/network restart"); //redhat
}


int
main (int argc, char *argv[])
{

GtkWidget * window;
GtkWidget * box;
GtkWidget * box1;
GtkWidget * box2;
GtkWidget * label2;
GtkWidget * button;
GtkWidget * sep;

GtkWidget *frame1;
GtkWidget *label_ip;
//ip_old = mgrep ("/etc/sysconfig/networking/ifcfg-eth0"); //redhat
//ip_old = mgrep ("/opt/ifcfg-eth0");
mgrep("/opt/ifcfg-eth0");
g_print("@@@%s@@@\n",ip_old);

gtk_init (&argc, &argv);
//ip_old=mgrep("/opt/ifcfg-eth0");
g_print("@@@%s@@@\n",ip_old);

window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit),
NULL);
gtk_window_set_title (GTK_WINDOW (window), "netconfig ip by John.yu");
gtk_window_set_default_size (GTK_WINDOW (window), 300, 200);
gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
gtk_container_set_border_width (GTK_CONTAINER (window), 20);
box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), box);
box1 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), box1, FALSE, FALSE, 5);
box2 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (box), box2, FALSE, FALSE, 5);
sep = gtk_hseparator_new ();
gtk_box_pack_start (GTK_BOX (box), sep, FALSE, FALSE, 5);
entry1 = gtk_entry_new ();
frame1 = gtk_frame_new ("old IP:");

label_ip = gtk_label_new (ip_old);//***********************************


gtk_container_add (GTK_CONTAINER (frame1), label_ip);
gtk_box_pack_start (GTK_BOX (box1), frame1, FALSE, FALSE, 5);
/*gtk_box_pack_start(GTK_BOX(box1),entry1,FALSE,FALSE,5);*/
label2 = gtk_label_new ("please input new IP: ");

entry2 = gtk_entry_new ();
//gtk_entry_set_visibility(GTK_ENTRY(entry2),FALSE);
gtk_box_pack_start (GTK_BOX (box2), label2, FALSE, FALSE, 5);
gtk_box_pack_start (GTK_BOX (box2), entry2, FALSE, FALSE, 5);
button = gtk_button_new_with_label ("ok");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (on_button_clicked), NULL);
g_signal_connect_swapped (G_OBJECT (button), "clicked",
G_CALLBACK (gtk_widget_destroy), window);
gtk_box_pack_start (GTK_BOX (box), button, FALSE, FALSE, 5);
gtk_widget_show_all (window);
gtk_main ();
return 0;
}



int mgrep (gchar * filename)
{
gchar line[Maxline];
FILE * fptr;
gchar ch;

int i=0;
gchar * sum;
gchar *sum1;
if ((fptr = fopen (filename, "r+")) == NULL)
{
puts ("File is not opend!!!");
exit (0);
}
else
{
while (!feof (fptr))
{
ch = fgetc (fptr);
if (ch != 0x0a && ch != EOF)
line[i++] = ch;
else
{
line[i++] = '\0'; // line end
if (strindex (line, pattern) >= 0)
{
sum = line;
while (*sum++ != '=')
;
sum1 = sum;
strcpy(ip_old,sum1);
break;
}
i = 0; //line top
}
}
fclose (fptr);
putchar ('\n');
}
return 0;
}


int
strindex (gchar source[], gchar target[]) // s[] have t[] ?
{
int i, j, k;
for (i = 0; source[i] != '\0'; i++)
{
for (j = i, k = 0; target[k] != '\0' && source[j] == target[k];
j++, k++)
;

if (k > 0 && target[k] == '\0')
return i;
}
return -1;
}


void writetofile(const gchar *newip)
{

gchar line[Maxline];
FILE * fptr;
gchar ch;
int i = 0;
int len=0;
gchar *filename="/opt/ifcfg-eth0";
gchar * sum;
gchar *sum1;

if ((fptr = fopen (filename, "r+")) == NULL)
{
puts ("File is not opend!!!");
exit (0);
}

else
{
while (!feof (fptr))
{
ch = fgetc (fptr);
if (ch != 0x0a && ch != EOF)
line[i++] = ch;
else
{
line[i++] = '\0'; // line end
if (strindex (line, pattern) >= 0)
{
sum = line;
while (*sum++ != '=')
;
sum1 = sum;
len=strlen(sum1)+1;

fseek(fptr,-len,SEEK_CUR);
fputs(newip,fptr);
fputs("\n",fptr);
break;
}
i = 0; //line top
}
}
fclose (fptr);
putchar ('\n');
}

}

////////////////////////////////////Makefile 很简单 自己写一个吧
本程序在写文件(writetofile)是有bug 欢迎大家来共同探讨
阅读(1395) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~