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) {
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue