1 /*
2  * libosinfo: OS installation script
3  *
4  * Copyright (C) 2009-2020 Red Hat, Inc.
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library. If not, see
18  * <http://www.gnu.org/licenses/>.
19  */
20 
21 #include <glib-object.h>
22 #include <gio/gio.h>
23 #include <osinfo/osinfo_install_config_param.h>
24 #include <osinfo/osinfo_avatar_format.h>
25 
26 #ifndef __OSINFO_INSTALL_SCRIPT_H__
27 # define __OSINFO_INSTALL_SCRIPT_H__
28 
29 # define OSINFO_TYPE_INSTALL_SCRIPT (osinfo_install_script_get_type ())
30 OSINFO_DECLARE_TYPE_WITH_PRIVATE_AND_CLASS(OsinfoInstallScript,
31                                            osinfo_install_script,
32                                            OSINFO,
33                                            INSTALL_SCRIPT,
34                                            OsinfoEntity)
35 
36 typedef struct _OsinfoOs        OsinfoOs;
37 typedef struct _OsinfoMedia     OsinfoMedia;
38 typedef struct _OsinfoTree      OsinfoTree;
39 
40 # define OSINFO_INSTALL_SCRIPT_PROFILE_JEOS    "jeos"
41 # define OSINFO_INSTALL_SCRIPT_PROFILE_DESKTOP "desktop"
42 
43 # define OSINFO_INSTALL_SCRIPT_PROP_TEMPLATE_URI       "template-uri"
44 # define OSINFO_INSTALL_SCRIPT_PROP_TEMPLATE_DATA      "template-data"
45 # define OSINFO_INSTALL_SCRIPT_PROP_PROFILE            "profile"
46 # define OSINFO_INSTALL_SCRIPT_PROP_PRODUCT_KEY_FORMAT "product-key-format"
47 # define OSINFO_INSTALL_SCRIPT_PROP_EXPECTED_FILENAME  "expected-filename"
48 # define OSINFO_INSTALL_SCRIPT_PROP_PATH_FORMAT        "path-format"
49 # define OSINFO_INSTALL_SCRIPT_PROP_CAN_PRE_INSTALL_DRIVERS "can-pre-install-drivers"
50 # define OSINFO_INSTALL_SCRIPT_PROP_CAN_POST_INSTALL_DRIVERS "can-post-install-drivers"
51 # define OSINFO_INSTALL_SCRIPT_PROP_NEEDS_INTERNET     "needs-internet"
52 # define OSINFO_INSTALL_SCRIPT_PROP_PRE_INSTALL_DRIVERS_SIGNING_REQ "pre-install-drivers-signing-req"
53 # define OSINFO_INSTALL_SCRIPT_PROP_POST_INSTALL_DRIVERS_SIGNING_REQ "post-install-drivers-signing-req"
54 # define OSINFO_INSTALL_SCRIPT_PROP_INJECTION_METHOD "injection-method"
55 # define OSINFO_INSTALL_SCRIPT_PROP_PREFERRED_INJECTION_METHOD "preferred-injection-method"
56 # define OSINFO_INSTALL_SCRIPT_PROP_INSTALLATION_SOURCE "installation-source"
57 
58 /**
59  * OsinfoPathFormat:
60  * @OSINFO_PATH_FORMAT_UNIX: Unix/Linux path format, e.g /home/foo/bar.txt
61  * @OSINFO_PATH_FORMAT_DOS: DOS/Windows path format, e.g \My Documents\bar.txt
62  */
63 typedef enum {
64     OSINFO_PATH_FORMAT_UNIX,
65     OSINFO_PATH_FORMAT_DOS
66 } OsinfoPathFormat;
67 
68 /**
69  * OsinfoDeviceDriverSigningReq:
70  * @OSINFO_DEVICE_DRIVER_SIGNING_REQ_NONE: Script do not require device drivers
71  * to be signed.
72  * @OSINFO_DEVICE_DRIVER_SIGNING_REQ_STRICT: Script must only be given signed
73  * device drivers. Some scripts will allow overriding this requirement through
74  * #osinfo_install_config_set_driver_signing function. You can query if a
75  * script supports this by checking if
76  * #OSINFO_INSTALL_CONFIG_PROP_DRIVER_SIGNING configuration parameter is used
77  * by the script in question (or other scripts in the same profile).
78  * @OSINFO_DEVICE_DRIVER_SIGNING_REQ_WARN: A warning will be issued by OS
79  * installer if device drivers are not signed and most probably require user
80  * input (and thus breaking unattended installation). See
81  * #OSINFO_DEVICE_DRIVER_SIGNING_REQ_STRICT on how this warning can be disabled
82  * for some scripts.
83  *
84  * Since: 0.2.6
85  */
86 typedef enum {
87     OSINFO_DEVICE_DRIVER_SIGNING_REQ_NONE,
88     OSINFO_DEVICE_DRIVER_SIGNING_REQ_STRICT,
89     OSINFO_DEVICE_DRIVER_SIGNING_REQ_WARN
90 } OsinfoDeviceDriverSigningReq;
91 
92 /**
93  * OsinfoInstallScriptInjectionMethod:
94  * @OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_CDROM: Support injection of the
95  * installation script trough a CD-ROM.
96  * @OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_DISK: Support injection of the
97  * installation script trough a disk.
98  * @OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_FLOPPY: Support injection of the
99  * installation script trough a floppy disk.
100  * @OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_INITRD: Support injection of the
101  * installation script trough the initrd.
102  * @OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_WEB: Support injection of the
103  * installation script from the web.
104  *
105  * Since: 0.2.10
106  */
107 typedef enum {
108     OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_CDROM  = 1 << 0,
109     OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_DISK   = 1 << 1,
110     OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_FLOPPY = 1 << 2,
111     OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_INITRD = 1 << 3,
112     OSINFO_INSTALL_SCRIPT_INJECTION_METHOD_WEB    = 1 << 4,
113 } OsinfoInstallScriptInjectionMethod;
114 
115 /**
116  * OsinfoInstallScriptInstallationSource:
117  * @OSINFO_INSTALL_SCRIPT_INSTALLATION_SOURCE_MEDIA: A media will be used as
118  * the installation source.
119  * @OSINFO_INSTALL_SCRIPT_INSTALLATION_SOURCE_NETWORK: A network method will
120  * be used as installation source.
121  *
122  * Since: 1.3.0
123  */
124 typedef enum {
125     OSINFO_INSTALL_SCRIPT_INSTALLATION_SOURCE_MEDIA,
126     OSINFO_INSTALL_SCRIPT_INSTALLATION_SOURCE_NETWORK
127 } OsinfoInstallScriptInstallationSource;
128 
129 OsinfoInstallScript *osinfo_install_script_new(const gchar *id);
130 OsinfoInstallScript *osinfo_install_script_new_uri(const gchar *id,
131                                                    const gchar *profile,
132                                                    const gchar *templateUri);
133 OsinfoInstallScript *osinfo_install_script_new_data(const gchar *id,
134                                                     const gchar *profile,
135                                                     const gchar *templateData);
136 
137 const gchar *osinfo_install_script_get_template_uri(OsinfoInstallScript *script);
138 const gchar *osinfo_install_script_get_template_data(OsinfoInstallScript *script);
139 const gchar *osinfo_install_script_get_profile(OsinfoInstallScript *script);
140 
141 const gchar *osinfo_install_script_get_product_key_format(OsinfoInstallScript *script);
142 
143 void osinfo_install_script_set_output_prefix(OsinfoInstallScript *script, const gchar *prefix);
144 
145 const gchar *osinfo_install_script_get_output_prefix(OsinfoInstallScript *script);
146 
147 const gchar *osinfo_install_script_get_output_filename(OsinfoInstallScript *script);
148 
149 const gchar *osinfo_install_script_get_expected_filename(OsinfoInstallScript *script);
150 
151 OsinfoAvatarFormat *osinfo_install_script_get_avatar_format(OsinfoInstallScript *script);
152 
153 void osinfo_install_script_generate_async(OsinfoInstallScript *script,
154                                           OsinfoOs *os,
155                                           OsinfoInstallConfig *config,
156                                           GCancellable *cancellable,
157                                           GAsyncReadyCallback callback,
158                                           gpointer user_data);
159 
160 gchar *osinfo_install_script_generate_finish(OsinfoInstallScript *script,
161                                              GAsyncResult *res,
162                                              GError **error);
163 
164 gchar *osinfo_install_script_generate(OsinfoInstallScript *script,
165                                       OsinfoOs *os,
166                                       OsinfoInstallConfig *config,
167                                       GCancellable *cancellable,
168                                       GError **error);
169 
170 void osinfo_install_script_generate_output_async(OsinfoInstallScript *script,
171                                                  OsinfoOs *os,
172                                                  OsinfoInstallConfig *config,
173                                                  GFile *output_dir,
174                                                  GCancellable *cancellable,
175                                                  GAsyncReadyCallback callback,
176                                                  gpointer user_data);
177 
178 GFile *osinfo_install_script_generate_output_finish(OsinfoInstallScript *script,
179                                                     GAsyncResult *res,
180                                                     GError **error);
181 
182 GFile *osinfo_install_script_generate_output(OsinfoInstallScript *script,
183                                              OsinfoOs *os,
184                                              OsinfoInstallConfig *config,
185                                              GFile *output_dir,
186                                              GCancellable *cancellable,
187                                              GError **error);
188 
189 void osinfo_install_script_generate_for_media_async(OsinfoInstallScript *script,
190                                                     OsinfoMedia *media,
191                                                     OsinfoInstallConfig *config,
192                                                     GCancellable *cancellable,
193                                                     GAsyncReadyCallback callback,
194                                                     gpointer user_data);
195 gchar *osinfo_install_script_generate_for_media_finish(OsinfoInstallScript *script,
196                                                        GAsyncResult *res,
197                                                        GError **error);
198 gchar *osinfo_install_script_generate_for_media(OsinfoInstallScript *script,
199                                                 OsinfoMedia *media,
200                                                 OsinfoInstallConfig *config,
201                                                 GCancellable *cancellable,
202                                                 GError **error);
203 
204 void osinfo_install_script_generate_output_for_media_async(OsinfoInstallScript *script,
205                                                            OsinfoMedia *media,
206                                                            OsinfoInstallConfig *config,
207                                                            GFile *output_dir,
208                                                            GCancellable *cancellable,
209                                                            GAsyncReadyCallback callback,
210                                                            gpointer user_data);
211 GFile *osinfo_install_script_generate_output_for_media_finish(OsinfoInstallScript *script,
212                                                               GAsyncResult *res,
213                                                               GError **error);
214 GFile *osinfo_install_script_generate_output_for_media(OsinfoInstallScript *script,
215                                                        OsinfoMedia *media,
216                                                        OsinfoInstallConfig *config,
217                                                        GFile *output_dir,
218                                                        GCancellable *cancellable,
219                                                        GError **error);
220 
221 gchar *osinfo_install_script_generate_command_line(OsinfoInstallScript *script,
222                                                    OsinfoOs *os,
223                                                    OsinfoInstallConfig *config);
224 gchar *osinfo_install_script_generate_command_line_for_media(OsinfoInstallScript *script,
225                                                              OsinfoMedia *media,
226                                                              OsinfoInstallConfig *config);
227 gchar *osinfo_install_script_generate_command_line_for_tree(OsinfoInstallScript *script,
228                                                             OsinfoTree *tree,
229                                                             OsinfoInstallConfig *config);
230 
231 gboolean osinfo_install_script_has_config_param(OsinfoInstallScript *script, OsinfoInstallConfigParam *config_param);
232 
233 gboolean osinfo_install_script_has_config_param_name(OsinfoInstallScript *script, const gchar *name);
234 
235 OsinfoInstallConfigParam *osinfo_install_script_get_config_param(OsinfoInstallScript *script, const gchar *name);
236 
237 GList *osinfo_install_script_get_config_param_list(OsinfoInstallScript *script);
238 OsinfoInstallConfigParamList *osinfo_install_script_get_config_params(OsinfoInstallScript *script);
239 OsinfoPathFormat osinfo_install_script_get_path_format(OsinfoInstallScript *script);
240 
241 gboolean osinfo_install_script_get_can_pre_install_drivers(OsinfoInstallScript *script);
242 gboolean osinfo_install_script_get_can_post_install_drivers(OsinfoInstallScript *script);
243 
244 int osinfo_install_script_get_pre_install_drivers_signing_req(OsinfoInstallScript *script);
245 int osinfo_install_script_get_post_install_drivers_signing_req(OsinfoInstallScript *script);
246 
247 unsigned int osinfo_install_script_get_injection_methods(OsinfoInstallScript *script);
248 
249 gboolean osinfo_install_script_get_needs_internet(OsinfoInstallScript *script);
250 
251 void osinfo_install_script_set_preferred_injection_method(OsinfoInstallScript *script,
252                                                           OsinfoInstallScriptInjectionMethod method);
253 OsinfoInstallScriptInjectionMethod osinfo_install_script_get_preferred_injection_method(OsinfoInstallScript *script);
254 
255 void osinfo_install_script_set_installation_source(OsinfoInstallScript *script,
256                                                    OsinfoInstallScriptInstallationSource source);
257 OsinfoInstallScriptInstallationSource osinfo_install_script_get_installation_source(OsinfoInstallScript *script);
258 
259 void osinfo_install_script_generate_for_tree_async(OsinfoInstallScript *script,
260                                                    OsinfoTree *tree,
261                                                    OsinfoInstallConfig *config,
262                                                    GCancellable *cancellable,
263                                                    GAsyncReadyCallback callback,
264                                                    gpointer user_data);
265 gchar *osinfo_install_script_generate_for_tree_finish(OsinfoInstallScript *script,
266                                                       GAsyncResult *res,
267                                                       GError **error);
268 gchar *osinfo_install_script_generate_for_tree(OsinfoInstallScript *script,
269                                                OsinfoTree *tree,
270                                                OsinfoInstallConfig *config,
271                                                GCancellable *cancellable,
272                                                GError **error);
273 
274 void osinfo_install_script_generate_output_for_tree_async(OsinfoInstallScript *script,
275                                                           OsinfoTree *tree,
276                                                           OsinfoInstallConfig *config,
277                                                           GFile *output_dir,
278                                                           GCancellable *cancellable,
279                                                           GAsyncReadyCallback callback,
280                                                           gpointer user_data);
281 GFile *osinfo_install_script_generate_output_for_tree_finish(OsinfoInstallScript *script,
282                                                              GAsyncResult *res,
283                                                              GError **error);
284 GFile *osinfo_install_script_generate_output_for_tree(OsinfoInstallScript *script,
285                                                       OsinfoTree *tree,
286                                                       OsinfoInstallConfig *config,
287                                                       GFile *output_dir,
288                                                       GCancellable *cancellable,
289                                                       GError **error);
290 
291 #endif /* __OSINFO_INSTALL_SCRIPT_H__ */
292