├── .gitignore ├── LICENSE ├── README.rdoc ├── Rakefile ├── bin ├── slf ├── slfindlinked ├── slfindlinked.sh ├── sli ├── sll ├── slo ├── slp ├── slt └── slu ├── examples ├── before_then.rb ├── list_packages.rb ├── repo.rb ├── repo_difference.rb ├── tags_used.rb └── upgrades.rb ├── lib ├── slackware.rb └── slackware │ ├── args.rb │ ├── changelog.rb │ ├── changelog │ └── rss.rb │ ├── log.rb │ ├── package.rb │ ├── package_bundle.rb │ ├── paths.rb │ ├── repo.rb │ ├── system.rb │ ├── utils.rb │ └── version.rb ├── man ├── man3 │ └── slack-utils.3 └── man8 │ ├── slack-utils.8 │ ├── slf.8 │ ├── sli.8 │ ├── sll.8 │ ├── slo.8 │ ├── slp.8 │ ├── slt.8 │ └── slu.8 ├── setup.rb ├── slack-desc ├── slack-utils.SlackBuild ├── slack-utils.gemspec └── test ├── samples ├── ChangeLog.txt ├── etc │ └── slackware-version ├── slackware-security.eml └── var │ └── log │ ├── packages │ ├── bash-4.1.010-x86_64-1 │ ├── bash-completion-1.3-noarch-4 │ └── kbd-1.15.2-x86_64-1 │ ├── removed_packages │ ├── bash-4.1.007-x86_64-1-upgraded-2011-03-18,09:27:55 │ └── choqok-0.9.90-x86_64-1_SBo │ ├── removed_scripts │ ├── bash-4.1.007-x86_64-1-upgraded-2011-03-18,09:27:55 │ └── choqok-0.9.90-x86_64-1_SBo │ └── scripts │ ├── bash-4.1.010-x86_64-1 │ └── kbd-1.15.2-x86_64-1 ├── test_basic.rb ├── test_changelog.rb ├── test_execution.rb ├── test_package.rb ├── test_paths.rb ├── test_repo.rb ├── test_system.rb └── test_version.rb /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | src/.config 3 | slack-utils*.tar.gz 4 | *~ 5 | tags 6 | .bundle 7 | .project 8 | pkg/ 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 2 | # All rights reserved. 3 | # 4 | # Redistribution and use of this source, with or without modification, is 5 | # permitted provided that the following conditions are met: 6 | # 7 | # 1. Redistributions of this source must retain the above copyright 8 | # notice, this list of conditions and the following disclaimer. 9 | # 10 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 11 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 12 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 13 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 14 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 15 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 16 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 17 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 18 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 19 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 | -------------------------------------------------------------------------------- /README.rdoc: -------------------------------------------------------------------------------- 1 | = slackware utilities 2 | 3 | == Summary 4 | 5 | A handful of commands to quickly/easily access information on the Slackware Linux distribution. 6 | Further, this provides a ruby library for 'slackware'. 7 | 8 | == Description 9 | 10 | slack-utils 11 | 12 | slp - shows installed slackware packages 13 | with no args, it will show all. 14 | or for each arg it will search the package names. 15 | 16 | slf - search installed slackware packages for a file 17 | this expects an arg(s), and will output, in grep fashion 18 | packages matching your search args. 19 | 20 | slt - mtime/install time of slackware packages 21 | with no args, it will show all. 22 | or for each arg it will search the package names. 23 | 24 | sll - list the contents of packages matching the 25 | 26 | slo - find files in /etc/, that have been orphaned and left behind 27 | by unistalled/upgraded packages 28 | 29 | sli - display the package information for matching packages 30 | 31 | slu - display the upgrade history for matching packages 32 | 33 | slfindlinked - finds what is linked to your argument, and it's package 34 | expects 1 argument passed. 35 | 36 | 37 | == Release Notes 38 | 39 | See https://github.com/vbatts/slack-utils/wiki/Release-Notes 40 | 41 | == Installation 42 | 43 | === From git 44 | 45 | >> git clone git://github.com/vbatts/slack-utils.git 46 | >> cd slack-utils 47 | >> make slackpkg 48 | >> sudo upgradepkg --install-new pkg/slack-utils-0.6.2-$ARCH-1_vb.tgz 49 | 50 | === From tar ball 51 | 52 | >> tar xfz slack-utils-0.6.2.tar.gz 53 | >> cd slack-utils-0.6.2 54 | >> ruby setup.rb config --prefix=/usr --mandir=/usr/man 55 | >> ruby setup.rb install 56 | 57 | === From the rubygems repo 58 | 59 | >> sudo gem install slack-utils 60 | 61 | === From the gem 62 | 63 | >> git clone git://github.com/vbatts/slack-utils.git 64 | >> cd slack-utils/src 65 | >> rake gem 66 | >> sudo gem install pkg/slack-utils-$VERSION.gem 67 | 68 | 69 | == Quick Start 70 | 71 | === Using the commands 72 | 73 | See the system manual page slack-utils(8) 74 | 75 | === Using the API / library 76 | 77 | $ irb 78 | >> require 'rubygems' 79 | >> require 'slackware' 80 | >> pkg = Slackware::Packware.new() 81 | >> pkg.name = "hello-kitty" 82 | >> pkg.version = "1.0" 83 | 84 | or 85 | >> require 'rubygems' 86 | >> require 'slackware' 87 | >> tags = Slackware::System.tags_used 88 | => ["SBo","alien","rlw"] 89 | 90 | == Usage 91 | === Show data 92 | 93 | Note: 94 | 95 | ==== Examples 96 | see the exmamples/ files 97 | 98 | == Help 99 | There are many more methods than are documented on this page. Please explore 100 | the RDOC to find more functionality. 101 | 102 | For more complex examples, please see the examples directory 103 | (GEM_ROOT/gems/slack-utils-/examples/). 104 | 105 | You can also contact me for more help or suggestions. 106 | 107 | 108 | == Bugs and such 109 | 110 | Open an "issue" here https://github.com/vbatts/slack-utils/issues 111 | 112 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # To build the gem, from this directory run 2 | # rake gem 3 | 4 | 5 | require 'rake/clean' 6 | require 'rake/testtask' 7 | 8 | def source_version 9 | @source_version ||= begin 10 | $LOAD_PATH.insert(0,File.expand_path('../lib',__FILE__)) 11 | require 'slackware/version' 12 | Slackware::UTILS_VERSION 13 | end 14 | end 15 | 16 | task :default => :test 17 | task :spec => :test 18 | 19 | task :test do 20 | ENV['LANG'] = 'C' 21 | ENV.delete 'LC_CTYPE' 22 | #ENV['ROOT'] = File.expand_path('test/samples',__FILE__) 23 | end 24 | 25 | Rake::TestTask.new do |t| 26 | t.libs << "test" 27 | t.test_files = FileList['test/test*.rb'] 28 | t.verbose = true 29 | end 30 | 31 | # DOCS ============================================================ 32 | desc 'Generate RDoc under doc/' 33 | task 'doc' => ['doc:api'] 34 | task('doc:api') { sh "rdoc -o doc/" } 35 | CLEAN.include 'doc/' 36 | 37 | # PACKAGING ============================================================ 38 | 39 | if defined?(Gem) 40 | # Load the gemspec using the same limitations as github 41 | def spec 42 | require 'rubygems' unless defined? Gem::Specification 43 | @spec ||= eval(File.read('slack-utils.gemspec')) 44 | end 45 | 46 | def package(ext='') 47 | "pkg/slack-utils-#{spec.version}" + ext 48 | end 49 | 50 | def slackpkg() 51 | "pkg/slack-utils-#{spec.version}-#{arch()}-1_vb.tgz" 52 | end 53 | def arch() 54 | unless ENV["ARCH"] 55 | uname = `uname -m`.chomp 56 | case uname 57 | when /i.86/ 58 | "i486" 59 | when /arm.*/ 60 | "arm" 61 | else 62 | uname 63 | end 64 | end 65 | end 66 | 67 | desc 'irb shell with the slackware bits baked in' 68 | task :shell do 69 | sh "irb -I#{Dir.pwd}/lib/ -r slackware" 70 | end 71 | 72 | namespace :slackware do 73 | desc 'Build slackware package' 74 | task :build => slackpkg() 75 | 76 | desc '(re)install the slackware package' 77 | task :install => slackpkg() do 78 | sh "sudo /sbin/upgradepkg " + 79 | "--reinstall --install-new " + 80 | "#{slackpkg()}" 81 | end 82 | end 83 | 84 | desc 'Build packages' 85 | task :package => %w[.gem .tar.gz].map {|e| package(e)} 86 | 87 | desc 'Build gem' 88 | task :gem => package('.gem') 89 | 90 | desc 'Build and install as local gem' 91 | task :install => package('.gem') do 92 | sh "gem install #{package('.gem')}" 93 | end 94 | 95 | directory 'pkg/' 96 | CLOBBER.include('pkg') 97 | 98 | file slackpkg() => package('.tar.gz') do |f| 99 | sh "sudo OUTPUT=#{Dir.pwd}/pkg " + 100 | "VERSION=#{spec.version} " + 101 | "TAG=_vb BUILD=1 " + 102 | "sh slack-utils.SlackBuild" 103 | end 104 | 105 | file package('.gem') => %w[pkg/ slack-utils.gemspec] + spec.files do |f| 106 | sh "gem build slack-utils.gemspec" 107 | mv File.basename(f.name), f.name 108 | end 109 | 110 | file package('.tar.gz') => %w[pkg/] + spec.files do |f| 111 | sh <<-SH 112 | git archive \ 113 | --prefix=slack-utils-#{source_version}/ \ 114 | --format=tar \ 115 | HEAD | gzip > #{f.name} 116 | SH 117 | end 118 | 119 | desc 'Do magic release stuffs' 120 | #task 'release' => ['test', package('.gem')] do 121 | task 'release' => package('.gem') do 122 | tag_vers = source_version.gsub('.','_') 123 | if `git tag`.split.include?(tag_vers) 124 | fail "please update Slackware::UTILS_VERSION, #{source_version} is already released" 125 | end 126 | 127 | #if File.read("CHANGES") =~ /= \d\.\d\.\d . not yet released$/i 128 | #fail 'please update changes first' 129 | #end 130 | 131 | #gem install #{package('.gem')} --local && 132 | sh <<-SH 133 | gem push #{package('.gem')} && 134 | git commit --allow-empty -a -m '#{source_version} release' && 135 | git tag -s #{tag_vers} -m '#{source_version} release' && 136 | git push && (git push slack-utils || true) && 137 | git push --tags && (git push slack-utils --tags || true) 138 | SH 139 | end 140 | end 141 | -------------------------------------------------------------------------------- /bin/slf: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | Search for a file within installed Slackware package's FILE LIST. 31 | Usage: 32 | #{$PROGRAM_NAME} [options] [pkg search flags] 33 | 34 | one or more files must be list 35 | if no search flags, only names, then those only those matching entries are listed 36 | EOS 37 | # This is all the flags we want to use, from Slackware::Args 38 | option_flags = [:color, :case_insensitive, :pkg_name, :pkg_version, 39 | :debug, :pkg_arch, :pkg_build, :pkg_tag] 40 | 41 | slog = Slackware::Log.instance 42 | slog.level = Slackware::Log::WARN 43 | 44 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 45 | 46 | # update level if specified 47 | slog.level = Slackware::Log::DEBUG if options[:debug] 48 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 49 | 50 | if (ARGV.count > 0) 51 | options[:all] = true 52 | elsif (ARGV.count == 0) 53 | slog.warn($PROGRAM_NAME) { "no files provided" } 54 | exit 1 55 | end 56 | 57 | begin 58 | print_package_searched_files(ARGV) 59 | rescue Interrupt 60 | exit 0 61 | rescue Exception => e 62 | slog.warn($PROGRAM_NAME) { e.message } 63 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 64 | exit 1 65 | end 66 | 67 | # vim:sw=2:sts=2:et: 68 | -------------------------------------------------------------------------------- /bin/slfindlinked: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/utils' 26 | require 'slackware/args' 27 | 28 | option_banner = <<-EOS 29 | Attempt to find the files 30 | Usage: 31 | #{$PROGRAM_NAME} [libname or path] 32 | EOS 33 | options = Slackware::Args.parse(ARGV, [], option_banner) 34 | 35 | if (ARGV.count == 0) 36 | $stderr.write("ERROR: a library name is needed to search for\n") 37 | exit(2) 38 | end 39 | 40 | 41 | # XXX needs better boilerplating 42 | print_find_linked(ARGV[0]) 43 | 44 | -------------------------------------------------------------------------------- /bin/slfindlinked.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | if [ -z $1 ] ; then 23 | echo ERROR: please specify a lib name to check for 24 | exit 1 25 | fi 26 | 27 | echo "INFO: have patience ... this is going to take a while ... " >&2 28 | 29 | find /lib /lib64 /usr/lib /usr/lib64 /bin /sbin /usr/bin /usr/sbin -type f | \ 30 | xargs file | \ 31 | grep -E 'ELF.*(executable|shared object)' | \ 32 | cut -d : -f 1 | \ 33 | while read line ; do 34 | if ldd $line 2>&1 | grep -q $1 ; then 35 | echo "$(slf $(echo ${line} | sed -e 's|^/||')) linked to $(ldd $line 2>&1 | grep $1 | awk '{ print $1 }' | tr '\n' ' ' )" 36 | fi 37 | done 38 | -------------------------------------------------------------------------------- /bin/sli: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | List installed Slackware package's information. 31 | Usage: 32 | #{$PROGRAM_NAME} [options] [search flags] [list of names] 33 | 34 | if no flags are used, then all entries are listed 35 | if no search flags, only names, then those only those matching entries are listed 36 | 37 | EOS 38 | # This is all the flags we want to use, from Slackware::Args 39 | option_flags = [:color, :case_insensitive, :pkg_name, :pkg_version, 40 | :debug, :pkg_arch, :pkg_build, :pkg_tag] 41 | 42 | slog = Slackware::Log.instance 43 | slog.level = Slackware::Log::WARN 44 | 45 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 46 | 47 | # update level if specified 48 | slog.level = Slackware::Log::DEBUG if options[:debug] 49 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 50 | 51 | if (ARGV.count > 0) 52 | options[:all] = true 53 | end 54 | 55 | begin 56 | print_packages_description(build_packages(options, ARGV)) 57 | rescue Interrupt 58 | exit 0 59 | rescue Exception => e 60 | slog.warn($PROGRAM_NAME) { e.message } 61 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 62 | exit 1 63 | end 64 | 65 | # vim:sw=2:sts=2:et: 66 | -------------------------------------------------------------------------------- /bin/sll: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | List owned for files for a given Slackware package. 31 | Usage: 32 | #{$PROGRAM_NAME} [search flags] [list of names] 33 | 34 | if no search flags, only names, then those only those matching entries are listed 35 | 36 | EOS 37 | # This is all the flags we want to use, from Slackware::Args 38 | option_flags = [:force_all, :case_insensitive, :pkg_name, :pkg_version, 39 | :debug, :pkg_arch, :pkg_build, :pkg_tag] 40 | 41 | slog = Slackware::Log.instance 42 | slog.level = Slackware::Log::WARN 43 | 44 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 45 | 46 | # update level if specified 47 | slog.level = Slackware::Log::DEBUG if options[:debug] 48 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 49 | 50 | if ((ARGV.count == 0) && 51 | (options[:pkg].nil?) && 52 | (options[:version].nil?) && 53 | (options[:arch].nil?) && 54 | (options[:build].nil?) && 55 | (options[:tag].nil?) && 56 | ! options[:force] ) 57 | $stderr.write("WARNING: If you really want to see *ALL* files, use the --force flag\n") 58 | exit(2) 59 | end 60 | 61 | if (ARGV.count > 0) 62 | options[:all] = true 63 | end 64 | 65 | begin 66 | print_package_file_list(build_packages(options, ARGV)) 67 | rescue Interrupt 68 | exit 0 69 | rescue Exception => e 70 | slog.warn($PROGRAM_NAME) { e.message } 71 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 72 | exit 1 73 | end 74 | 75 | # vim:sw=2:sts=2:et: 76 | -------------------------------------------------------------------------------- /bin/slo: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/args' 27 | require 'slackware/utils' 28 | 29 | slog = Slackware::Log.instance 30 | slog.level = Slackware::Log::WARN 31 | 32 | options = Slackware::Args.parse(ARGV, [:debug]) 33 | slog.debug("options: %s" % options) 34 | 35 | # update level if specified 36 | slog.level = Slackware::Log::DEBUG if options[:debug] 37 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 38 | 39 | begin 40 | print_orphaned_files(find_orphaned_config_files()) 41 | rescue Interrupt 42 | exit 0 43 | rescue Exception => e 44 | slog.warn($PROGRAM_NAME) { e.message } 45 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 46 | exit 1 47 | end 48 | 49 | # vim:sw=2:sts=2:et: 50 | -------------------------------------------------------------------------------- /bin/slp: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | List installed Slackware packages. 31 | Usage: 32 | #{$PROGRAM_NAME} [options] [search flags] [list of names] 33 | 34 | if no flags are used, then all entries are listed 35 | if no search flags, only names, then those only those matching entries are listed 36 | 37 | EOS 38 | # This is all the flags we want to use, from Slackware::Args 39 | option_flags = [:color, :case_insensitive, :pkg_name, 40 | :debug, :pkg_version, :pkg_arch, :pkg_build, :pkg_tag] 41 | 42 | slog = Slackware::Log.instance 43 | slog.level = Slackware::Log::WARN 44 | 45 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 46 | 47 | # update level if specified 48 | slog.level = Slackware::Log::DEBUG if options[:debug] 49 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 50 | 51 | if (ARGV.count > 0) 52 | options[:all] = true 53 | end 54 | 55 | begin 56 | print_packages(build_packages(options, ARGV)) 57 | rescue Interrupt 58 | exit 0 59 | rescue Exception => e 60 | slog.warn($PROGRAM_NAME) { e.message } 61 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 62 | exit 1 63 | end 64 | 65 | # vim:sw=2:sts=2:et: 66 | -------------------------------------------------------------------------------- /bin/slt: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | List (and search) installed Slackware package's times. 31 | Usage: 32 | #{$PROGRAM_NAME} [pkg search flags] [list of names] 33 | 34 | if no flags are used, then all entries are listed 35 | if no search flags, only names, then those only those matching entries are listed 36 | 37 | EOS 38 | # This is all the flags we want to use, from Slackware::Args 39 | option_flags = [:color, :epoch, :case_insensitive, :pkg_name, :pkg_version, 40 | :reverse, :debug, :pkg_arch, :pkg_build, :pkg_tag] 41 | 42 | slog = Slackware::Log.instance 43 | slog.level = Slackware::Log::WARN 44 | 45 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 46 | 47 | # update level if specified 48 | slog.level = Slackware::Log::DEBUG if options[:debug] 49 | slog.debug($PROGRAM_NAME) { "option_flags: #{option_flags} " } 50 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 51 | 52 | # handing through that we are gathering times 53 | options[:time] = true 54 | 55 | if (ARGV.count > 0) 56 | options[:all] = true 57 | end 58 | 59 | begin 60 | print_packages_times(build_packages(options, ARGV), options[:epoch], options[:reverse]) 61 | rescue Interrupt 62 | exit 0 63 | rescue Exception => e 64 | slog.warn($PROGRAM_NAME) { e.message } 65 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 66 | exit 1 67 | end 68 | 69 | # vim:sw=2:sts=2:et: 70 | -------------------------------------------------------------------------------- /bin/slu: -------------------------------------------------------------------------------- 1 | #! /usr/bin/ruby 2 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 3 | # All rights reserved. 4 | # 5 | # Redistribution and use of this source, with or without modification, is 6 | # permitted provided that the following conditions are met: 7 | # 8 | # 1. Redistributions of this source must retain the above copyright 9 | # notice, this list of conditions and the following disclaimer. 10 | # 11 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 12 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 13 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 14 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 15 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 16 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 17 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 18 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 19 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 20 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 21 | 22 | $PROGRAM_NAME = File.basename(__FILE__) 23 | 24 | require 'rubygems' 25 | require 'slackware/log' 26 | require 'slackware/utils' 27 | require 'slackware/args' 28 | 29 | option_banner = <<-EOS 30 | List upgrades for specifed Slackware packages. 31 | Usage: 32 | #{$PROGRAM_NAME} [options] [search flags] [list of pkg names] 33 | 34 | EOS 35 | # This is all the flags we want to use, from Slackware::Args 36 | option_flags = [:case_insensitive, :pkg_name, :debug, :pkg_tag, :force_all] 37 | 38 | slog = Slackware::Log.instance 39 | slog.level = Slackware::Log::WARN 40 | 41 | options = Slackware::Args.parse(ARGV, option_flags, option_banner) 42 | 43 | # update level if specified 44 | slog.level = Slackware::Log::DEBUG if options[:debug] 45 | slog.debug($PROGRAM_NAME) {"options: %s" % options} 46 | 47 | if ((ARGV.count == 0) && 48 | (options[:pkg].nil?) && 49 | (options[:tag].nil?) && 50 | not(options[:force]) ) 51 | $stderr.write("WARNING: If you really want to see *ALL* files, use the --force flag\n") 52 | exit(2) 53 | end 54 | 55 | if (ARGV.count > 0) 56 | options[:all] = true 57 | end 58 | 59 | begin 60 | print_upgrades(build_packages(options, ARGV)) 61 | rescue Interrupt 62 | exit 0 63 | rescue Exception => e 64 | slog.warn($PROGRAM_NAME) { e.message } 65 | slog.debug($PROGRAM_NAME) { e.class.to_s + "\n" + e.backtrace.join("\n") } 66 | exit 1 67 | end 68 | 69 | # vim:sw=2:sts=2:et: 70 | -------------------------------------------------------------------------------- /examples/before_then.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | $: << File.absolute_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware' 7 | 8 | t = Time.now - 10000877 9 | s = Slackware::System.installed_before(t) 10 | 11 | puts "#{s.count} packages installed before #{t}" 12 | # vim : set sw=2 sts=2 et : 13 | -------------------------------------------------------------------------------- /examples/list_packages.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | $: << File.absolute_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware' 7 | 8 | puts "tags used are: " + Slackware::System.tags_used.to_s 9 | 10 | pkg = "kernel-modules" 11 | if (Slackware::System.is_upgraded?(pkg)) 12 | puts pkg + " has been upgraded before" 13 | Slackware::System.upgrades(pkg).each {|up| printf("%s upgraded from version %s\n", up.upgrade_time, up.version) } 14 | else 15 | puts pkg + " apparently has not ever been upgraded before" 16 | end 17 | 18 | # vim : set sw=2 sts=2 et : 19 | -------------------------------------------------------------------------------- /examples/repo.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | $: << File.absolute_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware/repo' 7 | 8 | sr = Slackware::Repo.new 9 | sr.version = "current" 10 | 11 | sr.set_packages 12 | 13 | printf("%d packages in the slackware%s-%s repo\n", sr.packages.count, sr.arch, sr.version) 14 | 15 | # vim : set sw=2 sts=2 et : 16 | -------------------------------------------------------------------------------- /examples/repo_difference.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | $: << File.absolute_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware' 7 | 8 | pkgs = Slackware::System.installed_packages.map {|p| p.name } 9 | sr = Slackware::Repo.new 10 | sr.version = "current" 11 | c = sr.get_changelog 12 | 13 | printf("difference between current installation and %s...\n", sr.version) 14 | printf("%d should be removed\n", (pkgs & c[:removed].map {|p| p.name }).count) 15 | #p pkgs & c[:removed].map {|p| p.name } 16 | ca = c[:added].map {|p| p.name } 17 | printf("%d should be added\n", (ca.count - (pkgs & ca).count)) 18 | # vim : set sw=2 sts=2 et : 19 | -------------------------------------------------------------------------------- /examples/tags_used.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby -w 2 | 3 | $: << File.expand_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware' 7 | 8 | p Slackware::System.tags_used 9 | # vim : set sw=2 sts=2 et : 10 | -------------------------------------------------------------------------------- /examples/upgrades.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/ruby 2 | 3 | $: << File.absolute_path(File.dirname(__FILE__) + "/../lib") 4 | 5 | require 'rubygems' 6 | require 'slackware' 7 | 8 | sr = Slackware::Repo.new 9 | sr.version = "current" 10 | sr.set_changelog 11 | 12 | pkgs = Slackware::System.installed_packages 13 | 14 | @@upgrades = [] 15 | sr.changelog[:rebuilt].concat(sr.changelog[:upgraded]).each {|pkg| 16 | i_pkg = pkgs.map {|item| item if item.name == pkg.name }.compact.first 17 | if i_pkg.nil? 18 | next 19 | end 20 | if pkg.version < i_pkg.version 21 | next 22 | end 23 | if pkg.fullname > i_pkg.fullname 24 | @@upgrades << pkg 25 | end 26 | } 27 | 28 | p @@upgrades 29 | # vim : set sw=2 sts=2 et : 30 | -------------------------------------------------------------------------------- /lib/slackware.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'slackware/log' 24 | require 'slackware/version' 25 | require 'slackware/package' 26 | require 'slackware/system' 27 | require 'slackware/changelog' 28 | require 'slackware/repo' 29 | require 'slackware/package_bundle' 30 | 31 | # vim : set sw=2 sts=2 et : 32 | -------------------------------------------------------------------------------- /lib/slackware/args.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'optparse' 24 | 25 | module Slackware 26 | # Args is the unified arguement parser for the slack-utils utilities. 27 | class Args 28 | def self.parse(args,flags = nil, banner = nil) 29 | flags = [] unless flags.is_a?(Array) 30 | options = {} 31 | 32 | opts = OptionParser.new do |opts| 33 | if banner 34 | opts.banner = banner 35 | end 36 | if flags.include?(:color) 37 | opts.on("-c", "--color", "Colorize output") do |o| 38 | options[:color] = o 39 | end 40 | end 41 | if flags.include?(:reverse) 42 | opts.on("-r", "--reverse", "Reverse the output") do |o| 43 | options[:reverse] = o 44 | end 45 | end 46 | if flags.include?(:epoch) 47 | opts.on("-e", "--epoch", "Print the time stamp in seconds since 1970-01-01 00:00:00 UTC ") do |o| 48 | options[:epoch] = o 49 | end 50 | end 51 | if flags.include?(:pkg_name) 52 | opts.on("-p", "--pkg [NAME]", "Package PKGNAME (loose match)") do |o| 53 | options[:pkg] = o 54 | end 55 | end 56 | if flags.include?(:pkg_version) 57 | opts.on("-V", "--Version [VERSION]", "Package VERSION (loose match)") do |o| 58 | options[:version] = o 59 | end 60 | end 61 | if flags.include?(:pkg_arch) 62 | opts.on("-a", "--arch [ARCH]", "Package ARCH (exact match)") do |o| 63 | options[:arch] = o 64 | end 65 | end 66 | if flags.include?(:pkg_build) 67 | opts.on("-b", "--build [BUILD]", "Package BUILD (exact match)") do |o| 68 | options[:build] = o 69 | end 70 | end 71 | if flags.include?(:pkg_tag) 72 | opts.on("-t", "--tag [TAG]", "Package TAG (loose match)") do |o| 73 | options[:tag] = o 74 | end 75 | end 76 | if flags.include?(:case_insensitive) 77 | opts.on("-i", "When searching, do a case insensitive match") do |o| 78 | options[:case_insensitive] = o 79 | end 80 | end 81 | if flags.include?(:force_all) 82 | opts.on("-f", "--force", "force me to show all files") do |o| 83 | options[:force] = o 84 | end 85 | end 86 | if flags.include?(:debug) 87 | opts.on("-D", "--debug", "show debugging output") do |o| 88 | options[:debug] = o 89 | end 90 | end 91 | 92 | opts.on("-v", "--version", "Display version of this software") do |o| 93 | printf("slack-utils version: %s, Slackware version: %s\n", 94 | Slackware::UTILS_VERSION, 95 | Slackware::System.version 96 | ) 97 | exit(0) 98 | end 99 | end 100 | 101 | begin 102 | opts.parse! 103 | return options 104 | rescue OptionParser::InvalidOption => ex 105 | $stderr.write("ERROR: #{e.message}, see --help\n") 106 | exit(1) 107 | end 108 | end 109 | end 110 | end 111 | # vim : set sw=2 sts=2 et : 112 | -------------------------------------------------------------------------------- /lib/slackware/changelog.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'slackware/package' 24 | require 'date' 25 | require 'time' 26 | require 'stringio' 27 | 28 | module Slackware 29 | # The class for parsing a Slackware standard ChangeLog.txt 30 | class ChangeLog 31 | 32 | # yanked from +Date+ 33 | ABBR_DAYNAMES = %w(Sun Mon Tue Wed Thu Fri Sat) 34 | ABBR_MONTHNAMES = %w(Jan Feb Mar Apr May Jun 35 | Jul Aug Sep Oct Nov Dec) 36 | 37 | # Compiling a fat regex to find the date entries 38 | re_daynames = Regexp.new(ABBR_DAYNAMES.join('|')) 39 | re_monthnames = Regexp.new(ABBR_MONTHNAMES.join('|')) 40 | RE_DATE = /^(#{re_daynames}\s+#{re_monthnames}\s+\d+\s+\d{2}:\d{2}:\d{2}\s\w+\s+\d+)$/ 41 | 42 | # This break has been the same as long as I can find 43 | RE_CHANGELOG_BREAK = /^\+--------------------------\+$/ 44 | 45 | # The regular entry, accounting for usb-and-pxe-installers directory, 46 | # and notes after the action 47 | re_package_entry0 = /^(([\w+-]+).*\/.*):\s+(\w+).*\.?$/ 48 | # Some didn't have an action after the name 49 | re_package_entry1 = /^(([\w+-]+).*\/.*):/ 50 | # and some didn't have the ':' or an action 51 | re_package_entry2 = /^(([\w+-]+).*\/.*\.t[gbx]z)/ 52 | # combine them 53 | RE_PACKAGE_ENTRY = Regexp.union(re_package_entry0, re_package_entry1, re_package_entry2) 54 | 55 | # (* Security fix *) 56 | RE_SECURITY_FIX = /\(\*\s+security\s+fix\s+\*\)/i 57 | 58 | # for hacks sake, make these usbable elsewhere 59 | def self::re_date ; RE_DATE ; end 60 | def self::re_changelog_break ; RE_CHANGELOG_BREAK ; end 61 | def self::re_package_entry ; RE_PACKAGE_ENTRY ; end 62 | def self::re_security_fix ; RE_SECURITY_FIX ; end 63 | 64 | # A changeset, which should consist of entries of changes and/or notes 65 | # regarding the updates 66 | class Update 67 | # FIXME this class needs more proper value setting 68 | def initialize(date = nil, 69 | notes = "", 70 | entries = Array.new, 71 | changelog = nil ) 72 | @date = date 73 | @notes = notes 74 | @entries = entries 75 | @changelog = changelog 76 | end 77 | def date; @date; end 78 | def notes; @notes; end 79 | def entries; @entries; end 80 | def security; @entries.select {|e| e if e.security }; end 81 | def security?; @entries.select {|e| e.security }.first; end 82 | 83 | def date=(timestamp) 84 | if (timestamp.is_a?(Time)) 85 | @date = timestamp 86 | elsif (timestamp.is_a?(Date)) 87 | @date = timestamp.to_time 88 | else 89 | @date = Time.parse(timestamp) 90 | end 91 | end 92 | def notes=(text); @notes = text; end 93 | def changelog=(changelog); @changelog = changelog if changelog.is_a?(Slackware::ChangeLog); end 94 | end 95 | 96 | # The class for each item in a change set 97 | class Entry 98 | def initialize(package = nil, 99 | section = nil, 100 | action = nil, 101 | notes = "", 102 | security = false, 103 | update = nil) 104 | @package = package 105 | @section = section 106 | @action = action 107 | @notes = notes.is_a?(String) ? notes : "" 108 | @security = security == true 109 | @update = update 110 | end 111 | 112 | def package; @package; end 113 | def section; @section; end 114 | def action; @action; end 115 | def notes; @notes; end 116 | def security; @security; end 117 | def date; @update ? @update.date: nil;end 118 | 119 | def package=(package_name); @package = package_name ; end 120 | def section=(section_name); @section = section_name ; end 121 | def action=(action_name); @action = action_name ; end 122 | def update=(update); @update = update if update.is_a?(Slackware::ChangeLog::Update) ; end 123 | def notes=(notes_txt) 124 | @notes = notes_txt.is_a?(String) ? notes_txt : "" 125 | end 126 | def security=(bool) 127 | @security = bool == true 128 | end 129 | end 130 | 131 | def initialize(file = nil) 132 | @file = file 133 | @strio = StringIO.new 134 | @updates = Array.new 135 | end 136 | 137 | def file; @file; end 138 | def updates; @updates; end 139 | 140 | # Returns the latest update in the set 141 | def latest 142 | sort().last 143 | end 144 | def sort 145 | @updates.sort {|x,y| x.date <=> y.date } 146 | end 147 | 148 | # All entries in this Slackware::ChangeLog 149 | # 150 | # Returns an Array of Slackware::ChangeLog::Entry 151 | def entries 152 | @updates.map {|u| u.entries.map {|e| e } }.flatten 153 | end 154 | 155 | # All security in this Slackware::ChangeLog 156 | # 157 | # Returns an Array of Slackware::ChangeLog::Entry 158 | def security 159 | @updates.map {|u| u.entries.select {|e| e if e.security } }.flatten 160 | end 161 | 162 | # All packages removed in this Slackware::ChangeLog 163 | # 164 | # Returns an Array of Slackware::ChangeLog::Entry 165 | def pkgs_removed 166 | @updates.map {|u| u.entries.select {|e| e if e.action == "Removed" } }.flatten 167 | end 168 | 169 | # All packages added in this Slackware::ChangeLog 170 | # 171 | # Returns an Array of Slackware::ChangeLog::Entry 172 | def pkgs_added 173 | @updates.map {|u| u.entries.select {|e| e if e.action == "Added" } }.flatten 174 | end 175 | 176 | # All packages upgraded in this Slackware::ChangeLog 177 | # 178 | # Returns an Array of Slackware::ChangeLog::Entry 179 | def pkgs_upgraded 180 | @updates.map {|u| u.entries.select {|e| e if e.action == "Upgraded" } }.flatten 181 | end 182 | 183 | # All packages rebuilt in this Slackware::ChangeLog 184 | # 185 | # Returns an Array of Slackware::ChangeLog::Entry 186 | def pkgs_rebuilt 187 | @updates.map {|u| u.entries.select {|e| e if e.action == "Rebuilt" } }.flatten 188 | end 189 | def parse(opts = {:file => nil, :data => nil}) 190 | if not(opts[:file].nil?) 191 | @updates = parse_this_file(opts[:file]).updates 192 | elsif not(@file.nil?) 193 | @updates = parse_this_file(@file).updates 194 | end 195 | return self 196 | end 197 | 198 | # Class method 199 | class << self 200 | def parse(file) 201 | cl = ChangeLog.new(file) 202 | return cl.parse() 203 | end 204 | alias_method :open, :parse 205 | end 206 | 207 | def inspect 208 | "#<%s:0x%x @file=%s, %d @updates, %d @entries>" % [self.class.name, self.object_id.abs, self.file || '""', self.updates.count || 0, self.entries.count || 0] 209 | end 210 | 211 | protected 212 | # Parse order is something like: 213 | # * if its' a date match, store the date 214 | # * take change notes until 215 | # * package match on name and action 216 | # * set @security if present 217 | # * take packge notes until 218 | # * next package or entry separator 219 | # * separator creates next change entry 220 | def parse_this_file(file) 221 | f_handle = "" 222 | if file.is_a?(File) 223 | f_handle = file 224 | elsif file.is_a?(String) 225 | if File.exist?(File.expand_path(file)) 226 | f_handle = File.open(File.expand_path(file)) 227 | else 228 | raise StandardError.new("file not found\n") 229 | end 230 | else 231 | raise StandardError.new("file not found\n") 232 | end 233 | 234 | # Start our changelog 235 | changelog = ChangeLog.new(f_handle) 236 | f_handle.each do |line| 237 | if (line =~ RE_DATE) 238 | update = Update.new(Time.parse($1)) 239 | 240 | # Tying this Slackware::ChangeLog::Update to it's Slackware::ChangeLog parent 241 | update.changelog = changelog 242 | while true 243 | if (f_handle.eof?) 244 | break 245 | end 246 | 247 | # take the next line 248 | u_line = f_handle.readline 249 | if (u_line =~ RE_CHANGELOG_BREAK) 250 | break 251 | end 252 | 253 | # the intimate iteration 254 | # Match is more expensive than =~, 255 | # but ruby-1.8.x is lossing the matched values down below 256 | # so this works on both ... 257 | if (match = RE_PACKAGE_ENTRY.match(u_line)) 258 | u_entry = Entry.new() 259 | 260 | # tying this entry to it's Slackware::ChangeLog::Update parent 261 | u_entry.update = update 262 | 263 | # This silly iteration catches the different cases of 264 | # which package line, matches which Regexp. WIN 265 | if match[1].nil? 266 | if match[4].nil? 267 | u_entry.package = match[6] unless match[6].nil? 268 | else 269 | u_entry.package = match[4] 270 | end 271 | else 272 | u_entry.package = match[1] 273 | end 274 | if u_entry.package.include?("/") 275 | u_entry.package = u_entry.package.split("/")[-1] 276 | end 277 | if match[2].nil? 278 | if match[5].nil? 279 | u_entry.section = match[7] unless match[7].nil? 280 | else 281 | u_entry.section = match[5] 282 | end 283 | else 284 | u_entry.section = match[2] 285 | end 286 | # set the action for the item, if it's present 287 | u_entry.action = match[3] unless match[3].nil? 288 | 289 | # Add this entry to the stack 290 | update.entries << u_entry 291 | else 292 | # if update.entries is empty, then this text is notes 293 | # for the upate, else it is notes, for the entry 294 | if (update.entries.empty?) 295 | update.notes = update.notes + u_line 296 | else 297 | # if this line of the entry security fix, toggle the bool 298 | if (u_line =~ RE_SECURITY_FIX) 299 | update.entries[-1].security = true 300 | end 301 | update.entries[-1].notes = update.entries[-1].notes + u_line 302 | end 303 | end 304 | end 305 | 306 | # Add this update to the stack 307 | changelog.updates << update 308 | end 309 | end 310 | 311 | # Give them their change set 312 | return changelog 313 | end # def self::parse_this_file 314 | 315 | end # class ChangeLog 316 | end # module Slackware 317 | 318 | # vim : set sw=2 sts=2 et : 319 | -------------------------------------------------------------------------------- /lib/slackware/changelog/rss.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'rss/maker' 24 | require 'slackware/changelog' 25 | 26 | module Slackware 27 | class ChangeLog 28 | # or maybe "http://connie.slackware.com/~msimons/slackware/grfx/shared/dobbslack1.jpg" 29 | IMAGE_URL = "http://connie.slackware.com/~msimons/slackware/grfx/shared/bluepiSW.jpg" 30 | # +opts+ can include 31 | # * :arch - basically '64' or '32' 32 | # * :version - 13.1, 13.2, current, etc. 33 | # * :url - the URL web link to the ChangeLog.txt 34 | # * :image_url - the URL for the loge used in the RSS feed 35 | def to_rss(opts = {}) 36 | version = "2.0" # ["0.9", "1.0", "2.0"] 37 | content = RSS::Maker.make(version) do |m| 38 | m.encoding = "iso-8859-1" 39 | if (opts[:title]) 40 | m.channel.title = opts[:title] 41 | else 42 | added_title = "slackware#{opts[:arch]}" 43 | if opts[:version] 44 | added_title += "-#{opts[:version]}" 45 | end 46 | m.channel.title = "#{added_title} ChangeLog.txt" 47 | end 48 | 49 | if (opts[:url]) 50 | m.channel.link = "%s#slackagg" % [opts[:url]] 51 | else 52 | m.channel.link = "http://www.slackware.com/#slackagg" 53 | end 54 | 55 | if (opts[:description]) 56 | m.channel.description = opts[:description] 57 | else 58 | m.channel.description = "a parsed ChangeLog.txt, is an extendable ChangeLog.txt" 59 | end 60 | 61 | if opts[:image_url] 62 | m.channel.logo = opts[:image_url] 63 | else 64 | m.channel.logo = IMAGE_URL 65 | end 66 | 67 | if (opts[:noimage]) 68 | else 69 | image = m.image 70 | if opts[:image_url] 71 | image.url = opts[:image_url] 72 | else 73 | image.url = IMAGE_URL 74 | end 75 | image.title = "Slackware Linux" 76 | image.width = "144" 77 | image.height = "144" 78 | end 79 | 80 | m.items.do_sort = true # sort items by date 81 | 82 | @updates.each {|update| 83 | i = m.items.new_item 84 | # Add a plug to the title of the update, if it includes a security fix 85 | # set this here, so we don't have to .map again down below 86 | security_count = update.security.length 87 | if (security_count > 0) 88 | i.title = "%s (* Security fix *)" % [update.date.utc.to_s] 89 | else 90 | i.title = update.date.utc.to_s 91 | end 92 | if opts[:url] 93 | i.link = "%s#%s" % [opts[:url], update.date.to_i] 94 | else 95 | i.link = "http://slackware.com/#slackagg#%s" % [update.date.to_i] 96 | end 97 | i.date = update.date 98 | 99 | i.description = "" 100 | if (update.entries.count > 0) 101 | if (security_count > 0) 102 | i.description = i.description + "%d new update(s), %d security update(s)\n\n" % [update.entries.count, security_count] 103 | else 104 | i.description = i.description + "%d new update(s)\n\n" % [update.entries.count] 105 | end 106 | end 107 | i.description = i.description + "
\n" 108 | unless (update.notes.empty?) 109 | i.description = i.description + update.notes + "\n\n" 110 | end 111 | if (update.entries.count > 0) 112 | update.entries.each {|entry| 113 | if (entry.notes.empty?) 114 | i.description = i.description + sprintf("%s/%s:\s%s\n", 115 | entry.section, 116 | entry.package, 117 | entry.action) 118 | else 119 | i.description = i.description + sprintf("%s/%s:\s%s\n\s\s%s\n", 120 | entry.section, 121 | entry.package, 122 | entry.action, 123 | entry.notes) 124 | end 125 | } 126 | end 127 | i.description = i.description + "
\n" 128 | #i.description.gsub!(/\n/, "
\n") 129 | } 130 | end 131 | return content 132 | end 133 | end 134 | end 135 | 136 | 137 | 138 | # vim : set sw=2 sts=2 et : 139 | -------------------------------------------------------------------------------- /lib/slackware/log.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2012 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'logger' 24 | require 'singleton' 25 | 26 | module Slackware 27 | # Log is a subclass of Logger, but is implemented as a singleton, 28 | # so it can be used across library in a somewhat unified manner. 29 | # Example: 30 | # require 'slackware/log' 31 | # 32 | # slog = Slackware::Log.instance 33 | # slog.info("LOG ALL THE THINGS!") 34 | # slog.debug('my_app') { ex.backtrace } 35 | # 36 | class Log < Logger 37 | include Singleton 38 | 39 | # Since Singleton does a lazy loader, this will not get initialized 40 | # until it is first used. So it'll be nil, or you can set $logdev early on. 41 | # It defaults to WARN level and STDERR 42 | def initialize(*args) 43 | if $logdev 44 | super($logdev, args) 45 | else 46 | super(STDERR, args) 47 | end 48 | self.level = Logger::ERROR 49 | end 50 | end # class Log 51 | end # module Slackware 52 | 53 | # vim : set sw=2 sts=2 et : 54 | -------------------------------------------------------------------------------- /lib/slackware/package.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'time' 24 | require 'slackware/log' 25 | require 'slackware/paths' 26 | 27 | MyTime = RUBY_VERSION < '1.9'? DateTime : Time 28 | 29 | 30 | module Slackware 31 | class Package 32 | RE_FILE_LIST = /^FILE LIST:/ 33 | RE_COMPRESSED_PACKAGE_SIZE = /^COMPRESSED PACKAGE SIZE:\s+(.*)$/ 34 | RE_UNCOMPRESSED_PACKAGE_SIZE = /^UNCOMPRESSED PACKAGE SIZE:\s+(.*)$/ 35 | RE_PACKAGE_LOCATION = /^PACKAGE LOCATION:\s+(.*)$/ 36 | RE_PACKAGE_DESCRIPTION = /^PACKAGE DESCRIPTION:\s+(.*)$/ 37 | 38 | FMT_UPGRADE_TIME = "%F %H:%M:%S" 39 | 40 | attr_accessor :path, :file, :name, :version, :arch, :build, :tag, :tag_sep, :upgrade_time 41 | #attr_accessor :time, :owned_files 42 | def initialize(name = nil) 43 | self.name = name 44 | end 45 | 46 | # pkg.parse instance method for parsing the package information 47 | def parse(name) 48 | if name.include?("/") 49 | self.path = File.dirname(name) 50 | name = File.basename(name) 51 | end 52 | if (name =~ RE_REMOVED_NAMES) 53 | name = $1 54 | self.upgrade_time = MyTime.strptime($2 + ' ' + $3, fmt=FMT_UPGRADE_TIME) 55 | end 56 | arr = name.split('-') 57 | build = arr.pop 58 | if (build.include?("_")) 59 | self.tag_sep = "_" 60 | self.build = build.split(self.tag_sep)[0] 61 | self.tag = build.split(self.tag_sep)[1..-1].join(self.tag_sep) 62 | elsif (build =~ RE_BUILD_TAG) 63 | self.build = $1 64 | self.tag = $2 65 | else 66 | self.build = build 67 | self.tag = "" 68 | end 69 | self.arch = arr.pop 70 | self.version = arr.pop 71 | self.name = arr.join('-') 72 | end 73 | 74 | # Package.parse class method 75 | def self::parse(name) 76 | p = self.new() 77 | p.parse(name) 78 | return p 79 | end 80 | 81 | # Reassemble the package name as it would be in file form 82 | def fullname 83 | if (self.upgrade_time) 84 | time = self.upgrade_time.strftime("%F,%H:%M:%S") 85 | return [self.name, self.version, self.arch, [self.build, self.tag].join(self.tag_sep), "upgraded", time].join("-") 86 | else 87 | return [self.name, self.version, self.arch, [self.build, self.tag].join(self.tag_sep)].join("-") 88 | end 89 | end 90 | 91 | # Accessor for the PACKAGE DESCRIPTION from the package file 92 | def package_description 93 | return @package_description unless @package_description.nil? 94 | 95 | f = File.open(path() + '/' + self.fullname) 96 | loop do 97 | if (f.readline =~ RE_PACKAGE_DESCRIPTION) 98 | @package_description = f.take_while {|l| 99 | not(l =~ RE_FILE_LIST) 100 | }.map {|l| 101 | l.sub(/^#{self.name}:\s?/, '').chomp 102 | } 103 | return @package_description 104 | end 105 | end 106 | end 107 | 108 | # Setter for the PACKAGE DESCRIPTION, in the event you are parsing a repo file 109 | def package_description=(desc) 110 | @package_description = desc 111 | end 112 | 113 | # Accessor for the PACKAGE LOCATION from the package file 114 | def package_location 115 | return @package_location unless @package_location.nil? 116 | 117 | f = File.open(self.path + '/' + self.fullname) 118 | loop do 119 | if (f.readline =~ RE_PACKAGE_LOCATION) 120 | return @package_location = $1 121 | end 122 | end 123 | end 124 | 125 | # Setter for the PACKAGE LOCATION, in the event you are parsing a repo file 126 | def package_location=(path) 127 | @package_location = path 128 | end 129 | 130 | # Accessor for the UNCOMPRESSED PACKAGE SIZE from the package file 131 | def uncompressed_size 132 | return @uncompressed_size unless @uncompressed_size.nil? 133 | 134 | f = File.open(self.path + '/' + self.fullname) 135 | loop do 136 | if (f.readline =~ RE_UNCOMPRESSED_PACKAGE_SIZE) 137 | return @uncompressed_size = $1 138 | end 139 | end 140 | end 141 | 142 | # Setter for the UNCOMPRESSED PACKAGE SIZE, in the event you are parsing a repo file 143 | def uncompressed_size=(size) 144 | @uncompressed_size = size 145 | end 146 | 147 | # Accessor for the COMPRESSED PACKAGE SIZE from the package file 148 | def compressed_size 149 | return @compressed_size unless @compressed_size.nil? 150 | 151 | f = File.open(self.path + '/' + self.fullname) 152 | loop do 153 | if (f.readline =~ RE_COMPRESSED_PACKAGE_SIZE) 154 | return @compressed_size = $1 155 | end 156 | end 157 | end 158 | 159 | # Setter for the COMPRESSED PACKAGE SIZE, in the event you are parsing a repo file 160 | def compressed_size=(size) 161 | @compressed_size = size 162 | end 163 | 164 | # Set the file list in the package object in memory 165 | def owned_files 166 | @owned_files ||= _owned_files() 167 | end 168 | 169 | # helper for encoding handler in pre-ruby19 170 | def _e(str, enc = "US-ASCII") 171 | if RUBY_VERSION > "1.9" 172 | str.force_encoding(enc) 173 | else 174 | str 175 | end 176 | end 177 | 178 | # Accessor for the FILE LIST from the package file 179 | # unless the :owned_files symbol is populated 180 | def _owned_files 181 | files = [] 182 | File.open(self.path + '/' + self.fullname) do |f| 183 | loop do 184 | break if f.eof? 185 | line = f.readline() 186 | begin 187 | if _e(line) =~ RE_FILE_LIST 188 | f.seek(2, IO::SEEK_CUR) 189 | break 190 | end 191 | rescue ArgumentError 192 | # ArgumentError: invalid byte sequence in US-ASCII 193 | # so dumb, i wish i could determine a better solution for this 194 | true 195 | end 196 | end 197 | begin 198 | files = f.readlines().map {|line| _e(line.rstrip) } 199 | rescue ArgumentError 200 | Log.instance.debug("Slackware::Package") { 201 | "encoding in : " + self.path + '/' + self.fullname 202 | } 203 | end 204 | end 205 | return files 206 | end 207 | 208 | # populates and returns self.time 209 | def time 210 | if (@time.nil? && self.path) 211 | if (File.exist?(self.path + "/" + self.fullname)) 212 | @time = File.mtime(self.path + "/" + self.fullname) 213 | end 214 | elsif (not(self.path) && (@time.nil?)) 215 | if (File.exist?(Paths::installed_packages() + "/" + self.fullname)) 216 | @time = File.mtime(Paths::installed_packages() + "/" + self.fullname) 217 | end 218 | end 219 | return @time 220 | end 221 | 222 | # Fill in the path information 223 | def path 224 | @path ||= Paths::installed_packages() 225 | end 226 | 227 | def to_h 228 | { 229 | "name" => @name, 230 | "version" => @version, 231 | "arch" => @arch, 232 | "build" => @build, 233 | "tag" => @tag, 234 | "tag_sep" => @tag_sep, 235 | "upgrade_time" => @upgrade_time, 236 | "compressed_size" => compressed_size(), 237 | "uncompressed_size" => uncompressed_size(), 238 | "path" => path(), 239 | "time" => time(), 240 | "owned_files" => owned_files(), 241 | } 242 | end 243 | 244 | def inspect 245 | "#<%s:0x%x name=\"%s\" version=\"%s\" arch=\"%s\" build=%s tag=\"%s\">" % [ 246 | self.class.name, 247 | self.object_id, 248 | self.name, 249 | self.version, 250 | self.arch, 251 | self.build, 252 | self.tag 253 | ] 254 | end 255 | 256 | end 257 | 258 | 259 | class Script < Package 260 | attr_accessor :script 261 | 262 | def initialize(name = nil) 263 | self.script = true 264 | super 265 | end 266 | 267 | def parse(name) 268 | super 269 | self.script = true 270 | end 271 | 272 | end 273 | end 274 | 275 | # vim:sw=2:sts=2:et: 276 | -------------------------------------------------------------------------------- /lib/slackware/package_bundle.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | module Slackware 24 | class PackageBundle < Package 25 | attr_accessor :archive 26 | 27 | def initialize(name = nil) 28 | super 29 | end 30 | 31 | def parse(name) 32 | super(name) 33 | if self.build =~ /^(\d+.*)\.(t[gx]z)$/ 34 | self.build = $1 35 | self.archive = $2 36 | elsif self.tag =~ /^(.*)\.(t[gx]z)$/ 37 | self.tag = $1 38 | self.archive = $2 39 | end 40 | end 41 | 42 | def get_file_list 43 | pkg = "%s/%s.%s" % [self.path, self.fullname, self.archive] 44 | return nil unless File.exist?(pkg) 45 | 46 | e_flag = "" 47 | if pkg =~ /txz$/ 48 | e_flag = "J" 49 | elsif pkg =~ /tgz$/ 50 | e_flag = "z" 51 | elsif pkg =~ /tbz$/ 52 | e_flag = "j" 53 | end 54 | IO.popen("tar #{e_flag}wtf #{pkg}") {|f| 55 | f.readlines.map {|l| l.chomp } 56 | } 57 | end 58 | 59 | def read_file(file) 60 | pkg = "%s/%s.%s" % [self.path, self.fullname, self.archive] 61 | return nil unless File.exist?(pkg) 62 | 63 | e_flag = "" 64 | if pkg =~ /txz$/ 65 | e_flag = "J" 66 | elsif pkg =~ /tgz$/ 67 | e_flag = "z" 68 | elsif pkg =~ /tbz$/ 69 | e_flag = "j" 70 | end 71 | IO.popen("tar #{e_flag}xOf #{pkg} #{file}") {|f| f.read } 72 | end 73 | 74 | def inspect 75 | "#<%s:0x%x name=%s version=%s arch=%s build=%s tag=%s archive=%s>" % [ 76 | self.class.name, 77 | self.object_id, 78 | self.name.inspect, 79 | self.version.inspect, 80 | self.arch.inspect, 81 | self.build, 82 | self.tag.inspect, 83 | self.archive.inspect 84 | ] 85 | end 86 | end 87 | end 88 | # vim : set sw=2 sts=2 et : 89 | -------------------------------------------------------------------------------- /lib/slackware/paths.rb: -------------------------------------------------------------------------------- 1 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 2 | # All rights reserved. 3 | # 4 | # Redistribution and use of this source, with or without modification, is 5 | # permitted provided that the following conditions are met: 6 | # 7 | # 1. Redistributions of this source must retain the above copyright 8 | # notice, this list of conditions and the following disclaimer. 9 | # 10 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 11 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 12 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 13 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 14 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 15 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 16 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 17 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 18 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 19 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 | 21 | module Slackware 22 | module Paths 23 | INSTALLED_PACKAGES = "/var/log/packages" 24 | REMOVED_PACKAGES = "/var/log/removed_packages" 25 | INSTALLED_SCRIPTS = "/var/log/scripts" 26 | REMOVED_SCRIPTS = "/var/log/removed_scripts" 27 | VERSION_FILE = "/etc/slackware-version" 28 | 29 | # A helper to return the ROOT directory of the system in question. 30 | # Like pkgtools, if the environment has "ROOT" set, use it, otherwise "/" 31 | def self::root_dir() 32 | return ENV["ROOT"] ? ENV["ROOT"] : "/" 33 | end 34 | 35 | def self::installed_packages(*args) 36 | return File.join(root_dir, INSTALLED_PACKAGES, args) 37 | end 38 | 39 | def self::removed_packages(*args) 40 | return File.join(root_dir, REMOVED_PACKAGES, args) 41 | end 42 | 43 | def self::installed_scripts(*args) 44 | return File.join(root_dir, INSTALLED_SCRIPTS, args) 45 | end 46 | 47 | def self::removed_scripts(*args) 48 | return File.join(root_dir, REMOVED_SCRIPTS, args) 49 | end 50 | 51 | def self::slackware_version() 52 | return File.join(root_dir, VERSION_FILE) 53 | end 54 | end # module Paths 55 | end # module Slackware 56 | 57 | # vim : set sw=2 sts=2 et : 58 | -------------------------------------------------------------------------------- /lib/slackware/repo.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'slackware/package' 24 | require 'slackware/log' 25 | require 'slackware/changelog' 26 | require 'slackware/system' 27 | 28 | require 'net/http' 29 | require 'net/ftp' 30 | require 'rbconfig' 31 | 32 | module Slackware 33 | 34 | # Stub 35 | class Repo 36 | RE_PACKAGE_NAME = /^PACKAGE NAME:\s+(.*)\.t[gbx]z\s*/ 37 | RE_PACKAGE_LOCATION = /^PACKAGE LOCATION:\s+(.*)$/ 38 | RE_COMPRESSED_SIZE = /^PACKAGE SIZE \(compressed\):\s+(.*)$/ 39 | RE_UNCOMPRESSED_SIZE = /^PACKAGE SIZE \(uncompressed\):\s+(.*)$/ 40 | 41 | attr_accessor :proto, :mirror, :path, :version, :arch, :changelog, :packages, :uri 42 | 43 | def initialize(repo = nil) 44 | @packages = nil 45 | if (repo.nil?) 46 | self.proto = "ftp://" 47 | self.mirror = "ftp.osuosl.org" 48 | self.path = "/pub/slackware/" 49 | self.version = begin 50 | v = Slackware::System.version 51 | if v =~ /(\d+)\.(\d+)\.\d+/ 52 | v = $1 + "." + $2 53 | end 54 | v 55 | end 56 | self.arch = RbConfig::CONFIG["arch"] =~ /x86_64/ ? "64" : "" 57 | else 58 | ## TODO do some hot parsing of 'repo' 59 | self.uri = URI.parse(repo) 60 | end 61 | end 62 | 63 | def url 64 | "%s%s%sslackware%s-%s/" % [self.proto, 65 | self.mirror, 66 | self.path, 67 | self.arch, 68 | self.version] 69 | end 70 | 71 | def url=(thisurl) 72 | self.uri = URI.parse(thisurl) 73 | end 74 | 75 | def fetch(file = nil) 76 | #if file.nil? 77 | #url = URI.parse(self.proto + self.mirror + self.path) 78 | #else 79 | #url = URI.parse(self.proto + self.mirror + self.path + file) 80 | #end 81 | if self.proto =~ /ftp/ 82 | ftp = Net::FTP.open(self.mirror) 83 | ftp.login 84 | ftp.chdir(self.path + "slackware" + self.arch + "-" + self.version) 85 | if (file.nil?) 86 | data = ftp.list('*') 87 | else 88 | data = ftp.get(file, nil) 89 | end 90 | ftp.close 91 | return data 92 | elsif self.proto =~ /http/ 93 | # XXX this is not working yet 94 | req = Net::HTTP::Get.new(url.path) 95 | res = Net::HTTP.start(url.host, url.port) {|http| http.request(req) } 96 | return res 97 | elsif self.proto =~ /file/ 98 | if (file.nil?) 99 | return Dir.glob(self.path + "slackware" + self.arch + "-" + self.version + "/*") 100 | else 101 | return File.read(self.path + "slackware" + self.arch + "-" + self.version + "/" + file) 102 | end 103 | else 104 | return nil 105 | end 106 | end 107 | 108 | # Pkg count that _should_ be removed 109 | # pkgs = Slackware::System.installed_packages 110 | # sr = Slackware::Repo.new 111 | # sr.version = "current" 112 | # c = get_changelog 113 | #(pkgs.map {|p| p.fullname } & c[:removed].map {|p| p.fullname }).count 114 | def get_changelog 115 | if (@changelog.nil?) 116 | changelog = {} 117 | changelog_data = fetch("ChangeLog.txt") 118 | return changelog 119 | else 120 | return @changelog 121 | end 122 | end 123 | 124 | def set_changelog 125 | @changelog = get_changelog 126 | return nil 127 | end 128 | 129 | def get_packages 130 | if (@packages.nil?) 131 | pkgs = [] 132 | fetch("PACKAGES.TXT").split(/\n\n/).each {|p_block| 133 | p_block = p_block.split(/\n/).reject {|cell| cell if cell == "" } 134 | if (p_block.shift =~ RE_PACKAGE_NAME) 135 | pkg = Slackware::Package.parse($1) 136 | 137 | p_block.shift =~ RE_PACKAGE_LOCATION 138 | pkg.package_location = $1 139 | 140 | p_block.shift =~ RE_COMPRESSED_SIZE 141 | pkg.compressed_size = $1 142 | 143 | p_block.shift =~ RE_UNCOMPRESSED_SIZE 144 | pkg.uncompressed_size = $1 145 | 146 | # This is the empty PACKAGE DESCRIPTON: tag 147 | p_block.shift 148 | 149 | pkg.package_description = p_block.map {|cell| 150 | cell.sub(/^#{pkg.name}:\s*/, '') 151 | } 152 | 153 | pkgs << pkg 154 | end 155 | } 156 | return pkgs 157 | else 158 | return @packages 159 | end 160 | end 161 | 162 | def set_packages 163 | @packages = get_packages 164 | return @packages.count 165 | end 166 | 167 | end 168 | 169 | 170 | end 171 | 172 | # vim : set sw=2 sts=2 et : 173 | -------------------------------------------------------------------------------- /lib/slackware/system.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 4 | # All rights reserved. 5 | # 6 | # Redistribution and use of this source, with or without modification, is 7 | # permitted provided that the following conditions are met: 8 | # 9 | # 1. Redistributions of this source must retain the above copyright 10 | # notice, this list of conditions and the following disclaimer. 11 | # 12 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 13 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 14 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 15 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 16 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 17 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 18 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 19 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 20 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 21 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 22 | 23 | require 'slackware/version' 24 | require 'slackware/paths' 25 | require 'slackware/package' 26 | require 'slackware/log' 27 | 28 | module Slackware 29 | 30 | RE_REMOVED_NAMES = /^(.*)-upgraded-(\d{4}-\d{2}-\d{2}),(\d{2}:\d{2}:\d{2})$/ 31 | RE_BUILD_TAG = /^([[:digit:]]+)([[:alpha:]]+)$/ 32 | 33 | FMT_UPGRADE_TIME = "%F %H:%M:%S" 34 | 35 | class System 36 | 37 | # A debug log helper 38 | def self::debug(msg) 39 | Slackware::Log.instance.debug(self.name) { msg } 40 | end 41 | 42 | def self::installed_packages 43 | path = Paths::installed_packages("*") 44 | return Dir.glob(path).sort.map {|p| Package.parse(p) } 45 | end 46 | 47 | def self::removed_packages 48 | path = Paths::removed_packages("*") 49 | return Dir.glob(path).sort.map {|p| Package.parse(p) } 50 | end 51 | 52 | def self::installed_scripts 53 | path = Paths::installed_scripts("*") 54 | return Dir.glob(path).sort.map {|s| Script.parse(s) } 55 | end 56 | 57 | def self::removed_scripts 58 | path = Paths::removed_scripts("*") 59 | return Dir.glob(path).sort.map {|s| Script.parse(s) } 60 | end 61 | 62 | def self::tags_used 63 | pkgs = installed_packages() 64 | set = [] 65 | pkgs.map {|p| p.tag }.uniq.each {|tag| 66 | m_set = {} 67 | m_set[:tag] = tag 68 | m_set[:count] = pkgs.select {|p| p.tag == tag }.count 69 | set << m_set 70 | } 71 | return set 72 | end 73 | 74 | def self::with_tag(tag) 75 | return installed_packages().select {|pkg| pkg.tag == tag } 76 | end 77 | 78 | def self::arch_used 79 | return installed_packages().map {|p| p.arch }.uniq 80 | end 81 | 82 | def self::with_arch(arch) 83 | return installed_packages().select {|pkg| pkg.arch == arch } 84 | end 85 | 86 | def self::find_installed(name) 87 | d = Dir.new(Paths::installed_packages()) 88 | return d.select {|p| p.include?(name) }.map {|p| Package.parse(p) } 89 | end 90 | 91 | def self::find_removed(name) 92 | d = Dir.new(Paths::removed_packages()) 93 | return d.select {|p| p.include?(name) }.map {|p| Package.parse(p) } 94 | end 95 | 96 | # Returns a list of the upgrades for a particular package name 97 | # Example: 98 | # Slackware::System.upgrades("xz") 99 | # => [#, 100 | # #] 101 | # Slackware::System.upgrades("fart") 102 | # => [] 103 | def self::upgrades(pkg) 104 | find_removed(pkg).select {|p| (p.name == pkg) && (p.upgrade_time) }.sort {|a,b| a.upgrade_time <=> b.upgrade_time } 105 | end 106 | 107 | # Return an Array of packages, that were installed after provided +time+ 108 | # ("installed" meaning the file's mtime) 109 | def self::installed_after(time) 110 | arr = [] 111 | Dir.new(Paths::installed_packages()).each {|p| 112 | if (File.mtime(Paths::installed_packages(p)) >= time) 113 | pkg = Package.parse(p) 114 | pkg.time 115 | arr << pkg 116 | end 117 | } 118 | return arr 119 | end 120 | 121 | # Return an Array of packages, that were installed before provided +time+ 122 | # ("installed" meaning the file's mtime) 123 | def self::installed_before(time) 124 | arr = [] 125 | Dir.new(Paths::installed_packages()).each {|p| 126 | if (File.mtime(Paths::installed_packages(p)) <= time) 127 | pkg = Package.parse(p) 128 | pkg.time 129 | arr << pkg 130 | end 131 | } 132 | return arr 133 | end 134 | 135 | # Return an Array of packages, that were removed after provided +time+ 136 | def self::removed_after(time) 137 | arr = [] 138 | Dir.new(Paths::removed_packages()).each {|p| 139 | if (Paths::installed_packages(p) =~ RE_REMOVED_NAMES) 140 | if (Time.strptime($2 + ' ' + $3, fmt=FMT_UPGRADE_TIME) >= time) 141 | arr << Package.parse(p) 142 | end 143 | end 144 | } 145 | return arr 146 | end 147 | 148 | # Return an Array of packages, that were removed before provided +time+ 149 | def self::removed_before(time) 150 | arr = [] 151 | Dir.new(Paths::removed_packages()).each {|p| 152 | if (Paths::installed_packages(p) =~ RE_REMOVED_NAMES) 153 | if (Time.strptime($2 + ' ' + $3, fmt=FMT_UPGRADE_TIME) <= time) 154 | arr << Package.parse(p) 155 | end 156 | end 157 | } 158 | return arr 159 | end 160 | 161 | # Check whether a given Slackware::Package has been upgraded before 162 | def self::is_upgraded?(pkg) 163 | if (find_removed(pkg).map {|p| p.name if p.upgrade_time }.include?(pkg) ) 164 | return true 165 | else 166 | return false 167 | end 168 | end 169 | 170 | # Search installation of Slackware::Package's for what owns the questioned file 171 | # Returns an Array, of matching pairs. The pairs are [Slackware::Package, ] 172 | def self::owns_file(file) 173 | pkgs = installed_packages() 174 | debug('owns_file(): pkgs.count => %d' % pkgs.count) 175 | found_files = [] 176 | file = file.sub(/^\//, "") # clean off the leading '/' 177 | re = /#{Regexp.escape(file)}/ 178 | debug('owns_file(): file Regexp => %s' % re.inspect) 179 | pkgs.each {|pkg| 180 | pkg.owned_files().select {|f| 181 | begin 182 | f =~ re 183 | rescue ArgumentError => ex 184 | Log.instance.debug(self.name) { 185 | "encoding mismatch: " + f 186 | } 187 | false # this needs to return false, for the .select 188 | end 189 | }.each do |f| 190 | found_files << [pkg, f] 191 | end 192 | } 193 | return found_files 194 | end 195 | 196 | # Return the version of Slackware Linux currently installed 197 | def self::version 198 | SLACKWARE_VERSION 199 | end 200 | end 201 | 202 | end 203 | 204 | # vim: set sw=2 sts=2 et: 205 | -------------------------------------------------------------------------------- /lib/slackware/utils.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | 3 | # Copyright 2009,2010 Vincent Batts, http://hashbangbash.com/ 4 | # Copyright 2010,2011 Vincent Batts, Vienna, VA, USA 5 | # Copyright 2012 Vincent Batts, Raleigh, NC, USA 6 | # All rights reserved. 7 | # 8 | # Redistribution and use of this source, with or without modification, is 9 | # permitted provided that the following conditions are met: 10 | # 11 | # 1. Redistributions of this source must retain the above copyright 12 | # notice, this list of conditions and the following disclaimer. 13 | # 14 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 15 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 18 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 20 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 21 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 22 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | # started - Fri Oct 9 15:48:43 CDT 2009 26 | # updated for args - Tue Mar 23 14:54:19 CDT 2010 27 | 28 | require 'slackware' 29 | 30 | # Variables 31 | @st = "\033[31;1m" 32 | @en = "\033[0m" 33 | @slog = Slackware::Log.instance 34 | 35 | # This is base builder of the packe list 36 | def build_packages(opts = {}, args = []) 37 | pkgs = Slackware::System.installed_packages 38 | 39 | # separated this little thing out, since it adds a little more time 40 | if (opts[:time]) 41 | pkgs = pkgs.each {|p| p.time } 42 | end 43 | 44 | if (opts[:all]) 45 | if (args.count > 0) 46 | args.each {|arg| 47 | # about 0.012s performance improvement, 48 | # by compiling it here, instead of inside the iteration. 49 | if (opts[:case_insensitive]) 50 | re = /#{arg}/i 51 | else 52 | re = /#{arg}/ 53 | end 54 | 55 | pkgs = pkgs.find_all {|pkg| pkg.fullname =~ re } 56 | } 57 | end 58 | re = nil 59 | end 60 | if (opts[:pkg]) 61 | if (opts[:case_insensitive]) 62 | re = /#{opts[:pkg]}/i 63 | else 64 | re = /#{opts[:pkg]}/ 65 | end 66 | pkgs = pkgs.map {|p| 67 | if p.name =~ re 68 | if (opts[:color]) 69 | p.name = p.name.gsub(re, "#{@st}\\&#{@en}") 70 | end 71 | p 72 | end 73 | }.compact 74 | re = nil 75 | end 76 | if (opts[:Version]) 77 | if (opts[:case_insensitive]) 78 | re = Regexp.new(Regexp.escape(opts[:Version]), Regexp::IGNORECASE) 79 | else 80 | re = Regexp.new(Regexp.escape(opts[:Version])) 81 | end 82 | pkgs = pkgs.map {|p| 83 | if p.version =~ re 84 | if (opts[:color]) 85 | p.version = p.version.gsub(re, "#{@st}\\&#{@en}") 86 | end 87 | p 88 | end 89 | }.compact 90 | re = nil 91 | end 92 | if (opts[:arch]) 93 | if (opts[:case_insensitive]) 94 | re = /#{opts[:arch]}/i 95 | else 96 | re = /#{opts[:arch]}/ 97 | end 98 | pkgs = pkgs.map {|p| 99 | if p.arch =~ re 100 | if (opts[:color]) 101 | p.arch = p.arch.gsub(re, "#{@st}\\&#{@en}") 102 | end 103 | p 104 | end 105 | }.compact 106 | re = nil 107 | end 108 | if (opts[:build]) 109 | if (opts[:case_insensitive]) 110 | re = /#{opts[:build]}/i 111 | else 112 | re = /#{opts[:build]}/ 113 | end 114 | pkgs = pkgs.map {|p| 115 | if p.build =~ re 116 | if (opts[:color]) 117 | p.build = p.build.gsub(re, "#{@st}\\&#{@en}") 118 | end 119 | p 120 | end 121 | }.compact 122 | re = nil 123 | end 124 | if (opts[:tag]) 125 | if (opts[:case_insensitive]) 126 | re = /#{opts[:tag]}/i 127 | else 128 | re = /#{opts[:tag]}/ 129 | end 130 | pkgs = pkgs.map {|p| 131 | if p.tag =~ re 132 | if (opts[:color]) 133 | p.tag = p.tag.gsub(re, "#{@st}\\&#{@en}") 134 | end 135 | p 136 | end 137 | }.compact 138 | re = nil 139 | end 140 | 141 | return pkgs 142 | end 143 | 144 | def print_upgrades(pkgs) 145 | count = 1 146 | p_count = pkgs.count 147 | pkgs.each do |pkg| 148 | if (Slackware::System.is_upgraded?(pkg.name)) 149 | puts '"%s" (current version %s build %s%s) has been upgraded before' % [pkg.name, 150 | pkg.version, 151 | pkg.build, 152 | pkg.tag] 153 | Slackware::System.upgrades(pkg.name).each do |up| 154 | puts " %s build %s%s upgraded on %s" % [up.version, 155 | up.build, 156 | up.tag, 157 | up.upgrade_time] 158 | end 159 | else 160 | puts '"%s" (current version %s build %s%s) has not been upgraded' % [pkg.name, 161 | pkg.version, 162 | pkg.build, 163 | pkg.tag] 164 | end 165 | if count < p_count 166 | puts 167 | end 168 | count += 1 169 | end 170 | end 171 | 172 | def print_packages(pkgs) 173 | if (pkgs.count > 0 && pkgs.first.class == Slackware::Package) 174 | pkgs.each {|pkg| 175 | printf("%s\n", pkg.fullname ) 176 | } 177 | end 178 | end 179 | 180 | def print_packages_times(pkgs, epoch = false, reverse = false) 181 | @slog.debug('print_packages_times') { "epoch: #{epoch} ; reverse: #{reverse}" } 182 | begin 183 | if reverse 184 | pkgs.sort_by {|x| x.time } 185 | else 186 | pkgs.sort_by {|x| x.time }.reverse 187 | end 188 | end.each {|pkg| 189 | printf("%s : %s\n", pkg.fullname, epoch ? pkg.time.to_i : pkg.time.to_s ) 190 | } 191 | end 192 | 193 | def print_packages_description(pkgs) 194 | if (pkgs.count > 0 && pkgs.first.class == Slackware::Package) 195 | pkgs.each {|pkg| 196 | printf("%s: COMPRESSED SIZE: %s\n", pkg.fullname, pkg.compressed_size ) 197 | printf("%s: UNCOMPRESSED SIZE: %s\n", pkg.fullname, pkg.uncompressed_size ) 198 | pkg.package_description.each {|line| 199 | printf("%s: %s\n", pkg.fullname, line ) 200 | } 201 | } 202 | end 203 | end 204 | 205 | # package file listing 206 | def print_package_file_list(pkgs) 207 | if (pkgs.count > 1) 208 | pkgs.each {|pkg| 209 | pkg.owned_files.each {|line| 210 | puts pkg.name + ": " + line 211 | } 212 | } 213 | else 214 | pkgs.each {|pkg| puts pkg.owned_files } 215 | end 216 | end 217 | 218 | # search Array of Slackware::Package's for files 219 | # and print the items found 220 | def print_package_searched_files(files) 221 | found_files = [] 222 | files.each {|file| 223 | found_files += Slackware::System.owns_file(file) 224 | } 225 | found_files.each {|file| 226 | puts file[0].fullname + ": " + file[1] 227 | } 228 | end 229 | 230 | # find orpaned files from /etc/ 231 | # * build a list of files from removed_packages 232 | # * check the list to see if they are currently owned by a package 233 | # * check the unowned members, to see if they still exist on the filesystem 234 | # * return existing files 235 | def find_orphaned_config_files 236 | # build a list of config files currently installed 237 | installed_config_files = Slackware::System.installed_packages.map {|pkg| 238 | pkg.owned_files.map {|file| 239 | if not(file =~ /\/$/) 240 | if (file =~ /^etc\//) 241 | file 242 | end 243 | end 244 | } 245 | }.flatten.compact 246 | 247 | # this Array is where we'll stash removed packages that have config file to check 248 | pkgs = Array.new 249 | Slackware::System.removed_packages.each {|r_pkg| 250 | # find config files for this removed package 251 | config = r_pkg.owned_files.grep(/^etc\/.*[\w|\d]$/) 252 | # continue if there are none 253 | if (config.count > 0) 254 | # remove config files that are owned by a currently installed package 255 | config = config.map {|file| 256 | if not(installed_config_files.include?(file)) 257 | if not(installed_config_files.include?(file + ".new")) 258 | file 259 | end 260 | end 261 | }.compact 262 | # check again, and continue if there are no config files left 263 | if (config.count > 0) 264 | # otherwise add this package, and its files, to the stack 265 | pkgs << {:pkg => r_pkg, :files => config} 266 | end 267 | end 268 | } 269 | 270 | # setup list of files to check whether they still exist on the filesystem 271 | files = [] 272 | pkgs.map {|pkg| files += pkg[:files] } 273 | files.uniq! 274 | 275 | orphaned_config_files = [] 276 | files.each {|file| 277 | if (File.exist?(File.join(Slackware::Paths.root_dir(),file))) 278 | orphaned_config_files << file 279 | end 280 | } 281 | 282 | return orphaned_config_files 283 | 284 | end 285 | 286 | def print_orphaned_files(files) 287 | puts files 288 | end 289 | 290 | # XXX This is a work in progress 291 | # It _works_, but is pretty darn slow ... 292 | # It would be more efficient to break this out to a separate Class, 293 | # and use a sqlite database for caching linked dependencies. 294 | # Categorized by pkg, file, links. based on mtime of the package file, 295 | # or maybe even mtime of the shared objects themselves. 296 | # That way, those entries alone could be updated if they are newer, 297 | # otherwise it's just a query. 298 | def find_linked(file_to_find) 299 | require 'find' 300 | 301 | dirs = %w{ /lib /lib64 /usr/lib /usr/lib64 /bin /sbin /usr/bin /usr/sbin } 302 | re_so = /ELF.*shared object/ 303 | re_exec = /ELF.*executable/ 304 | 305 | if File.exist?(file_to_find) 306 | file_to_find = File.expand_path(file_to_find) 307 | end 308 | if not(filemagic(File.dirname(file_to_find) + "/" + File.readlink(file_to_find)) =~ re_so) 309 | printf("%s is not a shared object\n",file_to_find) 310 | return nil 311 | end 312 | 313 | includes_linked = [] 314 | printf("Searching through ... ") 315 | dirs.each {|dir| 316 | printf("%s ", dir) 317 | Find.find(dir) {|file| 318 | if File.directory?(file) 319 | next 320 | end 321 | file_magic = filemagic(file) 322 | if (file_magic =~ re_so || file_magic =~ re_exec) 323 | l = `/usr/bin/ldd #{file} 2>/dev/null ` 324 | if l.include?(file_to_find) 325 | printf(".") 326 | l = l.sub(/\t/, '').split(/\n/) 327 | includes_linked << {:file => file, :links => l} 328 | end 329 | end 330 | } 331 | } 332 | printf("\n") 333 | return includes_linked 334 | end 335 | 336 | # This is intended to take the return of the find_linked() method 337 | def packages_of_linked_files(linked_files_arr) 338 | pkgs = Slackware::System.installed_packages 339 | owned_pkgs = [] 340 | pkgs.map {|pkg| 341 | files.each {|file| 342 | if pkg.owned_files.include?(file) 343 | owned_pkgs << {:pkg => pkg, :file => file} 344 | end 345 | } 346 | } 347 | return owned_pkgs 348 | end 349 | 350 | # Pretty print the output of find_linked() 351 | def print_find_linked(file_to_find) 352 | files = find_linked(file_to_find) 353 | printf("files linked to '%s' include:\n", file_to_find) 354 | files.each {|file| 355 | printf(" %s\n", file) 356 | } 357 | end 358 | 359 | private 360 | 361 | def filemagic(file) 362 | return `/usr/bin/file "#{file}"`.chomp 363 | end 364 | 365 | # vim:sw=2:sts=2:et: 366 | -------------------------------------------------------------------------------- /lib/slackware/version.rb: -------------------------------------------------------------------------------- 1 | # Copyright 2010,2011,2012 Vincent Batts, Vienna, VA 2 | # All rights reserved. 3 | # 4 | # Redistribution and use of this source, with or without modification, is 5 | # permitted provided that the following conditions are met: 6 | # 7 | # 1. Redistributions of this source must retain the above copyright 8 | # notice, this list of conditions and the following disclaimer. 9 | # 10 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 11 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 12 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 13 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 14 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 15 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 16 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 17 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 18 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 19 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 | 21 | require 'slackware/paths' 22 | 23 | module Slackware 24 | SLACKWARE_VERSION = begin 25 | data = File.read(Paths::slackware_version()) 26 | data =~ /Slackware\s(.*)/ 27 | $1 28 | rescue 29 | nil 30 | end 31 | UTILS_VERSION = "0.7.5" 32 | end 33 | 34 | # vim : set sw=2 sts=2 et : 35 | -------------------------------------------------------------------------------- /man/man3/slack-utils.3: -------------------------------------------------------------------------------- 1 | .\" Written by Vincent Batts 2 | .TH SLACK-UTILS 3 "March 2011" "Slackware-Linux" 3 | .SH NAME 4 | slack-utils - Ruby library for harnessing Slackware Linux stuff 5 | 6 | .SH SYNOPSIS 7 | .LP 8 | .B require 'slackare' 9 | 10 | .SH DESCRIPTION 11 | For more information on this library and its offerings, 12 | use the `ri` command for "Slackare" 13 | .br 14 | .SS Example: 15 | .I 16 | $> ri Slackware 17 | 18 | 19 | .SH "SEE ALSO" 20 | .BR slack-utils(8) 21 | .BR ruby(1) 22 | .BR ri(1) 23 | -------------------------------------------------------------------------------- /man/man8/slack-utils.8: -------------------------------------------------------------------------------- 1 | .\" Written by Vincent Batts 2 | .TH SLACK-UTILS 8 "July 2010" "Slackware-Linux" 3 | .SH NAME 4 | .B slack-utils - simple slackware sys-admin tools 5 | 6 | .SH SYNOPSIS 7 | .B slp [-c|--color] [[-p|--pkg] PACKAGE_NAME] [[-V|--Version] VERSION_STRING] [[-a|--arch] ARCH] [[-b|--build] BUILD_NUM] [[-t|--tag] TAG] [one or more package names] 8 | .LP 9 | .B slf [-c|--color] [[-p|--pkg] PACKAGE_NAME] [[-V|--Version] VERSION_STRING] [[-a|--arch] ARCH] [[-b|--build] BUILD_NUM] [[-t|--tag] TAG] 10 | .LP 11 | .B slt [-c|--color] [-e|--epoch] [[-p|--pkg] PACKAGE_NAME] [[-V|--Version] VERSION_STRING] [[-a|--arch] ARCH] [[-b|--build] BUILD_NUM] [[-t|--tag] TAG] [one or more package names] 12 | .LP 13 | .B sll [-c|--color] [[-p|--pkg] PACKAGE_NAME] [[-V|--Version] VERSION_STRING] [[-a|--arch] ARCH] [[-b|--build] BUILD_NUM] [[-t|--tag] TAG] [-f|--force] [one or more package names] 14 | .LP 15 | .B sli [[-p|--pkg] PACKAGE_NAME] [[-V|--Version] VERSION_STRING] [[-a|--arch] ARCH] [[-b|--build] BUILD_NUM] [[-t|--tag] TAG] [one or more package names] 16 | .LP 17 | .B slu [[-p|--pkg] PACKAGE_NAME] [[-t|--tag] TAG] [-f|--force] [one or more package names] 18 | .LP 19 | .B slo 20 | .LP 21 | .B slfindlinked 22 | .LP 23 | 24 | .SH DESCRIPTION 25 | .B slack-utils 26 | prints information related to slackware packages installed. 27 | This is written in Ruby, and should be fine for ruby-1.8 or ruby-1.9. 28 | Updates are welcome :-) 29 | 30 | .SS slp 31 | By default will list all slackware packages currently installed. 32 | Any [package names] passed after the command, are printed if matched. 33 | These args can be ruby regex expressions. For example: 34 | .RS 35 | .nf 36 | .B \fI$>\fI slp rsync xorg.*nest 37 | rsync-3.0.7-x86_64-1 38 | xorg-server-xnest-1.7.7-x86_64-2 39 | .fi 40 | .br 41 | 42 | .nf 43 | .B \fI$>\fI slp -t vb -p pony 44 | my-little-pony-1.1-x86_64-1_vb 45 | .fi 46 | .PP 47 | 48 | .SS slf 49 | Requires an argument. 50 | Any [file(s)] passed after the command, are printed if matched. 51 | These args can be ruby regex expressions. For example: 52 | .RS 53 | .nf 54 | .B \fI$>\fI slf kdmrc lilo$ 55 | kdebase-workspace-4.4.5-x86_64-1: usr/share/doc/HTML/en/kdm/kdmrc-ref.docbook 56 | kdebase-workspace-4.4.5-x86_64-1: etc/kde/kdm/kdmrc.new 57 | lilo-22.8-x86_64-15: sbin/lilo 58 | syslinux-3.84-x86_64-2: usr/bin/keytab-lilo 59 | .fi 60 | .PP 61 | 62 | .SS sll 63 | Requires an argument. 64 | The files owned by [package name(s)], are printed if matched. 65 | These args can be ruby regex expressions. For example: 66 | .RS 67 | .nf 68 | .B \fI$>\fI sll -p radeontool 69 | usr/ 70 | usr/bin/ 71 | usr/bin/radeontool 72 | usr/bin/avivotool 73 | install/ 74 | install/slack-desc 75 | .fi 76 | .PP 77 | 78 | .SS slu 79 | Requires an argument. 80 | Shows the upgrade history for matching packages. 81 | Any strings passed are searched for installed packages, or using flags. It is 82 | possible to show upgrade history for all packages, but requires a flags to overide. 83 | These args can be ruby regex expressions. For example: 84 | .RS 85 | .nf 86 | .B \fI$>\fI slu bash 87 | "bash" (current version 4.2.010 build 1vb) has been upgraded before 88 | 3.1.017 build 2 upgraded on 2010-06-01 22:07:33 -0400 89 | 4.1.007 build 1 upgraded on 2011-03-11 10:04:08 -0500 90 | 4.1.010 build 1 upgraded on 2011-08-10 14:24:49 -0400 91 | 92 | "bash-completion" (current version 1.3 build 4) has been upgraded before 93 | 1.1 build 3 upgraded on 2011-02-28 08:43:56 -0500 94 | 1.3 build 1 upgraded on 2011-03-02 08:58:46 -0500 95 | 1.3 build 2 upgraded on 2011-03-22 09:42:45 -0400 96 | 1.3 build 3 upgraded on 2011-04-22 12:02:57 -0400 97 | .B \fI$>\fI slu -p ^bash$ 98 | "bash" (current version 4.2.010 build 1vb) has been upgraded before 99 | 3.1.017 build 2 upgraded on 2010-06-01 22:07:33 -0400 100 | 4.1.007 build 1 upgraded on 2011-03-11 10:04:08 -0500 101 | 4.1.010 build 1 upgraded on 2011-08-10 14:24:49 -0400 102 | .fi 103 | .PP 104 | 105 | .SS sli 106 | By default will list the information for all slackware packages currently installed. 107 | The header of the installed package is displayed. 108 | These args can be ruby regex expressions. For example: 109 | .RS 110 | .nf 111 | .B \fI$>\fI sli -p aaa_base 112 | aaa_base-13.37-x86_64-3: COMPRESSED SIZE: 4K 113 | aaa_base-13.37-x86_64-3: UNCOMPRESSED SIZE: 90K 114 | aaa_base-13.37-x86_64-3: aaa_base (Basic Linux filesystem package) 115 | aaa_base-13.37-x86_64-3: 116 | aaa_base-13.37-x86_64-3: Sets up the empty directory tree for Slackware and adds an email to 117 | aaa_base-13.37-x86_64-3: root's mailbox welcoming them to Linux. :) This package should be 118 | aaa_base-13.37-x86_64-3: installed first, and never uninstalled. 119 | aaa_base-13.37-x86_64-3: 120 | aaa_base-13.37-x86_64-3: 121 | aaa_base-13.37-x86_64-3: 122 | aaa_base-13.37-x86_64-3: 123 | aaa_base-13.37-x86_64-3: 124 | aaa_base-13.37-x86_64-3: 125 | .fi 126 | .PP 127 | 128 | .SS slt 129 | By default will list all slackware packages currently installed, and their mtime/install time. 130 | Any [package names] passed after the command, are printed if matched. 131 | These args can be ruby regex expressions. For example: 132 | .RS 133 | .nf 134 | .B \fI$>\fI slt radeontool-1.6.1-x86_64-1 rsync 135 | radeontool-1.6.1-x86_64-1: 2010-06-01 22:40:42 -0400 136 | rsync-3.0.7-x86_64-1: 2010-06-01 22:41:08 -0400 137 | .fi 138 | .br 139 | 140 | .nf 141 | .B \fI$>\fI slt -e -p kernel-generic 142 | kernel-generic-2.6.37.5-x86_64-1 : 1300975233 143 | .fi 144 | .PP 145 | 146 | .SS slo 147 | This utility searches for orphaned configuration files, that had been 148 | installed as .new files, but the owning package is no longer installed. 149 | .br 150 | TODO this utility and concept could take some loving. 151 | .RS 152 | .nf 153 | .B \fI$>\fI slo 154 | XXX - NEEDS an example 155 | .fi 156 | .PP 157 | 158 | .SS slfindlinked 159 | Requires an argument. (and please be patient ;) 160 | Prints the package name and file that are linked to the that is passed as an argument. 161 | .RS 162 | .nf 163 | .B \fI$>\fI slfindlinked libgmp 164 | guile-1.8.7-x86_64-3: usr/lib64/libguile-srfi-srfi-60-v-2.so.2.0.2 linked to libgmp.so.10 165 | soprano-2.4.64-x86_64-1: usr/lib64/soprano/libsoprano_redlandbackend.so linked to libgmp.so.10 166 | php-5.2.14-x86_64-1: usr/lib64/php/extensions/gmp.so linked to libgmp.so.10 167 | [...] 168 | .fi 169 | .PP 170 | 171 | .SH "SEE ALSO" 172 | .BR slack-utils(3) 173 | 174 | -------------------------------------------------------------------------------- /man/man8/slf.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/sli.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/sll.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/slo.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/slp.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/slt.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /man/man8/slu.8: -------------------------------------------------------------------------------- 1 | .so man8/slack-utils.8 2 | -------------------------------------------------------------------------------- /slack-desc: -------------------------------------------------------------------------------- 1 | # HOW TO EDIT THIS FILE: 2 | # The "handy ruler" below makes it easier to edit a package description. Line 3 | # up the first '|' above the ':' following the base package name, and the '|' 4 | # on the right side marks the last column you can put a character in. You must 5 | # make exactly 11 lines for the formatting to be correct. It's also 6 | # customary to leave one space after the ':'. 7 | 8 | |-----handy-ruler------------------------------------------------------| 9 | slack-utils: slack-utils (utilities and Ruby library, for Slackware) 10 | slack-utils: 11 | slack-utils: A simple tool for looking over installed packages, 12 | slack-utils: finding file owners, or the install times of packages. 13 | slack-utils: 14 | slack-utils: Homepage https://github.com/vbatts/slack-utils 15 | slack-utils: 16 | slack-utils: 17 | slack-utils: 18 | slack-utils: 19 | slack-utils: 20 | -------------------------------------------------------------------------------- /slack-utils.SlackBuild: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Slackware build script for slack-utils 4 | 5 | # Copyright 2010,2011 Vincent Batts, vbatts@hashbangbash.com, http://hashbangbash.com/ 6 | # All rights reserved. 7 | # 8 | # Redistribution and use of this script, with or without modification, is 9 | # permitted provided that the following conditions are met: 10 | # 11 | # 1. Redistributions of this script must retain the above copyright 12 | # notice, this list of conditions and the following disclaimer. 13 | # 14 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED 15 | # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16 | # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO 17 | # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 18 | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 | # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 20 | # OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 21 | # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 22 | # OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 23 | # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 | 25 | set -e 26 | 27 | PKGNAM=slack-utils 28 | VERSION=$(ls -rt pkg/$PKGNAM-*.tar.?z* | tail -1 | rev | cut -f 3- -d . | cut -f 1 -d - | rev) 29 | BUILD=${BUILD:-1} 30 | TAG=${TAG:-_vb} 31 | 32 | if [ -z "$ARCH" ]; then 33 | case "$( uname -m )" in 34 | i?86) ARCH=i486 ;; 35 | arm*) ARCH=arm ;; 36 | # Unless $ARCH is already set, use uname -m for all other archs: 37 | *) ARCH=$( uname -m ) ;; 38 | esac 39 | fi 40 | 41 | CWD=$(pwd) 42 | TMP=${TMP:-/tmp/${TAG}} 43 | PKG=$TMP/package-$PKGNAM 44 | OUTPUT=${OUTPUT:-/tmp} 45 | 46 | rm -rf $PKG 47 | mkdir -p $TMP $PKG $OUTPUT 48 | cd $TMP 49 | rm -rf $PKGNAM-$VERSION 50 | tar xvf $CWD/pkg/$PKGNAM-$VERSION.tar.gz 51 | cd $PKGNAM-$VERSION 52 | 53 | ruby setup.rb config \ 54 | --prefix=/usr \ 55 | --sysconfdir=/etc \ 56 | --mandir=/usr/man 57 | ruby setup.rb install \ 58 | --prefix=$PKG 59 | 60 | mkdir -p $PKG/usr/doc/$PKGNAM-$VERSION 61 | cp -a README.rdoc examples $PKG/usr/doc/$PKGNAM-$VERSION/ 62 | cat $CWD/$PKGNAM.SlackBuild > $PKG/usr/doc/$PKGNAM-$VERSION/$PKGNAM.SlackBuild 63 | 64 | find $PKG/usr/man -type f -exec gzip -9 {} \; 65 | for i in $( find $PKG/usr/man -type l ) ; do ln -s $( readlink $i ).gz $i.gz ; rm $i ; done 66 | 67 | mkdir -p $PKG/install 68 | cat $CWD/slack-desc > $PKG/install/slack-desc 69 | 70 | cd $PKG 71 | /sbin/makepkg -p -l y -c n ${OUTPUT}/${PKGNAM}-${VERSION}-${ARCH}-${BUILD}${TAG}.${PKGTYPE:-tgz} 72 | -------------------------------------------------------------------------------- /slack-utils.gemspec: -------------------------------------------------------------------------------- 1 | 2 | $LOAD_PATH.insert(0,File.expand_path('../lib',__FILE__)) 3 | 4 | require 'slackware/version' 5 | 6 | Gem::Specification.new do |s| 7 | s.name = %q{slack-utils} 8 | s.version = Slackware::UTILS_VERSION 9 | s.authors = ["Vincent Batts"] 10 | s.email = %q{vbatts@hashbangbash.com} 11 | s.homepage = %q{https://github.com/vbatts/slack-utils/} 12 | s.summary = %q{Accessing information for the Slackware Linux distribution} 13 | s.description = %q{ slack-utils is a means by which to access 14 | package information on the Slackware Linux OS. 15 | See the examples/ for more information. 16 | } 17 | s.files = %w{ 18 | README.rdoc 19 | bin/slf 20 | bin/slt 21 | bin/slp 22 | bin/slo 23 | bin/sll 24 | bin/sli 25 | bin/slu 26 | bin/slfindlinked 27 | examples/list_packages.rb 28 | examples/repo_difference.rb 29 | examples/before_then.rb 30 | examples/repo.rb 31 | lib/slackware.rb 32 | lib/slackware/utils.rb 33 | lib/slackware/args.rb 34 | lib/slackware/changelog.rb 35 | lib/slackware/changelog/rss.rb 36 | lib/slackware/log.rb 37 | lib/slackware/package.rb 38 | lib/slackware/package_bundle.rb 39 | lib/slackware/paths.rb 40 | lib/slackware/repo.rb 41 | lib/slackware/version.rb 42 | lib/slackware/system.rb 43 | } 44 | s.executables = %w{ sli slf slo sll slp slt slu slfindlinked } 45 | s.require_paths = %w{ lib } 46 | s.has_rdoc = true 47 | s.extra_rdoc_files = %w{ README.rdoc } 48 | s.rdoc_options = ["--main=README.rdoc", "--line-numbers", "--inline-source", "--title=Slackware utils (#{s.name}) #{s.version} Documentation"] 49 | #s.add_dependency("") 50 | #s.test_files 51 | end 52 | -------------------------------------------------------------------------------- /test/samples/ChangeLog.txt: -------------------------------------------------------------------------------- 1 | Thu Jul 14 21:34:41 UTC 2011 2 | l/seamonkey-solibs-2.2-i486-1.txz: Upgraded. 3 | This update contains security fixes and improvements. 4 | For more information, see: 5 | http://www.mozilla.org/security/announce/ 6 | (* Security fix *) 7 | xap/mozilla-firefox-5.0.1-i486-1.txz: Upgraded. 8 | I guess this is only a fix for Mac OS X, but it's still 0.0.1 better. ;-) 9 | xap/mozilla-thunderbird-5.0-i486-1.txz: Upgraded. 10 | Thanks to dolphin77 for some hints about the ./configure options. 11 | xap/seamonkey-2.2-i486-1.txz: Upgraded. 12 | This update contains security fixes and improvements. 13 | For more information, see: 14 | http://www.mozilla.org/security/announce/ 15 | (* Security fix *) 16 | +--------------------------+ 17 | Fri Jul 8 16:55:13 UTC 2011 18 | n/bind-9.7.3_P3-i486-1.txz: Upgraded. 19 | A specially constructed packet will cause BIND 9 ("named") to exit, 20 | affecting DNS service. The issue exists in BIND 9.6.3 and newer. 21 | "Change #2912 (see CHANGES) exposed a latent bug in the DNS message 22 | processing code that could allow certain UPDATE requests to crash 23 | named. This was fixed by disambiguating internal database 24 | representation vs DNS wire format data. [RT #24777] [CVE-2011-2464]" 25 | For more information, see: 26 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2464 27 | (* Security fix *) 28 | xap/mozilla-thunderbird-3.1.11-i486-1.txz: Upgraded. 29 | This release contains security fixes and improvements. 30 | For more information, see: 31 | http://www.mozilla.org/security/known-vulnerabilities/thunderbird30.html 32 | (* Security fix *) 33 | +--------------------------+ 34 | Tue Jun 28 18:19:47 UTC 2011 35 | ap/ghostscript-9.02-i486-2.txz: Rebuilt. 36 | Provide pstoraster -> gstoraster symlink. 37 | Include latest History file, but not all the old ones. 38 | Is this ready for 13.37/patches now? 39 | +--------------------------+ 40 | Mon Jun 27 21:29:54 UTC 2011 41 | n/gnutls-2.12.7-i486-1.txz: Upgraded. 42 | xap/pidgin-2.9.0-i486-1.txz: Upgraded. 43 | Fixed a remote denial of service. A remote attacker could set a specially 44 | crafted GIF file as their buddy icon causing vulerable versions of pidgin 45 | to crash due to excessive memory use. 46 | For more information, see: 47 | http://pidgin.im/news/security/?id=52 48 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2485 49 | (* Security fix *) 50 | +--------------------------+ 51 | Fri Jun 24 02:55:39 UTC 2011 52 | ap/ghostscript-9.02-i486-1.txz: Upgraded. 53 | I welcome reports about how well this version of ghostscript works compared 54 | with the 9.00 that shipped in Slackware 13.37. If it fixes important bugs 55 | without regressions, then it might be considered as a patch for 13.37. 56 | l/jre-6u26-i586-1.txz: Upgraded. 57 | xap/mozilla-firefox-5.0-i486-1.txz: Upgraded. 58 | This release contains security fixes and improvements. 59 | For more information, see: 60 | http://www.mozilla.org/security/known-vulnerabilities/firefox.html 61 | (* Security fix *) 62 | extra/jdk-6/jdk-6u26-i586-1.txz: Upgraded. 63 | +--------------------------+ 64 | Mon Jun 20 04:09:11 UTC 2011 65 | n/getmail-4.20.3-i486-1.txz: Upgraded. 66 | n/fetchmail-6.3.20-i486-1.txz: Upgraded. 67 | This release fixes a denial of service in STARTTLS protocol phases. 68 | For more information, see: 69 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1947 70 | http://www.fetchmail.info/fetchmail-SA-2011-01.txt 71 | (* Security fix *) 72 | l/seamonkey-solibs-2.1-i486-1.txz: Upgraded. 73 | xap/seamonkey-2.1-i486-1.txz: Upgraded. 74 | +--------------------------+ 75 | Sat May 28 19:28:21 UTC 2011 76 | a/file-5.07-i486-1.txz: Upgraded. 77 | d/gcc-4.5.3-i486-2.txz: Rebuilt. 78 | d/gcc-g++-4.5.3-i486-2.txz: Rebuilt. 79 | d/gcc-gfortran-4.5.3-i486-2.txz: Rebuilt. 80 | d/gcc-gnat-4.5.3-i486-2.txz: Rebuilt. 81 | d/gcc-java-4.5.3-i486-2.txz: Rebuilt. 82 | d/gcc-objc-4.5.3-i486-2.txz: Rebuilt. 83 | Added --enable-objc-gc option to enable Objective-C garbage collection. 84 | Thanks to Luca De Pandis. 85 | +--------------------------+ 86 | Fri May 27 22:56:00 UTC 2011 87 | n/bind-9.7.3_P1-i486-1.txz: Upgraded. 88 | This release fixes security issues: 89 | * A large RRSET from a remote authoritative server that results in 90 | the recursive resolver trying to negatively cache the response can 91 | hit an off by one code error in named, resulting in named crashing. 92 | [RT #24650] [CVE-2011-1910] 93 | * Zones that have a DS record in the parent zone but are also listed 94 | in a DLV and won't validate without DLV could fail to validate. [RT 95 | #24631] 96 | For more information, see: 97 | http://www.isc.org/software/bind/advisories/cve-2011-1910 98 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1910 99 | (* Security fix *) 100 | +--------------------------+ 101 | Wed May 25 20:03:16 UTC 2011 102 | a/cxxlibs-6.0.14-i486-2.txz: Rebuilt. 103 | a/glibc-solibs-2.13-i486-5.txz: Rebuilt. 104 | a/glibc-zoneinfo-2.13-noarch-5.txz: Rebuilt. 105 | Upgraded to tzcode2011g and tzdata2011g. 106 | a/kernel-firmware-2.6.38.7-noarch-1.txz: Upgraded. 107 | a/kernel-generic-2.6.38.7-i486-1.txz: Upgraded. 108 | a/kernel-generic-smp-2.6.38.7_smp-i686-1.txz: Upgraded. 109 | a/kernel-huge-2.6.38.7-i486-1.txz: Upgraded. 110 | a/kernel-huge-smp-2.6.38.7_smp-i686-1.txz: Upgraded. 111 | a/kernel-modules-2.6.38.7-i486-1.txz: Upgraded. 112 | a/kernel-modules-smp-2.6.38.7_smp-i686-1.txz: Upgraded. 113 | ap/linuxdoc-tools-0.9.66-i486-9.txz: Rebuilt. 114 | ap/nano-2.3.1-i486-1.txz: Upgraded. 115 | d/gcc-4.5.3-i486-1.txz: Upgraded. 116 | d/gcc-g++-4.5.3-i486-1.txz: Upgraded. 117 | d/gcc-gfortran-4.5.3-i486-1.txz: Upgraded. 118 | d/gcc-gnat-4.5.3-i486-1.txz: Upgraded. 119 | d/gcc-java-4.5.3-i486-1.txz: Upgraded. 120 | d/gcc-objc-4.5.3-i486-1.txz: Upgraded. 121 | d/git-1.7.5.1-i486-1.txz: Upgraded. 122 | d/kernel-headers-2.6.38.7_smp-x86-1.txz: Upgraded. 123 | d/perl-5.14.0-i486-1.txz: Upgraded. 124 | d/subversion-1.6.16-i486-2.txz: Rebuilt. 125 | k/kernel-source-2.6.38.7_smp-noarch-1.txz: Upgraded. 126 | These are the main configuration changes from the 2.6.37.6 kernel in 13.37: 127 | BLK_DEV_LOOP y -> m 128 | HIGHMEM4G y -> n 129 | HIGHMEM64G n -> y 130 | LOG_BUF_SHIFT 15 -> 18 131 | M686 y -> n 132 | MPENTIUMIII n -> y 133 | MOUSE_PS2_ELANTECH n -> y 134 | And, compared with the 2.6.38.4 kernel in 13.37/testing: 135 | LOG_BUF_SHIFT 15 -> 18 136 | M686 y -> n 137 | MPENTIUMIII n -> y 138 | PREEMPT_NONE y -> n 139 | PREEMPT_VOLUNTARY n -> y 140 | SCHED_AUTOGROUP y -> n 141 | It remains to be seen where the PREEMPT_* options will settle in the future. 142 | SCHED_AUTOGROUP still seems sketchy to me, and might be behind some odd 143 | clockskew issues. And, thanks to Carl Wenninger for reporting that the 144 | LOG_BUF_SHIFT setting was less than the kernel defaults and was leading to 145 | a few missing lines at the beginning of 'dmesg' output. 146 | kde/kdebindings-4.5.5-i486-3.txz: Rebuilt. 147 | l/apr-1.4.5-i486-1.txz: Upgraded. 148 | This fixes a possible denial of service due to a problem with a loop in 149 | the new apr_fnmatch() implementation consuming CPU. 150 | For more information, see: 151 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-1928 152 | (* Security fix *) 153 | l/apr-util-1.3.12-i486-1.txz: Upgraded. 154 | Fix crash because of NULL cleanup registered by apr_ldap_rebind_init(). 155 | l/glibc-2.13-i486-5.txz: Rebuilt. 156 | l/glibc-i18n-2.13-i486-5.txz: Rebuilt. 157 | l/glibc-profile-2.13-i486-5.txz: Rebuilt. 158 | l/libidn-1.22-i486-1.txz: Upgraded. 159 | l/pilot-link-0.12.5-i486-4.txz: Rebuilt. 160 | l/virtuoso-ose-6.1.2-i486-2.txz: Rebuilt. 161 | n/gnutls-2.12.5-i486-1.txz: Upgraded. 162 | n/httpd-2.2.19-i486-1.txz: Upgraded. 163 | Revert ABI breakage in 2.2.18 caused by the function signature change 164 | of ap_unescape_url_keep2f(). This release restores the signature from 165 | 2.2.17 and prior, and introduces ap_unescape_url_keep2f_ex(). 166 | Apache httpd-2.2.18 is considered abandoned. All users must upgrade. 167 | n/irssi-0.8.15-i486-4.txz: Rebuilt. 168 | n/net-snmp-5.6.1-i486-2.txz: Rebuilt. 169 | n/ntp-4.2.6p3-i486-2.txz: Rebuilt. 170 | n/obexftp-0.23-i486-6.txz: Rebuilt. 171 | x/libdrm-2.4.25-i486-1.txz: Upgraded. 172 | x/mesa-7.10.2-i486-1.txz: Upgraded. 173 | x/xf86-video-nouveau-git_20110515_8378443-i486-1.txz: Upgraded. 174 | xap/gv-3.7.2-i486-1.txz: Upgraded. 175 | xap/imagemagick-6.6.9_8-i486-1.txz: Upgraded. 176 | xap/pidgin-2.7.11-i486-2.txz: Rebuilt. 177 | xap/xchat-2.8.8-i486-4.txz: Rebuilt. 178 | isolinux/initrd.img: Rebuilt. 179 | kernels/*: Rebuilt. 180 | usb-and-pxe-installers/usbboot.img: Rebuilt. 181 | extra/linux-2.6.38.7-nosmp-sdk/*: Rebuilt. 182 | +--------------------------+ 183 | Fri May 13 20:30:07 UTC 2011 184 | l/apr-1.4.4-i486-1.txz: Upgraded. 185 | This fixes a possible denial of service due to an unconstrained, recursive 186 | invocation of apr_fnmatch(). This function has been reimplemented using a 187 | non-recursive algorithm. Thanks to William Rowe. 188 | For more information, see: 189 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-0419 190 | (* Security fix *) 191 | l/apr-util-1.3.11-i486-1.txz: Upgraded. 192 | n/httpd-2.2.18-i486-1.txz: Upgraded. 193 | This is a bug fix release, but since the upgrades to apr/apr-util require at 194 | least an httpd recompile we opted to upgrade to the newest httpd. 195 | +--------------------------+ 196 | Thu May 5 23:23:20 UTC 2011 197 | a/coreutils-8.12-i486-1.txz: Upgraded. 198 | +--------------------------+ 199 | Mon May 2 20:20:50 UTC 2011 200 | xap/mozilla-firefox-4.0.1-i486-1.txz: Upgraded. 201 | This release contains security fixes and improvements. 202 | For more information, see: 203 | http://www.mozilla.org/security/known-vulnerabilities/firefox40.html 204 | (* Security fix *) 205 | xap/mozilla-thunderbird-3.1.10-i486-1.txz: Upgraded. 206 | This release contains security fixes and improvements. 207 | For more information, see: 208 | http://www.mozilla.org/security/known-vulnerabilities/thunderbird31.html 209 | (* Security fix *) 210 | +--------------------------+ 211 | Mon Apr 25 13:37:00 UTC 2011 212 | Slackware 13.37 x86 stable is released! 213 | 214 | Thanks to everyone who pitched in on this release: the Slackware team, 215 | the folks producing upstream code, and linuxquestions.org for providing 216 | a great forum for collaboration and testing. 217 | 218 | The ISOs are off to be replicated, a 6 CD-ROM 32-bit set and a dual-sided 219 | 32-bit/64-bit x86/x86_64 DVD. Please consider supporting the Slackware 220 | project by picking up a copy from store.slackware.com. We're taking 221 | pre-orders now, and offer a discount if you sign up for a subscription. 222 | 223 | As always, thanks to the Slackware community for testing, suggestions, 224 | and feedback. :-) 225 | 226 | Have fun! 227 | +--------------------------+ 228 | -------------------------------------------------------------------------------- /test/samples/etc/slackware-version: -------------------------------------------------------------------------------- 1 | Slackware 13.37.314159 2 | -------------------------------------------------------------------------------- /test/samples/slackware-security.eml: -------------------------------------------------------------------------------- 1 | 2 | Delivered-To: vbatts@gmail.com 3 | Received: by 10.182.208.104 with SMTP id md8cs113312obc; 4 | Fri, 10 Feb 2012 10:51:37 -0800 (PST) 5 | Received: by 10.68.190.101 with SMTP id gp5mr18775734pbc.31.1328899893895; 6 | Fri, 10 Feb 2012 10:51:33 -0800 (PST) 7 | Return-Path: 8 | Received: from bob.slackware.com (slackware.com. [64.57.102.34]) 9 | by mx.google.com with ESMTPS id y4si3642307pbb.58.2012.02.10.10.51.23 10 | (version=TLSv1/SSLv3 cipher=OTHER); 11 | Fri, 10 Feb 2012 10:51:33 -0800 (PST) 12 | Received-SPF: pass (google.com: best guess record for domain of owner-slackware-security@slackware.com designates 64.57.102.34 as permitted sender) client-ip=64.57.102.34; 13 | Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of owner-slackware-security@slackware.com designates 64.57.102.34 as permitted sender) smtp.mail=owner-slackware-security@slackware.com 14 | Received: from bob.slackware.com (IDENT:2@localhost [127.0.0.1]) 15 | by bob.slackware.com (8.13.7/8.13.7) with ESMTP id q1AIpJDr014549; 16 | Fri, 10 Feb 2012 10:51:19 -0800 17 | Received: from localhost (daemon@localhost) 18 | by bob.slackware.com (8.13.7/8.12.9/Submit) with SMTP id q1AIpI5W014541; 19 | Fri, 10 Feb 2012 10:51:18 -0800 20 | Received: by bob.slackware.com (bulk_mailer v1.13); Fri, 10 Feb 2012 09:45:37 -0800 21 | Received: from bob.slackware.com (IDENT:2@localhost [127.0.0.1]) 22 | by bob.slackware.com (8.13.7/8.13.7) with ESMTP id q1AHja9E006440; 23 | Fri, 10 Feb 2012 09:45:36 -0800 24 | Received: (from daemon@localhost) 25 | by bob.slackware.com (8.13.7/8.12.9/Submit) id q1AHjajG006439; 26 | Fri, 10 Feb 2012 09:45:36 -0800 27 | Received: from bob.slackware.com (IDENT:25@localhost [127.0.0.1]) 28 | by bob.slackware.com (8.13.7/8.13.7) with ESMTP id q1AHjamH006435 29 | for ; Fri, 10 Feb 2012 09:45:36 -0800 30 | Received: (from root@localhost) 31 | by bob.slackware.com (8.13.7/8.12.9/Submit) id q1AHjaec006434 32 | for slackware-security@slackware.com; Fri, 10 Feb 2012 09:45:36 -0800 33 | Received: from bob.slackware.com (IDENT:3334@localhost [127.0.0.1]) 34 | by bob.slackware.com (8.13.7/8.13.7) with ESMTP id q1AHiFi9006334 35 | for ; Fri, 10 Feb 2012 09:44:15 -0800 36 | Received: from localhost (security@localhost) 37 | by bob.slackware.com (8.13.7/8.12.9/Submit) with ESMTP id q1AHiFfk006330 38 | for ; Fri, 10 Feb 2012 09:44:15 -0800 39 | X-Authentication-Warning: bob.slackware.com: security owned process doing -bs 40 | Date: Fri, 10 Feb 2012 09:44:15 -0800 (PST) 41 | From: Slackware Security Team 42 | To: slackware-security@slackware.com 43 | Subject: [slackware-security] php (SSA:2012-041-02) 44 | Message-ID: 45 | User-Agent: Alpine 1.10 (LNX 962 2008-03-14) 46 | MIME-Version: 1.0 47 | Content-Type: TEXT/PLAIN; charset=US-ASCII 48 | Sender: owner-slackware-security@slackware.com 49 | Reply-To: Slackware Security Team 50 | 51 | 52 | -----BEGIN PGP SIGNED MESSAGE----- 53 | Hash: SHA1 54 | 55 | [slackware-security] php (SSA:2012-041-02) 56 | 57 | New php packages are available for Slackware 12.0, 12.1, 12.2, 13.0, 13.1, 58 | 13.37, and -current to fix security issues. 59 | 60 | 61 | Here are the details from the Slackware 13.37 ChangeLog: 62 | +--------------------------+ 63 | patches/packages/php-5.3.10-i486-1_slack13.37.txz: Upgraded. 64 | Fixed arbitrary remote code execution vulnerability reported by Stefan 65 | Esser, CVE-2012-0830. (Stas, Dmitry) 66 | For more information, see: 67 | http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0830 68 | (* Security fix *) 69 | +--------------------------+ 70 | 71 | 72 | Where to find the new packages: 73 | +-----------------------------+ 74 | 75 | Thanks to the friendly folks at the OSU Open Source Lab 76 | (http://osuosl.org) for donating FTP and rsync hosting 77 | to the Slackware project! :-) 78 | 79 | Also see the "Get Slack" section on http://slackware.com for 80 | additional mirror sites near you. 81 | 82 | Updated package for Slackware 12.0: 83 | ftp://ftp.slackware.com/pub/slackware/slackware-12.0/patches/packages/php-5.3.10-i486-1_slack12.0.tgz 84 | 85 | Updated package for Slackware 12.1: 86 | ftp://ftp.slackware.com/pub/slackware/slackware-12.1/patches/packages/php-5.3.10-i486-1_slack12.1.tgz 87 | 88 | Updated package for Slackware 12.2: 89 | ftp://ftp.slackware.com/pub/slackware/slackware-12.2/patches/packages/php-5.3.10-i486-1_slack12.2.tgz 90 | 91 | Updated package for Slackware 13.0: 92 | ftp://ftp.slackware.com/pub/slackware/slackware-13.0/patches/packages/php-5.3.10-i486-1_slack13.0.txz 93 | 94 | Updated package for Slackware x86_64 13.0: 95 | ftp://ftp.slackware.com/pub/slackware/slackware64-13.0/patches/packages/php-5.3.10-x86_64-1_slack13.0.txz 96 | 97 | Updated package for Slackware 13.1: 98 | ftp://ftp.slackware.com/pub/slackware/slackware-13.1/patches/packages/php-5.3.10-i486-1_slack13.1.txz 99 | 100 | Updated package for Slackware x86_64 13.1: 101 | ftp://ftp.slackware.com/pub/slackware/slackware64-13.1/patches/packages/php-5.3.10-x86_64-1_slack13.1.txz 102 | 103 | Updated package for Slackware 13.37: 104 | ftp://ftp.slackware.com/pub/slackware/slackware-13.37/patches/packages/php-5.3.10-i486-1_slack13.37.txz 105 | 106 | Updated package for Slackware x86_64 13.37: 107 | ftp://ftp.slackware.com/pub/slackware/slackware64-13.37/patches/packages/php-5.3.10-x86_64-1_slack13.37.txz 108 | 109 | Updated package for Slackware -current: 110 | ftp://ftp.slackware.com/pub/slackware/slackware-current/slackware/n/php-5.3.10-i486-1.txz 111 | 112 | Updated package for Slackware x86_64 -current: 113 | ftp://ftp.slackware.com/pub/slackware/slackware64-current/slackware64/n/php-5.3.10-x86_64-1.txz 114 | 115 | 116 | MD5 signatures: 117 | +-------------+ 118 | 119 | Slackware 12.0 package: 120 | bf5512a57e0e7ba3c9d836636f056036 php-5.3.10-i486-1_slack12.0.tgz 121 | 122 | Slackware 12.1 package: 123 | 474400e31f8701a07aa97aeee956226e php-5.3.10-i486-1_slack12.1.tgz 124 | 125 | Slackware 12.2 package: 126 | f359c739e8db9130806c3cb256990804 php-5.3.10-i486-1_slack12.2.tgz 127 | 128 | Slackware 13.0 package: 129 | 5b38767541b0367dd64539537ca3cfc5 php-5.3.10-i486-1_slack13.0.txz 130 | 131 | Slackware x86_64 13.0 package: 132 | bcccb9fdde0e548d999447b352f4b322 php-5.3.10-x86_64-1_slack13.0.txz 133 | 134 | Slackware 13.1 package: 135 | 7bdee84117e3cd1ac8e6087d9c936355 php-5.3.10-i486-1_slack13.1.txz 136 | 137 | Slackware x86_64 13.1 package: 138 | 2d05770a236fdc52754e1ba9d657d6d7 php-5.3.10-x86_64-1_slack13.1.txz 139 | 140 | Slackware 13.37 package: 141 | 7555e89aa4dc5a6b68c2fcfd1b8a6dc3 php-5.3.10-i486-1_slack13.37.txz 142 | 143 | Slackware x86_64 13.37 package: 144 | cf6a47e0046b13b2adba13466b3b5e7e php-5.3.10-x86_64-1_slack13.37.txz 145 | 146 | Slackware -current package: 147 | 1191d7d49f21f0dba3c4f35cc19e6b88 n/php-5.3.10-i486-1.txz 148 | 149 | Slackware x86_64 -current package: 150 | 25a12f2407be6f03ff1dc50ad1b3c80b n/php-5.3.10-x86_64-1.txz 151 | 152 | 153 | Installation instructions: 154 | +------------------------+ 155 | 156 | Upgrade the package as root: 157 | # upgradepkg php-5.3.10-i486-1_slack13.37.txz 158 | 159 | Then, restart the httpd daemon. 160 | 161 | 162 | +-----+ 163 | 164 | Slackware Linux Security Team 165 | http://slackware.com/gpg-key 166 | security@slackware.com 167 | 168 | +------------------------------------------------------------------------+ 169 | | To leave the slackware-security mailing list: | 170 | +------------------------------------------------------------------------+ 171 | | Send an email to majordomo@slackware.com with this text in the body of | 172 | | the email message: | 173 | | | 174 | | unsubscribe slackware-security | 175 | | | 176 | | You will get a confirmation message back containing instructions to | 177 | | complete the process. Please do not reply to this email address. | 178 | +------------------------------------------------------------------------+ 179 | -----BEGIN PGP SIGNATURE----- 180 | Version: GnuPG v1.4.11 (GNU/Linux) 181 | 182 | iEYEARECAAYFAk81VdsACgkQakRjwEAQIjOXUwCfezXUNa574h+RebDKgoGHoWoF 183 | ofoAniEEEENlY4sa2T1+N8KKJPS23J4D 184 | =gwHE 185 | -----END PGP SIGNATURE----- 186 | -------------------------------------------------------------------------------- /test/samples/var/log/packages/bash-4.1.010-x86_64-1: -------------------------------------------------------------------------------- 1 | PACKAGE NAME: bash-4.1.010-x86_64-1 2 | COMPRESSED PACKAGE SIZE: 4K 3 | UNCOMPRESSED PACKAGE SIZE: 3770K 4 | PACKAGE LOCATION: ./bash-4.1.010-x86_64-1.txz 5 | PACKAGE DESCRIPTION: 6 | bash: bash (sh-compatible shell) 7 | bash: 8 | bash: The GNU Bourne-Again SHell. Bash is a sh-compatible command 9 | bash: interpreter that executes commands read from the standard input or 10 | bash: from a file. Bash also incorporates useful features from the Korn 11 | bash: and C shells (ksh and csh). Bash is ultimately intended to be a 12 | bash: conformant implementation of the IEEE Posix Shell and Tools 13 | bash: specification (IEEE Working Group 1003.2). 14 | bash: 15 | bash: Bash must be present for the system to boot properly. 16 | bash: 17 | FILE LIST: 18 | ./ 19 | install/ 20 | install/slack-desc 21 | install/doinst.sh 22 | bin/ 23 | bin/bash4.new 24 | usr/ 25 | usr/man/ 26 | usr/man/man1/ 27 | usr/man/man1/bash.1.gz 28 | usr/man/man1/rbash.1.gz 29 | usr/man/man1/builtins.1.gz 30 | usr/info/ 31 | usr/info/bash.info.gz 32 | usr/doc/ 33 | usr/doc/bash-4.1/ 34 | usr/doc/bash-4.1/article.txt 35 | usr/doc/bash-4.1/CHANGES 36 | usr/doc/bash-4.1/Y2K 37 | usr/doc/bash-4.1/INSTALL 38 | usr/doc/bash-4.1/NOTES 39 | usr/doc/bash-4.1/INTRO 40 | usr/doc/bash-4.1/README 41 | usr/doc/bash-4.1/NEWS 42 | usr/doc/bash-4.1/MANIFEST 43 | usr/doc/bash-4.1/COPYING 44 | usr/doc/bash-4.1/ChangeLog 45 | usr/doc/bash-4.1/COMPAT 46 | usr/doc/bash-4.1/AUTHORS 47 | usr/doc/bash-4.1/FAQ 48 | usr/share/ 49 | usr/share/locale/ 50 | usr/share/locale/id/ 51 | usr/share/locale/id/LC_MESSAGES/ 52 | usr/share/locale/id/LC_MESSAGES/bash.mo 53 | usr/share/locale/sk/ 54 | usr/share/locale/sk/LC_MESSAGES/ 55 | usr/share/locale/sk/LC_MESSAGES/bash.mo 56 | usr/share/locale/fr/ 57 | usr/share/locale/fr/LC_MESSAGES/ 58 | usr/share/locale/fr/LC_MESSAGES/bash.mo 59 | usr/share/locale/hu/ 60 | usr/share/locale/hu/LC_MESSAGES/ 61 | usr/share/locale/hu/LC_MESSAGES/bash.mo 62 | usr/share/locale/zh_TW/ 63 | usr/share/locale/zh_TW/LC_MESSAGES/ 64 | usr/share/locale/zh_TW/LC_MESSAGES/bash.mo 65 | usr/share/locale/ja/ 66 | usr/share/locale/ja/LC_MESSAGES/ 67 | usr/share/locale/ja/LC_MESSAGES/bash.mo 68 | usr/share/locale/ga/ 69 | usr/share/locale/ga/LC_MESSAGES/ 70 | usr/share/locale/ga/LC_MESSAGES/bash.mo 71 | usr/share/locale/tr/ 72 | usr/share/locale/tr/LC_MESSAGES/ 73 | usr/share/locale/tr/LC_MESSAGES/bash.mo 74 | usr/share/locale/eo/ 75 | usr/share/locale/eo/LC_MESSAGES/ 76 | usr/share/locale/eo/LC_MESSAGES/bash.mo 77 | usr/share/locale/pt_BR/ 78 | usr/share/locale/pt_BR/LC_MESSAGES/ 79 | usr/share/locale/pt_BR/LC_MESSAGES/bash.mo 80 | usr/share/locale/de/ 81 | usr/share/locale/de/LC_MESSAGES/ 82 | usr/share/locale/de/LC_MESSAGES/bash.mo 83 | usr/share/locale/cs/ 84 | usr/share/locale/cs/LC_MESSAGES/ 85 | usr/share/locale/cs/LC_MESSAGES/bash.mo 86 | usr/share/locale/es/ 87 | usr/share/locale/es/LC_MESSAGES/ 88 | usr/share/locale/es/LC_MESSAGES/bash.mo 89 | usr/share/locale/et/ 90 | usr/share/locale/et/LC_MESSAGES/ 91 | usr/share/locale/et/LC_MESSAGES/bash.mo 92 | usr/share/locale/vi/ 93 | usr/share/locale/vi/LC_MESSAGES/ 94 | usr/share/locale/vi/LC_MESSAGES/bash.mo 95 | usr/share/locale/bg/ 96 | usr/share/locale/bg/LC_MESSAGES/ 97 | usr/share/locale/bg/LC_MESSAGES/bash.mo 98 | usr/share/locale/nl/ 99 | usr/share/locale/nl/LC_MESSAGES/ 100 | usr/share/locale/nl/LC_MESSAGES/bash.mo 101 | usr/share/locale/fi/ 102 | usr/share/locale/fi/LC_MESSAGES/ 103 | usr/share/locale/fi/LC_MESSAGES/bash.mo 104 | usr/share/locale/ru/ 105 | usr/share/locale/ru/LC_MESSAGES/ 106 | usr/share/locale/ru/LC_MESSAGES/bash.mo 107 | usr/share/locale/ro/ 108 | usr/share/locale/ro/LC_MESSAGES/ 109 | usr/share/locale/ro/LC_MESSAGES/bash.mo 110 | usr/share/locale/ca/ 111 | usr/share/locale/ca/LC_MESSAGES/ 112 | usr/share/locale/ca/LC_MESSAGES/bash.mo 113 | usr/share/locale/en@boldquot/ 114 | usr/share/locale/en@boldquot/LC_MESSAGES/ 115 | usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo 116 | usr/share/locale/lt/ 117 | usr/share/locale/lt/LC_MESSAGES/ 118 | usr/share/locale/lt/LC_MESSAGES/bash.mo 119 | usr/share/locale/af/ 120 | usr/share/locale/af/LC_MESSAGES/ 121 | usr/share/locale/af/LC_MESSAGES/bash.mo 122 | usr/share/locale/pl/ 123 | usr/share/locale/pl/LC_MESSAGES/ 124 | usr/share/locale/pl/LC_MESSAGES/bash.mo 125 | usr/share/locale/sv/ 126 | usr/share/locale/sv/LC_MESSAGES/ 127 | usr/share/locale/sv/LC_MESSAGES/bash.mo 128 | usr/share/locale/en@quot/ 129 | usr/share/locale/en@quot/LC_MESSAGES/ 130 | usr/share/locale/en@quot/LC_MESSAGES/bash.mo 131 | -------------------------------------------------------------------------------- /test/samples/var/log/packages/bash-completion-1.3-noarch-4: -------------------------------------------------------------------------------- 1 | PACKAGE NAME: bash-completion-1.3-noarch-4 2 | COMPRESSED PACKAGE SIZE: 120K 3 | UNCOMPRESSED PACKAGE SIZE: 770K 4 | PACKAGE LOCATION: ./bash-completion-1.3-noarch-4.txz 5 | PACKAGE DESCRIPTION: 6 | bash-completion: bash-completion (programmable completion for the bash shell) 7 | bash-completion: 8 | bash-completion: Adds programmable completion to the bash shell. A new file called 9 | bash-completion: /etc/bash_completion will be sourced for interactive bash shells 10 | bash-completion: adding all sorts of enhanced command completion features. Once 11 | bash-completion: installed, you may get a list of all commands that have associated 12 | bash-completion: completions with 'complete -p', and examine the code for the shell 13 | bash-completion: functions with 'declare -f'. 14 | bash-completion: 15 | bash-completion: Homepage: https://alioth.debian.org/projects/bash-completion/ 16 | bash-completion: 17 | FILE LIST: 18 | ./ 19 | install/ 20 | install/slack-desc 21 | usr/ 22 | usr/doc/ 23 | usr/doc/bash-completion-1.3/ 24 | usr/doc/bash-completion-1.3/TODO 25 | usr/doc/bash-completion-1.3/CHANGES 26 | usr/doc/bash-completion-1.3/README 27 | usr/doc/bash-completion-1.3/COPYING 28 | usr/doc/bash-completion-1.3/contrib/ 29 | usr/doc/bash-completion-1.3/contrib/sbopkg 30 | usr/doc/bash-completion-1.3/contrib/slapt 31 | usr/doc/bash-completion-1.3/contrib/slackpkg 32 | usr/doc/bash-completion-1.3/contrib/rpm2tgz 33 | usr/doc/bash-completion-1.3/contrib/pkgtools 34 | usr/doc/bash-completion-1.3/AUTHORS 35 | etc/ 36 | etc/bash_completion.d/ 37 | etc/bash_completion.d/perl 38 | etc/bash_completion.d/e2fsprogs 39 | etc/bash_completion.d/lvm 40 | etc/bash_completion.d/k3b 41 | etc/bash_completion.d/man 42 | etc/bash_completion.d/rsync 43 | etc/bash_completion.d/heimdal 44 | etc/bash_completion.d/quota-tools 45 | etc/bash_completion.d/aptitude 46 | etc/bash_completion.d/rdesktop 47 | etc/bash_completion.d/apache2ctl 48 | etc/bash_completion.d/sysv-rc 49 | etc/bash_completion.d/cardctl 50 | etc/bash_completion.d/ifupdown 51 | etc/bash_completion.d/info 52 | etc/bash_completion.d/gpg2 53 | etc/bash_completion.d/ssh 54 | etc/bash_completion.d/apt-build 55 | etc/bash_completion.d/autorpm 56 | etc/bash_completion.d/hping2 57 | etc/bash_completion.d/openldap 58 | etc/bash_completion.d/open-iscsi 59 | etc/bash_completion.d/gzip 60 | etc/bash_completion.d/mount 61 | etc/bash_completion.d/mtx 62 | etc/bash_completion.d/rcs 63 | etc/bash_completion.d/sysbench 64 | etc/bash_completion.d/gcl 65 | etc/bash_completion.d/python 66 | etc/bash_completion.d/dhclient 67 | etc/bash_completion.d/ri 68 | etc/bash_completion.d/xm 69 | etc/bash_completion.d/lsof 70 | etc/bash_completion.d/iptables 71 | etc/bash_completion.d/yp-tools 72 | etc/bash_completion.d/xmllint 73 | etc/bash_completion.d/sqlite3 74 | etc/bash_completion.d/rpcdebug 75 | etc/bash_completion.d/xmms 76 | etc/bash_completion.d/xrandr 77 | etc/bash_completion.d/tar 78 | etc/bash_completion.d/wireless-tools 79 | etc/bash_completion.d/iconv 80 | etc/bash_completion.d/samba 81 | etc/bash_completion.d/ncftp 82 | etc/bash_completion.d/ipmitool 83 | etc/bash_completion.d/sshfs 84 | etc/bash_completion.d/cryptsetup 85 | etc/bash_completion.d/medusa 86 | etc/bash_completion.d/larch 87 | etc/bash_completion.d/unace 88 | etc/bash_completion.d/dsniff 89 | etc/bash_completion.d/ntpdate 90 | etc/bash_completion.d/gkrellm 91 | etc/bash_completion.d/xhost 92 | etc/bash_completion.d/dict 93 | etc/bash_completion.d/lilo 94 | etc/bash_completion.d/xmlwf 95 | etc/bash_completion.d/gnatmake 96 | etc/bash_completion.d/mc 97 | etc/bash_completion.d/portupgrade 98 | etc/bash_completion.d/mdadm 99 | etc/bash_completion.d/gdb 100 | etc/bash_completion.d/module-init-tools 101 | etc/bash_completion.d/cups 102 | etc/bash_completion.d/chkconfig 103 | etc/bash_completion.d/ipv6calc 104 | etc/bash_completion.d/rtcwake 105 | etc/bash_completion.d/sh 106 | etc/bash_completion.d/mysqladmin 107 | etc/bash_completion.d/bittorrent 108 | etc/bash_completion.d/lzma 109 | etc/bash_completion.d/freerdp 110 | etc/bash_completion.d/tcpdump 111 | etc/bash_completion.d/pkg_install 112 | etc/bash_completion.d/fuse 113 | etc/bash_completion.d/xrdb 114 | etc/bash_completion.d/monodevelop 115 | etc/bash_completion.d/coreutils 116 | etc/bash_completion.d/dpkg 117 | etc/bash_completion.d/cvsps 118 | etc/bash_completion.d/vpnc 119 | etc/bash_completion.d/nmap 120 | etc/bash_completion.d/gpg 121 | etc/bash_completion.d/screen 122 | etc/bash_completion.d/mutt 123 | etc/bash_completion.d/mkinitrd 124 | etc/bash_completion.d/munin-node 125 | etc/bash_completion.d/vncviewer 126 | etc/bash_completion.d/helpers/ 127 | etc/bash_completion.d/helpers/perl 128 | etc/bash_completion.d/bitkeeper 129 | etc/bash_completion.d/qemu 130 | etc/bash_completion.d/getent 131 | etc/bash_completion.d/imagemagick 132 | etc/bash_completion.d/apt 133 | etc/bash_completion.d/unrar 134 | etc/bash_completion.d/lrzip 135 | etc/bash_completion.d/automake 136 | etc/bash_completion.d/pkg-config 137 | etc/bash_completion.d/brctl 138 | etc/bash_completion.d/xz 139 | etc/bash_completion.d/aspell 140 | etc/bash_completion.d/cpan2dist 141 | etc/bash_completion.d/findutils 142 | etc/bash_completion.d/xsltproc 143 | etc/bash_completion.d/kldload 144 | etc/bash_completion.d/minicom 145 | etc/bash_completion.d/abook 146 | etc/bash_completion.d/isql 147 | etc/bash_completion.d/wtf 148 | etc/bash_completion.d/rfkill 149 | etc/bash_completion.d/bzip2 150 | etc/bash_completion.d/sitecopy 151 | etc/bash_completion.d/rpmcheck 152 | etc/bash_completion.d/postfix 153 | etc/bash_completion.d/smartctl 154 | etc/bash_completion.d/ipsec 155 | etc/bash_completion.d/ldapvi 156 | etc/bash_completion.d/wol 157 | etc/bash_completion.d/pkgtools 158 | etc/bash_completion.d/svk 159 | etc/bash_completion.d/make 160 | etc/bash_completion.d/cvs 161 | etc/bash_completion.d/dselect 162 | etc/bash_completion.d/cfengine 163 | etc/bash_completion.d/chsh 164 | etc/bash_completion.d/mailman 165 | etc/bash_completion.d/mplayer 166 | etc/bash_completion.d/crontab 167 | etc/bash_completion.d/dvd+rw-tools 168 | etc/bash_completion.d/lzop 169 | etc/bash_completion.d/iftop 170 | etc/bash_completion.d/qdbus 171 | etc/bash_completion.d/cksfv 172 | etc/bash_completion.d/java 173 | etc/bash_completion.d/ant 174 | etc/bash_completion.d/configure 175 | etc/bash_completion.d/procps 176 | etc/bash_completion.d/cowsay 177 | etc/bash_completion.d/pm-utils 178 | etc/bash_completion.d/genisoimage 179 | etc/bash_completion.d/net-tools 180 | etc/bash_completion.d/links 181 | etc/bash_completion.d/rpm 182 | etc/bash_completion.d/bluez 183 | etc/bash_completion.d/resolvconf 184 | etc/bash_completion.d/autoconf 185 | etc/bash_completion.d/lintian 186 | etc/bash_completion.d/postgresql 187 | etc/bash_completion.d/iproute2 188 | etc/bash_completion.d/pine 189 | etc/bash_completion.d/jar 190 | etc/bash_completion.d/mcrypt 191 | etc/bash_completion.d/yum-arch 192 | etc/bash_completion.d/shadow 193 | etc/bash_completion.d/sysctl 194 | etc/bash_completion.d/p4 195 | etc/bash_completion.d/povray 196 | etc/bash_completion.d/xmodmap 197 | etc/bash_completion.d/service 198 | etc/bash_completion.d/strace 199 | etc/bash_completion.d/cpio 200 | etc/bash_completion.d/wodim 201 | etc/bash_completion.d/openssl 202 | etc/bash_completion.d/reportbug 203 | etc/bash_completion.d/freeciv 204 | etc/bash_completion.d/snownews 205 | etc/bash_completion.d/clisp 206 | etc/bash_completion.d/gcc 207 | etc/bash_completion.d/bind-utils 208 | etc/bash_completion.d/msynctool 209 | etc/bash_completion.d/rrdtool 210 | etc/bash_completion.d/lftp 211 | etc/bash_completion.d/update-alternatives 212 | etc/bash_completion.d/lisp 213 | etc/bash_completion.d/sbcl 214 | etc/bash_completion.d/wvdial 215 | etc/bash_completion.d/bash-builtins 216 | etc/bash_completion.d/util-linux 217 | etc/bash_completion.d/dd 218 | etc/profile.d/ 219 | etc/profile.d/bash_completion.sh 220 | etc/bash_completion 221 | -------------------------------------------------------------------------------- /test/samples/var/log/packages/kbd-1.15.2-x86_64-1: -------------------------------------------------------------------------------- 1 | PACKAGE NAME: kbd-1.15.2-x86_64-1 2 | COMPRESSED PACKAGE SIZE: 1073K 3 | UNCOMPRESSED PACKAGE SIZE: 3410K 4 | PACKAGE LOCATION: /var/log/mount/slackware64/a/kbd-1.15.2-x86_64-1.txz 5 | PACKAGE DESCRIPTION: 6 | kbd: kbd (keyboard maps and console fonts) 7 | kbd: 8 | kbd: Load and save keyboard mappings. Needed if you are not using the US 9 | kbd: keyboard map. This package also contains utilities to change your 10 | kbd: console fonts - if you install it you'll get a menu later on that lets 11 | kbd: you select from many different fonts. If you like one, you can make 12 | kbd: it your default font. A new default font can be chosen at any time by 13 | kbd: typing 'setconsolefont'. 14 | kbd: 15 | kbd: 16 | kbd: 17 | FILE LIST: 18 | ./ 19 | etc/ 20 | etc/rc.d/ 21 | etc/rc.d/rc.font.new 22 | bin/ 23 | bin/loadkeys 24 | usr/ 25 | usr/share/ 26 | usr/share/kbd/ 27 | usr/share/kbd/consolefonts/ 28 | usr/share/kbd/consolefonts/gr928-9x16.psfu.gz 29 | usr/share/kbd/consolefonts/163.cp.gz 30 | usr/share/kbd/consolefonts/sun12x22.psfu.gz 31 | usr/share/kbd/consolefonts/t.fnt.gz 32 | usr/share/kbd/consolefonts/Goha-12.psfu.gz 33 | usr/share/kbd/consolefonts/iso07.14.gz 34 | usr/share/kbd/consolefonts/iso05.16.gz 35 | usr/share/kbd/consolefonts/iso07.16.gz 36 | usr/share/kbd/consolefonts/lat9v-08.psfu.gz 37 | usr/share/kbd/consolefonts/LatArCyrHeb-19.psfu.gz 38 | usr/share/kbd/consolefonts/m.fnt.gz 39 | usr/share/kbd/consolefonts/s.fnt.gz 40 | usr/share/kbd/consolefonts/iso10.14.gz 41 | usr/share/kbd/consolefonts/lat9u-12.psfu.gz 42 | usr/share/kbd/consolefonts/r.fnt.gz 43 | usr/share/kbd/consolefonts/README.Greek 44 | usr/share/kbd/consolefonts/iso03.14.gz 45 | usr/share/kbd/consolefonts/ruscii_8x8.psfu.gz 46 | usr/share/kbd/consolefonts/lat0-08.psfu.gz 47 | usr/share/kbd/consolefonts/lat4-16+.psfu.gz 48 | usr/share/kbd/consolefonts/lat4-14.psfu.gz 49 | usr/share/kbd/consolefonts/koi8-14.psf.gz 50 | usr/share/kbd/consolefonts/lat1-14.psfu.gz 51 | usr/share/kbd/consolefonts/lat4-10.psfu.gz 52 | usr/share/kbd/consolefonts/LatArCyrHeb-08.psfu.gz 53 | usr/share/kbd/consolefonts/lat5-14.psfu.gz 54 | usr/share/kbd/consolefonts/Mik_8x16.gz 55 | usr/share/kbd/consolefonts/drdos8x6.psfu.gz 56 | usr/share/kbd/consolefonts/iso03.16.gz 57 | usr/share/kbd/consolefonts/gr737b-9x16-medieval.psfu.gz 58 | usr/share/kbd/consolefonts/Agafari-12.psfu.gz 59 | usr/share/kbd/consolefonts/koi8r-8x16.gz 60 | usr/share/kbd/consolefonts/iso02-12x22.psfu.gz 61 | usr/share/kbd/consolefonts/mod_s.fnt.gz 62 | usr/share/kbd/consolefonts/lat9v-10.psfu.gz 63 | usr/share/kbd/consolefonts/lat5-12.psfu.gz 64 | usr/share/kbd/consolefonts/cp850-8x14.psfu.gz 65 | usr/share/kbd/consolefonts/README.Arabic 66 | usr/share/kbd/consolefonts/iso04.16.gz 67 | usr/share/kbd/consolefonts/UniCyr_8x8.psf.gz 68 | usr/share/kbd/consolefonts/lat9u-08.psfu.gz 69 | usr/share/kbd/consolefonts/README.Cyrillic 70 | usr/share/kbd/consolefonts/ml.fnt.gz 71 | usr/share/kbd/consolefonts/iso02.16.gz 72 | usr/share/kbd/consolefonts/cp850-8x16.psfu.gz 73 | usr/share/kbd/consolefonts/mod_d.fnt.gz 74 | usr/share/kbd/consolefonts/scrawl_w.fnt.gz 75 | usr/share/kbd/consolefonts/default8x16.psfu.gz 76 | usr/share/kbd/consolefonts/lat0-12.psfu.gz 77 | usr/share/kbd/consolefonts/lat1-08.psfu.gz 78 | usr/share/kbd/consolefonts/165.cp.gz 79 | usr/share/kbd/consolefonts/koi8u_8x16.psfu.gz 80 | usr/share/kbd/consolefonts/default8x9.psfu.gz 81 | usr/share/kbd/consolefonts/gr737a-8x8.psfu.gz 82 | usr/share/kbd/consolefonts/ruscii_8x16.psfu.gz 83 | usr/share/kbd/consolefonts/koi8u_8x8.psfu.gz 84 | usr/share/kbd/consolefonts/lat9-10.psf.gz 85 | usr/share/kbd/consolefonts/sc.fnt.gz 86 | usr/share/kbd/consolefonts/alt-8x16.gz 87 | usr/share/kbd/consolefonts/iso04.14.gz 88 | usr/share/kbd/consolefonts/UniCyr_8x14.psf.gz 89 | usr/share/kbd/consolefonts/Cyr_a8x8.psfu.gz 90 | usr/share/kbd/consolefonts/viscii10-8x16.psfu.gz 91 | usr/share/kbd/consolefonts/iso08.16.gz 92 | usr/share/kbd/consolefonts/iso06.08.gz 93 | usr/share/kbd/consolefonts/README.cp1250 94 | usr/share/kbd/consolefonts/lat4a-10.psfu.gz 95 | usr/share/kbd/consolefonts/cp857.16.gz 96 | usr/share/kbd/consolefonts/drdos8x8.psfu.gz 97 | usr/share/kbd/consolefonts/lat4a-12.psfu.gz 98 | usr/share/kbd/consolefonts/lat2-08.psfu.gz 99 | usr/share/kbd/consolefonts/koi8r-8x14.gz 100 | usr/share/kbd/consolefonts/iso07u-16.psfu.gz 101 | usr/share/kbd/consolefonts/gr737d-8x16.psfu.gz 102 | usr/share/kbd/consolefonts/lat4-19.psfu.gz 103 | usr/share/kbd/consolefonts/lat9u-14.psfu.gz 104 | usr/share/kbd/consolefonts/gr737c-8x7.psfu.gz 105 | usr/share/kbd/consolefonts/lat2a-16.psfu.gz 106 | usr/share/kbd/consolefonts/iso02.08.gz 107 | usr/share/kbd/consolefonts/koi8r.8x8.psfu.gz 108 | usr/share/kbd/consolefonts/gr737a-9x14.psfu.gz 109 | usr/share/kbd/consolefonts/README.Ethiopic 110 | usr/share/kbd/consolefonts/iso08.14.gz 111 | usr/share/kbd/consolefonts/arm8.fnt.gz 112 | usr/share/kbd/consolefonts/cp866-8x8.psf.gz 113 | usr/share/kbd/consolefonts/iso04.08.gz 114 | usr/share/kbd/consolefonts/lat9w-12.psfu.gz 115 | usr/share/kbd/consolefonts/lat9-16.psf.gz 116 | usr/share/kbd/consolefonts/iso10.08.gz 117 | usr/share/kbd/consolefonts/Cyr_a8x16.psfu.gz 118 | usr/share/kbd/consolefonts/iso05.08.gz 119 | usr/share/kbd/consolefonts/lat9w-08.psfu.gz 120 | usr/share/kbd/consolefonts/164.cp.gz 121 | usr/share/kbd/consolefonts/mu.fnt.gz 122 | usr/share/kbd/consolefonts/iso10.16.gz 123 | usr/share/kbd/consolefonts/972.cp.gz 124 | usr/share/kbd/consolefonts/LatArCyrHeb-16.psfu.gz 125 | usr/share/kbd/consolefonts/c.fnt.gz 126 | usr/share/kbd/consolefonts/lat9v-12.psfu.gz 127 | usr/share/kbd/consolefonts/UniCyr_8x16.psf.gz 128 | usr/share/kbd/consolefonts/gr737c-8x16.psfu.gz 129 | usr/share/kbd/consolefonts/iso01-12x22.psfu.gz 130 | usr/share/kbd/consolefonts/lat4a-16.psfu.gz 131 | usr/share/kbd/consolefonts/lat9-12.psf.gz 132 | usr/share/kbd/consolefonts/cp865-8x8.psfu.gz 133 | usr/share/kbd/consolefonts/lat4a-16+.psfu.gz 134 | usr/share/kbd/consolefonts/lat7a-16.psf.gz 135 | usr/share/kbd/consolefonts/gr737b-8x11.psfu.gz 136 | usr/share/kbd/consolefonts/lat1-12.psfu.gz 137 | usr/share/kbd/consolefonts/iso09.08.gz 138 | usr/share/kbd/consolefonts/altc-8x16.gz 139 | usr/share/kbd/consolefonts/lat4-12.psfu.gz 140 | usr/share/kbd/consolefonts/lat1-10.psfu.gz 141 | usr/share/kbd/consolefonts/aply16.psf.gz 142 | usr/share/kbd/consolefonts/README.lat9 143 | usr/share/kbd/consolefonts/iso05.14.gz 144 | usr/share/kbd/consolefonts/lat0-10.psfu.gz 145 | usr/share/kbd/consolefonts/gr928a-8x16.psfu.gz 146 | usr/share/kbd/consolefonts/lat2-14.psfu.gz 147 | usr/share/kbd/consolefonts/gr928b-8x14.psfu.gz 148 | usr/share/kbd/consolefonts/README.cybercafe 149 | usr/share/kbd/consolefonts/cp866-8x16.psf.gz 150 | usr/share/kbd/consolefonts/cp865-8x16.psfu.gz 151 | usr/share/kbd/consolefonts/cp866-8x14.psf.gz 152 | usr/share/kbd/consolefonts/lat9u-16.psfu.gz 153 | usr/share/kbd/consolefonts/cp857.14.gz 154 | usr/share/kbd/consolefonts/cp1250.psfu.gz 155 | usr/share/kbd/consolefonts/cp865-8x14.psfu.gz 156 | usr/share/kbd/consolefonts/928.cp.gz 157 | usr/share/kbd/consolefonts/162.cp.gz 158 | usr/share/kbd/consolefonts/lat9v-16.psfu.gz 159 | usr/share/kbd/consolefonts/lat9w-10.psfu.gz 160 | usr/share/kbd/consolefonts/rl.fnt.gz 161 | usr/share/kbd/consolefonts/iso09.14.gz 162 | usr/share/kbd/consolefonts/koi8c-8x16.gz 163 | usr/share/kbd/consolefonts/README.psfu 164 | usr/share/kbd/consolefonts/iso06.14.gz 165 | usr/share/kbd/consolefonts/lat2-10.psfu.gz 166 | usr/share/kbd/consolefonts/lat2-12.psfu.gz 167 | usr/share/kbd/consolefonts/GohaClassic-16.psfu.gz 168 | usr/share/kbd/consolefonts/lat5-16.psfu.gz 169 | usr/share/kbd/consolefonts/drdos8x16.psfu.gz 170 | usr/share/kbd/consolefonts/koi8u_8x14.psfu.gz 171 | usr/share/kbd/consolefonts/gr737c-8x6.psfu.gz 172 | usr/share/kbd/consolefonts/cp850-8x8.psfu.gz 173 | usr/share/kbd/consolefonts/lat4a-08.psfu.gz 174 | usr/share/kbd/consolefonts/README.drdos 175 | usr/share/kbd/consolefonts/t850b.fnt.gz 176 | usr/share/kbd/consolefonts/lat0-14.psfu.gz 177 | usr/share/kbd/consolefonts/iso08.08.gz 178 | usr/share/kbd/consolefonts/iso01.14.gz 179 | usr/share/kbd/consolefonts/gr928-8x16-thin.psfu.gz 180 | usr/share/kbd/consolefonts/iso01.16.gz 181 | usr/share/kbd/consolefonts/lat9w-16.psfu.gz 182 | usr/share/kbd/consolefonts/GohaClassic-12.psfu.gz 183 | usr/share/kbd/consolefonts/Cyr_a8x14.psfu.gz 184 | usr/share/kbd/consolefonts/alt-8x8.gz 185 | usr/share/kbd/consolefonts/lat0-16.psfu.gz 186 | usr/share/kbd/consolefonts/LatArCyrHeb-16+.psfu.gz 187 | usr/share/kbd/consolefonts/cyr-sun16.psfu.gz 188 | usr/share/kbd/consolefonts/Agafari-16.psfu.gz 189 | usr/share/kbd/consolefonts/cp857.08.gz 190 | usr/share/kbd/consolefonts/737.cp.gz 191 | usr/share/kbd/consolefonts/README.lat7 192 | usr/share/kbd/consolefonts/LatArCyrHeb-14.psfu.gz 193 | usr/share/kbd/consolefonts/koi8r-8x8.gz 194 | usr/share/kbd/consolefonts/ERRORS 195 | usr/share/kbd/consolefonts/sd.fnt.gz 196 | usr/share/kbd/consolefonts/gr737c-8x14.psfu.gz 197 | usr/share/kbd/consolefonts/iso06.16.gz 198 | usr/share/kbd/consolefonts/partialfonts/ 199 | usr/share/kbd/consolefonts/partialfonts/8859-4.a0-ff.16.gz 200 | usr/share/kbd/consolefonts/partialfonts/8859-7.a0-ff.16.gz 201 | usr/share/kbd/consolefonts/partialfonts/8859-7.a0-ff.14.gz 202 | usr/share/kbd/consolefonts/partialfonts/8859-1.a0-ff.14.gz 203 | usr/share/kbd/consolefonts/partialfonts/8859-6.a0-ff.08.gz 204 | usr/share/kbd/consolefonts/partialfonts/ascii.20-7f.14.gz 205 | usr/share/kbd/consolefonts/partialfonts/8859-2.a0-ff.14.gz 206 | usr/share/kbd/consolefonts/partialfonts/8859-8.a0-ff.16.gz 207 | usr/share/kbd/consolefonts/partialfonts/8859-1.a0-ff.16.gz 208 | usr/share/kbd/consolefonts/partialfonts/8859-6.a0-ff.16.gz 209 | usr/share/kbd/consolefonts/partialfonts/8859-8.a0-ff.08.gz 210 | usr/share/kbd/consolefonts/partialfonts/cp437.00-1f.16.gz 211 | usr/share/kbd/consolefonts/partialfonts/8859-8.a0-ff.14.gz 212 | usr/share/kbd/consolefonts/partialfonts/8859-5.a0-ff.16.gz 213 | usr/share/kbd/consolefonts/partialfonts/ascii.20-7f.08.gz 214 | usr/share/kbd/consolefonts/partialfonts/8859-4.a0-ff.14.gz 215 | usr/share/kbd/consolefonts/partialfonts/ascii.20-7f.16.gz 216 | usr/share/kbd/consolefonts/partialfonts/8859-1.a0-ff.08.gz 217 | usr/share/kbd/consolefonts/partialfonts/8859-10.a0-ff.08.gz 218 | usr/share/kbd/consolefonts/partialfonts/8859-2.a0-ff.16.gz 219 | usr/share/kbd/consolefonts/partialfonts/8859-7.a0-ff.08.gz 220 | usr/share/kbd/consolefonts/partialfonts/8859-10.a0-ff.14.gz 221 | usr/share/kbd/consolefonts/partialfonts/cp437.00-1f.08.gz 222 | usr/share/kbd/consolefonts/partialfonts/8859-2.a0-ff.08.gz 223 | usr/share/kbd/consolefonts/partialfonts/8859-3.a0-ff.16.gz 224 | usr/share/kbd/consolefonts/partialfonts/8859-9.a0-ff.16.gz 225 | usr/share/kbd/consolefonts/partialfonts/none.00-17.16.gz 226 | usr/share/kbd/consolefonts/partialfonts/8859-9.a0-ff.08.gz 227 | usr/share/kbd/consolefonts/partialfonts/8859-3.a0-ff.08.gz 228 | usr/share/kbd/consolefonts/partialfonts/8859-6.a0-ff.14.gz 229 | usr/share/kbd/consolefonts/partialfonts/8859-3.a0-ff.14.gz 230 | usr/share/kbd/consolefonts/partialfonts/none.00-17.08.gz 231 | usr/share/kbd/consolefonts/partialfonts/none.00-17.14.gz 232 | usr/share/kbd/consolefonts/partialfonts/8859-4.a0-ff.08.gz 233 | usr/share/kbd/consolefonts/partialfonts/8859-10.a0-ff.16.gz 234 | usr/share/kbd/consolefonts/partialfonts/8859-5.a0-ff.08.gz 235 | usr/share/kbd/consolefonts/partialfonts/cp437.00-1f.14.gz 236 | usr/share/kbd/consolefonts/partialfonts/8859-9.a0-ff.14.gz 237 | usr/share/kbd/consolefonts/partialfonts/8859-5.a0-ff.14.gz 238 | usr/share/kbd/consolefonts/880.cp.gz 239 | usr/share/kbd/consolefonts/cybercafe.fnt.gz 240 | usr/share/kbd/consolefonts/gr737c-8x8.psfu.gz 241 | usr/share/kbd/consolefonts/lat9-08.psf.gz 242 | usr/share/kbd/consolefonts/README.lat0 243 | usr/share/kbd/consolefonts/gr928b-8x16.psfu.gz 244 | usr/share/kbd/consolefonts/mr.fnt.gz 245 | usr/share/kbd/consolefonts/lat9u-10.psfu.gz 246 | usr/share/kbd/consolefonts/Goha-14.psfu.gz 247 | usr/share/kbd/consolefonts/iso03.08.gz 248 | usr/share/kbd/consolefonts/lat1-16.psfu.gz 249 | usr/share/kbd/consolefonts/greek-polytonic.psfu.gz 250 | usr/share/kbd/consolefonts/iso01.08.gz 251 | usr/share/kbd/consolefonts/lat7-14.psfu.gz 252 | usr/share/kbd/consolefonts/161.cp.gz 253 | usr/share/kbd/consolefonts/lat9-14.psf.gz 254 | usr/share/kbd/consolefonts/Agafari-14.psfu.gz 255 | usr/share/kbd/consolefonts/Goha-16.psfu.gz 256 | usr/share/kbd/consolefonts/lat2-16.psfu.gz 257 | usr/share/kbd/consolefonts/GohaClassic-14.psfu.gz 258 | usr/share/kbd/consolefonts/LatKaCyrHeb-14.psfu.gz 259 | usr/share/kbd/consolefonts/lat4a-14.psfu.gz 260 | usr/share/kbd/consolefonts/scrawl_s.fnt.gz 261 | usr/share/kbd/consolefonts/lat4-08.psfu.gz 262 | usr/share/kbd/consolefonts/ro.fnt.gz 263 | usr/share/kbd/consolefonts/iso09.16.gz 264 | usr/share/kbd/consolefonts/alt-8x14.gz 265 | usr/share/kbd/consolefonts/gr737a-9x16.psfu.gz 266 | usr/share/kbd/consolefonts/tcvn8x16.psf.gz 267 | usr/share/kbd/consolefonts/iso02.14.gz 268 | usr/share/kbd/consolefonts/b.fnt.gz 269 | usr/share/kbd/consolefonts/lat4a-19.psfu.gz 270 | usr/share/kbd/consolefonts/gr928-9x14.psfu.gz 271 | usr/share/kbd/consolefonts/drdos8x14.psfu.gz 272 | usr/share/kbd/consolefonts/README.12x22 273 | usr/share/kbd/consolefonts/lat4-16.psfu.gz 274 | usr/share/kbd/consolefonts/gr928a-8x14.psfu.gz 275 | usr/share/kbd/consolefonts/Lat2-Terminus16.psfu.gz 276 | usr/share/kbd/consolefonts/lat9v-14.psfu.gz 277 | usr/share/kbd/consolefonts/lat9w-14.psfu.gz 278 | usr/share/kbd/consolefonts/lat7a-14.psfu.gz 279 | usr/share/kbd/consolefonts/UniCyrExt_8x16.psf.gz 280 | usr/share/kbd/consolefonts/README.Lat2-Terminus16 281 | usr/share/kbd/consolefonts/README.Hebrew 282 | usr/share/kbd/keymaps/ 283 | usr/share/kbd/keymaps/include/ 284 | usr/share/kbd/keymaps/include/compose.latin4 285 | usr/share/kbd/keymaps/include/compose.8859_7 286 | usr/share/kbd/keymaps/include/compose.8859_8 287 | usr/share/kbd/keymaps/include/compose.latin2 288 | usr/share/kbd/keymaps/include/compose.latin1 289 | usr/share/kbd/keymaps/include/vim-compose.latin1 290 | usr/share/kbd/keymaps/include/compose.latin3 291 | usr/share/kbd/keymaps/include/compose.latin 292 | usr/share/kbd/keymaps/amiga/ 293 | usr/share/kbd/keymaps/amiga/amiga-de.map.gz 294 | usr/share/kbd/keymaps/amiga/amiga-us.map.gz 295 | usr/share/kbd/keymaps/i386/ 296 | usr/share/kbd/keymaps/i386/include/ 297 | usr/share/kbd/keymaps/i386/include/azerty-layout.inc 298 | usr/share/kbd/keymaps/i386/include/qwertz-layout.inc 299 | usr/share/kbd/keymaps/i386/include/keypad.map.gz 300 | usr/share/kbd/keymaps/i386/include/euro.map.gz 301 | usr/share/kbd/keymaps/i386/include/windowkeys.map.gz 302 | usr/share/kbd/keymaps/i386/include/euro1.map.gz 303 | usr/share/kbd/keymaps/i386/include/ctrl.map.gz 304 | usr/share/kbd/keymaps/i386/include/euro2.map.gz 305 | usr/share/kbd/keymaps/i386/include/qwerty-layout.inc 306 | usr/share/kbd/keymaps/i386/include/linux-with-modeshift-altgr.inc 307 | usr/share/kbd/keymaps/i386/include/linux-with-two-alt-keys.inc 308 | usr/share/kbd/keymaps/i386/include/unicode.map.gz 309 | usr/share/kbd/keymaps/i386/include/linux-keys-extd.inc 310 | usr/share/kbd/keymaps/i386/include/applkey.map.gz 311 | usr/share/kbd/keymaps/i386/include/linux-keys-bare.inc 312 | usr/share/kbd/keymaps/i386/include/backspace.map.gz 313 | usr/share/kbd/keymaps/i386/include/linux-with-alt-and-altgr.inc 314 | usr/share/kbd/keymaps/i386/include/euro1.inc 315 | usr/share/kbd/keymaps/i386/include/compose.inc 316 | usr/share/kbd/keymaps/i386/colemak/ 317 | usr/share/kbd/keymaps/i386/colemak/en-latin9.map.gz 318 | usr/share/kbd/keymaps/i386/azerty/ 319 | usr/share/kbd/keymaps/i386/azerty/azerty.map.gz 320 | usr/share/kbd/keymaps/i386/azerty/fr-pc.map.gz 321 | usr/share/kbd/keymaps/i386/azerty/fr-old.map.gz 322 | usr/share/kbd/keymaps/i386/azerty/fr-latin1.map.gz 323 | usr/share/kbd/keymaps/i386/azerty/fr-latin0.map.gz 324 | usr/share/kbd/keymaps/i386/azerty/wangbe2.map.gz 325 | usr/share/kbd/keymaps/i386/azerty/fr.map.gz 326 | usr/share/kbd/keymaps/i386/azerty/fr-latin9.map.gz 327 | usr/share/kbd/keymaps/i386/azerty/wangbe.map.gz 328 | usr/share/kbd/keymaps/i386/azerty/be-latin1.map.gz 329 | usr/share/kbd/keymaps/i386/fgGIod/ 330 | usr/share/kbd/keymaps/i386/fgGIod/tr_f-latin5.map.gz 331 | usr/share/kbd/keymaps/i386/fgGIod/trf-fgGIod.map.gz 332 | usr/share/kbd/keymaps/i386/qwertz/ 333 | usr/share/kbd/keymaps/i386/qwertz/fr_CH-latin1.map.gz 334 | usr/share/kbd/keymaps/i386/qwertz/de-mobii.map.gz 335 | usr/share/kbd/keymaps/i386/qwertz/sk-prog-qwertz.map.gz 336 | usr/share/kbd/keymaps/i386/qwertz/de-latin1-nodeadkeys.map.gz 337 | usr/share/kbd/keymaps/i386/qwertz/sg-latin1.map.gz 338 | usr/share/kbd/keymaps/i386/qwertz/cz.map.gz 339 | usr/share/kbd/keymaps/i386/qwertz/de.map.gz 340 | usr/share/kbd/keymaps/i386/qwertz/sg-latin1-lk450.map.gz 341 | usr/share/kbd/keymaps/i386/qwertz/slovene.map.gz 342 | usr/share/kbd/keymaps/i386/qwertz/de_alt_UTF-8.map.gz 343 | usr/share/kbd/keymaps/i386/qwertz/de_CH-latin1.map.gz 344 | usr/share/kbd/keymaps/i386/qwertz/fr_CH.map.gz 345 | usr/share/kbd/keymaps/i386/qwertz/sg.map.gz 346 | usr/share/kbd/keymaps/i386/qwertz/sk-qwertz.map.gz 347 | usr/share/kbd/keymaps/i386/qwertz/cz-us-qwertz.map.gz 348 | usr/share/kbd/keymaps/i386/qwertz/hu.map.gz 349 | usr/share/kbd/keymaps/i386/qwertz/de-latin1.map.gz 350 | usr/share/kbd/keymaps/i386/qwertz/croat.map.gz 351 | usr/share/kbd/keymaps/i386/dvorak/ 352 | usr/share/kbd/keymaps/i386/dvorak/dvorak-r.map.gz 353 | usr/share/kbd/keymaps/i386/dvorak/dvorak-fr.map.gz 354 | usr/share/kbd/keymaps/i386/dvorak/dvorak-l.map.gz 355 | usr/share/kbd/keymaps/i386/dvorak/no-dvorak.map.gz 356 | usr/share/kbd/keymaps/i386/dvorak/ANSI-dvorak.map.gz 357 | usr/share/kbd/keymaps/i386/dvorak/dvorak.map.gz 358 | usr/share/kbd/keymaps/i386/olpc/ 359 | usr/share/kbd/keymaps/i386/olpc/pt-olpc.map.gz 360 | usr/share/kbd/keymaps/i386/olpc/es-olpc.map.gz 361 | usr/share/kbd/keymaps/i386/qwerty/ 362 | usr/share/kbd/keymaps/i386/qwerty/pl1.map.gz 363 | usr/share/kbd/keymaps/i386/qwerty/pt-latin1.map.gz 364 | usr/share/kbd/keymaps/i386/qwerty/hu101.map.gz 365 | usr/share/kbd/keymaps/i386/qwerty/bg_pho-utf8.map.gz 366 | usr/share/kbd/keymaps/i386/qwerty/trq.map.gz 367 | usr/share/kbd/keymaps/i386/qwerty/se-ir209.map.gz 368 | usr/share/kbd/keymaps/i386/qwerty/ruwin_cplk-UTF-8.map.gz 369 | usr/share/kbd/keymaps/i386/qwerty/gr.map.gz 370 | usr/share/kbd/keymaps/i386/qwerty/bywin-cp1251.map.gz 371 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ct_sh-UTF-8.map.gz 372 | usr/share/kbd/keymaps/i386/qwerty/ru.map.gz 373 | usr/share/kbd/keymaps/i386/qwerty/dk-latin1.map.gz 374 | usr/share/kbd/keymaps/i386/qwerty/ru_win.map.gz 375 | usr/share/kbd/keymaps/i386/qwerty/by.map.gz 376 | usr/share/kbd/keymaps/i386/qwerty/it.map.gz 377 | usr/share/kbd/keymaps/i386/qwerty/ru1.map.gz 378 | usr/share/kbd/keymaps/i386/qwerty/et.map.gz 379 | usr/share/kbd/keymaps/i386/qwerty/pt.map.gz 380 | usr/share/kbd/keymaps/i386/qwerty/et-nodeadkeys.map.gz 381 | usr/share/kbd/keymaps/i386/qwerty/ttwin_ct_sh-UTF-8.map.gz 382 | usr/share/kbd/keymaps/i386/qwerty/br-latin1-abnt2.map.gz 383 | usr/share/kbd/keymaps/i386/qwerty/us-acentos.map.gz 384 | usr/share/kbd/keymaps/i386/qwerty/speakup-jfw.map.gz 385 | usr/share/kbd/keymaps/i386/qwerty/ua-utf.map.gz 386 | usr/share/kbd/keymaps/i386/qwerty/ru-cp1251.map.gz 387 | usr/share/kbd/keymaps/i386/qwerty/ro_std.map.gz 388 | usr/share/kbd/keymaps/i386/qwerty/cz-lat2-prog.map.gz 389 | usr/share/kbd/keymaps/i386/qwerty/kazakh.map.gz 390 | usr/share/kbd/keymaps/i386/qwerty/br-abnt.map.gz 391 | usr/share/kbd/keymaps/i386/qwerty/cz-lat2.map.gz 392 | usr/share/kbd/keymaps/i386/qwerty/jp106.map.gz 393 | usr/share/kbd/keymaps/i386/qwerty/pl3.map.gz 394 | usr/share/kbd/keymaps/i386/qwerty/sk-qwerty.map.gz 395 | usr/share/kbd/keymaps/i386/qwerty/es.map.gz 396 | usr/share/kbd/keymaps/i386/qwerty/ruwin_cplk-CP1251.map.gz 397 | usr/share/kbd/keymaps/i386/qwerty/fi-old.map.gz 398 | usr/share/kbd/keymaps/i386/qwerty/il-phonetic.map.gz 399 | usr/share/kbd/keymaps/i386/qwerty/ro.map.gz 400 | usr/share/kbd/keymaps/i386/qwerty/speakupmap.map.gz 401 | usr/share/kbd/keymaps/i386/qwerty/ttwin_cplk-UTF-8.map.gz 402 | usr/share/kbd/keymaps/i386/qwerty/se-latin1.map.gz 403 | usr/share/kbd/keymaps/i386/qwerty/ruwin_alt-UTF-8.map.gz 404 | usr/share/kbd/keymaps/i386/qwerty/defkeymap_V1.0.map.gz 405 | usr/share/kbd/keymaps/i386/qwerty/ru4.map.gz 406 | usr/share/kbd/keymaps/i386/qwerty/us.map.gz 407 | usr/share/kbd/keymaps/i386/qwerty/bg-cp1251.map.gz 408 | usr/share/kbd/keymaps/i386/qwerty/bashkir.map.gz 409 | usr/share/kbd/keymaps/i386/qwerty/es-cp850.map.gz 410 | usr/share/kbd/keymaps/i386/qwerty/trf.map.gz 411 | usr/share/kbd/keymaps/i386/qwerty/ua-cp1251.map.gz 412 | usr/share/kbd/keymaps/i386/qwerty/cf.map.gz 413 | usr/share/kbd/keymaps/i386/qwerty/ruwin_cplk-KOI8-R.map.gz 414 | usr/share/kbd/keymaps/i386/qwerty/is-latin1-us.map.gz 415 | usr/share/kbd/keymaps/i386/qwerty/fi.map.gz 416 | usr/share/kbd/keymaps/i386/qwerty/bg_bds-cp1251.map.gz 417 | usr/share/kbd/keymaps/i386/qwerty/no-latin1.doc 418 | usr/share/kbd/keymaps/i386/qwerty/la-latin1.map.gz 419 | usr/share/kbd/keymaps/i386/qwerty/mk0.map.gz 420 | usr/share/kbd/keymaps/i386/qwerty/tr_q-latin5.map.gz 421 | usr/share/kbd/keymaps/i386/qwerty/pc110.map.gz 422 | usr/share/kbd/keymaps/i386/qwerty/nl.map.gz 423 | usr/share/kbd/keymaps/i386/qwerty/ru-yawerty.map.gz 424 | usr/share/kbd/keymaps/i386/qwerty/gr-pc.map.gz 425 | usr/share/kbd/keymaps/i386/qwerty/cz-qwerty.map.gz 426 | usr/share/kbd/keymaps/i386/qwerty/pl4.map.gz 427 | usr/share/kbd/keymaps/i386/qwerty/pt-latin9.map.gz 428 | usr/share/kbd/keymaps/i386/qwerty/br-latin1-us.map.gz 429 | usr/share/kbd/keymaps/i386/qwerty/it2.map.gz 430 | usr/share/kbd/keymaps/i386/qwerty/se-fi-ir209.map.gz 431 | usr/share/kbd/keymaps/i386/qwerty/lt.l4.map.gz 432 | usr/share/kbd/keymaps/i386/qwerty/fi-latin9.map.gz 433 | usr/share/kbd/keymaps/i386/qwerty/no-latin1.map.gz 434 | usr/share/kbd/keymaps/i386/qwerty/mk-cp1251.map.gz 435 | usr/share/kbd/keymaps/i386/qwerty/uk.map.gz 436 | usr/share/kbd/keymaps/i386/qwerty/is-latin1.map.gz 437 | usr/share/kbd/keymaps/i386/qwerty/lt.baltic.map.gz 438 | usr/share/kbd/keymaps/i386/qwerty/ua-ws.map.gz 439 | usr/share/kbd/keymaps/i386/qwerty/ttwin_alt-UTF-8.map.gz 440 | usr/share/kbd/keymaps/i386/qwerty/lt.map.gz 441 | usr/share/kbd/keymaps/i386/qwerty/sr-cy.map.gz 442 | usr/share/kbd/keymaps/i386/qwerty/no.map.gz 443 | usr/share/kbd/keymaps/i386/qwerty/nl2.map.gz 444 | usr/share/kbd/keymaps/i386/qwerty/mk-utf.map.gz 445 | usr/share/kbd/keymaps/i386/qwerty/ruwin_alt-CP1251.map.gz 446 | usr/share/kbd/keymaps/i386/qwerty/bg-cp855.map.gz 447 | usr/share/kbd/keymaps/i386/qwerty/by-cp1251.map.gz 448 | usr/share/kbd/keymaps/i386/qwerty/br-abnt2.map.gz 449 | usr/share/kbd/keymaps/i386/qwerty/sv-latin1.map.gz 450 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ct_sh-KOI8-R.map.gz 451 | usr/share/kbd/keymaps/i386/qwerty/defkeymap.map.gz 452 | usr/share/kbd/keymaps/i386/qwerty/hypermap.m4 453 | usr/share/kbd/keymaps/i386/qwerty/dk.map.gz 454 | usr/share/kbd/keymaps/i386/qwerty/ru2.map.gz 455 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ctrl-KOI8-R.map.gz 456 | usr/share/kbd/keymaps/i386/qwerty/fi-latin1.map.gz 457 | usr/share/kbd/keymaps/i386/qwerty/se-fi-lat6.map.gz 458 | usr/share/kbd/keymaps/i386/qwerty/se-lat6.map.gz 459 | usr/share/kbd/keymaps/i386/qwerty/tj_alt-UTF8.map.gz 460 | usr/share/kbd/keymaps/i386/qwerty/ru3.map.gz 461 | usr/share/kbd/keymaps/i386/qwerty/pl.map.gz 462 | usr/share/kbd/keymaps/i386/qwerty/ky_alt_sh-UTF-8.map.gz 463 | usr/share/kbd/keymaps/i386/qwerty/sk-prog-qwerty.map.gz 464 | usr/share/kbd/keymaps/i386/qwerty/emacs.map.gz 465 | usr/share/kbd/keymaps/i386/qwerty/il-heb.map.gz 466 | usr/share/kbd/keymaps/i386/qwerty/tralt.map.gz 467 | usr/share/kbd/keymaps/i386/qwerty/ruwin_alt-KOI8-R.map.gz 468 | usr/share/kbd/keymaps/i386/qwerty/it-ibm.map.gz 469 | usr/share/kbd/keymaps/i386/qwerty/ttwin_ctrl-UTF-8.map.gz 470 | usr/share/kbd/keymaps/i386/qwerty/pl2.map.gz 471 | usr/share/kbd/keymaps/i386/qwerty/bg_bds-utf8.map.gz 472 | usr/share/kbd/keymaps/i386/qwerty/mk.map.gz 473 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ct_sh-CP1251.map.gz 474 | usr/share/kbd/keymaps/i386/qwerty/ru-ms.map.gz 475 | usr/share/kbd/keymaps/i386/qwerty/emacs2.map.gz 476 | usr/share/kbd/keymaps/i386/qwerty/speakup-jfw.readme 477 | usr/share/kbd/keymaps/i386/qwerty/ua-utf-ws.map.gz 478 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ctrl-CP1251.map.gz 479 | usr/share/kbd/keymaps/i386/qwerty/ua.map.gz 480 | usr/share/kbd/keymaps/i386/qwerty/kyrgyz.map.gz 481 | usr/share/kbd/keymaps/i386/qwerty/il.map.gz 482 | usr/share/kbd/keymaps/i386/qwerty/ruwin_ctrl-UTF-8.map.gz 483 | usr/share/kbd/keymaps/i386/qwerty/bg_pho-cp1251.map.gz 484 | usr/share/kbd/keymaps/i386/qwerty/cz-cp1250.map.gz 485 | usr/share/kbd/keymaps/sun/ 486 | usr/share/kbd/keymaps/sun/sunt5-fr-latin1.map.gz 487 | usr/share/kbd/keymaps/sun/sunkeymap.map.gz 488 | usr/share/kbd/keymaps/sun/sun-pl-altgraph.map.gz 489 | usr/share/kbd/keymaps/sun/sun-pl.map.gz 490 | usr/share/kbd/keymaps/sun/sunt5-cz-us.map.gz 491 | usr/share/kbd/keymaps/sun/sunt4-no-latin1.map.gz 492 | usr/share/kbd/keymaps/sun/sunt5-us-cz.map.gz 493 | usr/share/kbd/keymaps/sun/sunt4-es.map.gz 494 | usr/share/kbd/keymaps/sun/sunt5-fi-latin1.map.gz 495 | usr/share/kbd/keymaps/sun/sunt5-uk.map.gz 496 | usr/share/kbd/keymaps/sun/sunt4-fi-latin1.map.gz 497 | usr/share/kbd/keymaps/sun/sunt6-uk.map.gz 498 | usr/share/kbd/keymaps/sun/sundvorak.map.gz 499 | usr/share/kbd/keymaps/sun/sunt5-es.map.gz 500 | usr/share/kbd/keymaps/sun/sunt5-ru.map.gz 501 | usr/share/kbd/keymaps/sun/sunt5-de-latin1.map.gz 502 | usr/share/kbd/keymaps/mac/ 503 | usr/share/kbd/keymaps/mac/include/ 504 | usr/share/kbd/keymaps/mac/include/mac-azerty-layout.inc 505 | usr/share/kbd/keymaps/mac/include/mac-qwerty-layout.inc 506 | usr/share/kbd/keymaps/mac/include/mac-qwertz-layout.inc 507 | usr/share/kbd/keymaps/mac/include/mac-linux-keys-bare.inc 508 | usr/share/kbd/keymaps/mac/include/mac-euro2.map.gz 509 | usr/share/kbd/keymaps/mac/include/mac-euro.map.gz 510 | usr/share/kbd/keymaps/mac/all/ 511 | usr/share/kbd/keymaps/mac/all/mac-template.map.gz 512 | usr/share/kbd/keymaps/mac/all/mac-be.map.gz 513 | usr/share/kbd/keymaps/mac/all/mac-pl.map.gz 514 | usr/share/kbd/keymaps/mac/all/mac-it.map.gz 515 | usr/share/kbd/keymaps/mac/all/mac-de-latin1-nodeadkeys.map.gz 516 | usr/share/kbd/keymaps/mac/all/mac-de_CH.map.gz 517 | usr/share/kbd/keymaps/mac/all/mac-de-latin1.map.gz 518 | usr/share/kbd/keymaps/mac/all/mac-uk.map.gz 519 | usr/share/kbd/keymaps/mac/all/mac-us.map.gz 520 | usr/share/kbd/keymaps/mac/all/mac-fr_CH-latin1.map.gz 521 | usr/share/kbd/keymaps/mac/all/mac-se.map.gz 522 | usr/share/kbd/keymaps/mac/all/mac-pt-latin1.map.gz 523 | usr/share/kbd/keymaps/mac/all/mac-fr.map.gz 524 | usr/share/kbd/keymaps/mac/all/mac-es.map.gz 525 | usr/share/kbd/keymaps/mac/all/mac-dvorak.map.gz 526 | usr/share/kbd/keymaps/mac/all/mac-fi-latin1.map.gz 527 | usr/share/kbd/keymaps/mac/all/mac-dk-latin1.map.gz 528 | usr/share/kbd/keymaps/atari/ 529 | usr/share/kbd/keymaps/atari/atari-us.map.gz 530 | usr/share/kbd/keymaps/atari/atari-uk-falcon.map.gz 531 | usr/share/kbd/keymaps/atari/atari-se.map.gz 532 | usr/share/kbd/keymaps/atari/atari-de.map.gz 533 | usr/share/kbd/unimaps/ 534 | usr/share/kbd/unimaps/iso01.uni 535 | usr/share/kbd/unimaps/lat1u.uni 536 | usr/share/kbd/unimaps/8859-3.a0-ff.uni 537 | usr/share/kbd/unimaps/tcvn.uni 538 | usr/share/kbd/unimaps/lat4.uni 539 | usr/share/kbd/unimaps/8859-6.a0-ff.uni 540 | usr/share/kbd/unimaps/8859-14.a0-ff.uni 541 | usr/share/kbd/unimaps/cp437.00-1f.uni 542 | usr/share/kbd/unimaps/iso02.uni 543 | usr/share/kbd/unimaps/lat9w.uni 544 | usr/share/kbd/unimaps/README 545 | usr/share/kbd/unimaps/iso10.uni 546 | usr/share/kbd/unimaps/lat9v.uni 547 | usr/share/kbd/unimaps/empty.uni 548 | usr/share/kbd/unimaps/cp850b.uni 549 | usr/share/kbd/unimaps/iso08.uni 550 | usr/share/kbd/unimaps/lat9u.uni 551 | usr/share/kbd/unimaps/cp737c.uni 552 | usr/share/kbd/unimaps/cp866.uni 553 | usr/share/kbd/unimaps/cp865a.uni 554 | usr/share/kbd/unimaps/iso07u.uni 555 | usr/share/kbd/unimaps/iso05.uni 556 | usr/share/kbd/unimaps/iso15.uni 557 | usr/share/kbd/unimaps/viscii.uni 558 | usr/share/kbd/unimaps/8859-4.a0-ff.uni 559 | usr/share/kbd/unimaps/lat7.uni 560 | usr/share/kbd/unimaps/cp850a.uni 561 | usr/share/kbd/unimaps/cp850.uni 562 | usr/share/kbd/unimaps/lat1.uni 563 | usr/share/kbd/unimaps/iso03.uni 564 | usr/share/kbd/unimaps/ECMA144.uni 565 | usr/share/kbd/unimaps/cp1250.uni 566 | usr/share/kbd/unimaps/cyralt.uni 567 | usr/share/kbd/unimaps/ethiopic.uni 568 | usr/share/kbd/unimaps/lat2.uni 569 | usr/share/kbd/unimaps/cybercafe.uni 570 | usr/share/kbd/unimaps/iso09.uni 571 | usr/share/kbd/unimaps/koi8r.uni 572 | usr/share/kbd/unimaps/8859-5.a0-ff.uni 573 | usr/share/kbd/unimaps/8859-15.a0-ff.uni 574 | usr/share/kbd/unimaps/8859-10.a0-ff.uni 575 | usr/share/kbd/unimaps/armscii8.uni 576 | usr/share/kbd/unimaps/cp866a.uni 577 | usr/share/kbd/unimaps/iso06.uni 578 | usr/share/kbd/unimaps/8859-9.a0-ff.uni 579 | usr/share/kbd/unimaps/8859-1.a0-ff.uni 580 | usr/share/kbd/unimaps/8859-13.a0-ff.uni 581 | usr/share/kbd/unimaps/lat2u.uni 582 | usr/share/kbd/unimaps/cp737.uni 583 | usr/share/kbd/unimaps/koi8u.uni 584 | usr/share/kbd/unimaps/cp737a.uni 585 | usr/share/kbd/unimaps/ascii.20-7f.uni 586 | usr/share/kbd/unimaps/ruscii.uni 587 | usr/share/kbd/unimaps/iso04.uni 588 | usr/share/kbd/unimaps/lat4u.uni 589 | usr/share/kbd/unimaps/def.uni 590 | usr/share/kbd/unimaps/cp865.uni 591 | usr/share/kbd/unimaps/cp850z.uni 592 | usr/share/kbd/unimaps/cp737b.uni 593 | usr/share/kbd/unimaps/8859-8.a0-ff.uni 594 | usr/share/kbd/unimaps/8859-7.a0-ff.uni 595 | usr/share/kbd/unimaps/iso07.uni 596 | usr/share/kbd/unimaps/cp437.uni 597 | usr/share/kbd/unimaps/8859-2.a0-ff.uni 598 | usr/share/kbd/consoletrans/ 599 | usr/share/kbd/consoletrans/8859-9_to_uni.trans 600 | usr/share/kbd/consoletrans/viscii1.0_to_tcvn.trans 601 | usr/share/kbd/consoletrans/8859-4_to_uni.trans 602 | usr/share/kbd/consoletrans/cp861_to_uni.trans 603 | usr/share/kbd/consoletrans/cp869_to_uni.trans 604 | usr/share/kbd/consoletrans/cp855_to_uni.trans 605 | usr/share/kbd/consoletrans/cp1250_to_uni.trans 606 | usr/share/kbd/consoletrans/cp437_to_uni.trans 607 | usr/share/kbd/consoletrans/utflist 608 | usr/share/kbd/consoletrans/null 609 | usr/share/kbd/consoletrans/8859-8_to_uni.trans 610 | usr/share/kbd/consoletrans/viscii1.0_to_viscii1.1.trans 611 | usr/share/kbd/consoletrans/baltic.trans 612 | usr/share/kbd/consoletrans/cp853_to_uni.trans 613 | usr/share/kbd/consoletrans/cp860_to_uni.trans 614 | usr/share/kbd/consoletrans/8859-5_to_uni.trans 615 | usr/share/kbd/consoletrans/8859-13_to_uni.trans 616 | usr/share/kbd/consoletrans/vga2iso 617 | usr/share/kbd/consoletrans/cp852_to_uni.trans 618 | usr/share/kbd/consoletrans/cp866_to_uni.trans 619 | usr/share/kbd/consoletrans/8859-6_to_uni.trans 620 | usr/share/kbd/consoletrans/8859-15_to_uni.trans 621 | usr/share/kbd/consoletrans/cp863_to_uni.trans 622 | usr/share/kbd/consoletrans/cp874_to_uni.trans 623 | usr/share/kbd/consoletrans/8859-3_to_uni.trans 624 | usr/share/kbd/consoletrans/koi8-r_to_uni.trans 625 | usr/share/kbd/consoletrans/cp850_to_iso01.trans 626 | usr/share/kbd/consoletrans/koi8-u_to_uni.trans 627 | usr/share/kbd/consoletrans/8859-2_to_uni.trans 628 | usr/share/kbd/consoletrans/cp862_to_uni.trans 629 | usr/share/kbd/consoletrans/cp864_to_uni.trans 630 | usr/share/kbd/consoletrans/latin2u.trans 631 | usr/share/kbd/consoletrans/cp1251_to_uni.trans 632 | usr/share/kbd/consoletrans/8859-10_to_uni.trans 633 | usr/share/kbd/consoletrans/8859-14_to_uni.trans 634 | usr/share/kbd/consoletrans/8859-7_to_uni.trans 635 | usr/share/kbd/consoletrans/cp850_to_uni.trans 636 | usr/share/kbd/consoletrans/koi2alt 637 | usr/share/kbd/consoletrans/space 638 | usr/share/kbd/consoletrans/8859-1_to_uni.trans 639 | usr/share/kbd/consoletrans/cp857_to_uni.trans 640 | usr/share/kbd/consoletrans/cp437_to_iso01.trans 641 | usr/share/kbd/consoletrans/zero 642 | usr/share/kbd/consoletrans/trivial 643 | usr/share/kbd/consoletrans/iso02_to_cp1250.trans 644 | usr/share/kbd/consoletrans/koi8u2ruscii 645 | usr/share/kbd/consoletrans/cp737_to_uni.trans 646 | usr/share/kbd/consoletrans/cp775_to_uni.trans 647 | usr/share/kbd/consoletrans/cp865_to_uni.trans 648 | usr/share/locale/ 649 | usr/share/locale/fr/ 650 | usr/share/locale/fr/LC_MESSAGES/ 651 | usr/share/locale/fr/LC_MESSAGES/kbd.mo 652 | usr/share/locale/vi/ 653 | usr/share/locale/vi/LC_MESSAGES/ 654 | usr/share/locale/vi/LC_MESSAGES/kbd.mo 655 | usr/share/locale/zh_CN/ 656 | usr/share/locale/zh_CN/LC_MESSAGES/ 657 | usr/share/locale/zh_CN/LC_MESSAGES/kbd.mo 658 | usr/share/locale/id/ 659 | usr/share/locale/id/LC_MESSAGES/ 660 | usr/share/locale/id/LC_MESSAGES/kbd.mo 661 | usr/share/locale/pl/ 662 | usr/share/locale/pl/LC_MESSAGES/ 663 | usr/share/locale/pl/LC_MESSAGES/kbd.mo 664 | usr/share/locale/ro/ 665 | usr/share/locale/ro/LC_MESSAGES/ 666 | usr/share/locale/ro/LC_MESSAGES/kbd.mo 667 | usr/share/locale/uk/ 668 | usr/share/locale/uk/LC_MESSAGES/ 669 | usr/share/locale/uk/LC_MESSAGES/kbd.mo 670 | usr/share/locale/da/ 671 | usr/share/locale/da/LC_MESSAGES/ 672 | usr/share/locale/da/LC_MESSAGES/kbd.mo 673 | usr/share/locale/nl/ 674 | usr/share/locale/nl/LC_MESSAGES/ 675 | usr/share/locale/nl/LC_MESSAGES/kbd.mo 676 | usr/share/locale/el/ 677 | usr/share/locale/el/LC_MESSAGES/ 678 | usr/share/locale/el/LC_MESSAGES/kbd.mo 679 | usr/share/locale/sv/ 680 | usr/share/locale/sv/LC_MESSAGES/ 681 | usr/share/locale/sv/LC_MESSAGES/kbd.mo 682 | usr/share/locale/es/ 683 | usr/share/locale/es/LC_MESSAGES/ 684 | usr/share/locale/es/LC_MESSAGES/kbd.mo 685 | usr/share/locale/de/ 686 | usr/share/locale/de/LC_MESSAGES/ 687 | usr/share/locale/de/LC_MESSAGES/kbd.mo 688 | usr/share/locale/gr/ 689 | usr/share/locale/gr/LC_MESSAGES/ 690 | usr/share/locale/gr/LC_MESSAGES/kbd.mo 691 | usr/share/locale/cs/ 692 | usr/share/locale/cs/LC_MESSAGES/ 693 | usr/share/locale/cs/LC_MESSAGES/kbd.mo 694 | usr/share/locale/tr/ 695 | usr/share/locale/tr/LC_MESSAGES/ 696 | usr/share/locale/tr/LC_MESSAGES/kbd.mo 697 | usr/man/ 698 | usr/man/man8/ 699 | usr/man/man8/loadunimap.8.gz 700 | usr/man/man8/setkeycodes.8.gz 701 | usr/man/man8/kbdrate.8.gz 702 | usr/man/man8/getkeycodes.8.gz 703 | usr/man/man8/mapscrn.8.gz 704 | usr/man/man8/resizecons.8.gz 705 | usr/man/man8/setfont.8.gz 706 | usr/man/man8/showconsolefont.8.gz 707 | usr/man/man5/ 708 | usr/man/man5/keymaps.5.gz 709 | usr/man/man1/ 710 | usr/man/man1/dumpkeys.1.gz 711 | usr/man/man1/psfgettable.1.gz 712 | usr/man/man1/fgconsole.1.gz 713 | usr/man/man1/chvt.1.gz 714 | usr/man/man1/psfstriptable.1.gz 715 | usr/man/man1/psfaddtable.1.gz 716 | usr/man/man1/setmetamode.1.gz 717 | usr/man/man1/deallocvt.1.gz 718 | usr/man/man1/openvt.1.gz 719 | usr/man/man1/loadkeys.1.gz 720 | usr/man/man1/kbd_mode.1.gz 721 | usr/man/man1/psfxtable.1.gz 722 | usr/man/man1/unicode_stop.1.gz 723 | usr/man/man1/showkey.1.gz 724 | usr/man/man1/unicode_start.1.gz 725 | usr/man/man1/setleds.1.gz 726 | usr/bin/ 727 | usr/bin/openvt 728 | usr/bin/getkeycodes 729 | usr/bin/kbdrate 730 | usr/bin/unicode_start 731 | usr/bin/showkey 732 | usr/bin/chvt 733 | usr/bin/setconsolefont 734 | usr/bin/setleds 735 | usr/bin/loadunimap 736 | usr/bin/setkeycodes 737 | usr/bin/psfxtable 738 | usr/bin/mapscrn 739 | usr/bin/unicode_stop 740 | usr/bin/kbd_mode 741 | usr/bin/fgconsole 742 | usr/bin/setmetamode 743 | usr/bin/dumpkeys 744 | usr/bin/resizecons 745 | usr/bin/setfont 746 | usr/bin/deallocvt 747 | usr/bin/showconsolefont 748 | usr/doc/ 749 | usr/doc/kbd-1.15.2/ 750 | usr/doc/kbd-1.15.2/TODO 751 | usr/doc/kbd-1.15.2/kbd.FAQ.txt 752 | usr/doc/kbd-1.15.2/repeat/ 753 | usr/doc/kbd-1.15.2/repeat/set_kbd_repeat-2 754 | usr/doc/kbd-1.15.2/repeat/set_kbd_repeat-1 755 | usr/doc/kbd-1.15.2/n474.doc 756 | usr/doc/kbd-1.15.2/kbd.FAQ-2.html 757 | usr/doc/kbd-1.15.2/ChangeLog 758 | usr/doc/kbd-1.15.2/kbd.FAQ-3.html 759 | usr/doc/kbd-1.15.2/README 760 | usr/doc/kbd-1.15.2/iso8859-10.txt 761 | usr/doc/kbd-1.15.2/iso8859-5.txt 762 | usr/doc/kbd-1.15.2/kbd.FAQ-20.html 763 | usr/doc/kbd-1.15.2/cp1252.txt 764 | usr/doc/kbd-1.15.2/README.Crosser 765 | usr/doc/kbd-1.15.2/console.docs 766 | usr/doc/kbd-1.15.2/kbd.FAQ-13.html 767 | usr/doc/kbd-1.15.2/kbd.FAQ-12.html 768 | usr/doc/kbd-1.15.2/kbd.FAQ-17.html 769 | usr/doc/kbd-1.15.2/kbd.FAQ-5.html 770 | usr/doc/kbd-1.15.2/kbd.FAQ-21.html 771 | usr/doc/kbd-1.15.2/iso8859-3.txt 772 | usr/doc/kbd-1.15.2/kbd.FAQ-9.html 773 | usr/doc/kbd-1.15.2/keysyms.h.info 774 | usr/doc/kbd-1.15.2/kbd.FAQ-14.html 775 | usr/doc/kbd-1.15.2/iso8859-11.txt 776 | usr/doc/kbd-1.15.2/iso8859-15.txt 777 | usr/doc/kbd-1.15.2/kbd.FAQ-6.html 778 | usr/doc/kbd-1.15.2/kbd.FAQ-1.html 779 | usr/doc/kbd-1.15.2/iso8859-14.txt 780 | usr/doc/kbd-1.15.2/dvorak/ 781 | usr/doc/kbd-1.15.2/dvorak/ANSI-dvorak.gif 782 | usr/doc/kbd-1.15.2/dvorak/dvorak-r.xmodmap 783 | usr/doc/kbd-1.15.2/dvorak/dvorak.diffs 784 | usr/doc/kbd-1.15.2/dvorak/dvorak-l.xmodmap 785 | usr/doc/kbd-1.15.2/dvorak/dvorak.xmodmap 786 | usr/doc/kbd-1.15.2/dvorak/dvorak.txt 787 | usr/doc/kbd-1.15.2/as400.kbd 788 | usr/doc/kbd-1.15.2/iso8859.info 789 | usr/doc/kbd-1.15.2/font-formats/ 790 | usr/doc/kbd-1.15.2/font-formats/font-formats.html 791 | usr/doc/kbd-1.15.2/font-formats/font-formats-1.html 792 | usr/doc/kbd-1.15.2/font-formats/font-formats-3.html 793 | usr/doc/kbd-1.15.2/font-formats/font-formats.sgml 794 | usr/doc/kbd-1.15.2/font-formats/font-formats-2.html 795 | usr/doc/kbd-1.15.2/font-formats/font-formats-5.html 796 | usr/doc/kbd-1.15.2/font-formats/font-formats-4.html 797 | usr/doc/kbd-1.15.2/iso8859-7.txt 798 | usr/doc/kbd-1.15.2/iso8859-8.txt 799 | usr/doc/kbd-1.15.2/kbd.FAQ-22.html 800 | usr/doc/kbd-1.15.2/kbd.FAQ-10.html 801 | usr/doc/kbd-1.15.2/COPYING 802 | usr/doc/kbd-1.15.2/kbd.FAQ-7.html 803 | usr/doc/kbd-1.15.2/iso8859-9.txt 804 | usr/doc/kbd-1.15.2/scancodes/ 805 | usr/doc/kbd-1.15.2/scancodes/README 806 | usr/doc/kbd-1.15.2/iso8859-1.txt 807 | usr/doc/kbd-1.15.2/utf/ 808 | usr/doc/kbd-1.15.2/utf/README 809 | usr/doc/kbd-1.15.2/utf/utflist 810 | usr/doc/kbd-1.15.2/utf/ethiopic 811 | usr/doc/kbd-1.15.2/utf/utfdemo 812 | usr/doc/kbd-1.15.2/utf/\342\231\252\342\231\254 813 | usr/doc/kbd-1.15.2/kbd.FAQ.html 814 | usr/doc/kbd-1.15.2/A20/ 815 | usr/doc/kbd-1.15.2/A20/A20.html 816 | usr/doc/kbd-1.15.2/A20/xfix-286mode2 817 | usr/doc/kbd-1.15.2/kbd.FAQ-15.html 818 | usr/doc/kbd-1.15.2/iso8859-6.txt 819 | usr/doc/kbd-1.15.2/kbd.FAQ-16.html 820 | usr/doc/kbd-1.15.2/kbd.FAQ-23.html 821 | usr/doc/kbd-1.15.2/kbd.FAQ-8.html 822 | usr/doc/kbd-1.15.2/kbd.FAQ-11.html 823 | usr/doc/kbd-1.15.2/kbd.FAQ-18.html 824 | usr/doc/kbd-1.15.2/cirrus.videomodes 825 | usr/doc/kbd-1.15.2/kbd.FAQ-19.html 826 | usr/doc/kbd-1.15.2/kbd.FAQ-4.html 827 | usr/doc/kbd-1.15.2/iso8859-13.txt 828 | usr/doc/kbd-1.15.2/iso8859-4.txt 829 | usr/doc/kbd-1.15.2/iso8859-2.txt 830 | install/ 831 | install/doinst.sh 832 | install/slack-desc 833 | var/ 834 | var/log/ 835 | var/log/setup/ 836 | var/log/setup/setup.setconsolefont 837 | -------------------------------------------------------------------------------- /test/samples/var/log/removed_packages/bash-4.1.007-x86_64-1-upgraded-2011-03-18,09:27:55: -------------------------------------------------------------------------------- 1 | PACKAGE NAME: bash-4.1.007-x86_64-1 2 | COMPRESSED PACKAGE SIZE: 939K 3 | UNCOMPRESSED PACKAGE SIZE: 3760K 4 | PACKAGE LOCATION: /var/log/mount/slackware64/a/bash-4.1.007-x86_64-1.txz 5 | PACKAGE DESCRIPTION: 6 | bash: bash (sh-compatible shell) 7 | bash: 8 | bash: The GNU Bourne-Again SHell. Bash is a sh-compatible command 9 | bash: interpreter that executes commands read from the standard input or 10 | bash: from a file. Bash also incorporates useful features from the Korn 11 | bash: and C shells (ksh and csh). Bash is ultimately intended to be a 12 | bash: conformant implementation of the IEEE Posix Shell and Tools 13 | bash: specification (IEEE Working Group 1003.2). 14 | bash: 15 | bash: Bash must be present for the system to boot properly. 16 | bash: 17 | FILE LIST: 18 | ./ 19 | install/ 20 | install/slack-desc 21 | install/doinst.sh 22 | usr/ 23 | usr/share/ 24 | usr/share/locale/ 25 | usr/share/locale/pl/ 26 | usr/share/locale/pl/LC_MESSAGES/ 27 | usr/share/locale/pl/LC_MESSAGES/bash.mo 28 | usr/share/locale/ja/ 29 | usr/share/locale/ja/LC_MESSAGES/ 30 | usr/share/locale/ja/LC_MESSAGES/bash.mo 31 | usr/share/locale/fi/ 32 | usr/share/locale/fi/LC_MESSAGES/ 33 | usr/share/locale/fi/LC_MESSAGES/bash.mo 34 | usr/share/locale/et/ 35 | usr/share/locale/et/LC_MESSAGES/ 36 | usr/share/locale/et/LC_MESSAGES/bash.mo 37 | usr/share/locale/de/ 38 | usr/share/locale/de/LC_MESSAGES/ 39 | usr/share/locale/de/LC_MESSAGES/bash.mo 40 | usr/share/locale/pt_BR/ 41 | usr/share/locale/pt_BR/LC_MESSAGES/ 42 | usr/share/locale/pt_BR/LC_MESSAGES/bash.mo 43 | usr/share/locale/zh_TW/ 44 | usr/share/locale/zh_TW/LC_MESSAGES/ 45 | usr/share/locale/zh_TW/LC_MESSAGES/bash.mo 46 | usr/share/locale/ro/ 47 | usr/share/locale/ro/LC_MESSAGES/ 48 | usr/share/locale/ro/LC_MESSAGES/bash.mo 49 | usr/share/locale/eo/ 50 | usr/share/locale/eo/LC_MESSAGES/ 51 | usr/share/locale/eo/LC_MESSAGES/bash.mo 52 | usr/share/locale/ru/ 53 | usr/share/locale/ru/LC_MESSAGES/ 54 | usr/share/locale/ru/LC_MESSAGES/bash.mo 55 | usr/share/locale/af/ 56 | usr/share/locale/af/LC_MESSAGES/ 57 | usr/share/locale/af/LC_MESSAGES/bash.mo 58 | usr/share/locale/hu/ 59 | usr/share/locale/hu/LC_MESSAGES/ 60 | usr/share/locale/hu/LC_MESSAGES/bash.mo 61 | usr/share/locale/vi/ 62 | usr/share/locale/vi/LC_MESSAGES/ 63 | usr/share/locale/vi/LC_MESSAGES/bash.mo 64 | usr/share/locale/ga/ 65 | usr/share/locale/ga/LC_MESSAGES/ 66 | usr/share/locale/ga/LC_MESSAGES/bash.mo 67 | usr/share/locale/es/ 68 | usr/share/locale/es/LC_MESSAGES/ 69 | usr/share/locale/es/LC_MESSAGES/bash.mo 70 | usr/share/locale/en@quot/ 71 | usr/share/locale/en@quot/LC_MESSAGES/ 72 | usr/share/locale/en@quot/LC_MESSAGES/bash.mo 73 | usr/share/locale/ca/ 74 | usr/share/locale/ca/LC_MESSAGES/ 75 | usr/share/locale/ca/LC_MESSAGES/bash.mo 76 | usr/share/locale/id/ 77 | usr/share/locale/id/LC_MESSAGES/ 78 | usr/share/locale/id/LC_MESSAGES/bash.mo 79 | usr/share/locale/en@boldquot/ 80 | usr/share/locale/en@boldquot/LC_MESSAGES/ 81 | usr/share/locale/en@boldquot/LC_MESSAGES/bash.mo 82 | usr/share/locale/sk/ 83 | usr/share/locale/sk/LC_MESSAGES/ 84 | usr/share/locale/sk/LC_MESSAGES/bash.mo 85 | usr/share/locale/cs/ 86 | usr/share/locale/cs/LC_MESSAGES/ 87 | usr/share/locale/cs/LC_MESSAGES/bash.mo 88 | usr/share/locale/nl/ 89 | usr/share/locale/nl/LC_MESSAGES/ 90 | usr/share/locale/nl/LC_MESSAGES/bash.mo 91 | usr/share/locale/bg/ 92 | usr/share/locale/bg/LC_MESSAGES/ 93 | usr/share/locale/bg/LC_MESSAGES/bash.mo 94 | usr/share/locale/sv/ 95 | usr/share/locale/sv/LC_MESSAGES/ 96 | usr/share/locale/sv/LC_MESSAGES/bash.mo 97 | usr/share/locale/lt/ 98 | usr/share/locale/lt/LC_MESSAGES/ 99 | usr/share/locale/lt/LC_MESSAGES/bash.mo 100 | usr/share/locale/tr/ 101 | usr/share/locale/tr/LC_MESSAGES/ 102 | usr/share/locale/tr/LC_MESSAGES/bash.mo 103 | usr/share/locale/fr/ 104 | usr/share/locale/fr/LC_MESSAGES/ 105 | usr/share/locale/fr/LC_MESSAGES/bash.mo 106 | usr/man/ 107 | usr/man/man1/ 108 | usr/man/man1/rbash.1.gz 109 | usr/man/man1/builtins.1.gz 110 | usr/man/man1/bash.1.gz 111 | usr/info/ 112 | usr/info/bash.info.gz 113 | usr/doc/ 114 | usr/doc/bash-4.1/ 115 | usr/doc/bash-4.1/Y2K 116 | usr/doc/bash-4.1/FAQ 117 | usr/doc/bash-4.1/INTRO 118 | usr/doc/bash-4.1/INSTALL 119 | usr/doc/bash-4.1/COPYING 120 | usr/doc/bash-4.1/ChangeLog 121 | usr/doc/bash-4.1/README 122 | usr/doc/bash-4.1/NEWS 123 | usr/doc/bash-4.1/CHANGES 124 | usr/doc/bash-4.1/NOTES 125 | usr/doc/bash-4.1/COMPAT 126 | usr/doc/bash-4.1/article.txt 127 | usr/doc/bash-4.1/AUTHORS 128 | usr/doc/bash-4.1/MANIFEST 129 | bin/ 130 | bin/bash4.new 131 | -------------------------------------------------------------------------------- /test/samples/var/log/removed_packages/choqok-0.9.90-x86_64-1_SBo: -------------------------------------------------------------------------------- 1 | PACKAGE NAME: choqok-0.9.90-x86_64-1_SBo 2 | COMPRESSED PACKAGE SIZE: 1080K 3 | UNCOMPRESSED PACKAGE SIZE: 3310K 4 | PACKAGE LOCATION: /tmp/sbopkg/sbopkg-sbooutputdir/choqok-0.9.90-x86_64-1_SBo.tgz 5 | PACKAGE DESCRIPTION: 6 | choqok: choqok (micro-blogging client for KDE4) 7 | choqok: 8 | choqok: Choqok is a micro-blogging client for KDE4, supporting twitter.com 9 | choqok: and identi.ca services. The name comes from an ancient Persian word 10 | choqok: meaning 'sparrow'. 11 | choqok: 12 | choqok: Home: http://choqok.gnufolks.org 13 | choqok: 14 | choqok: 15 | choqok: 16 | choqok: 17 | FILE LIST: 18 | ./ 19 | install/ 20 | install/slack-desc 21 | install/doinst.sh 22 | usr/ 23 | usr/include/ 24 | usr/include/choqok/ 25 | usr/include/choqok/choqok_export.h 26 | usr/include/choqok/shortener.h 27 | usr/include/choqok/uploader.h 28 | usr/include/choqok/microblogwidget.h 29 | usr/include/choqok/choqokappearancesettings.h 30 | usr/include/choqok/choqokbehaviorsettings.h 31 | usr/include/choqok/mediamanager.h 32 | usr/include/choqok/pluginmanager.h 33 | usr/include/choqok/passwordmanager.h 34 | usr/include/choqok/timelinewidget.h 35 | usr/include/choqok/choqoktextedit.h 36 | usr/include/choqok/textbrowser.h 37 | usr/include/choqok/choqoktools.h 38 | usr/include/choqok/postwidget.h 39 | usr/include/choqok/mainwindow.h 40 | usr/include/choqok/quickpost.h 41 | usr/include/choqok/shortenmanager.h 42 | usr/include/choqok/notifymanager.h 43 | usr/include/choqok/microblog.h 44 | usr/include/choqok/twitterapihelper/ 45 | usr/include/choqok/twitterapihelper/twitterapisearch.h 46 | usr/include/choqok/twitterapihelper/twitterapiaccount.h 47 | usr/include/choqok/twitterapihelper/twitterapipostwidget.h 48 | usr/include/choqok/twitterapihelper/twitterapisearchdialog.h 49 | usr/include/choqok/twitterapihelper/twitterapiwhoiswidget.h 50 | usr/include/choqok/twitterapihelper/twitterapimicroblog.h 51 | usr/include/choqok/twitterapihelper/twitterapishowthread.h 52 | usr/include/choqok/twitterapihelper/twitterapicomposerwidget.h 53 | usr/include/choqok/twitterapihelper/twitterapitextedit.h 54 | usr/include/choqok/twitterapihelper/twitterapimicroblogwidget.h 55 | usr/include/choqok/twitterapihelper/twitterapisearchtimelinewidget.h 56 | usr/include/choqok/twitterapihelper/twitterapidmessagedialog.h 57 | usr/include/choqok/choqoktypes.h 58 | usr/include/choqok/uploadmediadialog.h 59 | usr/include/choqok/editaccountwidget.h 60 | usr/include/choqok/choqokuiglobal.h 61 | usr/include/choqok/dbushandler.h 62 | usr/include/choqok/accountmanager.h 63 | usr/include/choqok/choqokid.h 64 | usr/include/choqok/composerwidget.h 65 | usr/include/choqok/plugin.h 66 | usr/include/choqok/account.h 67 | usr/lib64/ 68 | usr/lib64/libtwitterapihelper.so.0.9.5 69 | usr/lib64/kde4/ 70 | usr/lib64/kde4/choqok_ur1_ca.so 71 | usr/lib64/kde4/choqok_imagepreview.so 72 | usr/lib64/kde4/choqok_laconica.so 73 | usr/lib64/kde4/choqok_u_nu.so 74 | usr/lib64/kde4/choqok_nowlistening.so 75 | usr/lib64/kde4/choqok_bit_ly.so 76 | usr/lib64/kde4/kcm_choqok_accountsconfig.so 77 | usr/lib64/kde4/kcm_choqok_bit_ly.so 78 | usr/lib64/kde4/kcm_choqok_yourls.so 79 | usr/lib64/kde4/kcm_choqok_yfrog.so 80 | usr/lib64/kde4/choqok_tinyarro_ws.so 81 | usr/lib64/kde4/choqok_yourls.so 82 | usr/lib64/kde4/choqok_digg.so 83 | usr/lib64/kde4/choqok_twitter.so 84 | usr/lib64/kde4/choqok_searchaction.so 85 | usr/lib64/kde4/kcm_choqok_tinyarro_ws.so 86 | usr/lib64/kde4/kcm_choqok_behaviorconfig.so 87 | usr/lib64/kde4/choqok_tighturl.so 88 | usr/lib64/kde4/choqok_goo_gl.so 89 | usr/lib64/kde4/choqok_ur_ly.so 90 | usr/lib64/kde4/choqok_videopreview.so 91 | usr/lib64/kde4/kcm_choqok_twitpic.so 92 | usr/lib64/kde4/choqok_filter.so 93 | usr/lib64/kde4/choqok_yfrog.so 94 | usr/lib64/kde4/choqok_twitpic.so 95 | usr/lib64/kde4/choqok_is_gd.so 96 | usr/lib64/kde4/kcm_choqok_pluginconfig.so 97 | usr/lib64/kde4/choqok_three_ly.so 98 | usr/lib64/kde4/choqok_urls_io.so 99 | usr/lib64/kde4/kcm_choqok_untiny.so 100 | usr/lib64/kde4/kcm_choqok_appearanceconfig.so 101 | usr/lib64/kde4/konqchoqokplugin.so 102 | usr/lib64/kde4/choqok_untiny.so 103 | usr/lib64/kde4/kcm_choqok_nowlistening.so 104 | usr/lib64/libchoqok.so.0.9.90 105 | usr/bin/ 106 | usr/bin/choqok 107 | usr/share/ 108 | usr/share/locale/ 109 | usr/share/locale/et/ 110 | usr/share/locale/et/LC_MESSAGES/ 111 | usr/share/locale/et/LC_MESSAGES/choqok.mo 112 | usr/share/locale/pl/ 113 | usr/share/locale/pl/LC_MESSAGES/ 114 | usr/share/locale/pl/LC_MESSAGES/choqok.mo 115 | usr/share/locale/pt_BR/ 116 | usr/share/locale/pt_BR/LC_MESSAGES/ 117 | usr/share/locale/pt_BR/LC_MESSAGES/choqok.mo 118 | usr/share/locale/es/ 119 | usr/share/locale/es/LC_MESSAGES/ 120 | usr/share/locale/es/LC_MESSAGES/choqok.mo 121 | usr/share/locale/hr/ 122 | usr/share/locale/hr/LC_MESSAGES/ 123 | usr/share/locale/hr/LC_MESSAGES/choqok.mo 124 | usr/share/locale/fi/ 125 | usr/share/locale/fi/LC_MESSAGES/ 126 | usr/share/locale/fi/LC_MESSAGES/choqok.mo 127 | usr/share/locale/ca@valencia/ 128 | usr/share/locale/ca@valencia/LC_MESSAGES/ 129 | usr/share/locale/ca@valencia/LC_MESSAGES/choqok.mo 130 | usr/share/locale/nb/ 131 | usr/share/locale/nb/LC_MESSAGES/ 132 | usr/share/locale/nb/LC_MESSAGES/choqok.mo 133 | usr/share/locale/sv/ 134 | usr/share/locale/sv/LC_MESSAGES/ 135 | usr/share/locale/sv/LC_MESSAGES/choqok.mo 136 | usr/share/locale/da/ 137 | usr/share/locale/da/LC_MESSAGES/ 138 | usr/share/locale/da/LC_MESSAGES/choqok.mo 139 | usr/share/locale/ja/ 140 | usr/share/locale/ja/LC_MESSAGES/ 141 | usr/share/locale/ja/LC_MESSAGES/choqok.mo 142 | usr/share/locale/en_GB/ 143 | usr/share/locale/en_GB/LC_MESSAGES/ 144 | usr/share/locale/en_GB/LC_MESSAGES/choqok.mo 145 | usr/share/locale/ca/ 146 | usr/share/locale/ca/LC_MESSAGES/ 147 | usr/share/locale/ca/LC_MESSAGES/choqok.mo 148 | usr/share/locale/pt/ 149 | usr/share/locale/pt/LC_MESSAGES/ 150 | usr/share/locale/pt/LC_MESSAGES/choqok.mo 151 | usr/share/locale/bg/ 152 | usr/share/locale/bg/LC_MESSAGES/ 153 | usr/share/locale/bg/LC_MESSAGES/choqok.mo 154 | usr/share/locale/fr/ 155 | usr/share/locale/fr/LC_MESSAGES/ 156 | usr/share/locale/fr/LC_MESSAGES/choqok.mo 157 | usr/share/locale/nl/ 158 | usr/share/locale/nl/LC_MESSAGES/ 159 | usr/share/locale/nl/LC_MESSAGES/choqok.mo 160 | usr/share/locale/uk/ 161 | usr/share/locale/uk/LC_MESSAGES/ 162 | usr/share/locale/uk/LC_MESSAGES/choqok.mo 163 | usr/share/locale/de/ 164 | usr/share/locale/de/LC_MESSAGES/ 165 | usr/share/locale/de/LC_MESSAGES/choqok.mo 166 | usr/share/locale/hu/ 167 | usr/share/locale/hu/LC_MESSAGES/ 168 | usr/share/locale/hu/LC_MESSAGES/choqok.mo 169 | usr/share/locale/zh_CN/ 170 | usr/share/locale/zh_CN/LC_MESSAGES/ 171 | usr/share/locale/zh_CN/LC_MESSAGES/choqok.mo 172 | usr/share/kde4/ 173 | usr/share/kde4/services/ 174 | usr/share/kde4/services/choqok_tinyarro_ws.desktop 175 | usr/share/kde4/services/choqok_yourls.desktop 176 | usr/share/kde4/services/choqok_nowlistening.desktop 177 | usr/share/kde4/services/choqok_u_nu.desktop 178 | usr/share/kde4/services/choqok_ur1_ca.desktop 179 | usr/share/kde4/services/choqok_twitpic.desktop 180 | usr/share/kde4/services/choqok_filter.desktop 181 | usr/share/kde4/services/choqok_goo_gl.desktop 182 | usr/share/kde4/services/choqok_bit_ly_config.desktop 183 | usr/share/kde4/services/choqok_yourls_config.desktop 184 | usr/share/kde4/services/choqok_twitpic_config.desktop 185 | usr/share/kde4/services/choqok_imagepreview.desktop 186 | usr/share/kde4/services/choqok_yfrog.desktop 187 | usr/share/kde4/services/choqok_untiny_config.desktop 188 | usr/share/kde4/services/choqok_nowlistening_config.desktop 189 | usr/share/kde4/services/choqok_urls_io.desktop 190 | usr/share/kde4/services/choqok_laconica.desktop 191 | usr/share/kde4/services/choqok_appearanceconfig.desktop 192 | usr/share/kde4/services/choqok_accountsconfig.desktop 193 | usr/share/kde4/services/choqok_digg.desktop 194 | usr/share/kde4/services/choqok_bit_ly.desktop 195 | usr/share/kde4/services/choqok_behaviorconfig.desktop 196 | usr/share/kde4/services/choqok_pluginconfig.desktop 197 | usr/share/kde4/services/choqok_twitter.desktop 198 | usr/share/kde4/services/choqok_yfrog_config.desktop 199 | usr/share/kde4/services/choqok_ur_ly.desktop 200 | usr/share/kde4/services/choqok_is_gd.desktop 201 | usr/share/kde4/services/choqok_tinyarro_ws_config.desktop 202 | usr/share/kde4/services/choqok_untiny.desktop 203 | usr/share/kde4/services/choqok_tighturl.desktop 204 | usr/share/kde4/services/choqok_searchaction.desktop 205 | usr/share/kde4/services/choqok_three_ly.desktop 206 | usr/share/kde4/services/choqok_videopreview.desktop 207 | usr/share/kde4/services/ServiceMenus/ 208 | usr/share/kde4/services/ServiceMenus/choqok_share.desktop 209 | usr/share/kde4/services/ServiceMenus/choqok_upload.desktop 210 | usr/share/kde4/servicetypes/ 211 | usr/share/kde4/servicetypes/choqokplugin.desktop 212 | usr/share/kde4/servicetypes/choqokshortenerplugin.desktop 213 | usr/share/kde4/servicetypes/choqokuploaderplugin.desktop 214 | usr/share/apps/ 215 | usr/share/apps/choqok_filter/ 216 | usr/share/apps/choqok_filter/filterui.rc 217 | usr/share/apps/khtml/ 218 | usr/share/apps/khtml/kpartplugins/ 219 | usr/share/apps/khtml/kpartplugins/konqchoqok.rc 220 | usr/share/apps/khtml/kpartplugins/konqchoqok.desktop 221 | usr/share/apps/choqok_nowlistening/ 222 | usr/share/apps/choqok_nowlistening/nowlisteningui.rc 223 | usr/share/apps/cmake/ 224 | usr/share/apps/cmake/modules/ 225 | usr/share/apps/cmake/modules/FindChoqok.cmake 226 | usr/share/apps/cmake/modules/FindQJson.cmake 227 | usr/share/apps/cmake/modules/FindQtOAuth.cmake 228 | usr/share/apps/choqok_searchaction/ 229 | usr/share/apps/choqok_searchaction/searchactionui.rc 230 | usr/share/apps/dbus-1/ 231 | usr/share/apps/dbus-1/services/ 232 | usr/share/apps/dbus-1/services/org.kde.choqok.service 233 | usr/share/apps/choqok/ 234 | usr/share/apps/choqok/choqokui.rc 235 | usr/share/apps/choqok/choqok.notifyrc 236 | usr/share/apps/choqok/images/ 237 | usr/share/apps/choqok/images/splash_screen.png 238 | usr/share/applications/ 239 | usr/share/applications/kde4/ 240 | usr/share/applications/kde4/choqok.desktop 241 | usr/share/icons/ 242 | usr/share/icons/hicolor/ 243 | usr/share/icons/hicolor/48x48/ 244 | usr/share/icons/hicolor/48x48/apps/ 245 | usr/share/icons/hicolor/48x48/apps/twitter_microblog.png 246 | usr/share/icons/hicolor/48x48/apps/laconica_microblog.png 247 | usr/share/icons/hicolor/48x48/apps/choqok.png 248 | usr/share/icons/hicolor/22x22/ 249 | usr/share/icons/hicolor/22x22/apps/ 250 | usr/share/icons/hicolor/22x22/apps/twitpic_uploader.png 251 | usr/share/icons/hicolor/22x22/apps/twitter_microblog.png 252 | usr/share/icons/hicolor/22x22/apps/laconica_microblog.png 253 | usr/share/icons/hicolor/22x22/apps/choqok.png 254 | usr/share/icons/hicolor/22x22/apps/yfrog_uploader.png 255 | usr/share/icons/hicolor/32x32/ 256 | usr/share/icons/hicolor/32x32/apps/ 257 | usr/share/icons/hicolor/32x32/apps/twitpic_uploader.png 258 | usr/share/icons/hicolor/32x32/apps/twitter_microblog.png 259 | usr/share/icons/hicolor/32x32/apps/laconica_microblog.png 260 | usr/share/icons/hicolor/32x32/apps/choqok.png 261 | usr/share/icons/hicolor/32x32/apps/yfrog_uploader.png 262 | usr/share/icons/hicolor/16x16/ 263 | usr/share/icons/hicolor/16x16/apps/ 264 | usr/share/icons/hicolor/16x16/apps/twitpic_uploader.png 265 | usr/share/icons/hicolor/16x16/apps/twitter_microblog.png 266 | usr/share/icons/hicolor/16x16/apps/laconica_microblog.png 267 | usr/share/icons/hicolor/16x16/apps/choqok.png 268 | usr/share/icons/hicolor/16x16/apps/yfrog_uploader.png 269 | usr/share/icons/hicolor/16x16/actions/ 270 | usr/share/icons/hicolor/16x16/actions/retweet.png 271 | usr/share/icons/hicolor/64x64/ 272 | usr/share/icons/hicolor/64x64/apps/ 273 | usr/share/icons/hicolor/64x64/apps/choqok.png 274 | usr/share/icons/hicolor/128x128/ 275 | usr/share/icons/hicolor/128x128/apps/ 276 | usr/share/icons/hicolor/128x128/apps/choqok.png 277 | usr/share/config.kcfg/ 278 | usr/share/config.kcfg/choqokbehaviorsettings.kcfg 279 | usr/share/config.kcfg/yfrogsettings.kcfg 280 | usr/share/config.kcfg/bit_ly_settings.kcfg 281 | usr/share/config.kcfg/choqokappearancesettings.kcfg 282 | usr/share/config.kcfg/yourlssettings.kcfg 283 | usr/share/config.kcfg/twitpicsettings.kcfg 284 | usr/share/config.kcfg/nowlisteningsettings.kcfg 285 | usr/share/config.kcfg/untinysettings.kcfg 286 | usr/share/config.kcfg/tinyarro_ws_settings.kcfg 287 | usr/doc/ 288 | usr/doc/choqok-0.9.90/ 289 | usr/doc/choqok-0.9.90/choqok.SlackBuild 290 | usr/doc/choqok-0.9.90/README 291 | usr/doc/choqok-0.9.90/TODO 292 | usr/doc/choqok-0.9.90/CMakeLists.txt 293 | usr/doc/choqok-0.9.90/AUTHORS 294 | usr/doc/choqok-0.9.90/COPYING 295 | -------------------------------------------------------------------------------- /test/samples/var/log/removed_scripts/bash-4.1.007-x86_64-1-upgraded-2011-03-18,09:27:55: -------------------------------------------------------------------------------- 1 | if [ -r bin/bash ]; then 2 | mv bin/bash bin/bash.old 3 | fi 4 | mv bin/bash4.new bin/bash 5 | if [ -f bin/bash.old ]; then 6 | rm -f bin/bash.old 7 | fi 8 | if [ ! -r etc/shells ]; then 9 | touch etc/shells 10 | chmod 644 etc/shells 11 | fi 12 | if grep -wq /bin/bash etc/shells ; then 13 | true 14 | else 15 | echo /bin/bash >> etc/shells 16 | fi 17 | ( cd usr/bin ; rm -rf bash ) 18 | ( cd usr/bin ; ln -sf /bin/bash bash ) 19 | -------------------------------------------------------------------------------- /test/samples/var/log/removed_scripts/choqok-0.9.90-x86_64-1_SBo: -------------------------------------------------------------------------------- 1 | if [ -x /usr/bin/update-desktop-database ]; then 2 | /usr/bin/update-desktop-database -q usr/share/applications >/dev/null 2>&1 3 | fi 4 | 5 | if [ -e usr/share/icons/hicolor/icon-theme.cache ]; then 6 | if [ -x /usr/bin/gtk-update-icon-cache ]; then 7 | /usr/bin/gtk-update-icon-cache usr/share/icons/hicolor >/dev/null 2>&1 8 | fi 9 | fi 10 | 11 | ( cd usr/lib64 ; rm -rf libtwitterapihelper.so ) 12 | ( cd usr/lib64 ; ln -sf libtwitterapihelper.so.0 libtwitterapihelper.so ) 13 | ( cd usr/lib64 ; rm -rf libchoqok.so ) 14 | ( cd usr/lib64 ; ln -sf libchoqok.so.0 libchoqok.so ) 15 | ( cd usr/lib64 ; rm -rf libchoqok.so.0 ) 16 | ( cd usr/lib64 ; ln -sf libchoqok.so.0.9.90 libchoqok.so.0 ) 17 | ( cd usr/lib64 ; rm -rf libtwitterapihelper.so.0 ) 18 | ( cd usr/lib64 ; ln -sf libtwitterapihelper.so.0.9.5 libtwitterapihelper.so.0 ) 19 | -------------------------------------------------------------------------------- /test/samples/var/log/scripts/bash-4.1.010-x86_64-1: -------------------------------------------------------------------------------- 1 | if [ -r bin/bash ]; then 2 | mv bin/bash bin/bash.old 3 | fi 4 | mv bin/bash4.new bin/bash 5 | if [ -f bin/bash.old ]; then 6 | rm -f bin/bash.old 7 | fi 8 | if [ ! -r etc/shells ]; then 9 | touch etc/shells 10 | chmod 644 etc/shells 11 | fi 12 | if grep -wq /bin/bash etc/shells ; then 13 | true 14 | else 15 | echo /bin/bash >> etc/shells 16 | fi 17 | ( cd usr/bin ; rm -rf bash ) 18 | ( cd usr/bin ; ln -sf /bin/bash bash ) 19 | -------------------------------------------------------------------------------- /test/samples/var/log/scripts/kbd-1.15.2-x86_64-1: -------------------------------------------------------------------------------- 1 | 2 | config() { 3 | NEW="$1" 4 | OLD="$(dirname $NEW)/$(basename $NEW .new)" 5 | # If there's no config file by that name, mv it over: 6 | if [ ! -r $OLD ]; then 7 | mv $NEW $OLD 8 | elif [ "$(cat $OLD | md5sum)" = "$(cat $NEW | md5sum)" ]; then 9 | # toss the redundant copy 10 | rm $NEW 11 | fi 12 | # Otherwise, we leave the .new copy for the admin to consider... 13 | } 14 | 15 | # Leave any new rc.font with the same permissions as the old one: 16 | # This is a kludge, but it's because there's no --reference option 17 | # on busybox's 'chmod': 18 | if [ -e etc/rc.d/rc.font ]; then 19 | if [ -x etc/rc.d/rc.font ]; then 20 | chmod 755 etc/rc.d/rc.font.new 21 | else 22 | chmod 644 etc/rc.d/rc.font.new 23 | fi 24 | fi 25 | # Then config() it: 26 | config etc/rc.d/rc.font.new 27 | 28 | ( cd usr/share/kbd/keymaps/i386/qwerty ; rm -rf ko.map.gz ) 29 | ( cd usr/share/kbd/keymaps/i386/qwerty ; ln -sf us.map.gz ko.map.gz ) 30 | ( cd usr/share/kbd/keymaps ; rm -rf ppc ) 31 | ( cd usr/share/kbd/keymaps ; ln -sf mac ppc ) 32 | ( cd usr/bin ; rm -rf loadkeys ) 33 | ( cd usr/bin ; ln -sf ../../bin/loadkeys loadkeys ) 34 | ( cd usr/bin ; rm -rf psfgettable ) 35 | ( cd usr/bin ; ln -sf psfxtable psfgettable ) 36 | ( cd usr/bin ; rm -rf psfaddtable ) 37 | ( cd usr/bin ; ln -sf psfxtable psfaddtable ) 38 | ( cd usr/bin ; rm -rf psfstriptable ) 39 | ( cd usr/bin ; ln -sf psfxtable psfstriptable ) 40 | -------------------------------------------------------------------------------- /test/test_basic.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing 3 | 4 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 5 | 6 | require 'test/unit' 7 | require 'slackware' 8 | 9 | class TestBasics < Test::Unit::TestCase 10 | def setup 11 | end 12 | 13 | def teardown 14 | end 15 | 16 | def test_utils_version 17 | assert_not_nil(Slackware::UTILS_VERSION) 18 | end 19 | def test_slackware_version 20 | assert_not_nil(Slackware::SLACKWARE_VERSION) 21 | end 22 | def test_slackware_system_version 23 | assert_not_nil(Slackware::System.version) 24 | end 25 | end 26 | 27 | # vim : set sw=2 sts=2 et : 28 | -------------------------------------------------------------------------------- /test/test_changelog.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing 3 | 4 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 5 | 6 | require 'test/unit' 7 | require 'slackware' 8 | 9 | class TestChangeLog < Test::Unit::TestCase 10 | def setup 11 | @changlog_file = File.dirname(File.expand_path(__FILE__)) + "/samples/ChangeLog.txt" 12 | @changelog = Slackware::ChangeLog.new() 13 | end 14 | 15 | def teardown 16 | end 17 | 18 | def test_new_changelog_empty 19 | c = Slackware::ChangeLog.new() 20 | assert_not_nil(c) 21 | c = nil 22 | end 23 | def test_new_changelog_file 24 | c = Slackware::ChangeLog.new(:file => @changlog_file) 25 | assert_not_nil(c) 26 | c = nil 27 | end 28 | def test_parse_changelog 29 | c = Slackware::ChangeLog.parse(@changlog_file) 30 | assert_not_nil(c) 31 | c = nil 32 | end 33 | def test_open_changelog 34 | c = Slackware::ChangeLog.open(@changlog_file) 35 | assert_not_nil(c) 36 | c = nil 37 | end 38 | def test_new_changelog_update_empty 39 | c = Slackware::ChangeLog::Update.new() 40 | assert_not_nil(c) 41 | c = nil 42 | end 43 | def test_new_changelog_entry_empty 44 | c = Slackware::ChangeLog::Entry.new() 45 | assert_not_nil(c) 46 | c = nil 47 | end 48 | 49 | # testing entries 50 | 51 | def test_sort 52 | c = Slackware::ChangeLog.parse(@changlog_file) 53 | assert_equal(1303738620, c.sort.first.date.to_i) 54 | end 55 | def test_latest 56 | c = Slackware::ChangeLog.parse(@changlog_file) 57 | assert_equal(1310679281, c.latest.date.to_i) 58 | end 59 | def test_updates 60 | c = Slackware::ChangeLog.parse(@changlog_file) 61 | assert_equal(13, c.updates.length) 62 | end 63 | def test_entries 64 | c = Slackware::ChangeLog.parse(@changlog_file) 65 | assert_equal(80, c.entries.length) 66 | end 67 | def test_security 68 | c = Slackware::ChangeLog.parse(@changlog_file) 69 | assert_equal(12, c.security.length) 70 | end 71 | def test_pkgs_removed 72 | c = Slackware::ChangeLog.parse(@changlog_file) 73 | assert_equal(0, c.pkgs_removed.length) 74 | end 75 | def test_pkgs_added 76 | c = Slackware::ChangeLog.parse(@changlog_file) 77 | assert_equal(0, c.pkgs_added.length) 78 | end 79 | def test_pkgs_upgraded 80 | c = Slackware::ChangeLog.parse(@changlog_file) 81 | assert_equal(52, c.pkgs_upgraded.length) 82 | end 83 | def test_pkgs_rebuilt 84 | c = Slackware::ChangeLog.parse(@changlog_file) 85 | assert_equal(28, c.pkgs_rebuilt.length) 86 | end 87 | 88 | # testing constants 89 | def test_abbr_daynames 90 | assert(Slackware::ChangeLog::ABBR_DAYNAMES.count == 7) 91 | end 92 | def test_abbr_monthnames 93 | assert(Slackware::ChangeLog::ABBR_MONTHNAMES.count == 12) 94 | end 95 | def test_re_date 96 | assert(Slackware::ChangeLog::RE_DATE.class == Regexp) 97 | end 98 | def test_re_changelog_break 99 | assert(Slackware::ChangeLog::RE_CHANGELOG_BREAK.class == Regexp) 100 | end 101 | def test_re_package_entry 102 | assert(Slackware::ChangeLog::RE_PACKAGE_ENTRY.class == Regexp) 103 | end 104 | def test_re_security_fix 105 | assert(Slackware::ChangeLog::RE_SECURITY_FIX.class == Regexp) 106 | end 107 | 108 | # testing the methods 109 | def test_method_file 110 | assert_respond_to(@changelog, :file) 111 | end 112 | def test_method_updates 113 | assert_respond_to(@changelog, :updates) 114 | end 115 | def test_method_entries 116 | assert_respond_to(@changelog, :entries) 117 | end 118 | def test_method_security 119 | assert_respond_to(@changelog, :security) 120 | end 121 | def test_method_pkgs_removed 122 | assert_respond_to(@changelog, :pkgs_removed) 123 | end 124 | def test_method_pkgs_added 125 | assert_respond_to(@changelog, :pkgs_added) 126 | end 127 | def test_method_pkgs_upgraded 128 | assert_respond_to(@changelog, :pkgs_upgraded) 129 | end 130 | def test_method_pkgs_rebuilt 131 | assert_respond_to(@changelog, :pkgs_rebuilt) 132 | end 133 | def test_method_parse 134 | assert_respond_to(@changelog, :parse) 135 | end 136 | def test_method_inspect 137 | assert_respond_to(@changelog, :inspect) 138 | end 139 | 140 | end 141 | 142 | class TestChangeLogUpdate < Test::Unit::TestCase 143 | def setup 144 | @update = Slackware::ChangeLog::Update.new() 145 | end 146 | def teardown 147 | @update = nil 148 | end 149 | 150 | def test_method_date 151 | assert_respond_to(@update, :date) 152 | end 153 | def test_method_notes 154 | assert_respond_to(@update, :notes) 155 | end 156 | def test_method_entries 157 | assert_respond_to(@update, :entries) 158 | end 159 | 160 | def test_method_date_eq 161 | assert_respond_to(@update, :date=) 162 | end 163 | def test_method_notes_eq 164 | assert_respond_to(@update, :notes=) 165 | end 166 | 167 | end 168 | 169 | class TestChangeLogEntry < Test::Unit::TestCase 170 | def setup 171 | @entry = Slackware::ChangeLog::Entry.new() 172 | end 173 | def teardown 174 | @entry = nil 175 | end 176 | 177 | def test_method_package 178 | assert_respond_to(@entry, :package) 179 | end 180 | def test_method_section 181 | assert_respond_to(@entry, :section) 182 | end 183 | def test_method_action 184 | assert_respond_to(@entry, :action) 185 | end 186 | def test_method_notes 187 | assert_respond_to(@entry, :notes) 188 | end 189 | def test_method_security 190 | assert_respond_to(@entry, :security) 191 | end 192 | 193 | def test_method_package_eq 194 | assert_respond_to(@entry, :package=) 195 | end 196 | def test_method_section_eq 197 | assert_respond_to(@entry, :section=) 198 | end 199 | def test_method_action_eq 200 | assert_respond_to(@entry, :action=) 201 | end 202 | def test_method_notes_eq 203 | assert_respond_to(@entry, :notes=) 204 | end 205 | def test_method_security_eq 206 | assert_respond_to(@entry, :security=) 207 | end 208 | end 209 | 210 | # vim : set sw=2 sts=2 et : 211 | -------------------------------------------------------------------------------- /test/test_execution.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing 3 | 4 | $bin_path = File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../bin/") 5 | $lib_path = File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/") 6 | $:.insert(0, $lib_path) 7 | 8 | require 'test/unit' 9 | 10 | class TestExecution < Test::Unit::TestCase 11 | def setup 12 | @prev_root_env = ENV["ROOT"] 13 | @prev_rubylib_env = ENV["RUBYLIB"] 14 | ENV["ROOT"] = File.join(File.dirname(File.expand_path(__FILE__)), 'samples') 15 | ENV["RUBYLIB"] = $lib_path 16 | end 17 | def teardown 18 | ENV["RUBYLIB"] = @prev_rubylib_env 19 | ENV["ROOT"] = @prev_root_env 20 | end 21 | 22 | def test_slp 23 | res = nil 24 | IO.popen("ruby %s/slp bash" % $bin_path) {|io| res = io.read } 25 | pid = $? 26 | assert_equal(2, res.split("\n").length, "the command did not return the correct number of results") 27 | assert_equal(true, pid.success?, "the process did not return successfully") 28 | end 29 | 30 | def test_slf 31 | res = nil 32 | IO.popen("ruby %s/slf bin/bash" % $bin_path) {|io| res = io.read } 33 | pid = $? 34 | assert_equal("bin/bash4.new", res.split(": ").last.chomp, "the expected file was not found") 35 | assert_equal(true, pid.success?, "the process did not return successfully") 36 | end 37 | 38 | def test_slt 39 | res = nil 40 | IO.popen("ruby %s/slt -e -p ^bash$ " % $bin_path) {|io| res = io.read } 41 | pid = $? 42 | assert_equal("1328035381", res.chomp.split(": ").last, "the command did not return the expected time of the package") 43 | assert_equal(true, pid.success?, "the process did not return successfully") 44 | end 45 | 46 | def test_slu 47 | res = nil 48 | IO.popen("ruby %s/slu -p ^bash$ " % $bin_path) {|io| res = io.read } 49 | pid = $? 50 | assert_equal(2, res.split("\n").length, "the command did not return the correct number of results") 51 | assert_equal(true, pid.success?, "the process did not return successfully") 52 | end 53 | 54 | def test_sli 55 | res = nil 56 | IO.popen("ruby %s/sli -p ^bash$ " % $bin_path) {|io| res = io.read } 57 | pid = $? 58 | assert_equal(13, res.split("\n").length, "the command did not return the correct number of results") 59 | assert_equal(true, pid.success?, "the process did not return successfully") 60 | end 61 | 62 | def test_sll 63 | res = nil 64 | IO.popen("ruby %s/sll bash" % $bin_path) {|io| res = io.read } 65 | pid = $? 66 | assert_equal(316, res.split("\n").length, "the command did not return the correct number of results") 67 | assert_equal(true, pid.success?, "the process did not return successfully") 68 | end 69 | 70 | def test_slo 71 | res = nil 72 | IO.popen("ruby %s/slo " % $bin_path) {|io| res = io.read } 73 | pid = $? 74 | assert_equal("", res.chomp, "the expected file was not found") 75 | assert_equal(true, pid.success?, "the process did not return successfully") 76 | end 77 | end 78 | 79 | # vim : set sw=2 sts=2 et : 80 | -------------------------------------------------------------------------------- /test/test_package.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 4 | 5 | require 'test/unit' 6 | require 'slackware' 7 | 8 | def log(msg) 9 | Slackware::Log.instance.info(File.basename(__FILE__)) { msg } 10 | end 11 | 12 | class TestPackage < Test::Unit::TestCase 13 | def setup 14 | @root_prev = ENV["ROOT"] 15 | ENV["ROOT"] = File.expand_path(File.join(File.dirname(__FILE__), 'samples')) 16 | log( "ROOT: #{ENV["ROOT"]} ") 17 | end 18 | def teardown 19 | ENV["ROOT"] = @root_prev 20 | end 21 | 22 | def test_upgrade_time 23 | upgraded = [] 24 | removed = [] 25 | Slackware::System.removed_packages().each do |pkg| 26 | if pkg.upgrade_time 27 | upgraded << pkg 28 | else 29 | removed << pkg 30 | end 31 | end 32 | 33 | assert_equal(1, upgraded.length, "only one upgraded package to test") 34 | assert_equal(1, removed.length, "only one removed package to test") 35 | 36 | res = upgraded.map {|i| i.upgrade_time.class }.uniq 37 | assert_equal(1, res.length, "should only be 1") 38 | assert_equal(Time, res.first, "should only be a Time") 39 | 40 | res = removed.map {|i| i.upgrade_time.class }.uniq 41 | assert_equal(1, res.length, "should only be 1") 42 | assert_equal(NilClass, res.first, "should only be a nil") 43 | end 44 | 45 | end 46 | 47 | # vim : set sw=2 sts=2 et : 48 | -------------------------------------------------------------------------------- /test/test_paths.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 4 | 5 | require 'test/unit' 6 | require 'slackware' 7 | 8 | def log(msg) 9 | Slackware::Log.instance.info(File.basename(__FILE__)) { msg } 10 | end 11 | 12 | class TestPaths < Test::Unit::TestCase 13 | def setup 14 | @root_prev = ENV["ROOT"] 15 | ENV["ROOT"] = nil 16 | @alt_root = File.join(File.dirname(__FILE__), 'samples') 17 | end 18 | def teardown 19 | ENV["ROOT"] = @root_prev 20 | end 21 | 22 | def _no_root(&block) 23 | ENV["ROOT"] = nil 24 | yield 25 | end 26 | 27 | def _alt_root(&block) 28 | ENV["ROOT"] = @alt_root 29 | yield 30 | ENV["ROOT"] = @root_prev 31 | end 32 | 33 | def test_root_dir 34 | _no_root { 35 | a = Slackware::Paths.root_dir() 36 | assert_equal('/', a, 'root path is not properly deduced') 37 | } 38 | end 39 | 40 | def test_installed_packages 41 | _no_root { 42 | assert_equal("/var/log/packages/",Slackware::Paths.installed_packages()) 43 | } 44 | end 45 | def test_removed_packages 46 | _no_root { 47 | assert_equal("/var/log/removed_packages/",Slackware::Paths.removed_packages()) 48 | } 49 | end 50 | def test_installed_scripts 51 | _no_root { 52 | assert_equal("/var/log/scripts/",Slackware::Paths.installed_scripts()) 53 | } 54 | end 55 | def test_removed_scripts 56 | _no_root { 57 | assert_equal("/var/log/removed_scripts/",Slackware::Paths.removed_scripts()) 58 | } 59 | end 60 | 61 | def test_root_dir_alt 62 | _alt_root { 63 | a = Slackware::Paths.root_dir() 64 | assert_equal(ENV["ROOT"], a, 'root path is not properly deduced') 65 | } 66 | end 67 | 68 | def test_installed_packages_alt 69 | _alt_root { 70 | assert_equal(File.join(ENV["ROOT"],"var/log/packages",''),Slackware::Paths.installed_packages()) 71 | } 72 | end 73 | def test_removed_packages_alt 74 | _alt_root { 75 | assert_equal(File.join(ENV["ROOT"],"var/log/removed_packages",''),Slackware::Paths.removed_packages()) 76 | } 77 | end 78 | def test_installed_scripts_alt 79 | _alt_root { 80 | assert_equal(File.join(ENV["ROOT"],"var/log/scripts",''),Slackware::Paths.installed_scripts()) 81 | } 82 | end 83 | def test_removed_scripts_alt 84 | _alt_root { 85 | assert_equal(File.join(ENV["ROOT"],"var/log/removed_scripts",''),Slackware::Paths.removed_scripts()) 86 | } 87 | end 88 | end 89 | 90 | # vim : set sw=2 sts=2 et : 91 | -------------------------------------------------------------------------------- /test/test_repo.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | # http://en.wikibooks.org/wiki/Ruby_Programming/Unit_testing 3 | 4 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 5 | 6 | require 'test/unit' 7 | require 'slackware' 8 | 9 | class TestRepoDefaults < Test::Unit::TestCase 10 | def setup 11 | # # 12 | @repo = Slackware::Repo.new 13 | end 14 | 15 | def teardown 16 | # nothing really 17 | @repo = nil 18 | end 19 | 20 | def test_packages 21 | assert_equal(nil, @repo.packages) 22 | end 23 | 24 | def test_proto 25 | t_proto = "ftp://" 26 | @repo.proto = t_proto 27 | assert_equal(t_proto, @repo.proto) 28 | end 29 | 30 | def test_mirror 31 | t_mirror = "ftp.osuosl.org" 32 | @repo.mirror = t_mirror 33 | assert_equal(t_mirror, @repo.mirror) 34 | end 35 | 36 | def test_path 37 | t_path = "/pub/slackware/" 38 | @repo.path = t_path 39 | assert_equal(t_path, @repo.path) 40 | end 41 | 42 | def test_version 43 | t_version = "13.1" 44 | @repo.version = t_version 45 | assert_equal(t_version, @repo.version) 46 | end 47 | 48 | def test_arch 49 | t_arch = "64" 50 | @repo.arch = t_arch 51 | assert_equal(t_arch, @repo.arch) 52 | end 53 | end 54 | 55 | class TestRepoFunctions < Test::Unit::TestCase 56 | def setup 57 | # # 58 | @repo = Slackware::Repo.new 59 | end 60 | 61 | def teardown 62 | # nothing really 63 | @repo = nil 64 | end 65 | 66 | def test_get_packages 67 | #pkgs = @repo.get_packages # FIXME time out ... 68 | #assert_equal(true, pkgs.count > 100) 69 | true 70 | end 71 | 72 | def test_set_packages 73 | #@repo.set_packages # FIXME time out ... 74 | #assert_equal(true, @repo.packages.count > 100) 75 | true 76 | end 77 | end 78 | # vim : set sw=2 sts=2 et : 79 | -------------------------------------------------------------------------------- /test/test_system.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 4 | 5 | require 'test/unit' 6 | require 'slackware' 7 | 8 | def log(msg) 9 | Slackware::Log.instance.info(File.basename(__FILE__)) { msg } 10 | end 11 | 12 | class TestSystem < Test::Unit::TestCase 13 | def setup 14 | @root_prev = ENV["ROOT"] 15 | ENV["ROOT"] = File.expand_path(File.join(File.dirname(__FILE__), 'samples')) 16 | log( "ROOT: #{ENV["ROOT"]} ") 17 | end 18 | def teardown 19 | ENV["ROOT"] = @root_prev 20 | end 21 | 22 | def test_installed_packages 23 | a = Slackware::System.installed_packages() 24 | log(a) 25 | assert_equal(3, a.length, "There should only two packages showing as installed") 26 | end 27 | def test_removed_packages 28 | a = Slackware::System.removed_packages() 29 | log(a) 30 | assert_equal(2, a.length, "There should only two packages showing as removed") 31 | end 32 | def test_installed_scripts 33 | a = Slackware::System.installed_scripts() 34 | log(a) 35 | assert_equal(2, a.length, "There should only two scripts showing as installed") 36 | end 37 | def test_removed_scripts 38 | a = Slackware::System.removed_scripts() 39 | log(a) 40 | assert_equal(2, a.length, "There should only two scripts showing as removed") 41 | end 42 | 43 | def test_find_installed 44 | a = Slackware::System.find_installed('bash') 45 | log(a) 46 | assert_equal(2, a.length, "bash and bash-completion should match") 47 | end 48 | def test_find_removed 49 | a = Slackware::System.find_removed('bash') 50 | log(a) 51 | assert_equal(1, a.length, "There should only be one bash package removed") 52 | end 53 | def test_upgrades 54 | a = Slackware::System.upgrades('bash') 55 | log(a) 56 | assert_equal(1, a.length, "There should only be one bash package upgrades") 57 | 58 | a = Slackware::System.upgrades('fart') 59 | assert_equal(0, a.length, "There should not be any fart upgrades") 60 | end 61 | 62 | def test_is_upgraded 63 | a = Slackware::System.is_upgraded?('bash') 64 | assert_equal(true, a, "bash should have an upgrade present") 65 | 66 | a = Slackware::System.is_upgraded?('fart') 67 | assert_equal(false, a, "fart should not have an upgrade present") 68 | end 69 | 70 | def test_tags_used 71 | a = Slackware::System.tags_used() 72 | log(a) 73 | assert_equal(1, a.length, "There should only one tags showing") 74 | assert_equal("", a.first[:tag], "Only testing stock tags so far") 75 | assert_equal(3, a.first[:count], "Only testing two stock tags so far") 76 | end 77 | 78 | def test_with_tag 79 | a = Slackware::System.with_tag("") 80 | log(a) 81 | assert_equal(3, a.count, "Only testing two stock tags so far") 82 | end 83 | 84 | def test_arch_used 85 | a = Slackware::System.arch_used() 86 | log(a) 87 | assert_equal(2, a.count, "Only testing noarch and x86_64 so far") 88 | assert_equal(%w{ noarch x86_64 }.sort, a.sort, "Only testing noarch and x86_64 so far") 89 | end 90 | 91 | def test_owns_file 92 | a = Slackware::System.owns_file('/bin/bash') 93 | log( 'owns_file' ) 94 | log( a ) 95 | assert_equal(1, a.count, "Only the bash package should own this pattern") 96 | pkg = a.first.first 97 | assert_equal('bash', pkg.name, "Only the bash package should own this pattern") 98 | end 99 | 100 | def test_removed_after 101 | t = Time.at(1) 102 | a = Slackware::System.removed_after(t) 103 | assert_equal(1, a.length, "check the times on the packages") 104 | end 105 | 106 | def test_removed_before 107 | t = Time.now() 108 | a = Slackware::System.removed_before(t) 109 | assert_equal(1, a.length, "check the times on the packages") 110 | end 111 | 112 | def test_installed_after 113 | t = Time.at(1) 114 | a = Slackware::System.installed_after(t) 115 | assert_equal(5, a.length, "check the times on the packages") 116 | end 117 | 118 | def test_installed_before 119 | t = Time.now 120 | a = Slackware::System.installed_before(t) 121 | assert_equal(5, a.length, "check the times on the packages") 122 | end 123 | 124 | def test_version 125 | a = Slackware::System.version() 126 | assert_not_nil(a, "The version of Slackware should be set") 127 | end 128 | end 129 | 130 | # vim : set sw=2 sts=2 et : 131 | -------------------------------------------------------------------------------- /test/test_version.rb: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | 3 | $:.insert(0, File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/../lib/")) 4 | 5 | require 'test/unit' 6 | require 'slackware/log' 7 | 8 | def log(msg) 9 | Slackware::Log.instance.info(File.basename(__FILE__)) { msg } 10 | end 11 | 12 | class TestVersion < Test::Unit::TestCase 13 | def setup 14 | @root_prev = ENV["ROOT"] 15 | ENV["ROOT"] = File.join(File.dirname(File.expand_path(__FILE__)), 'samples') 16 | log( "ROOT: #{ENV["ROOT"]} ") 17 | end 18 | def teardown 19 | ENV["ROOT"] = @root_prev 20 | end 21 | 22 | def test_version 23 | # sticking it here, so that the variable is setup *after* the ROOT environment is declared 24 | require 'slackware/version' 25 | a = Slackware::SLACKWARE_VERSION 26 | log(a) 27 | assert_equal("13.37.314159", a, "the version of slackware deduced, does not match") 28 | end 29 | end 30 | 31 | # vim : set sw=2 sts=2 et : 32 | --------------------------------------------------------------------------------