openKylin论坛

 找回密码

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

本帖最后由 笨鸟弟弟 于 2014-1-2 22:26 编辑

首先说明我这不是胡说,请不要认为我吐槽,这个字眼很难听的我不喜欢,,我认为我在帮助你,,你认为呢???这下面是优客助手的脚本,在250行---258行你是不是忘记敲击几下键盘了,,ubuntukylin的源你添加在主列表里面,那么密匙他会自己飞回来吗??ubuntukylin添加源是一个特出的情况,这我能理解,密匙好像这里没有给他指令啊???
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. ### BEGIN LICENSE

  4. # Copyright (C) 2013 National University of Defense Technology(NUDT) & Kylin Ltd
  5. # This program is free software: you can redistribute it and/or modify it
  6. # under the terms of the GNU General Public License version 3, as published
  7. # by the Free Software Foundation.
  8. #
  9. # This program is distributed in the hope that it will be useful, but
  10. # WITHOUT ANY WARRANTY; without even the implied warranties of
  11. # MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
  12. # PURPOSE.  See the GNU General Public License for more details.
  13. #
  14. # You should have received a copy of the GNU General Public License along
  15. # with this program.  If not, see <http://www.gnu.org/licenses/>.
  16. ### END LICENSE

  17. import apt
  18. import aptsources.sourceslist
  19. import apt.progress.base as apb
  20. #import threading

  21. class FetchProcess(apb.AcquireProgress):
  22.     '''Fetch Process'''
  23.     def __init__(self, sudoDaemon):
  24.         apb.AcquireProgress.__init__(self)
  25.         self.sudoDaemon = sudoDaemon

  26.     def done(self, item):
  27.         print 'all items download finished'
  28.         self.sudoDaemon.software_fetch_signal("down_done", "")

  29.     def fail(self, item):
  30.         print 'download failed'
  31.         self.sudoDaemon.software_fetch_signal("down_fail", "")

  32.     def fetch(self, item):
  33.         print 'one item download finished'
  34.         self.sudoDaemon.software_fetch_signal("down_fetch", "")

  35.     def ims_hit(self, item):
  36.         print 'ims_hit'

  37.     def media_change(self, media, drive):
  38.         print 'media_change'

  39.     def pulse(self, owner):
  40. #                 print 'owner: ', owner
  41. #                 print '############bytes : ', self.current_bytes
  42. #                 print '@@@@@@@@@@@@total : ', self.total_bytes
  43. #                 print '%%%%%%%%%%%%item : ', self.current_items
  44. #                 print '$$$$$$items : ', self.total_items
  45. #                 print 'current_cps: ', self.current_cps
  46. #                 print 'elapsed_time: ', self.elapsed_time
  47. #                 print 'fetched_bytes: ', self.fetched_bytes
  48. #                 print 'last_bytes: ', self.last_bytes
  49.         self.sudoDaemon.software_fetch_signal("down_pulse","download_bytes:" + str(self.current_bytes) + ",total_bytes:" + str(self.total_bytes) + ",download_items:" + str(self.current_items) + ",total_items:" + str(self.total_items))

  50.     def start(self):
  51.         # Reset all our values.
  52.         self.current_bytes = 0.0
  53.         self.current_cps = 0.0
  54.         self.current_items = 0
  55.         self.elapsed_time = 0
  56.         self.fetched_bytes = 0.0
  57.         self.last_bytes = 0.0
  58.         self.total_bytes = 0.0
  59.         self.total_items = 0
  60.         print 'fetch progress start ...'
  61.         self.sudoDaemon.software_fetch_signal("down_start", "")

  62.     def stop(self):
  63.         print 'fetch progress stop ...'
  64.         self.sudoDaemon.software_fetch_signal("down_stop", "")


  65. class AptProcess(apb.InstallProgress):
  66.     '''Apt progress'''
  67.     def __init__(self, sudoDaemon):
  68.         apb.InstallProgress.__init__(self)
  69.         self.sudoDaemon = sudoDaemon

  70.     def conffile(self, current, new):
  71.         print 'there is a conffile question'

  72.     def error(self, pkg, errormsg):
  73.         self.sudoDaemon.software_apt_signal("apt_error", "")

  74.     def start_update(self):
  75.         print 'apt process start work'
  76.         self.sudoDaemon.software_apt_signal("apt_start", "")

  77.     def finish_update(self):
  78.         print 'apt process finished'
  79.         self.sudoDaemon.software_apt_signal("apt_stop", "")

  80.     def status_change(self, pkg, percent, status):
  81.         print str(int(percent)) + "%  status : " + status
  82.         self.sudoDaemon.software_apt_signal("apt_pulse", "percent:" + str(int(percent)) + ",status:" + status)

  83. #class AptDaemon(threading.Thread):
  84. class AptDaemon():
  85.     def __init__(self, sudoDaemon):
  86.         #threading.Thread.__init__(self)
  87.         self.sudoDaemon = sudoDaemon
  88.         self.ca = apt.Cache()
  89.         self.ca.open()
  90. #                 self.pkgNameList = []
  91. #                 for pkg in self.ca:
  92. #                         self.pkgNameList.append(pkg.name)

  93.     # apt-get update
  94.     def apt_get_update(self):
  95.         self.ca.update(fetch_progress=FetchProcess(self.sudoDaemon))

  96.     # apt-get update
  97.     #def apt_get_update(self):
  98.     #    threading.Thread(target=self.apt_get_update_thread, name='AptUpdate').start()

  99.     # get package by pkgName
  100.     def get_pkg_by_name(self, pkgName):
  101.         try:
  102.             return self.ca[pkgName]
  103.         except Exception, e:
  104.             print e
  105.             return "ERROR"

  106.     # install package
  107.     def install_pkg(self, pkgName):
  108.         self.ca.open()
  109.         pkg = self.get_pkg_by_name(pkgName)
  110.         pkg.mark_install()

  111.         try:
  112.             self.ca.commit(FetchProcess(self.sudoDaemon), AptProcess(self.sudoDaemon))
  113.         except Exception, e:
  114.             print e
  115.             print "install err"

  116.     # install package
  117.     #def install_pkg(self, pkgName):
  118.     #    threading.Thread(target=self.install_pkg_thread, args=(pkgName,), name='PkgInstall').start()

  119.     # uninstall package
  120.     def uninstall_pkg(self, pkgName):
  121.         self.ca.open()
  122.         pkg = self.get_pkg_by_name(pkgName)
  123.         pkg.mark_delete()

  124.         try:
  125.             self.ca.commit(None, AptProcess(self.sudoDaemon))
  126.         except Exception, e:
  127.             print e
  128.             print "uninstall err"

  129.     # uninstall package
  130.     #def uninstall_pkg(self, pkgName):
  131.     #    threading.Thread(target=self.uninstall_pkg_thread, args=(pkgName,), name='PkgUninstall').start()

  132.     # update package
  133.     def update_pkg(self, pkgName):
  134.         self.ca.open()
  135.         pkg = self.get_pkg_by_name(pkgName)
  136.         pkg.mark_upgrade()

  137.         try:
  138.             self.ca.commit(FetchProcess(self.sudoDaemon), AptProcess(self.sudoDaemon))
  139.         except Exception, e:
  140.             print e
  141.             print "update err"

  142.     # update package
  143.     #def update_pkg(self, pkgName):
  144.     #    threading.Thread(target=self.update_pkg_thread, args=(pkgName,), name='PkgUpgrade').start()

  145.     # check package status by pkgName, i = installed u = can update n = notinstall
  146.     def check_pkg_status(self, pkgName):
  147.         self.ca.open()
  148.         pkg = self.get_pkg_by_name(pkgName)
  149.         if(pkg == "ERROR"):
  150.             return "ERROR"
  151.         if(pkg.is_installed):
  152.             if(pkg.is_upgradable):
  153.                 return "u"
  154.             else:
  155.                 return "i"
  156.         else:
  157.             return "n"

  158.     # check packages status by pkgNameList, i = installed u = can update n = notinstall
  159.     def check_pkgs_status(self, pkgNameList):
  160.         self.ca.open()
  161.         pkgStatusDict = {}
  162.         for pkgName in pkgNameList:
  163.             pkg = self.get_pkg_by_name(pkgName)
  164.             if(pkg == "ERROR"):
  165.                 continue
  166.             if(pkg.is_installed):
  167.                 if(pkg.is_upgradable):
  168.                     pkgStatusDict[pkgName] = "u"
  169.                 else:
  170.                     pkgStatusDict[pkgName] = "i"
  171.             else:
  172.                 pkgStatusDict[pkgName] = "n"

  173.         return pkgStatusDict

  174.     # check packages status by pkgNameList, i = installed u = can update n = notinstall
  175.     def check_pkgs_status_rtn_list(self, pkgNameList):
  176.         self.ca.open()
  177.         pkgStatusList = []
  178.         for pkgName in pkgNameList:
  179.             pkg = self.get_pkg_by_name(pkgName)
  180.             if(pkg == "ERROR"):
  181.                     continue
  182.             if(pkg.is_installed):
  183.                 if(pkg.is_upgradable):
  184.                     pkgStatusList.append(pkgName + ":u")
  185.                 else:
  186.                     pkgStatusList.append(pkgName + ":i")
  187.             else:
  188.                 pkgStatusList.append(pkgName + ":n")

  189.         self.sudoDaemon.software_check_status_signal(pkgStatusList)
  190.         #return pkgStatusList

  191.     # check packages status by pkgNameList, i = installed u = can update n = notinstall
  192.     #def check_pkgs_status_rtn_list(self, pkgNameList):
  193.     #    threading.Thread(target=self.check_pkgs_status_rtn_list_thread, args=(pkgNameList,), name='PkgStatusList').start()

  194. #         def get_pkgs_name_list(self):
  195. #                 return self.pkgNameList
  196. #
  197. #         def search_pkgs_name(self, pkgName):
  198. #                 if pkgName in self.pkgNameList:
  199. #                         return pkgName
  200. #                 else:
  201. #                         rtns = []
  202. #                         for name in self.pkgNameList:
  203. #                                 if name.find(pkgName) >= 0:
  204. #                                         rtns.append(name)
  205. #                         return rtns

  206.     # get all source item in /etc/apt/sources.list
  207.     def get_sources(self):
  208.         source = aptsources.sourceslist.SourcesList()
  209.         return source.list

  210.     # add ubuntukylin source in /etc/apt/sources.list
  211.     def add_source_ubuntukylin(self):
  212.         source = aptsources.sourceslist.SourcesList()
  213.         for item in source.list:
  214.             if(item.str().find("deb http://archive.ubuntukylin.com/ubuntukylin") != -1):
  215.                 return

  216.         source.add("deb", "http://archive.ubuntukylin.com/ubuntukylin/", "raring main", "")
  217.         source.save()

  218.     # remove ubuntukylin source in /etc/apt/sources.list
  219.     def remove_source_ubuntukylin(self):
  220.         source = aptsources.sourceslist.SourcesList()
  221.         sources = source.list
  222.         for item in sources:
  223.             if(item.str().find("deb http://archive.ubuntukylin.com/ubuntukylin") != -1):
  224.                 source.remove(item)
  225.         source.save()

  226. if __name__ == "__main__":
  227.     ad = AptDaemon(None)

  228. #         print ad.check_pkgs_status(["gedit", "cairo-dock", "unity"])
  229. #        print ad.check_pkgs_status_rtn_list(["gedit", "cairo-dock", "unity", "haha", "hehe"])
  230. #         ad.apt_get_update()
  231.     ad.add_source_ubuntukylin()
  232. #         ad.remove_source_ubuntukylin()

  233.     while True:
  234.         print "\ninput your command: "
  235.         cmd = raw_input()
  236.         if cmd == "l":
  237.             for name in ad.pkgNameList:
  238.                 print name + "\n"
  239.         elif cmd == "i":
  240.             print "input pkgName to install: "
  241.             pkgName = raw_input()
  242.             ad.install_pkg(pkgName)
  243.         elif cmd == "n":
  244.             print "input pkgName to uninstall: "
  245.             pkgName = raw_input()
  246.             ad.uninstall_pkg(pkgName)
  247.         elif cmd == "u":
  248.             print "input pkgName to update: "
  249.             pkgName = raw_input()
  250.             ad.update_pkg(pkgName)
  251.         elif cmd == "c":
  252.             print "input pkgName to check status: "
  253.             pkgName = raw_input()
  254.             print ad.check_pkg_status(pkgName)
  255.         else:
  256.             print "nothing..."

  257. #         print ad.get_pkg_by_name('gedit')
  258.     # pnl = ad.getpkglist()
  259.     # print len(pnl)
  260. #         name1 = ad.search_pkgs_name('wesnoth-1.10-core')
  261. #         print name1
  262.     # print 'aaa' + str(1)
  263. #         ad.install_pkg(name1)
  264. #         ad.uninstall_pkg(name1)
  265.     # p = ad.get_pkg_by_name(name1)
  266.     # print p.id
  267.     # c = AptCache()
  268.     # c.hahaha()
  269.     # print c.hahaha()
  270.     # pkgs = []
  271.     # ca = apt.Cache()
  272.     # i = 0
  273.     # for a in ca:
  274.     #         i += 1
  275.     #         pkgs.append(a.name)
  276.             # print a.name
  277.     # print i
  278.     # nanop = ca['nano']
  279.     # print nanop
  280.     # nanop.mark_install()
  281.     # ca.commit()
