apt-spy2 0.2.1
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.
- data/.gitignore +2 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +21 -0
- data/README.md +65 -0
- data/Rakefile +1 -0
- data/Vagrantfile +11 -0
- data/apt-spy2/Gemfile +4 -0
- data/apt-spy2/lib/apt/spy2.rb +7 -0
- data/apt-spy2.gemspec +26 -0
- data/bin/apt-spy2 +13 -0
- data/lib/apt/spy2/version.rb +5 -0
- data/lib/apt/spy2.rb +106 -0
- metadata +123 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
apt-spy2 (0.2.1)
|
5
|
+
colored
|
6
|
+
thor
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
colored (1.2)
|
12
|
+
rake (10.1.0)
|
13
|
+
thor (0.18.1)
|
14
|
+
|
15
|
+
PLATFORMS
|
16
|
+
ruby
|
17
|
+
|
18
|
+
DEPENDENCIES
|
19
|
+
apt-spy2!
|
20
|
+
bundler (~> 1.3)
|
21
|
+
rake
|
data/README.md
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
# apt-spy2 or, "apt-spy for ubuntu"
|
2
|
+
|
3
|
+
|
4
|
+
## setup
|
5
|
+
|
6
|
+
```
|
7
|
+
gem install bundler
|
8
|
+
bundle install --dev
|
9
|
+
```
|
10
|
+
|
11
|
+
or:
|
12
|
+
|
13
|
+
```
|
14
|
+
gem install apt-spy2
|
15
|
+
```
|
16
|
+
|
17
|
+
## usage
|
18
|
+
|
19
|
+
```
|
20
|
+
$ apt-spy2 [21:03:52]
|
21
|
+
apt-spy2 commands:
|
22
|
+
apt-spy2 check # Evaluate mirrors
|
23
|
+
apt-spy2 fix # Set the closest/fastest mirror
|
24
|
+
apt-spy2 help [COMMAND] # Describe available commands or one specific command
|
25
|
+
apt-spy2 list # List the currently available mirrors
|
26
|
+
```
|
27
|
+
|
28
|
+
### list
|
29
|
+
|
30
|
+
Displays a list of currently available mirrors. These mirrors are automatically selected via
|
31
|
+
[ubuntu-mirrors](http://mirrors.ubuntu.com) using your IP's location.
|
32
|
+
|
33
|
+
### check
|
34
|
+
|
35
|
+
`check` works like `list`, but also determines if the servers returned are working.
|
36
|
+
|
37
|
+
### fix
|
38
|
+
|
39
|
+
`fix` applies the result of `check` and updates `/etc/apt/sources.list`.
|
40
|
+
|
41
|
+
Please note: Depending on the context, it may require sudo.
|
42
|
+
|
43
|
+
### options/switches
|
44
|
+
|
45
|
+
See `apt-spy2 help list|check|fix` for available options.
|
46
|
+
|
47
|
+
### exit codes
|
48
|
+
|
49
|
+
* 0 - all went well
|
50
|
+
* 1 - some kind of error
|
51
|
+
|
52
|
+
### output and non-interactiveness
|
53
|
+
|
54
|
+
See `apt-spy2 help COMMAND` for more information.
|
55
|
+
|
56
|
+
Generally, this piece of code plays especially nice in a non-interactive environment and won't ask for anything.
|
57
|
+
|
58
|
+
## License
|
59
|
+
|
60
|
+
[New BSD License](http://opensource.org/licenses/BSD-2-Clause)
|
61
|
+
|
62
|
+
## Contributions
|
63
|
+
|
64
|
+
Contributions are welcome!
|
65
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/Vagrantfile
ADDED
data/apt-spy2/Gemfile
ADDED
data/apt-spy2.gemspec
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'apt/spy2/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "apt-spy2"
|
8
|
+
spec.version = Apt::Spy2::VERSION
|
9
|
+
spec.authors = ["till"]
|
10
|
+
spec.email = ["till@php.net"]
|
11
|
+
spec.description = "Keep your /etc/apt/sources.list up to date"
|
12
|
+
spec.summary = "apt-spy2, or apt-spy for ubuntu"
|
13
|
+
spec.homepage = "https://github.com/lagged/apt-spy2"
|
14
|
+
spec.license = "BSD"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'thor'
|
22
|
+
spec.add_dependency 'colored'
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
end
|
data/bin/apt-spy2
ADDED
data/lib/apt/spy2.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
class AptSpy2 < Thor
|
2
|
+
package_name "apt-spy2"
|
3
|
+
|
4
|
+
desc "fix", "Set the closest/fastest mirror"
|
5
|
+
option :country, :default => "mirrors"
|
6
|
+
option :commit, :type => :boolean
|
7
|
+
def fix
|
8
|
+
working = filter(retrieve(), false)
|
9
|
+
print "The closest mirror is: "
|
10
|
+
puts "#{working[0]}".white_on_green
|
11
|
+
if !options[:commit]
|
12
|
+
puts "Run with --commit to adjust /etc/apt/sources.list".yellow
|
13
|
+
else
|
14
|
+
puts "Updating /etc/apt/sources.list".yellow
|
15
|
+
update(working[0])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "check", "Evaluate mirrors"
|
20
|
+
option :country, :default => "mirrors"
|
21
|
+
option :output, :type => :boolean, :default => true
|
22
|
+
def check
|
23
|
+
mirrors = retrieve(options[:country])
|
24
|
+
return filter(mirrors, options[:output])
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "list", "List the currently available mirrors"
|
28
|
+
option :country, :default => "mirrors"
|
29
|
+
def list
|
30
|
+
mirrors = retrieve(options[:country])
|
31
|
+
puts mirrors
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def retrieve(country = "mirrors")
|
36
|
+
begin
|
37
|
+
country.upcase! if country.length == 2
|
38
|
+
mirrors = open("http://mirrors.ubuntu.com/#{country}.txt") do |list|
|
39
|
+
list.read
|
40
|
+
end
|
41
|
+
rescue OpenURI::HTTPError => the_error
|
42
|
+
case the_error.io.status[0]
|
43
|
+
when "404"
|
44
|
+
puts "The country code '#{country}' is incorrect.".red
|
45
|
+
exit 1
|
46
|
+
else
|
47
|
+
puts "Status: #{the_error.io.status[0]}".red
|
48
|
+
exit 1
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
mirrors = mirrors.split(/\n/)
|
53
|
+
return mirrors
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
def filter(mirrors, output = true)
|
58
|
+
# f me :)
|
59
|
+
|
60
|
+
working_mirrors = []
|
61
|
+
|
62
|
+
mirrors.each do |mirror|
|
63
|
+
print "Mirror: #{mirror} - " if output
|
64
|
+
begin
|
65
|
+
mirror_status = open(mirror)
|
66
|
+
puts "UP".green if output
|
67
|
+
working_mirrors << mirror
|
68
|
+
rescue OpenURI::HTTPError => the_error
|
69
|
+
puts "BROKEN: #{the_error.io.status[0]}".yellow_on_red if output
|
70
|
+
rescue Errno::ECONNREFUSED
|
71
|
+
puts "DOWN".red if output
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
return working_mirrors
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
private
|
80
|
+
def update(mirror)
|
81
|
+
|
82
|
+
t = Time.now
|
83
|
+
r = `lsb_release -c`.split(" ")[1]
|
84
|
+
sources = "## Updated on #{t.to_s}\n"
|
85
|
+
sources << "deb #{mirror} #{r} main restricted universe multiverse\n"
|
86
|
+
sources << "deb #{mirror} #{r}-updates main restricted universe multiverse\n"
|
87
|
+
sources << "deb #{mirror} #{r}-backports main restricted universe multiverse\n"
|
88
|
+
sources << "deb #{mirror} #{r}-security main restricted universe multiverse\n"
|
89
|
+
|
90
|
+
apt_sources = '/etc/apt/sources.list'
|
91
|
+
|
92
|
+
begin
|
93
|
+
File.rename apt_sources, "#{apt_sources}.#{t.to_i}"
|
94
|
+
File.open(apt_sources, 'w') do |f|
|
95
|
+
f.write(sources)
|
96
|
+
end
|
97
|
+
rescue
|
98
|
+
puts "Failed updating #{apt_sources}!".red_on_white
|
99
|
+
puts "You probably need sudo!".red
|
100
|
+
exit 1
|
101
|
+
end
|
102
|
+
|
103
|
+
puts "Updated '#{apt_sources}' with #{mirror}".green
|
104
|
+
puts "Run `apt-get update` to update".red_on_yellow
|
105
|
+
end
|
106
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: apt-spy2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- till
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-07-20 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: thor
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: colored
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.3'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.3'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Keep your /etc/apt/sources.list up to date
|
79
|
+
email:
|
80
|
+
- till@php.net
|
81
|
+
executables:
|
82
|
+
- apt-spy2
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- .gitignore
|
87
|
+
- Gemfile
|
88
|
+
- Gemfile.lock
|
89
|
+
- README.md
|
90
|
+
- Rakefile
|
91
|
+
- Vagrantfile
|
92
|
+
- apt-spy2.gemspec
|
93
|
+
- apt-spy2/Gemfile
|
94
|
+
- apt-spy2/lib/apt/spy2.rb
|
95
|
+
- bin/apt-spy2
|
96
|
+
- lib/apt/spy2.rb
|
97
|
+
- lib/apt/spy2/version.rb
|
98
|
+
homepage: https://github.com/lagged/apt-spy2
|
99
|
+
licenses:
|
100
|
+
- BSD
|
101
|
+
post_install_message:
|
102
|
+
rdoc_options: []
|
103
|
+
require_paths:
|
104
|
+
- lib
|
105
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
112
|
+
none: false
|
113
|
+
requirements:
|
114
|
+
- - ! '>='
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 1.8.23
|
120
|
+
signing_key:
|
121
|
+
specification_version: 3
|
122
|
+
summary: apt-spy2, or apt-spy for ubuntu
|
123
|
+
test_files: []
|