freshen.sh 使用指定的 RPM ftp 更新站点上的 RPM 软件包来更新原有的 RPM 列表 。执行过滤器来替换更新 RPM 软件包 。最后,长长的发行列表根据从更新镜像站点上得到的新 RPM 软件包完成更新 。
清单 1. fresh.sh
#!/bin/sh;
rh_ver=$1;
rh_path=$2;
update_dir=${rh_path}/RH${rh_ver}-updates;
custom_dir=${rh_path}/RH${rh_ver}-custom;
install_dir=${rh_path}/RH${rh_ver}-install;
# Sanity check for the original directory.;
# Create update and install directories if they don’t exist;
[ -d ${update_dir} ] || mkdir ${update_dir};
[ -d ${install_dir}/RedHat/RPMS ] || mkdir -p ${install_dir}/RedHat/RPMS;
# Get latest updates from fresh rpms FTP site;
./get_update.sh ${rh_ver} ${update_dir};
# Create/update hardlinks from update, and custom directories;
# to the install directory. We assume that original RPMS are already;
# hardlinked to the install directory, so all we need to do is filter;
# out any replaced by updated packages.;
./do-links.sh ${update_dir} ${install_dir}/RedHat/RPMS;
[ -d ${custom_dir} ] && ./do-links.sh ${custom_dir};
${install_dir}/RedHat/RPMS;
# Filter out all but the latest version of everything.;
./filter-rpms.pl $install_dir/RedHat/RPMS;
# Rebuild the hard disk lists;
/usr/lib/anaconda-runtime/genhdlist ${install_dir};
freshen.sh 调用 do-links.sh 和 get_update.sh,分别去设置 RPM 发行版本的源、宿(省略了源 RPM 软件包;硬链接用来设置目的 RPM)和检索更新 。
清单 2. do-links.sh
#!/bin/sh;
src=https://www.rkxy.com.cn/dnjc/$1;
dest=$2;
#for file in $src/*; do;
for file in `find $src -name *.rpm -a ! -name *.src.rpm -print`; do;
base=`basename $file;`;
if test ! -f $dest/$base; then;
echo "Linking $file"
ln $file $dest;
else;
echo "EXISTS: $file"
fi;
done;
清单 3. get_update.sh
#!/bin/sh;
rh_ver=$1;
dest=$2;
echo "Retrieving updates for version ${rh_ver} to $dest";
lftp << EOF;
open ftp.freshrpms.net
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i386 $dest/i386;
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i486 $dest/i486;
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i586 $dest/i568;
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/i686 $dest/i686;
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/SRPMS $dest/SRPMS;
mirror -n pub/redhat/linux/updates/${rh_ver}/en/os/noarch $dest/noarch;
Java 和 Linux
在Codemonks,相当多的开发工作是在 Linux 上用 Java 完成 。这两个工具的组合为创建商业级质量的 Web 应用提供了一个平台,Murray 说 。“在做这些项目的过程中,我们发现我们要总体上了解客户已有的应用代码”,他回忆说 。locks.c (在下载得到的压缩文件中的 /developerworks/locks 目录下) 是一个代码片段,实现的是用于 Java Virtual Machine Profiler Interface (JVMPI) 的读/写锁以及大量的调试代码 。
Linux 开发人员的代表
“在情况允许的时候,不要写特定于系统的代码”,Murray 说,而是克服困难去“写好的跨平台的代码” 。受雇的 Murray 坚持认为他最大的资本永远是“写具有商业品质的代码,构建和提供网络服务,定制 OS 或内核,而且完全基于可靠的开放源代码的平台” 。
下面是一个代码片段,来自于一个跨平台的定制的 IMAP 服务器,这个服务器由 Linux 和 MacOS X 的开发人员共同开发 。代码实现的是一个用来处理字符串的简单的增长缓存 。这样避免了缓存溢出的问题(不要忘记那些安全漏洞),而不必要您每次做某些事情的时候重新分配空间 。它是通过维护一个简单的可变长的缓存来实现的,这个缓存可以写满和清空 。这个缓存已经被用于一个实验用的 IMAP 服务器,这个服务器是由一个团队紧张工作了一周完成的 。
推荐阅读
- 用Linux的dd命令简单破解加密软盘
- 如何共享两台Linux操作系统的根目录
- Linux操作操作两种常见启动故障解决方法
- Linux内核源代码的阅读及相关工具介绍
- Linux下无线上网设置方法
- Linux系统下架设CS服务器的完美方法
- 做一个好管家 Linux系统管理技巧大荟萃
- Linux下安装Realplayer不能播放启动问题
- 循序渐进学习Linux之教您软件如何配置
- 用SRP建立安全的Linux FTP服务器