复制代码
我要挑毛病挑对了,给我点积分我认钱,微软挖漏洞的无论大小都有奖励的,我不要人民我要麒麟币,还有铮亮的纽扣挂我的头像下面,,

评分

参与人数 1麒麟币 +30 收起 理由
没底的瓶子 + 30 欢迎大家继续监督,这也是开源的好处吧,哈.

查看全部评分

楼主
发表于 2014-1-2 22:24:00
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

沙发还是我自己来占吧,,笨鸟你真是笨鸟,,天下最大的傻瓜,,
沙发
 楼主| 发表于 2014-1-2 22:48:59
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

这个问题已经反馈了,之前youker-assistant添加源用完之后就删除了,不会存在key的问题,但用完删,用的时候又添加影响性能,所以现在的版本就只在启动软件推荐的时候添加一次源,这就导致了key的问题,其实我们有一个专门的key包:http://archive.ubuntukylin.com/u ... _2013.05.14_all.deb, 因为ubuntu的版本制作规定无法默认集成到版本,对于你提的这个问题,如果方便的话你可以到launchpad提交一个关于youker-assistant的bug并将它assigned给kobe,他应该很乐意修复这个bug的
板凳
发表于 2014-1-3 10:06:54
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

本帖最后由 penghuan 于 2014-1-3 10:10 编辑

