[新坑]openSUSE diagnose

程序开发,脚本,各类开发工具,程序语言讨论

版主: *sake

[新坑]openSUSE diagnose

#1  marguerite » 周五 12月 23日, 2016年 11:11 am

嗯,想把一些想法实现了...目前主要有以下三个:

1. installed packages,instdpkg 想要解决这么一个情境:我就更新了一下,就不能用了。我也不知道/忘了更新过什么。其实 zypper 的 log 一直都存着,只是许多人不会看(能这么提问自然不会看日志的居多)。

主要结构就是一个 filter + parser,按日期和时间把那次操作安装的包筛选出来,然后用漂亮的格式显示在终端上面。结合下面要说一个想法到时甚至能把文件变动都找出来。

这样不但方便了用户(提供信息更加靠谱),也方便了帮忙的人(更稳了,也不用肉眼去筛日志了)。

2. packman switcher,pkmswch 想要解决的情境是:我把解码器包切到 packman 源了,但是可能没有切换完全,造成比如之前解决过的一个问题那样,ffmpeg 能剪切视频但是因为用的 oss 的 libavformat57 导致不能封装成 mp4。这样的问题很难调试,尤其在用户言之凿凿地告诉你他用的就是 packman 的包时。一个 pkmswch 甩过去,全知道了。

做起来也挺方便的,就是把 oss 里对应包的版本找出来,只要 release number 一样就可以判断是同一个包啦(在 packman 编译和 obs 编译出的包的 release number 鲜有相同)

3. tw-wayback,wayback 想要解决的事情就是,给 openSUSE_Tumbleweed 加一个 rollback machine。但要足够简单,像 Arch Linux Archive 那样的是不行的,因为第一没有服务器,第二运维的工作量太大。

目前的想法是做一个在服务区和本地都能跑的。目标是在本地存储的东西尽量少。想法是先存一下 tumbleweed 的 metadata,里面包括了那个基准版本的源里所有软件的版本号,下次 tw 更新时(这个没必要做 watchdog,因为用户自行运行的话,只需要现在所用系统的关键软件的版本号,也就是说,他升级完了自己存一份 metadata 就行了,服务器另当别论),再下一份最新的 metadata,与老的比较,把更新的软件筛出来,然后利用 deltarpm 工具做一个可以用它把新版本降为老版本的差值rpm,保存即可。tw 每次更新都不大,所以存储空间应该也不大。

这样,某个包出问题就可以回退,甚至直接回滚到上一个版本的 tumbleweed。当然用 snapper 更好一些,可是不是每个人都会用也不是每个人都有 btrfs 分区。


从我的 iPhone 发送,使用 Tapatalk
头像
marguerite
寨主
 
帖子: 3267
注册: 周六 3月 30日, 2013年 12:50 am
Cash on hand: 766.10
Bank: 6,044.70
送出感谢: 24
收到感谢: 340
勋章: 4
I knew SuSE from Day One! (1) Site Admin (1) developer (1)
1310Pro (1)

Re: [新坑]openSUSE diagnose

#2  marguerite » 周六 12月 24日, 2016年 2:28 am

repo 已经建好,就等代码了 :-)

https://github.com/marguerite/diagnose

已经把第一个想法实现了,下载即可体验

instdpkg

用起来挺简单的:

代码: 全选
sudo ruby instdpkg.rb -tl


查看你都哪天安装或者卸载软件了.

代码: 全选
sudo ruby instdpkg.rb -d="2016-12-23" -t="02:24:00"


显示那天从那个时间开始到那天结束安装的所有包.-t 选项可以省略,显示全天的包.如果那天你指的是今天的话,-d 选项也可以省略.

结果的显示超漂亮:

代码: 全选
================ Packages altered on 2016-12-22 after 23:26:12 ======================
|  date   |  time  | oper. | name | version | repo |
2016-12-22|23:39:36|install|libavformat57|3.2.2-3.3.x86_64|packman
2016-12-22|23:26:12|install|libgstbasecamerabinsrc-1_0-0|1.10.2-4.7.x86_64|packman
2016-12-22|23:26:12|install|libgstphotography-1_0-0|1.10.2-4.7.x86_64|packman
2016-12-22|23:26:12|install|gstreamer-plugins-ugly|1.10.2-4.2.x86_64|packman
2016-12-22|23:26:13|install|libgstbadvideo-1_0-0|1.10.2-4.7.x86_64|packman
2016-12-22|23:26:13|install|libgstbadaudio-1_0-0|1.10.2-4.7.x86_64|packman
2016-12-22|23:26:13|install|libgstadaptivedemux-1_0-0|1.10.2-4.7.x86_64|packman
2016-12-22|23:26:14|install|gstreamer-plugins-bad|1.10.2-4.7.x86_64|packman


以后如果论坛里哪个用户再说出比如"我不知道我装什么了","我忘了我装什么了",丢出去很 geek.
头像
marguerite
寨主
 
帖子: 3267
注册: 周六 3月 30日, 2013年 12:50 am
Cash on hand: 766.10
Bank: 6,044.70
送出感谢: 24
收到感谢: 340
勋章: 4
I knew SuSE from Day One! (1) Site Admin (1) developer (1)
1310Pro (1)

Re: [新坑]openSUSE diagnose

#3  hounh » 周六 12月 24日, 2016年 9:42 am

:ding
头像
hounh
行走
 
帖子: 140
注册: 周五 5月 16日, 2014年 2:41 pm
Cash on hand: 153.20
送出感谢: 0 次
收到感谢: 4

Re: [新坑]openSUSE diagnose

