Class: Roebe::InstallOpensslCertificates

Inherits:
Base show all
Defined in:
lib/roebe/classes/install_openssl_certificates.rb

Overview

Roebe::InstallOpensslCertificates

Constant Summary collapse

REMOTE_LFS_WEBPAGE =
#

REMOTE_LFS_WEBPAGE

#
'http://www.linuxfromscratch.org/blfs/view/svn/postlfs/cacerts.html'
REMOTE_FILE_ROOT_CRT =
#

REMOTE_FILE_ROOT_CRT

#
'http://www.cacert.org/certs/root.crt'
URL_TO_THE_REMOTE_SHELL_SCRIPT =
#

URL_TO_THE_REMOTE_SHELL_SCRIPT

#
'https://github.com/djlucas/make-ca/releases/download/v1.7/make-ca-1.7.tar.xz'
MAIN_PEM_FILE =
#

MAIN_PEM_FILE

#
'/etc/ssl/local/CAcert_Class_1_root.pem'

Constants inherited from Base

Base::COLOURS, Base::HOME_DIRECTORY_OF_USER_X, Base::N, Base::NAMESPACE

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Base

#actions, #append_this_onto_that_file, #append_what_into, #be_silent, #be_verbose?, #beautiful_url, #burlywood, #call_next, #chdir, #cheerful_guy, #cliner, #complex_esystem, #convert_global_env, #copy_directory, #copy_file, #cornflowerblue, #create_directory, #crimson, #current_month?, #current_time?, #current_year?, #cyan, #darkcyan, #darkgreen, #darkkhaki, #darkslateblue, #deeppink, #delete_symlink, #do_not_use_the_base_colours, #do_use_the_base_colours, #e, #ecomment, #editor_to_use?, #efancy, #eimp, #emphasis, #ensure_main_encoding, #ensure_utf_encoding, #eparse, #erev, #esteelblue, #etomato, #ewarn, #exit_program, #firebrick, #get_current_day, #get_current_month, #get_files_and_directories, #get_files_from, #get_german_name_for_this_weekday, #gold, #green, #grey, #hh_mm_ss, #hh_mm_ss_day_month_year, #home_dir?, #home_directory_of_user_x?, #infer_the_namespace, #internal_hash?, #is_a_directory?, #is_a_file?, #is_a_jpg_file?, #is_an_image_file?, #is_archive?, #is_audio_file?, #is_in_studium_dir?, #is_multimedia_file?, #is_on_roebe?, #is_on_windows?, #is_studium_available?, #is_symlink?, #is_this_a_ruby_file?, #is_video_file?, #iso_encoding?, #le, #left_colour, #lightblue, #lightgreen, #lightseagreen, #lightsteelblue, #lime, #limegreen, #localhost_to_data, #log_directory?, #main_encoding?, #mediumorchid, #mediumpurple, #mediumseagreen, #mediumslateblue, #mediumspringgreen, #mediumturquoise, #mkdir_p, #mv, #n_days_in_this_month, #n_pages_in_this_pdf_file?, #namespace?, #no_file_exists_at, #ogrey, #olive, #olivedrab, #open_in_browser, #opne, #opnesystem, #opnn, #orange, #orchid, #orev, #palegoldenrod, #palevioletred, #pink, #powderblue, #programs_dir?, #project_base_dir?, #random_html_colour, #rds, #read_file_in_iso_encoding, #read_file_via_the_default_encoding, #read_lines_via_iso_encoding, #readlines_with_main_encoding, #red, #register_sigint, #remove, #remove_directory, #remove_file, #rename_kde_konsole_tab, #replace_localhost_with_data, #report_pwd, #require_rescue, #reset_the_internal_hash, #return_all_directories_from_this_directory, #return_all_files_from_this_directory, #return_current_directory, #return_dd_mm_yyyy, #return_file_or_directory_of, #return_files_from_pwd, #return_last_part_of_the_current_directory, #return_utc, #rev, #right_arrow?, #right_colour, #roebe_log_directory?, #rosybrown, #royalblue, #ruby_base_directory?, #run_in_background, #run_rcfiles_then_run_ata_via_qdbus, #sandybrown, #sdir, #seagreen, #set_be_verbose, #set_xorg_buffer, #sfancy, #sfile, #show_help, #silent_redirection?, #simp, #simple_esystem, #skyblue, #slateblue, #slategray, #springgreen, #steelblue, #string_italic, #swarn, #symlink, #teal, #temp_dir?, #to_camelcase, #to_counted_hash, #tomato, #touch, #try_to_require_the_beautiful_url_gem, #try_to_require_the_html_template, #try_to_require_the_open_gem, #try_to_require_the_program_information_gem, #try_to_require_the_xorg_buffer, #use_colours?, #verbose_truth, #weekday?, #word_wrap, #write_what_into, #yellow

Methods included from Base::CommandlineArguments

#append_onto_the_commandline_arguments, #clear_commandline_arguments, #commandline_arguments?, #commandline_arguments_as_string?, #commandline_arguments_without_leading_hyphens?, #first_argument?, #first_argument_without_leading_hyphens?, #has_an_argument_been_passed?, #remove_hyphened_arguments_from_the_commandline_arguments, #return_commandline_arguments_with_leading_hyphens, #second_argument?, #set_commandline_arguments

Constructor Details

#initialize(i = nil, run_already = true) ⇒ InstallOpensslCertificates

#

initialize

#


54
55
56
57
58
59
60
61
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 54

def initialize(
    i           = nil,
    run_already = true
  )
  reset
  set_input(i)
  run if run_already
