Add draft for MacOS installation

This commit is contained in:
aiamnezia 2024-12-24 19:33:26 +04:00
parent 89df1df886
commit 5d334e365c
5 changed files with 85 additions and 4 deletions

View 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

View file

@ -58,6 +58,7 @@ QString amnezia::scriptName(ClientScriptType type)
{ {
switch (type) { switch (type) {
case ClientScriptType::linux_installer: return QLatin1String("linux_installer.sh"); case ClientScriptType::linux_installer: return QLatin1String("linux_installer.sh");
case ClientScriptType::mac_installer: return QLatin1String("mac_installer.sh");
default: return QString(); default: return QString();
} }
} }

View file

@ -35,7 +35,8 @@ namespace amnezia
enum ClientScriptType { enum ClientScriptType {
// Client-side scripts // Client-side scripts
linux_installer linux_installer,
mac_installer
}; };
QString scriptFolder(DockerContainer container); QString scriptFolder(DockerContainer container);

View file

@ -4,6 +4,7 @@
<file>images/tray/default.png</file> <file>images/tray/default.png</file>
<file>images/tray/error.png</file> <file>images/tray/error.png</file>
<file>client_scripts/linux_installer.sh</file> <file>client_scripts/linux_installer.sh</file>
<file>client_scripts/mac_installer.sh</file>
<file>images/AmneziaVPN.png</file> <file>images/AmneziaVPN.png</file>
<file>server_scripts/remove_container.sh</file> <file>server_scripts/remove_container.sh</file>
<file>server_scripts/setup_host_firewall.sh</file> <file>server_scripts/setup_host_firewall.sh</file>

View file

@ -193,10 +193,52 @@ int UpdateController::runWindowsInstaller(const QString &installerPath)
#if defined(Q_OS_MACOS) #if defined(Q_OS_MACOS)
int UpdateController::runMacInstaller(const QString &installerPath) int UpdateController::runMacInstaller(const QString &installerPath)
{ {
logger.info() << "macOS installer path:" << installerPath; // Create temporary directory for extraction
// TODO: Implement macOS installation logic QTemporaryDir extractDir;
extractDir.setAutoRemove(false);
if (!extractDir.isValid()) {
logger.error() << "Failed to create temporary directory";
return -1; 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 #endif
#if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID) #if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)