natives 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +8 -8
- data/VERSION +1 -1
- data/Vagrantfile +102 -0
- data/bin/natives +1 -1
- data/catalogs_test/.gitignore +1 -1
- data/catalogs_test/bin/build_images +13 -0
- data/catalogs_test/bin/install_entry +45 -0
- data/catalogs_test/bin/install_entry_in_docker +11 -0
- data/catalogs_test/{list_all → bin/list_all} +2 -3
- data/catalogs_test/bin/run +6 -0
- data/catalogs_test/bin/test_catalog +22 -0
- data/catalogs_test/bin/test_catalog_in_vagrant +3 -0
- data/catalogs_test/bin/test_entry +29 -0
- data/catalogs_test/bin/test_entry_in_vagrant +3 -0
- data/catalogs_test/images/ubuntu-12.10/Dockerfile +10 -0
- data/natives.gemspec +14 -8
- metadata +13 -7
- data/catalogs_test/clean +0 -6
- data/catalogs_test/run +0 -29
- data/catalogs_test/setup +0 -20
- data/catalogs_test/vendored/pacapt +0 -660
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2U5MzE1YzYzY2U5Y2M2N2VkOWQwZjlhZjJjYmU2ZGRlYTdlZDU0OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MmQzY2RiNWFkMGVlMGYxZWMxZDNiZWU1NGVmZjg3MDA5YTk5OTI3Mw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MzU4YWU5ZDU4NTVlNjFhYWI5YjdmMTE4MWFhYTk1Mzg0MGQ2MTkwOTk5ZDY1
|
10
|
+
MzRiYjk0MDdiMzY3YzU3Njc3ZTM5OTEzZDVhNGZmMWE4ZjMyMzE0OTdlZTc5
|
11
|
+
N2FhNDY2NTgxMGQ4ZGI0MWEzN2Y5OGRhNGVjYTI1YzNkZmQwZmU=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTU2ZDVmYjhlMDQwZDA2MTllZGU0OWMwNjg4NmRlNDQ4YmI5OTc1ZmIwZjky
|
14
|
+
ZmExYzM4ZWYyNDM2ZDBmYTc4ZTIxMmRiNDdlM2Q2ZmZkMGNjZTk0YzJjMmZk
|
15
|
+
MWYyMzFlMzliNGRmM2M3ZDliNGJjODY3ZmFlNTFkNmUxMjQyNDM=
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.4
|
data/Vagrantfile
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
# vi: set ft=ruby :
|
3
|
+
|
4
|
+
BOX_NAME = ENV['BOX_NAME'] || "ubuntu"
|
5
|
+
BOX_URI = ENV['BOX_URI'] || "http://files.vagrantup.com/precise64.box"
|
6
|
+
VF_BOX_URI = ENV['BOX_URI'] || "http://files.vagrantup.com/precise64_vmware_fusion.box"
|
7
|
+
AWS_REGION = ENV['AWS_REGION'] || "us-east-1"
|
8
|
+
AWS_AMI = ENV['AWS_AMI'] || "ami-d0f89fb9"
|
9
|
+
FORWARD_DOCKER_PORTS = ENV['FORWARD_DOCKER_PORTS']
|
10
|
+
|
11
|
+
Vagrant::Config.run do |config|
|
12
|
+
# Setup virtual machine box. This VM configuration code is always executed.
|
13
|
+
config.vm.box = BOX_NAME
|
14
|
+
config.vm.box_url = BOX_URI
|
15
|
+
|
16
|
+
config.ssh.forward_agent = true
|
17
|
+
|
18
|
+
# Provision docker and new kernel if deployment was not done.
|
19
|
+
# It is assumed Vagrant can successfully launch the provider instance.
|
20
|
+
if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/default/*/id").empty?
|
21
|
+
# Add lxc-docker package
|
22
|
+
pkg_cmd = "wget -q -O - https://get.docker.io/gpg | apt-key add -;" \
|
23
|
+
"echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list;" \
|
24
|
+
"apt-get update -qq; apt-get install -q -y --force-yes lxc-docker; "
|
25
|
+
# Add Ubuntu raring backported kernel
|
26
|
+
pkg_cmd << "apt-get update -qq; apt-get install -q -y linux-image-generic-lts-raring; "
|
27
|
+
# Add guest additions if local vbox VM. As virtualbox is the default provider,
|
28
|
+
# it is assumed it won't be explicitly stated.
|
29
|
+
if ENV["VAGRANT_DEFAULT_PROVIDER"].nil? && ARGV.none? { |arg| arg.downcase.start_with?("--provider") }
|
30
|
+
pkg_cmd << "apt-get install -q -y linux-headers-generic-lts-raring dkms; " \
|
31
|
+
"echo 'Downloading VBox Guest Additions...'; " \
|
32
|
+
"wget -q http://dlc.sun.com.edgesuite.net/virtualbox/4.2.12/VBoxGuestAdditions_4.2.12.iso; "
|
33
|
+
# Prepare the VM to add guest additions after reboot
|
34
|
+
pkg_cmd << "echo -e 'mount -o loop,ro /home/vagrant/VBoxGuestAdditions_4.2.12.iso /mnt\n" \
|
35
|
+
"echo yes | /mnt/VBoxLinuxAdditions.run\numount /mnt\n" \
|
36
|
+
"rm /root/guest_additions.sh; ' > /root/guest_additions.sh; " \
|
37
|
+
"chmod 700 /root/guest_additions.sh; " \
|
38
|
+
"sed -i -E 's#^exit 0#[ -x /root/guest_additions.sh ] \\&\\& /root/guest_additions.sh#' /etc/rc.local; " \
|
39
|
+
"echo 'Installation of VBox Guest Additions is proceeding in the background.'; " \
|
40
|
+
"echo '\"vagrant reload\" can be used in about 2 minutes to activate the new guest additions.'; "
|
41
|
+
end
|
42
|
+
# Add vagrant user to the docker group
|
43
|
+
pkg_cmd << "usermod -a -G docker vagrant; "
|
44
|
+
# Activate new kernel
|
45
|
+
pkg_cmd << "shutdown -r +1; "
|
46
|
+
config.vm.provision :shell, :inline => pkg_cmd
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
# Providers were added on Vagrant >= 1.1.0
|
52
|
+
Vagrant::VERSION >= "1.1.0" and Vagrant.configure("2") do |config|
|
53
|
+
config.vm.provider :aws do |aws, override|
|
54
|
+
aws.access_key_id = ENV["AWS_ACCESS_KEY_ID"]
|
55
|
+
aws.secret_access_key = ENV["AWS_SECRET_ACCESS_KEY"]
|
56
|
+
aws.keypair_name = ENV["AWS_KEYPAIR_NAME"]
|
57
|
+
override.ssh.private_key_path = ENV["AWS_SSH_PRIVKEY"]
|
58
|
+
override.ssh.username = "ubuntu"
|
59
|
+
aws.region = AWS_REGION
|
60
|
+
aws.ami = AWS_AMI
|
61
|
+
aws.instance_type = "t1.micro"
|
62
|
+
end
|
63
|
+
|
64
|
+
config.vm.provider :rackspace do |rs|
|
65
|
+
config.ssh.private_key_path = ENV["RS_PRIVATE_KEY"]
|
66
|
+
rs.username = ENV["RS_USERNAME"]
|
67
|
+
rs.api_key = ENV["RS_API_KEY"]
|
68
|
+
rs.public_key_path = ENV["RS_PUBLIC_KEY"]
|
69
|
+
rs.flavor = /512MB/
|
70
|
+
rs.image = /Ubuntu/
|
71
|
+
end
|
72
|
+
|
73
|
+
config.vm.provider :vmware_fusion do |f, override|
|
74
|
+
override.vm.box = BOX_NAME
|
75
|
+
override.vm.box_url = VF_BOX_URI
|
76
|
+
override.vm.synced_folder ".", "/vagrant", disabled: true
|
77
|
+
f.vmx["displayName"] = "docker"
|
78
|
+
end
|
79
|
+
|
80
|
+
config.vm.provider :virtualbox do |vb|
|
81
|
+
config.vm.box = BOX_NAME
|
82
|
+
config.vm.box_url = BOX_URI
|
83
|
+
config.vm.synced_folder ".", "/vagrant"
|
84
|
+
vb.name = "natives_catalog_test"
|
85
|
+
vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
86
|
+
vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
if !FORWARD_DOCKER_PORTS.nil?
|
91
|
+
Vagrant::VERSION < "1.1.0" and Vagrant::Config.run do |config|
|
92
|
+
(49000..49900).each do |port|
|
93
|
+
config.vm.forward_port port, port
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
Vagrant::VERSION >= "1.1.0" and Vagrant.configure("2") do |config|
|
98
|
+
(49000..49900).each do |port|
|
99
|
+
config.vm.network :forwarded_port, :host => port, :guest => port
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
data/bin/natives
CHANGED
data/catalogs_test/.gitignore
CHANGED
@@ -1 +1 @@
|
|
1
|
-
/
|
1
|
+
/logs
|
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
BIN_HOME="$( cd "$( dirname "$0" )" && pwd )"
|
4
|
+
TEST_HOME="$( cd "$BIN_HOME/.." && pwd )"
|
5
|
+
|
6
|
+
for dir in $TEST_HOME/images/*/
|
7
|
+
do
|
8
|
+
cd $dir &&
|
9
|
+
image_name=${PWD##*/} && # to assign to a variable
|
10
|
+
echo "Building $image_name from $dir" &&
|
11
|
+
docker build -t natives/$image_name .
|
12
|
+
docker push natives/$image_name
|
13
|
+
done
|
@@ -0,0 +1,45 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
|
3
|
+
BIN_HOME="$( cd "$( dirname "$0" )" && pwd )"
|
4
|
+
PROJECT_HOME="$( cd $BIN_HOME/../.. && pwd )"
|
5
|
+
|
6
|
+
gem_name=$1
|
7
|
+
echo " * Gem: $gem_name"
|
8
|
+
|
9
|
+
native_packages="$( $PROJECT_HOME/bin/natives list $gem_name )"
|
10
|
+
echo " * Native packages: $native_packages"
|
11
|
+
|
12
|
+
if [ -n "$native_packages" ]; then
|
13
|
+
echo " * Installing native packages.."
|
14
|
+
max_retry=3
|
15
|
+
retry_count=0
|
16
|
+
last_status='err'
|
17
|
+
while [ $retry_count -lt $max_retry ]; do
|
18
|
+
retry_count=$[$retry_count+1]
|
19
|
+
echo " * Attempt: $retry_count of $max_retry"
|
20
|
+
|
21
|
+
apt-get install -y $native_packages
|
22
|
+
|
23
|
+
if [ $? -eq 0 ]; then
|
24
|
+
last_status='ok'
|
25
|
+
break
|
26
|
+
fi
|
27
|
+
done
|
28
|
+
if [ $last_status == 'err' ]; then
|
29
|
+
echo " * Abort. Error when installing native packages."
|
30
|
+
return 1
|
31
|
+
fi
|
32
|
+
fi
|
33
|
+
|
34
|
+
echo " * Installing gems.."
|
35
|
+
gem install --verbose $gem_name
|
36
|
+
|
37
|
+
EXIT_CODE=$?
|
38
|
+
echo " * Exit code: $EXIT_CODE"
|
39
|
+
|
40
|
+
echo ""
|
41
|
+
if [ $EXIT_CODE -eq 0 ]; then
|
42
|
+
echo "SUCCESS"
|
43
|
+
else
|
44
|
+
echo "FAILED"
|
45
|
+
fi
|
@@ -1,11 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require 'psych'
|
4
3
|
require 'yaml'
|
5
4
|
require 'fileutils'
|
6
5
|
|
7
|
-
|
8
|
-
project_home = File.expand_path(File.join(
|
6
|
+
bin_home = File.dirname(__FILE__)
|
7
|
+
project_home = File.expand_path(File.join(bin_home, '..', '..'))
|
9
8
|
|
10
9
|
rubygems_catalog_file = File.join(
|
11
10
|
project_home, 'catalogs', 'rubygems.yaml')
|
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
BIN_HOME="$( cd "$( dirname "$0" )" && pwd )"
|
4
|
+
TEST_HOME="$( cd "$BIN_HOME/.." && pwd )"
|
5
|
+
LOG_HOME="$TEST_HOME/logs"
|
6
|
+
|
7
|
+
for dir in $TEST_HOME/images/*/
|
8
|
+
do
|
9
|
+
image_name=$(basename $dir)
|
10
|
+
|
11
|
+
log_dir="$LOG_HOME/$image_name"
|
12
|
+
echo " * Cleaning up logs: $log_dir .."
|
13
|
+
mkdir -p $log_dir
|
14
|
+
rm -rf $log_dir/*
|
15
|
+
|
16
|
+
gems="$( $BIN_HOME/list_all )"
|
17
|
+
echo " * To test entries in $image_name image: $gems"
|
18
|
+
for gem_name in $gems
|
19
|
+
do
|
20
|
+
$BIN_HOME/test_entry $image_name $gem_name
|
21
|
+
done
|
22
|
+
done
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
BIN_HOME="$( cd "$( dirname "$0" )" && pwd )"
|
4
|
+
TEST_HOME="$( cd "$BIN_HOME/.." && pwd )"
|
5
|
+
LOG_HOME="$TEST_HOME/logs"
|
6
|
+
|
7
|
+
image_name=$1
|
8
|
+
gem_name=$2
|
9
|
+
log_dir="$LOG_HOME/$image_name"
|
10
|
+
|
11
|
+
echo " * Removing previous log file.."
|
12
|
+
rm $log_dir/$gem_name*.log
|
13
|
+
|
14
|
+
echo " * Installing $gem_name gem in $image_name .."
|
15
|
+
$BIN_HOME/install_entry_in_docker "natives/$image_name" $gem_name | \
|
16
|
+
tee $log_dir/$gem_name.log
|
17
|
+
|
18
|
+
echo " * Appending test status to log filename.."
|
19
|
+
test_status=$( tail -n1 $log_dir/$gem_name.log )
|
20
|
+
new_log_file="$gem_name-FAILED.log"
|
21
|
+
if [ "$test_status" == "SUCCESS" ]; then
|
22
|
+
new_log_file="$gem_name-SUCCESS.log"
|
23
|
+
elif [ "$test_status" == "FAILED" ]; then
|
24
|
+
new_log_file="$gem_name-FAILED.log"
|
25
|
+
else
|
26
|
+
new_log_file="$gem_name-ERROR.log"
|
27
|
+
fi
|
28
|
+
mv $log_dir/$gem_name.log $log_dir/$new_log_file
|
29
|
+
|
data/natives.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: natives 0.5.
|
5
|
+
# stub: natives 0.5.4 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "natives"
|
9
|
-
s.version = "0.5.
|
9
|
+
s.version = "0.5.4"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.authors = ["Huiming Teo"]
|
13
|
-
s.date = "2013-11-
|
13
|
+
s.date = "2013-11-12"
|
14
14
|
s.description = "Lookup native package dependencies required by gems on your machine."
|
15
15
|
s.email = "teohuiming@gmail.com"
|
16
16
|
s.executables = ["natives"]
|
@@ -28,14 +28,20 @@ Gem::Specification.new do |s|
|
|
28
28
|
"README.md",
|
29
29
|
"Rakefile",
|
30
30
|
"VERSION",
|
31
|
+
"Vagrantfile",
|
31
32
|
"bin/natives",
|
32
33
|
"catalogs/rubygems.yaml",
|
33
34
|
"catalogs_test/.gitignore",
|
34
|
-
"catalogs_test/
|
35
|
-
"catalogs_test/
|
36
|
-
"catalogs_test/
|
37
|
-
"catalogs_test/
|
38
|
-
"catalogs_test/
|
35
|
+
"catalogs_test/bin/build_images",
|
36
|
+
"catalogs_test/bin/install_entry",
|
37
|
+
"catalogs_test/bin/install_entry_in_docker",
|
38
|
+
"catalogs_test/bin/list_all",
|
39
|
+
"catalogs_test/bin/run",
|
40
|
+
"catalogs_test/bin/test_catalog",
|
41
|
+
"catalogs_test/bin/test_catalog_in_vagrant",
|
42
|
+
"catalogs_test/bin/test_entry",
|
43
|
+
"catalogs_test/bin/test_entry_in_vagrant",
|
44
|
+
"catalogs_test/images/ubuntu-12.10/Dockerfile",
|
39
45
|
"lib/natives.rb",
|
40
46
|
"lib/natives/apps.rb",
|
41
47
|
"lib/natives/apps/detect.rb",
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: natives
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Huiming Teo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-11-
|
11
|
+
date: 2013-11-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ohai
|
@@ -168,14 +168,20 @@ files:
|
|
168
168
|
- README.md
|
169
169
|
- Rakefile
|
170
170
|
- VERSION
|
171
|
+
- Vagrantfile
|
171
172
|
- bin/natives
|
172
173
|
- catalogs/rubygems.yaml
|
173
174
|
- catalogs_test/.gitignore
|
174
|
-
- catalogs_test/
|
175
|
-
- catalogs_test/
|
176
|
-
- catalogs_test/
|
177
|
-
- catalogs_test/
|
178
|
-
- catalogs_test/
|
175
|
+
- catalogs_test/bin/build_images
|
176
|
+
- catalogs_test/bin/install_entry
|
177
|
+
- catalogs_test/bin/install_entry_in_docker
|
178
|
+
- catalogs_test/bin/list_all
|
179
|
+
- catalogs_test/bin/run
|
180
|
+
- catalogs_test/bin/test_catalog
|
181
|
+
- catalogs_test/bin/test_catalog_in_vagrant
|
182
|
+
- catalogs_test/bin/test_entry
|
183
|
+
- catalogs_test/bin/test_entry_in_vagrant
|
184
|
+
- catalogs_test/images/ubuntu-12.10/Dockerfile
|
179
185
|
- lib/natives.rb
|
180
186
|
- lib/natives/apps.rb
|
181
187
|
- lib/natives/apps/detect.rb
|
data/catalogs_test/clean
DELETED
data/catalogs_test/run
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
#!/usr/bin/env bash
|
2
|
-
|
3
|
-
TEST_HOME="$( cd "$( dirname "$0" )" && pwd )"
|
4
|
-
PROJECT_HOME="$( cd $TEST_HOME/.. && pwd )"
|
5
|
-
|
6
|
-
$TEST_HOME/setup
|
7
|
-
|
8
|
-
NATIVES_CMD="$PROJECT_HOME/bin/natives list $($TEST_HOME/list_all)"
|
9
|
-
NATIVE_PACKAGES="$( $NATIVES_CMD )"
|
10
|
-
echo " * Native packages: $NATIVE_PACKAGES"
|
11
|
-
|
12
|
-
if [ -n "$NATIVE_PACKAGES" ]; then
|
13
|
-
echo " * Installing native packages.."
|
14
|
-
INSTALL_CMD="$TEST_HOME/vendored/pacapt -v -S"
|
15
|
-
$INSTALL_CMD $NATIVE_PACKAGES
|
16
|
-
fi
|
17
|
-
|
18
|
-
echo " * Installing gems.."
|
19
|
-
bundle install --gemfile $TEST_HOME/data/Gemfile --path bundle --verbose
|
20
|
-
|
21
|
-
EXIT_CODE=$?
|
22
|
-
echo " * Exit code: $EXIT_CODE"
|
23
|
-
echo ""
|
24
|
-
|
25
|
-
if [ $EXIT_CODE -eq 0 ]; then
|
26
|
-
echo "SUCCESS"
|
27
|
-
else
|
28
|
-
echo "FAILED"
|
29
|
-
fi
|
data/catalogs_test/setup
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'yaml'
|
4
|
-
require 'fileutils'
|
5
|
-
|
6
|
-
test_home = File.expand_path(File.dirname(__FILE__))
|
7
|
-
project_home = File.expand_path(File.join(test_home, '..'))
|
8
|
-
gemfile_path = File.join(test_home, 'data', 'Gemfile')
|
9
|
-
|
10
|
-
gem_names = `#{ File.join(test_home, 'list_all') }`.split("\n")
|
11
|
-
|
12
|
-
FileUtils.mkdir_p File.dirname(gemfile_path)
|
13
|
-
File.open(gemfile_path, 'w') do |f|
|
14
|
-
f.puts %{source "https://rubygems.org"}
|
15
|
-
gem_names.each do |gem_name|
|
16
|
-
f.puts %{gem "#{gem_name}"}
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
puts " * Generated gemfile at #{gemfile_path}"
|
@@ -1,660 +0,0 @@
|
|
1
|
-
#!/bin/bash
|
2
|
-
|
3
|
-
# Purpose: A wrapper for all Unix package managers
|
4
|
-
# Author : Anh K. Huynh
|
5
|
-
# License: Fair license (http://www.opensource.org/licenses/fair)
|
6
|
-
# Source : http://github.com/icy/pacapt/
|
7
|
-
|
8
|
-
# Copyright (C) 2010 - 2013 Anh K. Huynh
|
9
|
-
#
|
10
|
-
# Usage of the works is permitted provided that this instrument is
|
11
|
-
# retained with the works, so that any entity that uses the works is
|
12
|
-
# notified of this instrument.
|
13
|
-
#
|
14
|
-
# DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.
|
15
|
-
|
16
|
-
_POPT="" # primary operation
|
17
|
-
_SOPT="" # secondary operation
|
18
|
-
_TOPT="" # options for operations
|
19
|
-
_PKG="" # packages and extra parameters for apt-get
|
20
|
-
_VERBOSE="" # verbose mode
|
21
|
-
_FORCE="" # force yes
|
22
|
-
_OSTYPE="" # type of package manager (Arch pacman, Debian apt, ...)
|
23
|
-
|
24
|
-
_error() {
|
25
|
-
echo >&2 ":: $*"
|
26
|
-
}
|
27
|
-
|
28
|
-
_help() {
|
29
|
-
cat <<\EOF
|
30
|
-
NAME
|
31
|
-
|
32
|
-
pacapt - An Arch's pacman-like package manager for some Unices.
|
33
|
-
|
34
|
-
DESCRIPTION
|
35
|
-
|
36
|
-
An Arch's pacman-like package manager for some Unices. Actually this Bash
|
37
|
-
script provides a wrapper for system's package manager.
|
38
|
-
|
39
|
-
Instead of remembering various options/tools on different OSs, you only
|
40
|
-
need a common way to manipulate packages. Not all options of the native
|
41
|
-
package manager are ported; the tool only provides a very basic interface
|
42
|
-
to search, install, remove packages, and/or update the system.
|
43
|
-
|
44
|
-
Arch's pacman is chosen, as pacman is quite smart when it divides all
|
45
|
-
packages-related operations into three major groups: Synchronize, Query
|
46
|
-
and Remove/Clean up. It has a clean man page, and it is the only tool
|
47
|
-
needed to manipulate official packages on system. (Debian, for example,
|
48
|
-
requires you to use apt-get, dpkg, and/or aptitude.)
|
49
|
-
|
50
|
-
The tool supports the following package managers:
|
51
|
-
|
52
|
-
pacman by Arch Linux, ArchBang, Manjaro, etc.
|
53
|
-
dpkg/apt-get by Debian, Ubuntu, etc.
|
54
|
-
homebrew by Mac OS X
|
55
|
-
macports by Mac OS X
|
56
|
-
yum/rpm by Redhat, CentOS, Fedora, etc.
|
57
|
-
portage by Gentoo
|
58
|
-
zypper by OpenSUSE
|
59
|
-
|
60
|
-
SYNTAX
|
61
|
-
|
62
|
-
$ pacapt <operation> <option(s)> <packages>
|
63
|
-
|
64
|
-
OPERATIONS
|
65
|
-
|
66
|
-
Query
|
67
|
-
|
68
|
-
-Q list all installed packages
|
69
|
-
-Qc <package> show package's changelog
|
70
|
-
-Qi <package> print package status
|
71
|
-
-Ql <package> list package's files
|
72
|
-
-Qm list installed packages that aren't available
|
73
|
-
in any installation source
|
74
|
-
-Qo <file> query package that provides <file>
|
75
|
-
-Qp <file> query a package file (don't use package database)
|
76
|
-
|
77
|
-
Synchronize
|
78
|
-
|
79
|
-
-S <package> install package(s)
|
80
|
-
-Ss <package> search for packages
|
81
|
-
-Su upgrade the system
|
82
|
-
-Sy update package database
|
83
|
-
-Suy update package database, then upgrade the system
|
84
|
-
|
85
|
-
Remove / Clean up
|
86
|
-
|
87
|
-
-R <packages> remove some packages
|
88
|
-
-Sc delete old downloaded packages
|
89
|
-
-Scc delete all downloaded packages
|
90
|
-
-Sccc clean variant files.
|
91
|
-
(debian) See more at http://dragula.org/blogs/646
|
92
|
-
|
93
|
-
OPTIONS
|
94
|
-
|
95
|
-
-f force yes
|
96
|
-
-v be verbose
|
97
|
-
-w download packages but don't install them
|
98
|
-
|
99
|
-
NOTES
|
100
|
-
|
101
|
-
To install a package from backports repository on Debian system:
|
102
|
-
$ pacapt -S foobar -t lenny-backports
|
103
|
-
|
104
|
-
Similarly, any further option which isn't recognized by getopts (1)
|
105
|
-
can be passed to system tool.
|
106
|
-
|
107
|
-
When being executed on Arch-based system, the tool simply invokes
|
108
|
-
the system tool '/usr/bin/pacman'.
|
109
|
-
|
110
|
-
THANKS
|
111
|
-
|
112
|
-
Special thanks to
|
113
|
-
|
114
|
-
Châu An, Nguyễn (told me about 'Pacman Rosetta' [1])
|
115
|
-
Karol Blazewicz (for comments about '-Sy')
|
116
|
-
James Pearson (for userful comments and patches.
|
117
|
-
See also http://github.com/xiongchiamiov/pacapt)
|
118
|
-
Alexander Dupuy (for userful comments and patches.
|
119
|
-
See also https://github.com/dupuy/pacapt)
|
120
|
-
Hà Dương, Nguyễn (for adding Gentoo support.
|
121
|
-
See also https://github.com/CMPITG/pacapt)
|
122
|
-
|
123
|
-
REFERENCES
|
124
|
-
|
125
|
-
1. Pacman Rosetta, https://wiki.archlinux.org/index.php?title=Pacman_Rosetta
|
126
|
-
EOF
|
127
|
-
}
|
128
|
-
|
129
|
-
###
|
130
|
-
### Helpers
|
131
|
-
###
|
132
|
-
|
133
|
-
_os_is() {
|
134
|
-
[[ "$_OSTYPE" = "$*" ]]
|
135
|
-
}
|
136
|
-
|
137
|
-
_exec_() {
|
138
|
-
local _type="$1"
|
139
|
-
shift
|
140
|
-
if _os_is $_type; then
|
141
|
-
[[ -z "$_VERBOSE" ]] || _error "Going to execute: $* $_VERBOSE $_FORCE"
|
142
|
-
eval "$* $_VERBOSE $_FORCE"
|
143
|
-
fi
|
144
|
-
}
|
145
|
-
|
146
|
-
|
147
|
-
# Detect package type from /etc/issue
|
148
|
-
_found_arch() {
|
149
|
-
local _ostype="$1"
|
150
|
-
shift
|
151
|
-
grep -qis "$*" /etc/issue && _OSTYPE="$_ostype"
|
152
|
-
}
|
153
|
-
|
154
|
-
# Detect package type
|
155
|
-
_OSTYPE_detect() {
|
156
|
-
_found_arch PACMAN "Arch Linux" && return
|
157
|
-
_found_arch DPKG "Debian GNU/Linux" && return
|
158
|
-
_found_arch DPKG "Ubuntu" && return
|
159
|
-
_found_arch YUM "CentOS" && return
|
160
|
-
_found_arch YUM "Red Hat" && return
|
161
|
-
_found_arch YUM "Fedora" && return
|
162
|
-
_found_arch ZYPPER "SUSE" && return
|
163
|
-
|
164
|
-
[[ -z "$_OSTYPE" ]] || return
|
165
|
-
|
166
|
-
# See also https://github.com/icy/pacapt/pull/22
|
167
|
-
# Please not that $OSTYPE (which is `linux-gnu` on Linux system)
|
168
|
-
# is not our $_OSTYPE. The choice is not very good because
|
169
|
-
# a typo can just break the logic of the program.
|
170
|
-
if [[ "$OSTYPE" != "darwin"* ]]; then
|
171
|
-
_error "Can't detect OS type from /etc/issue. Running fallback method."
|
172
|
-
fi
|
173
|
-
[[ -x "/usr/bin/pacman" ]] && _OSTYPE="PACMAN" && return
|
174
|
-
[[ -x "/usr/bin/apt-get" ]] && _OSTYPE="DPKG" && return
|
175
|
-
[[ -x "/usr/bin/yum" ]] && _OSTYPE="YUM" && return
|
176
|
-
[[ -x "/opt/local/bin/port" ]] && _OSTYPE="MACPORTS" && return
|
177
|
-
command -v brew >/dev/null && _OSTYPE="HOMEBREW" && return
|
178
|
-
[[ -x "/usr/bin/emerge" ]] && _OSTYPE="PORTAGE" && return
|
179
|
-
[[ -x "/usr/bin/zypper" ]] && _OSTYPE="ZYPPER" && return
|
180
|
-
if [[ -z "$_OSTYPE" ]]; then
|
181
|
-
_error "No supported package manager installed on system"
|
182
|
-
_error "(supported: apt, homebrew, pacman, portage, yum)"
|
183
|
-
exit 1
|
184
|
-
fi
|
185
|
-
}
|
186
|
-
|
187
|
-
###
|
188
|
-
### Main
|
189
|
-
###
|
190
|
-
|
191
|
-
# Detect type of package manager.
|
192
|
-
_OSTYPE_detect
|
193
|
-
|
194
|
-
# If the system is Arch-like, pass all of the arguments to /usr/bin/pacman
|
195
|
-
# and return. This is done here to achieve a consistent help menu.
|
196
|
-
[[ "$_OSTYPE" == "PACMAN" ]] && exec /usr/bin/pacman "$@"
|
197
|
-
|
198
|
-
#
|
199
|
-
# Get options from command lines. FIXME: Support long options
|
200
|
-
#
|
201
|
-
|
202
|
-
# By default, with Gentoo, 'force' is always 'yes', so we change it to 'no'
|
203
|
-
[[ "$_OSTYPE" == "PORTAGE" ]] && _FORCE="-a"
|
204
|
-
|
205
|
-
while getopts "URQShfvlumyispqwco" opt 2>/dev/null; do
|
206
|
-
case "$opt" in
|
207
|
-
Q|S|R|U)
|
208
|
-
if [[ "$_POPT" != "" && "$_POPT" != "$opt" ]]; then
|
209
|
-
_error "Only one operation may be used at a time"
|
210
|
-
exit 1
|
211
|
-
fi
|
212
|
-
_POPT="$opt"
|
213
|
-
;;
|
214
|
-
|
215
|
-
# FIXME: Please check pacman(8) to see if they are really 2nd operation
|
216
|
-
s|l|i|p|o|m)
|
217
|
-
if [[ "$_SOPT" == '' ]]; then
|
218
|
-
_SOPT="$opt"
|
219
|
-
else
|
220
|
-
_TOPT="$opt"
|
221
|
-
fi
|
222
|
-
;;
|
223
|
-
|
224
|
-
# NOTE: -q is an output option, not an operator!
|
225
|
-
# Thanks to James Pearson for his catch :)
|
226
|
-
q)
|
227
|
-
_TOPT="$opt"
|
228
|
-
;;
|
229
|
-
|
230
|
-
u)
|
231
|
-
if [[ "${_SOPT:0:1}" = "y" ]]; then
|
232
|
-
_SOPT="uy"
|
233
|
-
else
|
234
|
-
_SOPT="u"
|
235
|
-
fi
|
236
|
-
;;
|
237
|
-
|
238
|
-
y)
|
239
|
-
if [[ "${_SOPT:0:1}" = "u" ]]; then
|
240
|
-
_SOPT="uy"
|
241
|
-
else
|
242
|
-
_SOPT="y"
|
243
|
-
fi
|
244
|
-
;;
|
245
|
-
|
246
|
-
c)
|
247
|
-
if [[ "${_SOPT:0:2}" = "cc" ]]; then
|
248
|
-
_SOPT="ccc"
|
249
|
-
elif [[ "${_SOPT:0:1}" = "c" ]]; then
|
250
|
-
_SOPT="cc"
|
251
|
-
else
|
252
|
-
_SOPT="$opt"
|
253
|
-
fi
|
254
|
-
;;
|
255
|
-
|
256
|
-
w)
|
257
|
-
case "$_OSTYPE" in
|
258
|
-
"DPKG") _TOPT="-d" ;;
|
259
|
-
"YUM")
|
260
|
-
_TOPT="--downloadonly"
|
261
|
-
if ! rpm -q yum-downloadonly > /dev/null; then
|
262
|
-
_error "The '-w' option requires the package 'yum-downloadonly'"
|
263
|
-
_error "Install this with 'yum install -y yum-downloadonly' or"
|
264
|
-
_error "$0 -S -f yum-downloadonly"
|
265
|
-
exit 1
|
266
|
-
fi
|
267
|
-
;;
|
268
|
-
"MACPORTS") _TOPT="fetch" ;;
|
269
|
-
"PORTAGE") _TOPT="--fetchonly" ;;
|
270
|
-
"ZYPPER") _TOPT="--download-only" ;;
|
271
|
-
esac
|
272
|
-
;;
|
273
|
-
|
274
|
-
f)
|
275
|
-
case "$_OSTYPE" in
|
276
|
-
"DPKG") _FORCE="-f --force-yes" ;;
|
277
|
-
"YUM") _FORCE="-y" ;;
|
278
|
-
"MACPORTS") _FORCE="-f" ;;
|
279
|
-
"PORTAGE") _FORCE="" ;;
|
280
|
-
*) _FORCE="-y" ;;
|
281
|
-
esac
|
282
|
-
;;
|
283
|
-
|
284
|
-
v) _VERBOSE="-v" ;;
|
285
|
-
|
286
|
-
h) _help; exit 0 ;;
|
287
|
-
|
288
|
-
*) _error "Error: Invalid option"; exit 1 ;;
|
289
|
-
esac
|
290
|
-
done
|
291
|
-
|
292
|
-
# Remained options/packages/queries
|
293
|
-
shift $((OPTIND - 1))
|
294
|
-
_PKG="$*"
|
295
|
-
|
296
|
-
# pacman man page (examples) says: "pacman -Syu gpm = Update package list,
|
297
|
-
# upgrade all packages, and then install gpm if it wasn't already installed."
|
298
|
-
# Instead, just disallow specific packages, as (ex-)yum users likely expect to
|
299
|
-
# just update/upgrade one package (and its dependencies) and apt-get and pacman
|
300
|
-
# have no way to do this.
|
301
|
-
if [[ -n "$_PKG" ]]; then
|
302
|
-
case "$_POPT$_SOPT" in
|
303
|
-
"Su"|"Sy"|"Suy")
|
304
|
-
_error "The -Sy/u options refresh and/or upgrade all packages"
|
305
|
-
_error "To install packages as well, use separate commands to do so:"
|
306
|
-
_error "$0 -S$_SOPT"
|
307
|
-
_error "$0 -S $_PKG"
|
308
|
-
exit 1
|
309
|
-
esac
|
310
|
-
fi
|
311
|
-
|
312
|
-
# DEBUG
|
313
|
-
# echo "Primary options: $_POPT"
|
314
|
-
# echo "Secondary options: $_SOPT"
|
315
|
-
# echo "Options for operations: $_TOPT"
|
316
|
-
# echo "Extra params: $_PKG"
|
317
|
-
# echo "Verbose: $_VERBOSE"
|
318
|
-
# echo "Force: $_FORCE"
|
319
|
-
|
320
|
-
# Return if no option was specified
|
321
|
-
if [[ -z "$_POPT" ]]; then
|
322
|
-
_error "No operation specified (use -h for help)"
|
323
|
-
exit 1
|
324
|
-
fi
|
325
|
-
|
326
|
-
# Invoke the native package manager
|
327
|
-
case "$_POPT$_SOPT" in
|
328
|
-
####################################################################
|
329
|
-
# QUERYING #
|
330
|
-
####################################################################
|
331
|
-
|
332
|
-
"Qi")
|
333
|
-
_exec_ ZYPPER "zypper info $_PKG"
|
334
|
-
_exec_ DPKG "dpkg-query -s $_PKG"
|
335
|
-
_exec_ HOMEBREW "brew info $_PKG"
|
336
|
-
#_exec_ MACPORTS "port info $_PKG"
|
337
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
338
|
-
_exec_ YUM "yum info $_PKG"
|
339
|
-
_FORCE="" \
|
340
|
-
_exec_ PORTAGE "emerge --info $_PKG"
|
341
|
-
;;
|
342
|
-
"Ql")
|
343
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
344
|
-
_exec_ DPKG "
|
345
|
-
if [[ -n \"$_PKG\" ]]; then
|
346
|
-
dpkg-query -L $_PKG
|
347
|
-
else
|
348
|
-
dpkg -l \
|
349
|
-
| grep -E ^[hi]i \
|
350
|
-
| awk '{print \$2}' \
|
351
|
-
| while read _pkg; do
|
352
|
-
if [[ \"$_TOPT\" = 'q' ]]; then
|
353
|
-
dpkg-query -L \$_pkg
|
354
|
-
else
|
355
|
-
dpkg-query -L \$_pkg \
|
356
|
-
| while read _line; do
|
357
|
-
echo \$_pkg \$_line
|
358
|
-
done
|
359
|
-
fi
|
360
|
-
done
|
361
|
-
fi
|
362
|
-
"
|
363
|
-
_exec_ HOMEBREW "brew list $_PKG"
|
364
|
-
_exec_ MACPORTS "port contents $_PKG"
|
365
|
-
_exec_ YUM "rpm -ql $_PKG"
|
366
|
-
_FORCE="" \
|
367
|
-
_exec_ PORTAGE "
|
368
|
-
if [[ -x /usr/bin/qlist ]]; then
|
369
|
-
qlist $_PKG
|
370
|
-
elif [[ -x /usr/bin/equery ]]; then
|
371
|
-
equery files $_PKG
|
372
|
-
else
|
373
|
-
_error 'You need to install portage-utils or gentoolkit to perform this operation.'
|
374
|
-
fi
|
375
|
-
"
|
376
|
-
;;
|
377
|
-
"Qo")
|
378
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
379
|
-
|
380
|
-
_exec_ DPKG "dpkg-query -S $_PKG"
|
381
|
-
_exec_ HOMEBREW "
|
382
|
-
cd \"\$(dirname -- \$(which $_PKG))\"
|
383
|
-
pkg=\"\$(pwd -P)/\$(basename -- $_PKG)\"
|
384
|
-
prefix=\"\$(brew --prefix)\"
|
385
|
-
cellar=\"\$(brew --cellar)\"
|
386
|
-
for package in \$cellar/*; do
|
387
|
-
files=(\${package}/*/\${pkg/#\$prefix\//})
|
388
|
-
if [[ -e \${files[\${#files[@]} - 1]} ]]; then
|
389
|
-
echo \"\${package/#\$cellar\//}\"
|
390
|
-
break
|
391
|
-
fi
|
392
|
-
done
|
393
|
-
"
|
394
|
-
_exec_ MACPORTS "port provides $_PKG"
|
395
|
-
_exec_ YUM "rpm -qf $_PKG"
|
396
|
-
_FORCE="" \
|
397
|
-
_exec_ PORTAGE "
|
398
|
-
if [[ -x /usr/bin/equery ]]; then
|
399
|
-
equery belongs $_PKG
|
400
|
-
else
|
401
|
-
_error 'You need to install gentoolkit to perform this operation'
|
402
|
-
fi
|
403
|
-
"
|
404
|
-
;;
|
405
|
-
"Qp")
|
406
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
407
|
-
_os_is HOMEBREW && _error "Function not implemented in homebrew"
|
408
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
409
|
-
_os_is PORTAGE && _error "Function not supported as Gentoo has no definition of 'package file"
|
410
|
-
|
411
|
-
_exec_ DPKG "dpkg-deb -I $_PKG"
|
412
|
-
_exec_ YUM "rpm -qp $_PKG"
|
413
|
-
;;
|
414
|
-
"Qc")
|
415
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
416
|
-
_os_is DPKG && _error "Function not implemented in Debian system"
|
417
|
-
|
418
|
-
_exec_ HOMEBREW "brew log $_PKG"
|
419
|
-
_exec_ MACPORTS "port log $_PKG"
|
420
|
-
_exec_ YUM "rpm -q --changelog $_PKG"
|
421
|
-
_FORCE="" \
|
422
|
-
_exec_ PORTAGE "emerge -p --changelog $_PKG"
|
423
|
-
;;
|
424
|
-
"Qu")
|
425
|
-
_exec_ ZYPPER "zypper list-updates"
|
426
|
-
_exec_ DPKG "apt-get upgrade --trivial-only $_PKG"
|
427
|
-
_exec_ HOMEBREW "brew outdated | grep $_PKG"
|
428
|
-
_exec_ MACPORTS "port outdated $_PKG"
|
429
|
-
_exec_ YUM "yum list updates $_PKG"
|
430
|
-
_exec_ PORTAGE "emerge -uvN $_PKG" # FIXME: not exactly
|
431
|
-
;;
|
432
|
-
"Qm")
|
433
|
-
_exec_ ZYPPER "zypper search -si | grep 'System Packages'"
|
434
|
-
_os_is DPKG && _error "Function not implemented in Debian system"
|
435
|
-
_os_is HOMEBREW && _error "Function not implemented in homebrew"
|
436
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
437
|
-
_os_is PORTAGE && _error "Function not supported in Gentoo"
|
438
|
-
|
439
|
-
_exec_ YUM "yum list extras $_PKG"
|
440
|
-
;;
|
441
|
-
|
442
|
-
"Q")
|
443
|
-
_exec_ ZYPPER "zypper search -i"
|
444
|
-
if [[ "$_TOPT" = 'q' ]]; then
|
445
|
-
# FIXME: Should we redirect user to a similar operation?
|
446
|
-
_os_is HOMEBREW && _error "Function not implemented in homebrew"
|
447
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
448
|
-
_os_is PORTAGE && _error "Function not supported as Gentoo has no definition of 'package file"
|
449
|
-
_os_is YUM && _error "Function not implemented in Yum"
|
450
|
-
|
451
|
-
_exec_ DPKG "dpkg -l | grep -E ^[hi]i | awk '{print \$2}'"
|
452
|
-
elif [[ "$_TOPT" = "" ]]; then
|
453
|
-
_exec_ DPKG "dpkg -l $_PKG | grep -E ^[hi]i"
|
454
|
-
_exec_ HOMEBREW "brew list | grep $_PKG"
|
455
|
-
_exec_ MACPORTS "port installed $_PKG"
|
456
|
-
_exec_ YUM "yum list installed $_PKG"
|
457
|
-
|
458
|
-
# FIXME: There are actually many ways to do this in Gentoo
|
459
|
-
_FORCE="" \
|
460
|
-
_exec_ PORTAGE "
|
461
|
-
if [[ -x /usr/bin/eix ]]; then
|
462
|
-
eix -I $_PKG
|
463
|
-
elif [[ -x /usr/bin/equery ]]; then
|
464
|
-
equery list '*' $_PKG
|
465
|
-
else
|
466
|
-
LS_COLORS=never ls -1 -d /var/db/pkg/*/*
|
467
|
-
fi
|
468
|
-
"
|
469
|
-
else
|
470
|
-
_error "Error: Invalid option"
|
471
|
-
exit 1
|
472
|
-
fi
|
473
|
-
;;
|
474
|
-
|
475
|
-
####################################################################
|
476
|
-
# REMOVING #
|
477
|
-
####################################################################
|
478
|
-
|
479
|
-
"Rs")
|
480
|
-
if [[ "$_TOPT" = 's' ]]; then
|
481
|
-
_os_is DPKG && _error "Function not implemented in Debian system"
|
482
|
-
_os_is YUM && _error "Function not implemented in Yum"
|
483
|
-
_os_is PORTAGE && _error "Function not supported in Gentoo"
|
484
|
-
|
485
|
-
_exec_ ZYPPER "zypper remove $_PKG --clean-deps"
|
486
|
-
_exec_ HOMEBREW "
|
487
|
-
brew rm $_PKG
|
488
|
-
brew rm \$(join <(brew leaves) <(brew deps $_PKG))
|
489
|
-
"
|
490
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
491
|
-
elif [[ "$_TOPT" = '' ]]; then
|
492
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
493
|
-
_os_is HOMEBREW && _error "Function not implemented in homebrew"
|
494
|
-
_exec_ MACPORTS "port uninstall --follow-dependencies $_PKG"
|
495
|
-
_exec_ DPKG "apt-get autoremove $_PKG"
|
496
|
-
_exec_ YUM "yum erase $_PKG"
|
497
|
-
_exec_ PORTAGE "emerge --depclean world $_PKG"
|
498
|
-
else
|
499
|
-
_error "Error: Invalid option"
|
500
|
-
fi
|
501
|
-
;;
|
502
|
-
"R")
|
503
|
-
_exec_ ZYPPER "zypper remove $_PKG"
|
504
|
-
_exec_ DPKG "apt-get remove $_PKG"
|
505
|
-
_exec_ HOMEBREW "brew remove $_PKG"
|
506
|
-
_exec_ MACPORTS "port uninstall $_PKG"
|
507
|
-
_exec_ YUM "yum erase $_PKG"
|
508
|
-
_exec_ PORTAGE "emerge --depclean $_PKG"
|
509
|
-
;;
|
510
|
-
|
511
|
-
####################################################################
|
512
|
-
# SYNCHRONIZING #
|
513
|
-
####################################################################
|
514
|
-
|
515
|
-
"Si")
|
516
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
517
|
-
_exec_ DPKG "dpkg-query -s $_PKG"
|
518
|
-
_exec_ HOMEBREW "brew info $_PKG"
|
519
|
-
_exec_ MACPORTS "port info $_PKG"
|
520
|
-
_exec_ YUM "yum info $_PKG"
|
521
|
-
_FORCE="" \
|
522
|
-
_exec_ PORTAGE "emerge --info $_PKG"
|
523
|
-
;;
|
524
|
-
"Suy")
|
525
|
-
_exec_ ZYPPER "zypper dup"
|
526
|
-
_VERBOSE="" \
|
527
|
-
_exec_ DPKG "apt-get update; apt-get upgrade"
|
528
|
-
_exec_ HOMEBREW "brew update; brew upgrade"
|
529
|
-
_exec_ MACPORTS "port selfupdate; port upgrade outdated"
|
530
|
-
_exec_ YUM "yum update"
|
531
|
-
_exec_ PORTAGE "
|
532
|
-
if [[ -x /usr/bin/layman ]]; then
|
533
|
-
layman --sync-all \
|
534
|
-
&& emerge --sync \
|
535
|
-
&& emerge -auND world $_PKG
|
536
|
-
else
|
537
|
-
emerge --sync \
|
538
|
-
&& emerge -uND world $_PKG
|
539
|
-
fi
|
540
|
-
"
|
541
|
-
;;
|
542
|
-
"Su")
|
543
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
544
|
-
_VERBOSE="" \
|
545
|
-
_exec_ DPKG "apt-get upgrade"
|
546
|
-
_exec_ HOMEBREW "brew upgrade"
|
547
|
-
_exec_ MACPORTS "port upgrade outdated"
|
548
|
-
_exec_ YUM "yum update"
|
549
|
-
_exec_ PORTAGE "emerge -uND world $_PKG"
|
550
|
-
;;
|
551
|
-
"Sy")
|
552
|
-
_exec_ ZYPPER "zypper refresh"
|
553
|
-
_VERBOSE="" \
|
554
|
-
_exec_ DPKG "apt-get update"
|
555
|
-
_exec_ HOMEBREW "brew update"
|
556
|
-
_exec_ MACPORTS "port selfupdate" # or sync?
|
557
|
-
_exec_ YUM "yum check-update"
|
558
|
-
_FORCE="" \
|
559
|
-
_exec_ PORTAGE "
|
560
|
-
if [[ -x /usr/bin/layman ]]; then
|
561
|
-
layman --sync-all && emerge --sync
|
562
|
-
else
|
563
|
-
emerge --sync
|
564
|
-
fi
|
565
|
-
"
|
566
|
-
;;
|
567
|
-
"Ss")
|
568
|
-
_exec_ ZYPPER "zypper search $_PKG"
|
569
|
-
_exec_ DPKG "apt-cache search $_PKG"
|
570
|
-
_exec_ HOMEBREW "brew search $_PKG"
|
571
|
-
_exec_ MACPORTS "port search $_PKG"
|
572
|
-
_exec_ YUM "yum -C search $_PKG"
|
573
|
-
_FORCE="" \
|
574
|
-
_exec_ PORTAGE "
|
575
|
-
if [[ -x /usr/bin/eix ]]; then
|
576
|
-
eix $_PKG
|
577
|
-
else
|
578
|
-
emerge --search $_PKG
|
579
|
-
fi
|
580
|
-
"
|
581
|
-
;;
|
582
|
-
"Sc")
|
583
|
-
_exec_ ZYPPER "zypper clean"
|
584
|
-
_exec_ DPKG "apt-get clean"
|
585
|
-
_exec_ HOMEBREW "brew cleanup"
|
586
|
-
_exec_ MACPORTS "port clean --all inactive"
|
587
|
-
_exec_ YUM "yum clean expire-cache"
|
588
|
-
__FORCE="" \
|
589
|
-
_exec_ PORTAGE "
|
590
|
-
if [[ -x usr/bin/eclean-dist ]]; then
|
591
|
-
eclean-dist -d -t1m -s50 -f
|
592
|
-
else
|
593
|
-
_error 'You need install gentoolkit to perform this operation.'
|
594
|
-
fi
|
595
|
-
"
|
596
|
-
;;
|
597
|
-
"Scc")
|
598
|
-
_exec_ ZYPPER "zypper clean"
|
599
|
-
_exec_ DPKG "apt-get autoclean"
|
600
|
-
_exec_ HOMEBREW "brew cleanup -s"
|
601
|
-
_exec_ MACPORTS "port clean --all installed"
|
602
|
-
_exec_ YUM "yum clean packages"
|
603
|
-
_FORCE="" \
|
604
|
-
_exec_ PORTAGE "
|
605
|
-
if [[ -x /usr/bin/eclean ]]; then
|
606
|
-
eclean -i distfiles
|
607
|
-
else
|
608
|
-
_error 'You need install gentoolkit to perform this operation.'
|
609
|
-
fi
|
610
|
-
"
|
611
|
-
;;
|
612
|
-
"Sccc")
|
613
|
-
_exec_ ZYPPER "echo 'Function is not available'; exit 1"
|
614
|
-
_exec_ DPKG "rm -fv /var/cache/apt/*.bin
|
615
|
-
rm -fv /var/cache/apt/archives/*.*
|
616
|
-
rm -fv /var/lib/apt/lists/*.*
|
617
|
-
apt-get autoclean"
|
618
|
-
_exec_ HOMEBREW 'rm -rf $(brew --cache)'
|
619
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
620
|
-
_exec_ YUM "yum clean all"
|
621
|
-
_FORCE="" \
|
622
|
-
_exec_ PORTAGE "rm -fv /usr/portage/distfiles/*.*"
|
623
|
-
;;
|
624
|
-
"S")
|
625
|
-
[[ -z "$_PKG" ]] \
|
626
|
-
&& { _error "You must specify a package"; exit 1; }
|
627
|
-
|
628
|
-
_exec_ ZYPPER "zypper install $_TOPT $_PKG"
|
629
|
-
_exec_ DPKG "apt-get install $_TOPT $_PKG"
|
630
|
-
_exec_ HOMEBREW "brew install $_TOPT $_PKG"
|
631
|
-
if [[ "$_TOPT" = fetch ]]
|
632
|
-
then
|
633
|
-
_exec_ MACPORTS "port patch $_PKG"
|
634
|
-
else
|
635
|
-
_exec_ MACPORTS "port install $_TOPT $_PKG"
|
636
|
-
fi
|
637
|
-
_exec_ YUM "yum install $_TOPT $_PKG"
|
638
|
-
_exec_ PORTAGE "emerge $_TOPT $_PKG"
|
639
|
-
;;
|
640
|
-
|
641
|
-
####################################################################
|
642
|
-
# UPGRADING #
|
643
|
-
####################################################################
|
644
|
-
|
645
|
-
"U")
|
646
|
-
_exec_ ZYPPER "zypper install $_PKG"
|
647
|
-
_os_is HOMEBREW && _error "Function not implemented in homebrew"
|
648
|
-
_os_is MACPORTS && _error "Function not implemented in macports"
|
649
|
-
_os_is PORTAGE && _error "You need to implement a local overlay and do the installation as usual."
|
650
|
-
|
651
|
-
_exec_ DPKG "dpkg -i $_TOPT $_PKG"
|
652
|
-
_exec_ YUM "yum localinstall $_TOPT $_PKG"
|
653
|
-
;;
|
654
|
-
|
655
|
-
# Default option
|
656
|
-
*)
|
657
|
-
_error "Error: Invalid option"
|
658
|
-
exit 1
|
659
|
-
;;
|
660
|
-
esac
|