VirtualBox

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

最後變更 在這個檔案從92768是 92768,由 vboxsync 提交於 3 年 前

Main/Unattended: Fix creation of auxiliary VISO for Windows install.

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

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