VirtualBox

source: vbox/trunk/src/VBox/Main/include/UnattendedInstaller.h@ 72090

Last change on this file since 72090 was 71018, checked in by vboxsync, 7 years ago

Main,Installer: Made unattended installation work for rhel3 and friends.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 23.6 KB
Line 
1/* $Id: UnattendedInstaller.h 71018 2018-02-14 18:42:52Z vboxsync $ */
2/** @file
3 * UnattendedInstaller class header
4 */
5
6/*
7 * Copyright (C) 2006-2017 Oracle Corporation
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 */
17
18#ifndef ____H_UNATTENDEDINSTALLER
19#define ____H_UNATTENDEDINSTALLER
20
21#include "UnattendedScript.h"
22
23/* Forward declarations */
24class Unattended;
25class UnattendedInstaller;
26class BaseTextScript;
27
28
29/**
30 * The abstract UnattendedInstaller class declaration
31 *
32 * The class is intended to service a new VM that this VM will be able to
33 * execute an unattended installation
34 */
35class UnattendedInstaller : public RTCNonCopyable
36{
37/*data*/
38protected:
39 /** Main unattended installation script. */
40 UnattendedScriptTemplate mMainScript;
41 /** Full path to the main template file (set by initInstaller). */
42 Utf8Str mStrMainScriptTemplate;
43
44 /** Post installation (shell) script. */
45 UnattendedScriptTemplate mPostScript;
46 /** Full path to the post template file (set by initInstaller). */
47 Utf8Str mStrPostScriptTemplate;
48
49 /** Pointer to the parent object.
50 * We use this for setting errors and querying attributes. */
51 Unattended *mpParent;
52 /** The path of the extra ISO image we create (set by initInstaller).
53 * This is only valid when isAdditionsIsoNeeded() returns true. */
54 Utf8Str mStrAuxiliaryIsoFilePath;
55 /** The path of the extra floppy image we create (set by initInstaller)
56 * This is only valid when isAdditionsFloppyNeeded() returns true. */
57 Utf8Str mStrAuxiliaryFloppyFilePath;
58 /** The boot device. */
59 DeviceType_T const meBootDevice;
60 /** Default extra install kernel parameters (set by constructor).
61 * This can be overridden by the extraInstallKernelParameters attribute of
62 * IUnattended. */
63 Utf8Str mStrDefaultExtraInstallKernelParameters;
64
65private:
66 UnattendedInstaller(); /* no default constructors */
67
68public:
69 /**
70 * Regular constructor.
71 *
72 * @param pParent The parent object. Used for setting
73 * errors and querying attributes.
74 * @param pszMainScriptTemplateName The name of the template file (no path)
75 * for the main unattended installer
76 * script.
77 * @param pszPostScriptTemplateName The name of the template file (no path)
78 * for the post installation script.
79 * @param pszMainScriptFilename The main unattended installer script
80 * filename (on aux media).
81 * @param pszPostScriptFilename The post installation script filename
82 * (on aux media).
83 * @param enmBootDevice The boot device type.
84 */
85 UnattendedInstaller(Unattended *pParent,
86 const char *pszMainScriptTemplateName, const char *pszPostScriptTemplateName,
87 const char *pszMainScriptFilename, const char *pszPostScriptFilename,
88 DeviceType_T enmBootDevice = DeviceType_DVD);
89 virtual ~UnattendedInstaller();
90
91 /**
92 * Instantiates the appropriate child class.
93 *
94 * @returns Pointer to the new instance, NULL if no appropriate installer.
95 * @param enmOsType The guest OS type value.
96 * @param strGuestOsType The guest OS type string
97 * @param strDetectedOSVersion The detected guest OS version.
98 * @param strDetectedOSFlavor The detected guest OS flavor.
99 * @param strDetectedOSHints Hints about the detected guest OS.
100 * @param pParent The parent object. Used for setting errors
101 * and querying attributes.
102 * @throws std::bad_alloc
103 */
104 static UnattendedInstaller *createInstance(VBOXOSTYPE enmOsType, const Utf8Str &strGuestOsType,
105 const Utf8Str &strDetectedOSVersion, const Utf8Str &strDetectedOSFlavor,
106 const Utf8Str &strDetectedOSHints, Unattended *pParent);
107
108 /**
109 * Initialize the installer.
110 *
111 * @note This is called immediately after instantiation and the caller will
112 * always destroy the unattended installer instance on failure, so it
113 * is not necessary to keep track of whether this succeeded or not.
114 */
115 virtual HRESULT initInstaller();
116
117#if 0 /* These are now in the AUX VISO. */
118 /**
119 * Whether the VBox guest additions ISO is needed or not.
120 *
121 * The default implementation always returns false when a VISO is used, see
122 * UnattendedInstaller::addFilesToAuxVisoVectors.
123 */
124 virtual bool isAdditionsIsoNeeded() const;
125
126 /**
127 * Whether the VBox validation kit ISO is needed or not.
128 *
129 * The default implementation always returns false when a VISO is used, see
130 * UnattendedInstaller::addFilesToAuxVisoVectors.
131 */
132 virtual bool isValidationKitIsoNeeded() const;
133#endif
134
135 /**
136 * Indicates whether an original installation ISO is needed or not.
137 */
138 virtual bool isOriginalIsoNeeded() const { return true; }
139
140 /**
141 * Indicates whether a floppy image is needed or not.
142 */
143 virtual bool isAuxiliaryFloppyNeeded() const { return false; }
144
145 /**
146 * Indicates whether an additional or replacement ISO image is needed or not.
147 */
148 virtual bool isAuxiliaryIsoNeeded() const;
149
150 /**
151 * Indicates whether we should boot from the auxiliary ISO image.
152 *
153 * Will boot from installation ISO if false.
154 */
155 virtual bool bootFromAuxiliaryIso() const { return isAuxiliaryIsoNeeded(); }
156
157 /**
158 * Indicates whether a the auxiliary ISO is a .viso-file rather than an
159 * .iso-file.
160 *
161 * Different worker methods are used depending on the return value. A
162 * .viso-file is generally only used when the installation media needs to
163 * be remastered with small changes and additions.
164 */
165 virtual bool isAuxiliaryIsoIsVISO() const { return true; }
166
167 /*
168 * Getters
169 */
170 DeviceType_T getBootableDeviceType() const { return meBootDevice; }
171 const Utf8Str &getTemplateFilePath() const { return mStrMainScriptTemplate; }
172 const Utf8Str &getPostTemplateFilePath() const { return mStrPostScriptTemplate; }
173 const Utf8Str &getAuxiliaryIsoFilePath() const { return mStrAuxiliaryIsoFilePath; }
174 const Utf8Str &getAuxiliaryFloppyFilePath() const { return mStrAuxiliaryFloppyFilePath; }
175 const Utf8Str &getDefaultExtraInstallKernelParameters() const { return mStrDefaultExtraInstallKernelParameters; }
176
177 /*
178 * Setters
179 */
180 void setTemplatePath(const Utf8Str& data); /**< @todo r=bird: This is confusing as heck. Dir for a while, then it's a file. Not a comment about it. Brilliant. */
181
182 /**
183 * Prepares the unattended scripts, does all but write them to the installation
184 * media.
185 */
186 HRESULT prepareUnattendedScripts();
187
188 /**
189 * Prepares the media - floppy image, ISO image.
190 *
191 * This method calls prepareAuxFloppyImage() and prepareAuxIsoImage(), child
192 * classes may override these methods or methods they call.
193 *
194 * @returns COM status code.
195 * @param fOverwrite Whether to overwrite media files or fail if they
196 * already exist.
197 */
198 HRESULT prepareMedia(bool fOverwrite = true);
199
200protected:
201 /**
202 * Prepares (creates) the auxiliary floppy image.
203 *
204 * This is called by the base class prepareMedia() when
205 * isAuxiliaryFloppyNeeded() is true. The base class implementation puts the
206 * edited unattended script onto it.
207 */
208 HRESULT prepareAuxFloppyImage(bool fOverwrite);
209
210 /**
211 * Creates and formats (FAT12) a floppy image, then opens a VFS for it.
212 *
213 * @returns COM status code.
214 * @param pszFilename The path to the image file.
215 * @param fOverwrite Whether to overwrite the file.
216 * @param phVfs Where to return a writable VFS handle to the newly
217 * created image.
218 */
219 HRESULT newAuxFloppyImage(const char *pszFilename, bool fOverwrite, PRTVFS phVfs);
220
221 /**
222 * Copies files to the auxiliary floppy image.
223 *
224 * The base class implementation copies the main and post scripts to the root of
225 * the floppy using the default script names. Child classes may override this
226 * to add additional or different files.
227 *
228 * @returns COM status code.
229 * @param hVfs The floppy image VFS handle.
230 */
231 virtual HRESULT copyFilesToAuxFloppyImage(RTVFS hVfs);
232
233 /**
234 * Adds the given script to the root of the floppy image under the default
235 * script filename.
236 *
237 * @returns COM status code.
238 * @param pEditor The script to add.
239 * @param hVfs The VFS to add it to.
240 */
241 HRESULT addScriptToFloppyImage(BaseTextScript *pEditor, RTVFS hVfs);
242
243 /**
244 * Prepares (creates) the auxiliary ISO image.
245 *
246 * This is called by the base class prepareMedia() when isAuxiliaryIsoNeeded()
247 * is true. The base class implementation puts the edited unattended script
248 * onto it.
249 */
250 virtual HRESULT prepareAuxIsoImage(bool fOverwrite);
251
252 /**
253 * Opens the installation ISO image.
254 *
255 * @returns COM status code.
256 * @param phVfsIso Where to return the VFS handle for the ISO.
257 * @param fFlags RTFSISO9660_F_XXX flags to pass to the
258 * RTFsIso9660VolOpen API.
259 */
260 virtual HRESULT openInstallIsoImage(PRTVFS phVfsIso, uint32_t fFlags = 0);
261
262 /**
263 * Creates and configures the ISO maker instance.
264 *
265 * This can be overridden to set configure options.
266 *
267 * @returns COM status code.
268 * @param phIsoMaker Where to return the ISO maker.
269 */
270 virtual HRESULT newAuxIsoImageMaker(PRTFSISOMAKER phIsoMaker);
271
272 /**
273 * Adds files to the auxiliary ISO image maker.
274 *
275 * The base class implementation copies just the mMainScript and mPostScript
276 * files to root directory using the default filenames.
277 *
278 * @returns COM status code.
279 * @param hIsoMaker The ISO maker handle.
280 * @param hVfsOrgIso The VFS handle to the original ISO in case files
281 * needs to be added from it.
282 */
283 virtual HRESULT addFilesToAuxIsoImageMaker(RTFSISOMAKER hIsoMaker, RTVFS hVfsOrgIso);
284
285 /**
286 * Adds the given script to the ISO maker.
287 *
288 * @returns COM status code.
289 * @param pEditor The script to add.
290 * @param hIsoMaker The ISO maker to add it to.
291 * @param pszDstFilename The file name (w/ path) to add it under. If NULL,
292 * the default script filename is used to add it to the
293 * root.
294 */
295 HRESULT addScriptToIsoMaker(BaseTextScript *pEditor, RTFSISOMAKER hIsoMaker, const char *pszDstFilename = NULL);
296
297 /**
298 * Writes the ISO image to disk.
299 *
300 * @returns COM status code.
301 * @param hIsoMaker The ISO maker handle.
302 * @param pszFilename The filename.
303 * @param fOverwrite Whether to overwrite the destination file or not.
304 */
305 HRESULT finalizeAuxIsoImage(RTFSISOMAKER hIsoMaker, const char *pszFilename, bool fOverwrite);
306
307 /**
308 * Adds files to the .viso-file vectors.
309 *
310 * The base class implementation adds the script from mAlg, additions ISO
311 * content to '/vboxadditions', and validation kit ISO to '/vboxvalidationkit'.
312 *
313 * @returns COM status code.
314 * @param rVecArgs The ISO maker argument list that will be turned into
315 * a .viso-file.
316 * @param rVecFiles The list of files we've created. This is for
317 * cleaning up at the end.
318 * @param hVfsOrgIso The VFS handle to the original ISO in case files
319 * needs to be added from it.
320 * @param fOverwrite Whether to overwrite files or not.
321 */
322 virtual HRESULT addFilesToAuxVisoVectors(RTCList<RTCString> &rVecArgs, RTCList<RTCString> &rVecFiles,
323 RTVFS hVfsOrgIso, bool fOverwrite);
324
325 /**
326 * Saves the given script to disk and adds it to the .viso-file vectors.
327 *
328 * @returns COM status code.
329 * @param pEditor The script to add.
330 * @param rVecArgs The ISO maker argument list that will be turned into
331 * a .viso-file.
332 * @param rVecFiles The list of files we've created. This is for
333 * cleaning up at the end.
334 * @param fOverwrite Whether to overwrite files or not.
335 */
336 HRESULT addScriptToVisoVectors(BaseTextScript *pEditor, RTCList<RTCString> &rVecArgs,
337 RTCList<RTCString> &rVecFiles, bool fOverwrite);
338
339 /**
340 * Writes out the .viso-file to disk.
341 *
342 * @returns COM status code.
343 * @param rVecArgs The ISO maker argument list to write out.
344 * @param pszFilename The filename.
345 * @param fOverwrite Whether to overwrite the destination file or not.
346 */
347 HRESULT finalizeAuxVisoFile(RTCList<RTCString> const &rVecArgs, const char *pszFilename, bool fOverwrite);
348
349 /**
350 * Loads @a pszFilename from @a hVfsOrgIso into @a pEditor and parses it.
351 *
352 * @returns COM status code.
353 * @param hVfsOrgIso The handle to the original installation ISO.
354 * @param pszFilename The filename to open and load from the ISO.
355 * @param pEditor The editor instance to load the file into and
356 * do the parseing with.
357 */
358 HRESULT loadAndParseFileFromIso(RTVFS hVfsOrgIso, const char *pszFilename, AbstractScript *pEditor);
359};
360
361
362/**
363 * Windows installer, for versions up to xp 64 / w2k3.
364 */
365class UnattendedWindowsSifInstaller : public UnattendedInstaller
366{
367public:
368 UnattendedWindowsSifInstaller(Unattended *pParent)
369 : UnattendedInstaller(pParent,
370 "win_nt5_unattended.sif", "win_postinstall.cmd",
371 "WINNT.SIF", "VBOXPOST.CMD")
372 { Assert(isOriginalIsoNeeded()); Assert(isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO()); Assert(!bootFromAuxiliaryIso()); }
373 ~UnattendedWindowsSifInstaller() {}
374
375 bool isAuxiliaryFloppyNeeded() const { return true; }
376 bool bootFromAuxiliaryIso() const { return false; }
377
378};
379
380/**
381 * Windows installer, for versions starting with Vista.
382 */
383class UnattendedWindowsXmlInstaller : public UnattendedInstaller
384{
385public:
386 UnattendedWindowsXmlInstaller(Unattended *pParent)
387 : UnattendedInstaller(pParent,
388 "win_nt6_unattended.xml", "win_postinstall.cmd",
389 "autounattend.xml", "VBOXPOST.CMD")
390 { Assert(isOriginalIsoNeeded()); Assert(isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO()); Assert(!bootFromAuxiliaryIso()); }
391 ~UnattendedWindowsXmlInstaller() {}
392
393 bool isAuxiliaryFloppyNeeded() const { return true; }
394 bool bootFromAuxiliaryIso() const { return false; }
395};
396
397
398/**
399 * Base class for the unattended linux installers.
400 */
401class UnattendedLinuxInstaller : public UnattendedInstaller
402{
403protected:
404 /** Array of linux parameter patterns that should be removed by editIsoLinuxCfg.
405 * The patterns are proceed by RTStrSimplePatternNMatch. */
406 RTCList<RTCString, RTCString *> mArrStrRemoveInstallKernelParameters;
407
408public:
409 UnattendedLinuxInstaller(Unattended *pParent,
410 const char *pszMainScriptTemplateName, const char *pszPostScriptTemplateName,
411 const char *pszMainScriptFilename, const char *pszPostScriptFilename = "vboxpostinstall.sh")
412 : UnattendedInstaller(pParent,
413 pszMainScriptTemplateName, pszPostScriptTemplateName,
414 pszMainScriptFilename, pszPostScriptFilename) {}
415 ~UnattendedLinuxInstaller() {}
416
417 bool isAuxiliaryIsoNeeded() const { return true; }
418
419protected:
420 /**
421 * Performs basic edits on a isolinux.cfg file.
422 *
423 * @returns COM status code
424 * @param pEditor Editor with the isolinux.cfg file loaded and parsed.
425 */
426 virtual HRESULT editIsoLinuxCfg(GeneralTextScript *pEditor);
427};
428
429
430/**
431 * Debian installer.
432 *
433 * This will remaster the orignal ISO and therefore be producing a .viso-file.
434 */
435class UnattendedDebianInstaller : public UnattendedLinuxInstaller
436{
437public:
438 UnattendedDebianInstaller(Unattended *pParent,
439 const char *pszMainScriptTemplateName = "debian_preseed.cfg",
440 const char *pszPostScriptTemplateName = "debian_postinstall.sh",
441 const char *pszMainScriptFilename = "preseed.cfg")
442 : UnattendedLinuxInstaller(pParent, pszMainScriptTemplateName, pszPostScriptTemplateName, pszMainScriptFilename)
443 {
444 Assert(!isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded());
445 Assert(!isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO());
446 mStrDefaultExtraInstallKernelParameters.setNull();
447 mStrDefaultExtraInstallKernelParameters += " auto=true";
448 mStrDefaultExtraInstallKernelParameters.append(" preseed/file=/cdrom/").append(pszMainScriptFilename);
449 mStrDefaultExtraInstallKernelParameters += " priority=critical";
450 mStrDefaultExtraInstallKernelParameters += " quiet";
451 mStrDefaultExtraInstallKernelParameters += " splash";
452 mStrDefaultExtraInstallKernelParameters += " noprompt"; /* no questions about things like CD/DVD ejections */
453 mStrDefaultExtraInstallKernelParameters += " noshell"; /* No shells on VT1-3 (debian, not ubuntu). */
454 mStrDefaultExtraInstallKernelParameters += " automatic-ubiquity"; // ubiquity
455 // the following can probably go into the preseed.cfg:
456 mStrDefaultExtraInstallKernelParameters.append(" debian-installer/locale=").append(pParent->i_getLocale());
457 mStrDefaultExtraInstallKernelParameters += " keyboard-configuration/layoutcode=us";
458 mStrDefaultExtraInstallKernelParameters += " languagechooser/language-name=English"; /** @todo fixme */
459 mStrDefaultExtraInstallKernelParameters.append(" localechooser/supported-locales=").append(pParent->i_getLocale()).append(".UTF-8");
460 mStrDefaultExtraInstallKernelParameters.append(" countrychooser/shortlist=").append(pParent->i_getCountry()); // ubiquity?
461 mStrDefaultExtraInstallKernelParameters += " --";
462 }
463 ~UnattendedDebianInstaller() {}
464
465 bool isOriginalIsoNeeded() const { return false; }
466
467protected:
468 HRESULT addFilesToAuxVisoVectors(RTCList<RTCString> &rVecArgs, RTCList<RTCString> &rVecFiles,
469 RTVFS hVfsOrgIso, bool fOverwrite);
470 HRESULT editDebianTxtCfg(GeneralTextScript *pEditor);
471
472};
473
474
475/**
476 * Ubuntu installer (same as debian, except for the template).
477 */
478class UnattendedUbuntuInstaller : public UnattendedDebianInstaller
479{
480public:
481 UnattendedUbuntuInstaller(Unattended *pParent)
482 : UnattendedDebianInstaller(pParent, "ubuntu_preseed.cfg")
483 { Assert(!isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded()); Assert(!isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO()); }
484 ~UnattendedUbuntuInstaller() {}
485};
486
487
488/**
489 * RHEL 6 and 7 installer.
490 *
491 * This serves as a base for the kickstart based installers.
492 */
493class UnattendedRhel6And7Installer : public UnattendedLinuxInstaller
494{
495public:
496 UnattendedRhel6And7Installer(Unattended *pParent,
497 const char *pszMainScriptTemplateName = "redhat67_ks.cfg",
498 const char *pszPostScriptTemplateName = "redhat_postinstall.sh",
499 const char *pszMainScriptFilename = "ks.cfg")
500 : UnattendedLinuxInstaller(pParent, pszMainScriptTemplateName, pszPostScriptTemplateName, pszMainScriptFilename)
501 {
502 Assert(!isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded());
503 Assert(!isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO());
504 mStrDefaultExtraInstallKernelParameters.assign(" ks=cdrom:/").append(pszMainScriptFilename).append(' ');
505 mArrStrRemoveInstallKernelParameters.append("rd.live.check"); /* Disables the checkisomd5 step. Required for VISO. */
506 }
507 ~UnattendedRhel6And7Installer() {}
508
509 bool isAuxiliaryIsoIsVISO() { return true; }
510 bool isOriginalIsoNeeded() const { return false; }
511
512protected:
513 HRESULT addFilesToAuxVisoVectors(RTCList<RTCString> &rVecArgs, RTCList<RTCString> &rVecFiles,
514 RTVFS hVfsOrgIso, bool fOverwrite);
515};
516
517
518/**
519 * RHEL 5 installer (same as RHEL 6 & 7, except for the kickstart template).
520 */
521class UnattendedRhel5Installer : public UnattendedRhel6And7Installer
522{
523public:
524 UnattendedRhel5Installer(Unattended *pParent) : UnattendedRhel6And7Installer(pParent, "rhel5_ks.cfg") {}
525 ~UnattendedRhel5Installer() {}
526};
527
528
529/**
530 * RHEL 4 installer (same as RHEL 6 & 7, except for the kickstart template).
531 */
532class UnattendedRhel4Installer : public UnattendedRhel6And7Installer
533{
534public:
535 UnattendedRhel4Installer(Unattended *pParent) : UnattendedRhel6And7Installer(pParent, "rhel4_ks.cfg") {}
536 ~UnattendedRhel4Installer() {}
537};
538
539
540/**
541 * RHEL 3 installer (same as RHEL 6 & 7, except for the kickstart template).
542 */
543class UnattendedRhel3Installer : public UnattendedRhel6And7Installer
544{
545public:
546 UnattendedRhel3Installer(Unattended *pParent) : UnattendedRhel6And7Installer(pParent, "rhel3_ks.cfg") {}
547 ~UnattendedRhel3Installer() {}
548};
549
550
551/**
552 * Fedora installer (same as RHEL 6 & 7, except for the template).
553 */
554class UnattendedFedoraInstaller : public UnattendedRhel6And7Installer
555{
556public:
557 UnattendedFedoraInstaller(Unattended *pParent)
558 : UnattendedRhel6And7Installer(pParent, "fedora_ks.cfg")
559 { Assert(!isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded()); Assert(!isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO()); }
560 ~UnattendedFedoraInstaller() {}
561};
562
563
564/**
565 * Oracle Linux installer (same as RHEL 6 & 7, except for the template).
566 */
567class UnattendedOracleLinuxInstaller : public UnattendedRhel6And7Installer
568{
569public:
570 UnattendedOracleLinuxInstaller(Unattended *pParent)
571 : UnattendedRhel6And7Installer(pParent, "ol_ks.cfg")
572 { Assert(!isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded()); Assert(!isAuxiliaryFloppyNeeded()); Assert(isAuxiliaryIsoIsVISO()); }
573 ~UnattendedOracleLinuxInstaller() {}
574};
575
576
577#if 0 /* fixme */
578/**
579 * SUSE linux installer.
580 *
581 * @todo needs fixing.
582 */
583class UnattendedSuseInstaller : public UnattendedLinuxInstaller
584{
585public:
586 UnattendedSuseInstaller(BaseTextScript *pAlg, Unattended *pParent)
587 : UnattendedLinuxInstaller(pAlg, pParent, "suse_autoinstall.xml")
588 { Assert(isOriginalIsoNeeded()); Assert(isAuxiliaryIsoNeeded()); Assert(!isAuxiliaryFloppyNeeded()); Assert(!isAuxiliaryIsoIsVISO()); }
589 ~UnattendedSuseInstaller() {}
590
591 HRESULT setupScriptOnAuxiliaryCD(const Utf8Str &path);
592};
593#endif
594
595#endif // !____H_UNATTENDEDINSTALLER
596
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette