Add draft for MacOS installation
This commit is contained in:
parent
89df1df886
commit
5d334e365c
5 changed files with 85 additions and 4 deletions
36
client/client_scripts/mac_installer.sh
Normal file
36
client/client_scripts/mac_installer.sh
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
#!/bin/bash
|
||||
|
||||
EXTRACT_DIR="$1"
|
||||
INSTALLER_PATH="$2"
|
||||
|
||||
# Create and clean extract directory
|
||||
rm -rf "$EXTRACT_DIR"
|
||||
mkdir -p "$EXTRACT_DIR"
|
||||
|
||||
# Mount the DMG
|
||||
hdiutil attach "$INSTALLER_PATH" -mountpoint "$EXTRACT_DIR/mounted_dmg" -nobrowse -quiet
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to mount DMG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Copy the app to /Applications
|
||||
cp -R "$EXTRACT_DIR/mounted_dmg/AmneziaVPN.app" /Applications/
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to copy AmneziaVPN.app to /Applications"
|
||||
hdiutil detach "$EXTRACT_DIR/mounted_dmg" -quiet
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Unmount the DMG
|
||||
hdiutil detach "$EXTRACT_DIR/mounted_dmg" -quiet
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Failed to unmount DMG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Optional: Remove the DMG file
|
||||
rm "$INSTALLER_PATH"
|
||||
|
||||
echo "Installation completed successfully"
|
||||
exit 0
|
||||
|
|
@ -58,6 +58,7 @@ QString amnezia::scriptName(ClientScriptType type)
|
|||
{
|
||||
switch (type) {
|
||||
case ClientScriptType::linux_installer: return QLatin1String("linux_installer.sh");
|
||||
case ClientScriptType::mac_installer: return QLatin1String("mac_installer.sh");
|
||||
default: return QString();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,8 @@ namespace amnezia
|
|||
|
||||
enum ClientScriptType {
|
||||
// Client-side scripts
|
||||
linux_installer
|
||||
linux_installer,
|
||||
mac_installer
|
||||
};
|
||||
|
||||
QString scriptFolder(DockerContainer container);
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
<file>images/tray/default.png</file>
|
||||
<file>images/tray/error.png</file>
|
||||
<file>client_scripts/linux_installer.sh</file>
|
||||
<file>client_scripts/mac_installer.sh</file>
|
||||
<file>images/AmneziaVPN.png</file>
|
||||
<file>server_scripts/remove_container.sh</file>
|
||||
<file>server_scripts/setup_host_firewall.sh</file>
|
||||
|
|
|
|||
|
|
@ -193,9 +193,51 @@ int UpdateController::runWindowsInstaller(const QString &installerPath)
|
|||
#if defined(Q_OS_MACOS)
|
||||
int UpdateController::runMacInstaller(const QString &installerPath)
|
||||
{
|
||||
logger.info() << "macOS installer path:" << installerPath;
|
||||
// TODO: Implement macOS installation logic
|
||||
// Create temporary directory for extraction
|
||||
QTemporaryDir extractDir;
|
||||
extractDir.setAutoRemove(false);
|
||||
if (!extractDir.isValid()) {
|
||||
logger.error() << "Failed to create temporary directory";
|
||||
return -1;
|
||||
}
|
||||
logger.info() << "Temporary directory created:" << extractDir.path();
|
||||
|
||||
// Create script file in the temporary directory
|
||||
QString scriptPath = extractDir.path() + "/mac_installer.sh";
|
||||
QFile scriptFile(scriptPath);
|
||||
if (!scriptFile.open(QIODevice::WriteOnly)) {
|
||||
logger.error() << "Failed to create script file";
|
||||
return -1;
|
||||
}
|
||||
|
||||
// Get script content from registry
|
||||
QString scriptContent = amnezia::scriptData(amnezia::ClientScriptType::mac_installer);
|
||||
if (scriptContent.isEmpty()) {
|
||||
logger.error() << "macOS installer script content is empty";
|
||||
scriptFile.close();
|
||||
return -1;
|
||||
}
|
||||
|
||||
scriptFile.write(scriptContent.toUtf8());
|
||||
scriptFile.close();
|
||||
logger.info() << "Script file created:" << scriptPath;
|
||||
|
||||
// Make script executable
|
||||
QFile::setPermissions(scriptPath, QFile::permissions(scriptPath) | QFile::ExeUser);
|
||||
|
||||
// Start detached process
|
||||
qint64 pid;
|
||||
bool success = QProcess::startDetached(
|
||||
"/bin/bash", QStringList() << scriptPath << extractDir.path() << installerPath, extractDir.path(), &pid);
|
||||
|
||||
if (success) {
|
||||
logger.info() << "Installation process started with PID:" << pid;
|
||||
} else {
|
||||
logger.error() << "Failed to start installation process";
|
||||
return -1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue