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