设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 发行版讨论区 —— LinuxSir.cn
›
Slackware Linux
›
自己写的,获取current需要更新的文件列表。 ...
1
2
3
/ 3 页
下一页
返回列表
查看:
2062
|
回复:
26
自己写的,获取current需要更新的文件列表。
[复制链接]
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
发表于 2009-6-3 13:35:54
|
显示全部楼层
|
阅读模式
我是perl菜鸟,只是胆子大,不怕被人嘲笑,发个根据自己已有的packages获取current上更新的perl脚本,在swaret没有跟上txz的变化之前先用用。
去掉kde,kernel,emacs什么的。
[更新] 2009.06.06
增加一个移除包的脚本 rmpkg.pl,它会生成一个叫rmp2.sh的脚本,查看后以root身份执行。
[重要更新] 2009.06.05
改进了比较新旧软件包的算法,现在生成等待更新的包列表的速度是秒级的。只读一次文件就完成比较了。
每次升级后,在/etc目录下会有一些*.new的文件。我们既不能直接把每个这样的文件都去覆盖原来的文件,也不能把所有的new文件都一股脑儿删了,最痛苦的是要保留哪些文件,每个人都有所不同。所以我写了个脚本,自动地生成要批量覆盖的命令,而保留那些需要手工处理的new文件。这个脚本最好以root用户身份执行,因为/etc中有的目录在搜索时普通用户是进不去的,如果你担心安全性,就自己看看脚本中的方法find生成列表好了。最后生成一个叫repl-new.sh的文件,不好意思,缺了那个脚本头一行,反正以root用户执行”sh repl-new.sh“一样可以运行的。
使用security@slackware.com的公钥,检查下载的包的正确性的脚本。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
注册
x
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
sunny_5252
sunny_5252
当前离线
积分
277
IP卡
狗仔卡
发表于 2009-6-3 20:44:17
|
显示全部楼层
不错,很喜欢你写的。很好!
回复
支持
反对
使用道具
举报
显身卡
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
楼主
|
发表于 2009-6-4 01:27:43
|
显示全部楼层
filelist-want.txt中是所有可更新的软件包的url,可以用wget -i filelist-want.txt来下载。
看来要发布一点东西还要考虑使它变得更易用啊。
回复
支持
反对
使用道具
举报
显身卡
winlia520
winlia520
当前离线
积分
97
IP卡
狗仔卡
发表于 2009-6-4 11:37:57
|
显示全部楼层
哎!!我的xterm里显示乱码,如何用啊?
看来我的语言设置出了问题,我的去改下,
我用cat查看了下,,不知道如何用,中文也看不到
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有帐号?
注册
x
回复
支持
反对
使用道具
举报
显身卡
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
楼主
|
发表于 2009-6-4 19:02:44
|
显示全部楼层
我正在开始写教程,并准备再修改一下,目前基本上是用随便什么文本编辑器打开这个文件,修改一下文件开头的几个目录中的“/home/hj_18/”为你自己的家目录,后面的路径名去建立一下,就可以用“perl upgrade-slk.pl”执行,产生的文件中有个filelist-want.txt,就是要自己去下载的更新的软件包的url表,可以用“wget -i filelist-want.txt”来下载,导入到什么下载管理器也没问题。
至于语言的问题,我好像是用的gb2312,但也有可能是utf-8的,我用系统自己的emacs打开没有问题,mousepad也没有问题,另外cat指令可能要设置一个环境变量才能显示中文。今天我已经升级好了,没有什么问题。
if ( $^O eq 'MSWin32' ) {
$dlcmd="D:/MSYS/bin/wget.exe ";
$fndcmd=q(D:\MSYS\bin\find.exe );
$upddir=q(f:\slackware);
$workdir=q(f:/temp/upgrade-current/slackware/);
} elsif ( $^O eq 'linux' ) {
$dlcmd="wget ";
$fndcmd="find ";
$upddir='/home/hj_18/slackware';
$workdir='/home/hj_18/updslk/';
}
复制代码
把 “$upddir='/home/hj_18/slackware';”中的“/home/hj_18/”改为自己的家目录,比如用户名叫blackstar的,就是“/home/blackstar/“,在这个目录下建个文件夹“slackware”,准备放下载的包。
把 “$workdir='/home/hj_18/updslk/';”中的“/home/hj_18/”也改了,并再建一个“updslk”,把upgrade-slk.pl本身放进这个目录,切换到终端进到这个目录,执行“perl upgrade-slk.pl”即可。
另外,这里有兴趣的话可以再自己改,看看哪些包是不要的,在第二个if那里加。
while (<TMP>) {
@domain1=split( / +/,$_ );
if ( ($domain1[7]=~ m/\.txz$/) &&
( ($domain1[7]=~ m/kdebase-4/) ||
($domain1[7]=~ m/kdelibs-/) ||
($domain1[7]=~ m/kdebase-w/) )
) {
$domain1[7]=~ s/^\.\///;
chomp $domain1[7];
# 现在得到了跳过过滤的txz文件列表
print OUTPUT $domain1[7]. "\n";
next;
}
if ( ($domain1[7]=~ m/\.txz$/) &&
!($domain1[7]=~ m/\/kde\//) &&
!($domain1[7]=~ m/\/kdei\//) &&
!($domain1[7]=~ m/emacs-/) &&
!($domain1[7]=~ m/kernel-/)
) {
$domain1[7]=~ s/^\.\///;
chomp $domain1[7];
# 现在得到了新的整理后的带目录的txz文件列表
print OUTPUT $domain1[7]. "\n";
}
}
复制代码
前面的if是在保留被我删除的几大类包中间个别几个我需要的,因为swaret检查依赖性的时候建议我要的。后面的if是剔除我不需要或是我想自己编译的包,不会改的就别改了。
回复
支持
反对
使用道具
举报
显身卡
ginkgo
ginkgo
当前离线
积分
714
IP卡
狗仔卡
发表于 2009-6-4 19:44:25
|
显示全部楼层
根据changelog做不是更好。格式整齐,用sed就可以很容易搞定。
回复
支持
反对
使用道具
举报
显身卡
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
楼主
|
发表于 2009-6-4 19:50:48
|
显示全部楼层
我写upgrade-slk.pl时的一些想法,与大家交流,这是我的自我批评,希望能得到大家的批评和指正。
几年来,做为一名slackware的用户,一直习惯于使用swaret同步current版本,到前天为止,世界很清静。但是突然间发现自己错过了包格式变化的新闻,一下子惶惑起来,swaret不管用了,就去下了slackpkg,一运行居然列出的是12.2的包列表,还有它的conf文件里横看竖看找不到version在哪里改。算了,还是自己动手,丰衣足食啊。
初步思路是这样的:首先要从源那里抓到包列表,这里我只考虑主目录上的包,extra什么的暂时顾不上了。为了确保抓的文件完整,我检查它的最后一行,应该是包含“y/tagfile/”,所以我检查一下,看要是没有这个指纹就要重下。
俗话说有图有真相啊:
回复
支持
反对
使用道具
举报
显身卡
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
楼主
|
发表于 2009-6-4 20:14:13
|
显示全部楼层
我觉得ChangeLog似乎有个连续性的问题,要是我隔了一段时间再更新,还要去考虑上次更新是什么时候,才能知道究竟要截取changelog到哪一段为止。而FILE_LIST没有这个问题,不用考虑自己的机器究竟上次是什么时候更新过。
回复
支持
反对
使用道具
举报
显身卡
hj_18
hj_18
当前离线
积分
947
IP卡
狗仔卡
楼主
|
发表于 2009-6-4 20:30:45
|
显示全部楼层
有了下载好的服务器上的列表,我开始考虑要先从中去掉一些东西,比如kde,我使用的是xfce4。比如内核,我是一向自己编译的,emacd,我喜欢cvs的版本,但是swaret在检查依赖性的时候建议我下载的一些包,我还是把他保留在列表中,我管这叫“除外的例外”。脚本的第二部分,就在过滤这东西,也许搞个表格什么的到运行时读进去比较好,但我管他呢,够用就好。目前是测试阶段,程序逻辑简单胜过代码华丽。
保留一下包的分类目录有利于创建下载列表啊。
回复
支持
反对
使用道具
举报
显身卡
ginkgo
ginkgo
当前离线
积分
714
IP卡
狗仔卡
发表于 2009-6-4 20:55:19
|
显示全部楼层
如果是在linux做的,按我的做法,很简单。不需要用到perl这个重量级武器。
主要是有个CHECKSUMS.MD5, 用
md5sum -c CHECKSUMS.MD5 > log
sed -i -e "/OK/d" log
再继续处理一下就好。
要更新的时候用wget 下载 CHECKSUMS.MD5,可以很简单的搞定。
这个样子可以避免有的时候,有包添加或删除的时候 tagfile maketag maketag.ez 文件有变化,但是从filelist中看不出来。
不过最省事的方法是用rsync
回复
支持
反对
使用道具
举报
显身卡
下一页 »
1
2
3
/ 3 页
下一页
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表