http://archive.ubuntukylin.com/u ... _2013.05.14_all.deb  这个包的问题也是由于我们的告知不足,使很多UK爱好者不知道,导致他们更新源时出现问题,这个问题在下个版本的youker-assistant中应该会得到修复
地板
发表于 2014-1-3 10:08:28
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

这个问题是之前我回答你的那个关于源的问题有相关性,确实待解决,谢谢。
5#
发表于 2014-1-3 10:13:02
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

penghuan 发表于 2014-1-3 10:06
这个问题已经反馈了,之前youker-assistant添加源用完之后就删除了,不会存在key的问题,但用完删,用的时候 ...

deb文件我当然知道,,其实这是一个简单的小事,作者只要敲击几下键盘,,再也不会有人大呼小叫无法下载,因为没有密匙,,没有恶意,,只是希望他完美,,
6#
 楼主| 发表于 2014-1-3 15:06:29
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

kobe 发表于 2014-1-3 10:13
这个问题是之前我回答你的那个关于源的问题有相关性,确实待解决,谢谢。

这脚本源文件在此,,并不是2楼板凳说的,,添加过密匙,,自己看看有没有添加,,没有,添加的是源,,他应该添加源同时想到密匙问题,地下顺利成长的敲击解决办法,,另外在胡说一句,,密匙制作成deb其实本身就是一个错误,,当没有密匙人们都会用死规定命令去服务器下载,,可是他是一个deb文件格式不对应,,怎么能下载会密匙呢对吗?笨鸟不会不加思考张嘴就说话的,,你们这些人能容忍我胡说吗,,挑毛病要有铁证,而且会跳,,这才是我说的提意见,,另外,你们开发团队,有的个别人很不好,,前几天因为没有密匙问题某人专门出帖子,,用的是gpg --keyserver subkeys.pgp.net --recv
办法,请问这能下载deb吗?既然自己都不知道密匙在何方为什么要出帖子,骗人呢,,我只是气不过才在这里发落,,至于你老哥还是特别谦虚的好学谦谦君子,这点笨鸟认可,,
7#
 楼主| 发表于 2014-1-3 15:23:09
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