end

Class Method Details

.[](i = '') ⇒ Object

#

Roebe::InstallOpensslCertificates[]

#


221
222
223
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 221

def self.[](i = '')
  new(i)
end

Instance Method Details

#download(from_this_url = url_to_the_remote_shell_script?, , local_path = nil) ⇒ Object

#

download

Use this method to download a remote file.

Do note that this may file, since openssl may be unavailable on the given host system. This is why this method will also try to handle these situations via “wget” and the associated flag “wget –no-check-certificate”.

#


184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 184

def download(
    from_this_url = url_to_the_remote_shell_script?,
    local_path    = nil
  )
  if local_path.nil?
    local_path = File.basename(from_this_url)
  end
  if File.exist? local_path
    delete(local_path)
  end
  begin
    File.open(local_path, 'w') { |file|
      IO.copy_stream(URI.open(from_this_url), file)
    }
  rescue OpenSSL::SSL::SSLError
    e 'An '+steelblue('OpenSSL::SSL::SSLError')+' error has occurred.'
    e 'Thus, we will use wget instead.'
    command_to_use = "wget --no-check-certificate #{from_this_url}"
    e command_to_use
    `#{command_to_use}`
  end
  return File.absolute_path(local_path) # Also feedback the local path, but as absolute path.
end

#input?Boolean

#

input?

#

Returns:

  • (Boolean)


98
99
100
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 98

def input?
  @input
end

#remote_url?Boolean

#

remote_url?

#

Returns:

  • (Boolean)


82
83
84
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 82

def remote_url?
  REMOTE_LFS_WEBPAGE
end

#resetObject

#

reset (reset tag)

#


66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 66

def reset
  super()
  infer_the_namespace
  # ======================================================================= #
  # === @shall_we_download_the_remote_shell_script
  #
  # This flag determines whether the class will download the remote
  # shell script or not. By default the class will try to download
  # the remote shell script.
  # ======================================================================= #
  @shall_we_download_the_remote_shell_script = true
end

#runObject

#

run (run tag)

#


112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 112

def run
  opne 'We will now install the openssl certificates.'
  opne 'If you wish to read up on the rationale, you can look '\
       'at this page:'
  e
  e '  '+sfancy(remote_url?)
  e
  _ = File.basename(remote_url?)
  if @shall_we_download_the_remote_shell_script
    # ===================================================================== #
    # Here we will download the remote shell-script.
    # ===================================================================== #
    opne 'Alright - first, we will download the remote shell scripts from'
    e
    e sfancy(url_to_the_remote_shell_script?)
    e
    @local_path_to_the_shell_script = download(url_to_the_remote_shell_script?)
    _ = @local_path_to_the_shell_script
  end
  if File.exist? _
    # ===================================================================== #
    # Only if the file exists locally, can we continue.
    # ===================================================================== #
    opne 'The local file exists at `'+sfile(_)+'`.'
    mkdir('/etc/ssl/local/') unless File.directory? '/etc/ssl/local/'
    opne 'Next downloading the remote file `'+sfancy(REMOTE_FILE_ROOT_CRT)+'`.'
    local_root_crt_file = download(REMOTE_FILE_ROOT_CRT)
    if File.exist? local_root_crt_file
      opne 'The download appears to have worked - '+
               sfile(local_root_crt_file)+' is available locally.'
      run_openssl_x609_sys_command
      opne 'Next, we will make use of the binary called "openssl", and '\
              'store into the file `'+sfile(MAIN_PEM_FILE)+'`.'
      # =================================================================== #
      # Next, we can move the shell script into /usr/sbin/.
      # =================================================================== #
      new_path = '/usr/sbin/'+File.basename(@local_path_to_the_shell_script)
      opnn; mv(
        @local_path_to_the_shell_script,
        new_path,
        :be_verbose
      )
      # =================================================================== #
      # Download a new certdata.txt file.
      # =================================================================== #
      opne 'Next downloading a new certdata.txt file.'
      download 'https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt'
      esystem 'install -vm755 '+@local_path_to_the_shell_script+' /usr/sbin/make-ca.sh'
      # Invoke that script.
      shell_script_path = '/usr/sbin/make-ca.sh'
      if File.exist? shell_script_path
        opne "Next, we will invoke #{sfile(shell_script_path)}."
        esystem shell_script_path
      else
        opne 'No file exists at '+sfile(shell_script_path)+'.'
      end
    end
  else
    opne 'The local file does '+swarn('NOT')+' exist at `'+sfile(_)+'`.'
  end
end

#run_openssl_x609_sys_commandObject

#

run_openssl_x609_sys_command

#


211
212
213
214
215
216
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 211

def run_openssl_x609_sys_command
  _ = 'openssl x509 -in root.crt -text -fingerprint '\
      '-setalias "CAcert Class 1 root" -addtrust serverAuth '\
      '-addtrust emailProtection -addtrust codeSigning > '+MAIN_PEM_FILE
  esystem _
end

#set_input(i = '') ⇒ Object

#

set_input

#


89
90
91
92
93
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 89

def set_input(i = '')
  i = i.first if i.is_a? Array
  i = i.to_s.dup
  @input = i
end

#url_to_the_remote_shell_script?Boolean

#

url_to_the_remote_shell_script?

#

Returns:

  • (Boolean)


105
106
107
# File 'lib/roebe/classes/install_openssl_certificates.rb', line 105

def url_to_the_remote_shell_script?
  URL_TO_THE_REMOTE_SHELL_SCRIPT
end