Changeset 95436 in vbox
- Timestamp:
- Jun 29, 2022 6:18:57 PM (3 years ago)
- svn:sync-xref-src-repo-rev:
- 152040
- Location:
- trunk/src/VBox/Main
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/UnattendedTemplates/Makefile.kmk
r93124 r95436 44 44 ol_postinstall.sh \ 45 45 os2_cid_install.cmd \ 46 win_postinstall.cmd 46 win_postinstall.cmd \ 47 freebsd_installer.cfg \ 48 freebsd_postinstall.sh 47 49 48 50 ifndef VBOX_WITH_OPEN_WATCOM -
trunk/src/VBox/Main/include/UnattendedImpl.h
r94533 r95436 257 257 HRESULT i_innerDetectIsoOSLinux(RTVFS hVfsIso, DETECTBUFFER *puBuf); 258 258 HRESULT i_innerDetectIsoOSOs2(RTVFS hVfsIso, DETECTBUFFER *puBuf); 259 HRESULT i_innerDetectIsoOSFreeBsd(RTVFS hVfsIso, DETECTBUFFER *puBuf); 259 260 260 261 /** -
trunk/src/VBox/Main/include/UnattendedInstaller.h
r94751 r95436 845 845 #endif 846 846 847 /** 848 * Base class for the unattended FreeBSD installers. 849 */ 850 class UnattendedFreeBsdInstaller : public UnattendedInstaller 851 { 852 public: 853 UnattendedFreeBsdInstaller(Unattended *pParent) 854 : UnattendedInstaller(pParent, 855 "freebsd_installer.cfg", "freebsd_postinstall.sh", 856 "installerconfig", "vboxpostinstall.sh") {} 857 ~UnattendedFreeBsdInstaller() {} 858 859 bool isAuxiliaryIsoNeeded() const { return true; } 860 bool isOriginalIsoNeeded() const { return false; } 861 862 protected: 863 HRESULT addFilesToAuxVisoVectors(RTCList<RTCString> &rVecArgs, RTCList<RTCString> &rVecFiles, 864 RTVFS hVfsOrgIso, bool fOverwrite); 865 }; 866 847 867 #endif /* !MAIN_INCLUDED_UnattendedInstaller_h */ -
trunk/src/VBox/Main/src-server/UnattendedImpl.cpp
r95156 r95436 449 449 if (hrc == S_FALSE && mEnmOsType == VBOXOSTYPE_Unknown) 450 450 hrc = i_innerDetectIsoOSOs2(hVfsIso, &uBuf); 451 if (hrc == S_FALSE && mEnmOsType == VBOXOSTYPE_Unknown) 452 hrc = i_innerDetectIsoOSFreeBsd(hVfsIso, &uBuf); 451 453 if (mEnmOsType != VBOXOSTYPE_Unknown) 452 454 { … … 2156 2158 2157 2159 2160 /** 2161 * Detect FreeBSD distro ISOs. 2162 * 2163 * @returns COM status code. 2164 * @retval S_OK if detected 2165 * @retval S_FALSE if not fully detected. 2166 * 2167 * @param hVfsIso The ISO file system. 2168 * @param pBuf Read buffer. 2169 */ 2170 HRESULT Unattended::i_innerDetectIsoOSFreeBsd(RTVFS hVfsIso, DETECTBUFFER *pBuf) 2171 { 2172 RT_NOREF(pBuf); 2173 2174 /* 2175 * FreeBSD since 10.0 has a .profile file in the root which can be used to determine that this is FreeBSD 2176 * along with the version. 2177 */ 2178 2179 RTVFSFILE hVfsFile; 2180 HRESULT hrc = S_FALSE; 2181 int vrc = RTVfsFileOpen(hVfsIso, ".profile", RTFILE_O_READ | RTFILE_O_DENY_NONE | RTFILE_O_OPEN, &hVfsFile); 2182 if (RT_SUCCESS(vrc)) 2183 { 2184 static const uint8_t s_abFreeBsdHdr[] = "# $FreeBSD: releng/"; 2185 char abRead[32]; 2186 2187 vrc = RTVfsFileRead(hVfsFile, &abRead[0], sizeof(abRead), NULL /*pcbRead*/); 2188 if ( RT_SUCCESS(vrc) 2189 && !memcmp(&abRead[0], &s_abFreeBsdHdr[0], sizeof(s_abFreeBsdHdr) - 1)) /* Skip terminator */ 2190 { 2191 abRead[sizeof(abRead) - 1] = '\0'; 2192 2193 /* Detect the architecture using the volume label. */ 2194 char szVolumeId[128]; 2195 size_t cchVolumeId; 2196 vrc = RTVfsQueryLabel(hVfsIso, szVolumeId, 128, &cchVolumeId); 2197 if (RT_SUCCESS(vrc)) 2198 { 2199 /* Can re-use the Linux code here. */ 2200 if (!detectLinuxArchII(szVolumeId, &mEnmOsType, VBOXOSTYPE_FreeBSD)) 2201 LogRel(("Unattended/FBSD: Unknown: arch='%s'\n", szVolumeId)); 2202 2203 /* Detect the version from the string coming after the needle in .profile. */ 2204 AssertCompile(sizeof(s_abFreeBsdHdr) - 1 < sizeof(abRead)); 2205 2206 char *pszVersionStart = &abRead[sizeof(s_abFreeBsdHdr) - 1]; 2207 char *pszVersionEnd = pszVersionStart; 2208 2209 while (RT_C_IS_DIGIT(*pszVersionEnd)) 2210 pszVersionEnd++; 2211 if (*pszVersionEnd == '.') 2212 { 2213 pszVersionEnd++; /* Skip the . */ 2214 2215 while (RT_C_IS_DIGIT(*pszVersionEnd)) 2216 pszVersionEnd++; 2217 2218 /* Terminate the version string. */ 2219 *pszVersionEnd = '\0'; 2220 2221 try { mStrDetectedOSVersion = pszVersionStart; } 2222 catch (std::bad_alloc &) { hrc = E_OUTOFMEMORY; } 2223 } 2224 else 2225 LogRel(("Unattended/FBSD: Unknown: version='%s'\n", &abRead[0])); 2226 } 2227 else 2228 { 2229 LogRel(("Unattended/FBSD: No Volume Label found\n")); 2230 mEnmOsType = VBOXOSTYPE_FreeBSD; 2231 } 2232 2233 hrc = S_OK; 2234 } 2235 2236 RTVfsFileRelease(hVfsFile); 2237 } 2238 2239 return hrc; 2240 } 2241 2242 2158 2243 HRESULT Unattended::prepare() 2159 2244 { -
trunk/src/VBox/Main/src-server/UnattendedInstaller.cpp
r94764 r95436 102 102 pUinstaller = new UnattendedOracleLinux6Installer(pParent); 103 103 } 104 else if (enmDetectedOSType >= VBOXOSTYPE_FreeBSD && enmDetectedOSType <= VBOXOSTYPE_FreeBSD_x64) 105 pUinstaller = new UnattendedFreeBsdInstaller(pParent); 104 106 #if 0 /* doesn't work, so convert later. */ 105 107 else if (enmDetectedOSType == VBOXOSTYPE_OpenSUSE || enmDetectedOSType == VBOXOSTYPE_OpenSUSE_x64) … … 1502 1504 } 1503 1505 #endif 1506 1507 1508 ////////////////////////////////////////////////////////////////////////////////////////////////////// 1509 /* 1510 * 1511 * 1512 * Implementation UnattendedFreeBsdInstaller functions 1513 * 1514 */ 1515 ////////////////////////////////////////////////////////////////////////////////////////////////////// 1516 HRESULT UnattendedFreeBsdInstaller::addFilesToAuxVisoVectors(RTCList<RTCString> &rVecArgs, RTCList<RTCString> &rVecFiles, 1517 RTVFS hVfsOrgIso, bool fOverwrite) 1518 { 1519 try 1520 { 1521 RTCString strScriptName; 1522 strScriptName = mpParent->i_getAuxiliaryBasePath(); 1523 strScriptName.append(mMainScript.getDefaultFilename()); 1524 1525 /* Need to retain the original file permissions for executables. */ 1526 rVecArgs.append() = "--no-file-mode"; 1527 rVecArgs.append() = "--no-dir-mode"; 1528 1529 rVecArgs.append() = "--import-iso"; 1530 rVecArgs.append(mpParent->i_getIsoPath()); 1531 1532 rVecArgs.append() = "--file-mode=0444"; 1533 rVecArgs.append() = "--dir-mode=0555"; 1534 1535 /* Remaster ISO, the installer config has to go into /etc. */ 1536 rVecArgs.append().append("/etc/installerconfig=").append(strScriptName); 1537 } 1538 catch (std::bad_alloc &) 1539 { 1540 return E_OUTOFMEMORY; 1541 } 1542 1543 /* 1544 * Call parent to add the remaining files 1545 */ 1546 return UnattendedInstaller::addFilesToAuxVisoVectors(rVecArgs, rVecFiles, hVfsOrgIso, fOverwrite); 1547 }
Note:
See TracChangeset
for help on using the changeset viewer.