nub 0.0.70 → 0.0.72

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nub/sys.rb +122 -9
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1425045f9af6f1cf2a0d871c7199015ce855ec5a658717ee023f88e4b738fed9
4
- data.tar.gz: 3f7241bfe87d221fd23e359bc4b7eddb114504d8a6204b71c3a2368a7c6dc3c6
3
+ metadata.gz: c381c27337a97c6edadf9e4a928a4dd7adee88e6af49d0437089362fb89862da
4
+ data.tar.gz: fcb68bf919c81141910718a1af78b84cff7b7ff936697d0610e69b8ca54da2a1
5
5
  SHA512:
6
- metadata.gz: b86b8c2fced9f9dba5f0520c1d72f76b349e594ba7d74d50a4ac8b17fa6964356e577b2402231bb38df553defd284eb0242459ee6b2799092cc4f24f33414d78
7
- data.tar.gz: 54f5ff52b47fb8827c98071ca0990a04750c77e175a6f68fa7a48399a46841491df83354930433cf7f4973dd3ff4e375766b4ca5cfe59d18ee09f3e99f6cbb3a
6
+ metadata.gz: 9750357d487da6f02a19a0b1664ae4c774cfea1207a7fad6218f60f69908c4aa7161a690f8d1a10d2fc835df9066171829842873d0a4341d02c8c491db0ddd02
7
+ data.tar.gz: 793329dd53c30bc8c90050f5f63bf1a18d254caeb058b8a447501572e14a2c32ae31bfbc4bceacb2cd0088234fcb7b205e426b11b601831203c0f57d5a3b615e
data/lib/nub/sys.rb CHANGED
@@ -27,15 +27,6 @@ require_relative 'log'
27
27
  module Sys
28
28
  extend self
29
29
 
30
- # Get the given environment variable by nam
31
- # @param var [String] name of the environment var
32
- # @param required [Bool] require that the variable exists by default
33
- def env(var, required:true)
34
- value = ENV[var]
35
- Log.die("#{var} env variable is required!") if required && !value
36
- return value
37
- end
38
-
39
30
  # Wait for any key to be pressed
40
31
  def any_key?
41
32
  begin
@@ -70,6 +61,60 @@ module Sys
70
61
  return OpenStruct.new(result: result, stdout: stdout.string, stderr: stderr.string)
71
62
  end
72
63
 
64
+ # Drop root privileges to original user
65
+ # Only affects ruby commands not system commands
66
+ # Params:
67
+ # +returns+:: uid, gid of prior user
68
+ def drop_privileges()
69
+ uid = gid = nil
70
+
71
+ if Process.uid.zero?
72
+ uid, gid = Process.uid, Process.gid
73
+ sudo_uid, sudo_gid = ENV['SUDO_UID'].to_i, ENV['SUDO_GID'].to_i
74
+ Process::Sys.setegid(sudo_uid)
75
+ Process::Sys.seteuid(sudo_gid)
76
+ end
77
+
78
+ return uid, gid
79
+ end
80
+
81
+ # Get the given environment variable by nam
82
+ # @param var [String] name of the environment var
83
+ # @param required [Bool] require that the variable exists by default
84
+ def env(var, required:true)
85
+ value = ENV[var]
86
+ Log.die("#{var} env variable is required!") if required && !value
87
+ return value
88
+ end
89
+
90
+ # Run the system command in an exception wrapper
91
+ # @param cmd [String/Array] cmd to execute
92
+ # @param env [Hash] optional environment variables to set
93
+ # @param die [Bool] fail on errors if true
94
+ # @returns boolean status, string message
95
+ def exec(cmd, env:{}, die:true)
96
+ result = false
97
+ puts("exec: #{cmd.is_a?(String) ? cmd : cmd * ' '}")
98
+
99
+ begin
100
+ if cmd.is_a?(String)
101
+ result = system(env, cmd, out: $stdout, err: :out)
102
+ else
103
+ result = system(env, *cmd, out: $stdout, err: :out)
104
+ end
105
+ rescue Exception => e
106
+ result = false
107
+ puts(e.message.colorize(:red))
108
+ puts(e.backtrace.inspect.colorize(:red))
109
+ exit if die
110
+ end
111
+
112
+ !puts("Error: failed to execute command properly".colorize(:red)) and
113
+ exit unless !die or result
114
+
115
+ return result
116
+ end
117
+
73
118
  # Read a password from stdin without echoing
74
119
  # @returns pass [String] the password read in
75
120
  def getpass
@@ -78,6 +123,74 @@ module Sys
78
123
  puts
79
124
  return pass
80
125
  end
126
+
127
+ # Update pacman database
128
+ def pacman_update
129
+ success = false
130
+ while not success
131
+ begin
132
+ Sys.exec("pacman -Sy")
133
+ success = true
134
+ rescue Exception => e
135
+ puts(e.message)
136
+ end
137
+ end
138
+ end
139
+
140
+ # Raise privileges if dropped earlier
141
+ # Only affects ruby commands not system commands
142
+ # Params:
143
+ # +uid+:: uid of user to assume
144
+ # +gid+:: gid of user to assume
145
+ def raise_privileges(uid, gid)
146
+ if uid and gid
147
+ Process::Sys.seteuid(uid)
148
+ Process::Sys.setegid(gid)
149
+ end
150
+ end
151
+
152
+ # Remove given dir or file
153
+ # Params:
154
+ # +path+:: path to delete
155
+ # +returns+:: path that was deleted
156
+ def rm_rf(path)
157
+ Sys.exec("rm -rf #{path}")
158
+ return path
159
+ end
160
+
161
+ # Unmount the given mount point
162
+ # Params:
163
+ # +mount+:: mount point to unmount
164
+ # +retries+:: number of times to retry
165
+ def umount(mount, retries:1)
166
+ check = ->(mnt){
167
+ match = `mount`.split("\n").find{|x| x.include?(mnt)}
168
+ match = match.split('overlay').first if match
169
+ return (match and match.include?(mnt))
170
+ }
171
+
172
+ success = false
173
+ while not success and retries > 0
174
+ if check[mount]
175
+ success = system('umount', '-fv', mount)
176
+ else
177
+ success = true
178
+ end
179
+
180
+ # Sleep for a second if failed
181
+ sleep(1) and retries -= 1 unless success
182
+ end
183
+
184
+ # Die if still mounted
185
+ !puts("Error: Failed to umount #{mount}".colorize(:red)) and
186
+ exit if check[mount]
187
+ end
188
+
189
+ # Get the current user taking into account sudo
190
+ # @returns the current user
191
+ def user
192
+ return Process.uid.zero? ? Etc.getpwuid(ENV['SUDO_UID'].to_i).name : ENV['USER']
193
+ end
81
194
  end
82
195
 
83
196
  # vim: ft=ruby:ts=2:sw=2:sts=2
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.70
4
+ version: 0.0.72
5
5
  platform: ruby
6
6
  authors:
7
7
  - Patrick Crummett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-24 00:00:00.000000000 Z
11
+ date: 2018-06-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: colorize