本帖最后由 penghuan 于 2014-1-3 15:49 编辑
笨鸟弟弟 发表于 2014-1-3 15:23
这脚本源文件在此,,并不是2楼板凳说的,,添加过密匙,,自己看看有没有添加,,没有,添加的是源,,他 ...

正确的做法是要做成debian包,并将该包默认集成到版本中,不信你可以通过下面命令看看ubuntu的key包
dpkg -l | grep ubuntu-keyring  这个是ubuntu的密钥包

我们之所以没做到那样,因为我们没办法让ubuntukylin-keyring包入ubuntu的仓库,他们不同意,我们就只能把这个包放在ubuntukylin的源里面,只是我们疏忽了一点,需要把这个包的地址同时告知用户,让用户通过浏览器下载安装,这个是我们工作的失误
8#
发表于 2014-1-3 15:48:24
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

另外对于你说的某人发帖说通过命令方式添加密钥,这种做法也是对的,debian包的方式就是对命令的封装,只是我们团队不同的人分工不同,不可能有人对所有的东西都知道,没有人会去骗人的,出现问题我们一般都会有人去寻找解决方法,只是不同的人实现方法不一样,其实都能达到效果。

而且我们有时候也会遇到同样的解决方法对不同的机器得到的结果会不一样,主要是因为不同环境导致的

你也是我们论坛的活跃用户,我有一个建议,就是以后你发现什么问题除了在论坛发帖反馈外,能不能花点时间到launchpad上提交一个bug,因为论坛里面我们不能保证都能看到,毕竟我们那么多开发人员不能都呆在论坛上,而且每个人的分工不同,如果你愿意花点时间到launchpad上提交你发现的bug的话,我想对于我们修复这个bug会更方便,因为你提的bug会有人将这个bug分配给指定的开发人员

我们所有的开发人员是非常欢迎大家提交问题和反馈的,像你今天这个帖子提到的问题,就可以直接到youker-assistant的项目下提交bug,相关的开发人员就会考虑修复方法的
9#
发表于 2014-1-3 16:02:55
回复

使用道具 举报

开发团队的领导笨鸟提个建议你一定要来看 [复制链接]

penghuan 发表于 2014-1-3 16:02
另外对于你说的某人发帖说通过命令方式添加密钥,这种做法也是对的,debian包的方式就是对命令的封装,只是 ...

能把地址连接给我,,我详细的说清楚,,
10#
 楼主| 发表于 2014-1-3 16:15:02
回复

使用道具 举报

openKylin

GMT+8, 2024-5-9 22:13 , Processed in 0.039633 second(s), 19 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表