#4  marguerite » 周日 12月 25日, 2016年 12:26 am

又搞定一个 pkmswitch100

这个工具是 确保把系统包切换成 packman 版本时,切换了所有相关的包,不至于造成一半一半的情况
以后在遇到关于 packman 包的一些诡异问题的时候可以建议用户先跑一下我这个工具,有很大几率解决问题,因为一般来说 repo-oss 和 packman 源不太会出错.

比如一些用户自己安装 ffmpeg,直接 sudo zypper in ffmpeg,那很大可能安装的其实是 repo-oss 里面的阉割版 ffmpeg.
因为无论是你之前安装别的软件,或者是系统自带的软件,都可能依赖了 ffmpeg 的 library 比如 libavcodec57,没加 packman 源之前肯定是用系统包就是那个阉割版咯.
而 zypper/YaST 默认是不允许把已安装的包从一个源中的版本更新到另一个源中的版本的,那么为了保证一套包的连贯性(毕竟 ffmpeg 自身肯定依赖了它自己的 library),
ffmpeg 也只能给你装系统版本的了;或者只把 ffmpeg 本身装了 packman 的,因为已安装包默认不允许换源,自动解决器只能做这样的处理.

用 YaST 装一般不会造成上面的问题,因为有版本选项卡可以给你选,但产生了另一个问题,就是用户可能只把 ffmpeg 自身的版本切到了 packman,
而其它已安装的 library 没有去管它.

这个的目的就是为了解决以上那些也可以说是粗心,不了解,也可以说是 openSUSE 下比较特殊的常见问题.

需要注意的是: 这个工具只会处理你已经安装了的包.如果不是 packman 的版本,就提示;如果是 packman 的版本,但不是最新的,也会提示.所以可以作为一个更新助手,但不能作为一个初装工具.
初装工具我后续会做出来.

提示是这样的:

代码: 全选
======================= Packages not from Packman =========================
libavformat57

FIX: Run 'sudo zypper install libavformat57-3.2.2-3.4.x86_64'.
======================= Packman Packages need updates =====================
libavutil55
ffmpeg
libavfilter6
libpostproc54
libavcodec57
libswresample2
libswscale4
vlc-lang
gstreamer-plugins-ugly-orig-addon
libavdevice57
libavresample3

FIX: Run 'sudo zypper up libavutil55 ffmpeg libavfilter6 libpostproc54 libavcodec57 libswresample2 libswscale4 vlc-lang gstreamer-plugins-ugly-orig-addon libavdevice57 libavresample3'.


使用方法:

0. 你的 packman 源的名字必须叫 "packman".我知道这个注意事项有点傻,但确实是有一些新用户手动添加源的时候会把它命名成其它奇奇怪怪的.
1. 运行一下 "sudo zypper ref" 刷新源 .保证源的 metadata 是最新的.不是最新的也能查出来是不是 packman 包,但提供的解决方案里面的版本号就不准了.
2.在终端运行 "ruby pkmswitch100.rb"
头像
marguerite
寨主
 
帖子: 3267
注册: 周六 3月 30日, 2013年 12:50 am
Cash on hand: 766.10
Bank: 6,044.70
送出感谢: 24
收到感谢: 340
勋章: 4
I knew SuSE from Day One! (1) Site Admin (1) developer (1)
1310Pro (1)

Re: [新坑]openSUSE diagnose

#5  marguerite » 周日 12月 25日, 2016年 10:18 pm

又搞定一个:bstmirror

就像名字说的那样,它会告诉你, 对你来说最快的 openSUSE 和 packman 镜像分别都是什么.

代码: 全选
ruby --version # 看看你系统 ruby 的版本号,比如是 2.2.5p319
sudo zypper in ruby2.2-rubygem-nokogiri # 安装一个库,我用它来过滤网页标签的.
ruby bstmirror.rb -region="Asia" -os=422


region 选项有以下几个值:Africa, Asia, Europe, North America, South America, Oceania.对应的是大洲.

os 选项有以下几个值:tw, 422, 421.相信也不用多解释,就是发行版的版本啊.

还有一个 file 选项,有两个值:quick 和 long,默认是 quick.说白了就是在进行速度测试的时候下载的文件的大小,文件越大测试越接近真实安装软件包时候的情况,当然跑起来等的时间就越长.

得到的结果就很引人入胜了:

代码: 全选
======================= Best openSUSE Mirror ======================
http://mirrors.tuna.tsinghua.edu.cn/opensuse/
======================= Best Packman Mirror =======================
http://mirror.karneval.cz/pub/linux/packman/ (这里就不准了吧,建议多跑几遍,在我这儿大文件其实是华中科大的最快,用小文件测试有其随机性)


再配合我马上就要开发出来的 mirrorswitch 工具,分分钟换最快的源不是梦.

这里需要说的一点是,目前我采用的是相信官方数据的模式.但是其实官方数据对某几个源是失真的,原因不详,比如华中科大的源,在官方的 flag 显示没有 tumbleweed, 42.2 和 42.1.
但是显然有,后面会针对所有 flag 都没有的源加上一个访问测试,防止把真正最快的源遗漏掉.

PS: 华中科大源我也不知道什么原因,估计是主域名禁用了 ping 的缘故.
头像
marguerite
寨主
 
帖子: 3267
注册: 周六 3月 30日, 2013年 12:50 am
Cash on hand: 766.10
Bank: 6,044.70
送出感谢: 24
收到感谢: 340
勋章: 4
I knew SuSE from Day One! (1) Site Admin (1) developer (1)
1310Pro (1)


回到 开发与开发工具

在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客

cron