Compare commits
24 Commits
i2p-firefo
...
i2p-firefo
Author | SHA1 | Date | |
---|---|---|---|
![]() |
b4a3691aae | ||
![]() |
03748e0c0e | ||
![]() |
d4a40e8c86 | ||
![]() |
d38fadc902 | ||
![]() |
dbb865603a | ||
![]() |
456b26a860 | ||
![]() |
62284056c3 | ||
![]() |
41c06c821c | ||
![]() |
d32c850ede | ||
![]() |
f5f4d1c014 | ||
![]() |
4ad846d151 | ||
![]() |
6dfeaded43 | ||
![]() |
57b500a614 | ||
![]() |
078e542ef0 | ||
![]() |
81d81adc4c | ||
![]() |
b82986ccf4 | ||
![]() |
4ef50bb85a | ||
![]() |
b8809bed47 | ||
![]() |
16fc4da41c | ||
![]() |
2c44a9c8ad | ||
![]() |
35666caefd | ||
![]() |
bf89c119a7 | ||
![]() |
1277dae92b | ||
![]() |
a4476dc990 |
5
.github/workflows/ant.yml
vendored
5
.github/workflows/ant.yml
vendored
@@ -81,7 +81,8 @@ jobs:
|
|||||||
git config --global user.name "eyedeekay Github CI Build"
|
git config --global user.name "eyedeekay Github CI Build"
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
- run: wsl apt-get update
|
- run: wsl apt-get update
|
||||||
- run: wsl apt-get install -y nsis nsis-common nsis-pluginapi wget dos2unix curl jq gpg gettext zip
|
- run: wsl apt-cache search 7zip
|
||||||
|
- run: wsl apt-get install -y nsis nsis-common nsis-pluginapi wget dos2unix curl jq gpg gettext zip p7zip-full ca-certificates
|
||||||
- run: choco install wget
|
- run: choco install wget
|
||||||
- name: Set up JDK 21
|
- name: Set up JDK 21
|
||||||
uses: actions/setup-java@v4
|
uses: actions/setup-java@v4
|
||||||
@@ -89,7 +90,7 @@ jobs:
|
|||||||
java-version: '21'
|
java-version: '21'
|
||||||
distribution: 'temurin'
|
distribution: 'temurin'
|
||||||
- name: build with script
|
- name: build with script
|
||||||
run: bash -c "./buildscripts/zip.sh; ls *.zip"
|
run: bash -c "./buildscripts/zip.sh; ls -d * */* "
|
||||||
- name: Upload I2P-windows-portable.zip
|
- name: Upload I2P-windows-portable.zip
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
@@ -111,7 +111,7 @@ fi
|
|||||||
|
|
||||||
if [ ! -d "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox" ]; then
|
if [ ! -d "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox" ]; then
|
||||||
mkdir -p "$SCRIPT_DIR/build/I2P/config/plugins/"
|
mkdir -p "$SCRIPT_DIR/build/I2P/config/plugins/"
|
||||||
unzip "$SCRIPT_DIR/build/i2pfirefox.zip" -d "$SCRIPT_DIR/build/I2P/config/plugins/plugin"
|
unzip "$SCRIPT_DIR/build/i2pfirefox.zip" -d "$SCRIPT_DIR/build/I2P/config/plugins/"
|
||||||
rm -rf "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
|
rm -rf "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
|
||||||
mv "$SCRIPT_DIR/build/I2P/config/plugins/plugin" "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
|
mv "$SCRIPT_DIR/build/I2P/config/plugins/plugin" "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
|
||||||
fi
|
fi
|
||||||
@@ -124,7 +124,8 @@ cd "$SCRIPT_DIR"/java
|
|||||||
"$JAVA_HOME"/bin/javac -Xlint:deprecation -d ../build -classpath "$SCRIPT_DIR/build/i2pfirefox.jar:$SCRIPT_DIR/build/jna.jar:$SCRIPT_DIR/build/jna-platform.jar":"$SCRIPT_DIR/build/i2p.jar:$SCRIPT_DIR/build/router.jar:$SCRIPT_DIR/build/routerconsole.jar:$SCRIPT_DIR/build/jbigi.jar" \
|
"$JAVA_HOME"/bin/javac -Xlint:deprecation -d ../build -classpath "$SCRIPT_DIR/build/i2pfirefox.jar:$SCRIPT_DIR/build/jna.jar:$SCRIPT_DIR/build/jna-platform.jar":"$SCRIPT_DIR/build/i2p.jar:$SCRIPT_DIR/build/router.jar:$SCRIPT_DIR/build/routerconsole.jar:$SCRIPT_DIR/build/jbigi.jar" \
|
||||||
net/i2p/router/CopyConfigDir.java \
|
net/i2p/router/CopyConfigDir.java \
|
||||||
net/i2p/router/WindowsServiceUtil.java \
|
net/i2p/router/WindowsServiceUtil.java \
|
||||||
net/i2p/router/WindowsUpdatePostProcessor.java \
|
net/i2p/router/WindowsAppUtil.java \
|
||||||
|
net/i2p/router/WinUpdatePostProcessor.java \
|
||||||
net/i2p/router/WinLauncher.java \
|
net/i2p/router/WinLauncher.java \
|
||||||
net/i2p/router/WinUpdateProcess.java \
|
net/i2p/router/WinUpdateProcess.java \
|
||||||
net/i2p/router/ZipUpdateProcess.java
|
net/i2p/router/ZipUpdateProcess.java
|
||||||
|
@@ -16,7 +16,8 @@ TORSOCKS=$(which torsocks)
|
|||||||
if [ -f "${TORSOCKS}" ]; then
|
if [ -f "${TORSOCKS}" ]; then
|
||||||
. "${TORSOCKS}" on
|
. "${TORSOCKS}" on
|
||||||
fi
|
fi
|
||||||
#"$SCRIPT_DIR"/src/win/torbrowser-windows.sh
|
which wsl && wsl ../src/win/torbrowser-windows.sh
|
||||||
|
which wsl || "$SCRIPT_DIR"/src/win/torbrowser-windows.sh
|
||||||
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||||
. "${TORSOCKS}" off
|
. "${TORSOCKS}" off
|
||||||
locale="en-US" # mention your locale. default = en-US
|
locale="en-US" # mention your locale. default = en-US
|
||||||
|
@@ -2,8 +2,8 @@
|
|||||||
|
|
||||||
JNA_VERSION=5.12.1
|
JNA_VERSION=5.12.1
|
||||||
export JNA_VERSION=5.12.1
|
export JNA_VERSION=5.12.1
|
||||||
I2PFIREFOX_VERSION=1.4.7
|
I2PFIREFOX_VERSION=1.4.991
|
||||||
export I2PFIREFOX_VERSION=1.4.7
|
export I2PFIREFOX_VERSION=1.4.991
|
||||||
# Comment this out to build from an alternate branch or
|
# Comment this out to build from an alternate branch or
|
||||||
# the tip of the master branch.
|
# the tip of the master branch.
|
||||||
VERSIONMAJOR=2
|
VERSIONMAJOR=2
|
||||||
|
@@ -9,26 +9,14 @@ import java.io.IOException;
|
|||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
import java.util.logging.FileHandler;
|
import java.util.logging.FileHandler;
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.logging.SimpleFormatter;
|
import java.util.logging.SimpleFormatter;
|
||||||
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
public class CopyConfigDir extends WindowsServiceUtil {
|
public class CopyConfigDir extends WindowsAppUtil {
|
||||||
final Logger logger = Logger.getLogger("configlog");
|
final Log logger;
|
||||||
|
|
||||||
public void initLogger() {
|
public CopyConfigDir(RouterContext ctx) {
|
||||||
try {
|
logger = ctx.logManager().getLog(CopyConfigDir.class);
|
||||||
// This block configure the logger with handler and formatter
|
|
||||||
FileHandler fh = new FileHandler(logFile().toString());
|
|
||||||
logger.addHandler(fh);
|
|
||||||
SimpleFormatter formatter = new SimpleFormatter();
|
|
||||||
fh.setFormatter(formatter);
|
|
||||||
// the following statement is used to log any messages
|
|
||||||
logger.info("My first log");
|
|
||||||
} catch (SecurityException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean copyDirectory(String baseDir, String workDir) {
|
public boolean copyDirectory(String baseDir, String workDir) {
|
||||||
@@ -73,7 +61,7 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
|||||||
try {
|
try {
|
||||||
jpackagedConfigsInUse.createNewFile();
|
jpackagedConfigsInUse.createNewFile();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.warning(
|
logger.warn(
|
||||||
"Error creating jpackaged file, delete config files manually when uninstalling");
|
"Error creating jpackaged file, delete config files manually when uninstalling");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -128,164 +116,19 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
|||||||
out.close();
|
out.close();
|
||||||
return 1;
|
return 1;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
logger.warning(e.toString());
|
logger.warn(e.toString());
|
||||||
logger.warning("failed to copy " + basePath.getAbsolutePath() + " to " +
|
logger.warn("failed to copy " + basePath.getAbsolutePath() + " to " +
|
||||||
workPath.getAbsolutePath());
|
workPath.getAbsolutePath());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected File selectHome() { // throws Exception {
|
|
||||||
String path_override = System.getenv("I2P_CONFIG");
|
|
||||||
if (path_override != null) {
|
|
||||||
File path = new File(path_override);
|
|
||||||
if (path != null && path.exists()) {
|
|
||||||
if (path.isDirectory())
|
|
||||||
return path.getAbsoluteFile();
|
|
||||||
else
|
|
||||||
throw new RuntimeException("I2P_CONFIG is not a directory: " + path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File i2p = appImageHome();
|
|
||||||
logger.info("Checking for signs of life in I2P_CONFIG directory: " + i2p);
|
|
||||||
return i2p;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected File selectProgramFile() {
|
|
||||||
String path_override = System.getenv("I2P");
|
|
||||||
if (path_override != null) {
|
|
||||||
File path = new File(path_override);
|
|
||||||
if (path.exists()) {
|
|
||||||
if (path.isDirectory())
|
|
||||||
return path.getAbsoluteFile();
|
|
||||||
else
|
|
||||||
throw new RuntimeException("I2P is not a directory: " + path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File i2p = appImageHome();
|
|
||||||
logger.info("Checking for signs of life in I2P directory: " + i2p);
|
|
||||||
return i2p;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the path to the java home, for jpackage this is related to the
|
|
||||||
* executable itself, which is handy to know. It's a directory called runtime,
|
|
||||||
* relative to the root of the app-image on each platform:
|
|
||||||
*
|
|
||||||
* Windows - Root of appimage is 1 directory above directory named runtime
|
|
||||||
* ./runtime
|
|
||||||
*
|
|
||||||
* Linux - Root of appimage is 2 directories above directory named runtime
|
|
||||||
* ./lib/runtime
|
|
||||||
*
|
|
||||||
* Mac OSX - Unknown for now
|
|
||||||
*
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
protected File javaHome() {
|
|
||||||
File jrehome = new File(System.getProperty("java.home"));
|
|
||||||
if (jrehome != null) {
|
|
||||||
if (jrehome.exists()) {
|
|
||||||
return jrehome;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the path to the root of the app-image root by getting the path to
|
|
||||||
* java.home and the OS, and traversing up to the app-image root based on that
|
|
||||||
* information.
|
|
||||||
*
|
|
||||||
* @return the app-image root
|
|
||||||
*/
|
|
||||||
protected File appImageHome() {
|
|
||||||
File jreHome = javaHome();
|
|
||||||
if (jreHome != null) {
|
|
||||||
switch (osName()) {
|
|
||||||
case "windows":
|
|
||||||
return jreHome.getAbsoluteFile().getParentFile();
|
|
||||||
case "mac":
|
|
||||||
case "linux":
|
|
||||||
return jreHome.getAbsoluteFile().getParentFile().getParentFile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the path to the binary of the app-image root by getting the path to
|
|
||||||
* java.home and the OS, and traversing up to the app-image root based on that
|
|
||||||
* information, then getting the binary path on a per-platform basis. The path
|
|
||||||
* returned will be relative to the root.
|
|
||||||
*
|
|
||||||
* @return the app-image root
|
|
||||||
*/
|
|
||||||
protected String appImageExe() {
|
|
||||||
File aih = appImageHome();
|
|
||||||
if (aih != null) {
|
|
||||||
switch (osName()) {
|
|
||||||
case "windows":
|
|
||||||
return "I2P.exe";
|
|
||||||
case "mac":
|
|
||||||
case "linux":
|
|
||||||
return "./bin/I2P";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the path to the default config of the app-image by getting the path to
|
|
||||||
* java.home and the OS, and traversing up to the app-image root based on that
|
|
||||||
* information, then appending the config directory to the end onn a
|
|
||||||
* per-platform basis
|
|
||||||
*
|
|
||||||
* @return the app-image root
|
|
||||||
*/
|
|
||||||
protected File appImageConfig() {
|
|
||||||
File aih = appImageHome();
|
|
||||||
if (aih == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String osName = osName();
|
|
||||||
switch (osName) {
|
|
||||||
case "windows":
|
|
||||||
File winConfigDir = new File(aih, "config");
|
|
||||||
if (winConfigDir != null) {
|
|
||||||
if (winConfigDir.exists()) {
|
|
||||||
return winConfigDir;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case "mac":
|
|
||||||
case "linux":
|
|
||||||
File linConfigDir = new File(aih, "lib/config");
|
|
||||||
if (linConfigDir != null) {
|
|
||||||
if (linConfigDir.exists()) {
|
|
||||||
return linConfigDir;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected boolean copyConfigDir() {
|
protected boolean copyConfigDir() {
|
||||||
File appImageConfigDir = appImageConfig();
|
File appImageConfigDir = appImageConfig();
|
||||||
File appImageHomeDir = selectHome();
|
File appImageHomeDir = selectHome();
|
||||||
return copyConfigDirectory(appImageConfigDir, appImageHomeDir);
|
return copyConfigDirectory(appImageConfigDir, appImageHomeDir);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String routerConfig() {
|
|
||||||
File appImageHomeDir = selectHome();
|
|
||||||
File routerConf = new File(appImageHomeDir, "router.config");
|
|
||||||
if (routerConf != null) {
|
|
||||||
if (routerConf.exists()) {
|
|
||||||
return routerConf.getAbsolutePath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set up the path to the log file
|
* set up the path to the log file
|
||||||
*
|
*
|
||||||
|
@@ -5,18 +5,14 @@ import java.net.InetAddress;
|
|||||||
import java.net.ServerSocket;
|
import java.net.ServerSocket;
|
||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.logging.FileHandler;
|
|
||||||
import java.util.logging.Logger;
|
|
||||||
import java.util.logging.SimpleFormatter;
|
|
||||||
import net.i2p.app.ClientAppManager;
|
import net.i2p.app.ClientAppManager;
|
||||||
import net.i2p.crypto.*;
|
import net.i2p.crypto.*;
|
||||||
//import net.i2p.i2pfirefox.*;
|
|
||||||
import net.i2p.router.Router;
|
import net.i2p.router.Router;
|
||||||
import net.i2p.router.RouterLaunch;
|
import net.i2p.router.RouterLaunch;
|
||||||
import net.i2p.update.*;
|
import net.i2p.update.*;
|
||||||
import net.i2p.update.UpdateManager;
|
import net.i2p.update.UpdateManager;
|
||||||
import net.i2p.update.UpdatePostProcessor;
|
|
||||||
import net.i2p.update.UpdateType.*;
|
import net.i2p.update.UpdateType.*;
|
||||||
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Launches a router from %WORKINGDIR%/I2P using configuration data in
|
* Launches a router from %WORKINGDIR%/I2P using configuration data in
|
||||||
@@ -28,59 +24,14 @@ import net.i2p.update.UpdateType.*;
|
|||||||
* appdata
|
* appdata
|
||||||
* router.pid - the pid of the java process.
|
* router.pid - the pid of the java process.
|
||||||
*/
|
*/
|
||||||
public class WinLauncher extends CopyConfigDir {
|
public class WinLauncher extends WindowsAppUtil {
|
||||||
WindowsUpdatePostProcessor wupp = null;
|
private final CopyConfigDir copyConfigDir;
|
||||||
|
WinUpdatePostProcessor wupp = null;
|
||||||
private Router i2pRouter;
|
private Router i2pRouter;
|
||||||
|
private final Log logger;
|
||||||
public static void main(String[] args) {
|
public WinLauncher() {
|
||||||
var launcher = new WinLauncher();
|
File programs = programFile();
|
||||||
launcher.setupLauncher();
|
File home = homeDir();
|
||||||
launcher.initLogger();
|
|
||||||
int proxyTimeoutTime = 200;
|
|
||||||
ArrayList<String> newArgsList = new ArrayList<String>();
|
|
||||||
|
|
||||||
if (args != null) {
|
|
||||||
if (args.length > 0) {
|
|
||||||
for (String arg : args) {
|
|
||||||
if (arg.equals("-private")) {
|
|
||||||
launcher.logger.info(
|
|
||||||
"Private browsing is true, profile will be discarded at end of session.");
|
|
||||||
} else if (arg.equals("-chromium")) {
|
|
||||||
launcher.logger.info("Chromium will be selected before Firefox.");
|
|
||||||
} else if (arg.equals("-usability")) {
|
|
||||||
launcher.logger.info(
|
|
||||||
"Usability mode is true, using alternate extensions loadout.");
|
|
||||||
} else if (arg.equals("-noproxycheck")) {
|
|
||||||
proxyTimeoutTime = 0;
|
|
||||||
launcher.logger.info("Proxy timeout time set to zero");
|
|
||||||
} else {
|
|
||||||
// make an effort to not let people launch into sites if the proxy
|
|
||||||
// isn't quite ready yet, but also disable the proxy timeout if
|
|
||||||
// they're reaching a router console
|
|
||||||
if (arg.startsWith("http://localhost:76")) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
proxyTimeoutTime = 0;
|
|
||||||
} else if (arg.startsWith("http://127.0.0.1:76")) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
proxyTimeoutTime = 0;
|
|
||||||
} else if (arg.startsWith("https://localhost:76")) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
proxyTimeoutTime = 0;
|
|
||||||
} else if (arg.startsWith("https://127.0.0.1:76")) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
proxyTimeoutTime = 0;
|
|
||||||
} else if (proxyTimeoutTime > 0) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
} else if (!launcher.isAvailable(4444)) {
|
|
||||||
newArgsList.add(arg);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
File programs = launcher.programFile();
|
|
||||||
File home = launcher.homeDir();
|
|
||||||
|
|
||||||
System.setProperty(
|
System.setProperty(
|
||||||
"i2p.dir.base",
|
"i2p.dir.base",
|
||||||
@@ -95,38 +46,42 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
|
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
|
||||||
*/
|
*/
|
||||||
System.setProperty("user.dir", programs.getAbsolutePath());
|
System.setProperty("user.dir", programs.getAbsolutePath());
|
||||||
|
|
||||||
|
i2pRouter = new Router(routerConfig(), System.getProperties());
|
||||||
|
copyConfigDir = new CopyConfigDir(i2pRouter.getContext());
|
||||||
|
logger = i2pRouter.getContext().logManager().getLog(WinLauncher.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
var launcher = new WinLauncher();
|
||||||
|
launcher.setupLauncher();
|
||||||
|
int proxyTimeoutTime = 200;
|
||||||
|
|
||||||
launcher.logger.info("\t" + System.getProperty("user.dir"));
|
launcher.logger.info("\t" + System.getProperty("user.dir"));
|
||||||
launcher.logger.info("\t" + System.getProperty("i2p.dir.base"));
|
launcher.logger.info("\t" + System.getProperty("i2p.dir.base"));
|
||||||
launcher.logger.info("\t" + System.getProperty("i2p.dir.config"));
|
launcher.logger.info("\t" + System.getProperty("i2p.dir.config"));
|
||||||
launcher.logger.info("\t" + System.getProperty("router.pid"));
|
launcher.logger.info("\t" + System.getProperty("router.pid"));
|
||||||
boolean continuerunning = launcher.promptServiceStartIfAvailable("i2p");
|
boolean continuerunning = launcher.promptServiceStartIfAvailable("i2p");
|
||||||
if (!continuerunning) {
|
if (!continuerunning) {
|
||||||
launcher.logger.severe(
|
launcher.logger.error(
|
||||||
"Service startup failure, please start I2P service with services.msc");
|
"Service startup failure, please start I2P service with services.msc");
|
||||||
System.exit(2);
|
System.exit(2);
|
||||||
}
|
}
|
||||||
continuerunning = launcher.promptUserInstallStartIfAvailable();
|
continuerunning = launcher.promptUserInstallStartIfAvailable();
|
||||||
if (!continuerunning) {
|
if (!continuerunning) {
|
||||||
launcher.logger.severe("User-install startup required.");
|
launcher.logger.error("User-install startup required.");
|
||||||
System.exit(2);
|
System.exit(2);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This actually does most of what we use NSIS for if NSIS hasn't
|
// This actually does most of what we use NSIS for if NSIS hasn't
|
||||||
// already done it, which essentially makes this whole thing portable.
|
// already done it, which essentially makes this whole thing portable.
|
||||||
if (!launcher.copyConfigDir()) {
|
if (!launcher.copyConfigDir.copyConfigDir()) {
|
||||||
launcher.logger.severe("Cannot copy the configuration directory");
|
launcher.logger.error("Cannot copy the configuration directory");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
launcher.i2pRouter =
|
|
||||||
new Router(launcher.routerConfig(), System.getProperties());
|
|
||||||
if (!launcher.isInstalled("i2p")) {
|
if (!launcher.isInstalled("i2p")) {
|
||||||
if (launcher.i2pRouter.saveConfig("routerconsole.browser", null)) {
|
if (launcher.i2pRouter.saveConfig("routerconsole.browser", "NUL")) {
|
||||||
launcher.logger.info("removed routerconsole.browser config");
|
|
||||||
}
|
|
||||||
if (launcher.i2pRouter.saveConfig("routerconsole.browser",
|
|
||||||
launcher.appImageExe() +
|
|
||||||
" -noproxycheck")) {
|
|
||||||
launcher.logger.info("updated routerconsole.browser config " +
|
launcher.logger.info("updated routerconsole.browser config " +
|
||||||
launcher.appImageExe());
|
launcher.appImageExe());
|
||||||
}
|
}
|
||||||
@@ -138,8 +93,6 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
registrationThread.setDaemon(true);
|
registrationThread.setDaemon(true);
|
||||||
registrationThread.start();
|
registrationThread.start();
|
||||||
|
|
||||||
launcher.setNotStarting();
|
|
||||||
|
|
||||||
launcher.i2pRouter.runRouter();
|
launcher.i2pRouter.runRouter();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -155,7 +108,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
if (!programs.exists())
|
if (!programs.exists())
|
||||||
programs.mkdirs();
|
programs.mkdirs();
|
||||||
else if (!programs.isDirectory()) {
|
else if (!programs.isDirectory()) {
|
||||||
logger.warning(
|
logger.warn(
|
||||||
programs +
|
programs +
|
||||||
" exists but is not a directory. Please get it out of the way");
|
" exists but is not a directory. Please get it out of the way");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
@@ -168,7 +121,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
if (!home.exists())
|
if (!home.exists())
|
||||||
home.mkdirs();
|
home.mkdirs();
|
||||||
else if (!home.isDirectory()) {
|
else if (!home.isDirectory()) {
|
||||||
logger.warning(
|
logger.warn(
|
||||||
home +
|
home +
|
||||||
" exists but is not a directory. Please get it out of the way");
|
" exists but is not a directory. Please get it out of the way");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
@@ -188,93 +141,6 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
return portFree;
|
return portFree;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean i2pIsRunningCheck() {
|
|
||||||
// check if there's something listening on port 7657(Router Console)
|
|
||||||
if (!isAvailable(7657))
|
|
||||||
return true;
|
|
||||||
// check if there's something listening on port 7654(I2CP)
|
|
||||||
if (!isAvailable(7654))
|
|
||||||
return true;
|
|
||||||
if (checkPing())
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setNotStarting() {
|
|
||||||
logger.info("removing startup file, the application has started");
|
|
||||||
File home = selectHome();
|
|
||||||
File starting = new File(home, "starting");
|
|
||||||
if (starting.exists()) {
|
|
||||||
starting.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setStarting() {
|
|
||||||
logger.info("creating startup file, router is starting up");
|
|
||||||
File home = selectHome();
|
|
||||||
File starting = new File(home, "starting");
|
|
||||||
if (!starting.exists()) {
|
|
||||||
try {
|
|
||||||
starting.createNewFile();
|
|
||||||
} catch (IOException e) {
|
|
||||||
logger.info(e.toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
setNotStarting();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean checkStarting() {
|
|
||||||
logger.info("checking startup file");
|
|
||||||
File home = selectHome();
|
|
||||||
File starting = new File(home, "starting");
|
|
||||||
if (starting.exists()) {
|
|
||||||
logger.info("startup file exists, I2P is already starting up");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
logger.info("startup file does not exist but we're running now");
|
|
||||||
setStarting();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check for the existence of router.ping file, if it's less then 2
|
|
||||||
// minutes old, exit
|
|
||||||
private boolean checkPing() {
|
|
||||||
File home = selectHome();
|
|
||||||
File ping = new File(home, "router.ping");
|
|
||||||
if (ping.exists()) {
|
|
||||||
long diff = System.currentTimeMillis() - ping.lastModified();
|
|
||||||
if (diff > 60 * 1000) {
|
|
||||||
logger.info(
|
|
||||||
"router.ping exists and is more than 1 minute old, I2P does not appear to be running.");
|
|
||||||
logger.info("If I2P is running, report this as a bug.");
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean i2pIsRunning() {
|
|
||||||
if (checkStarting())
|
|
||||||
return true;
|
|
||||||
if (checkPing())
|
|
||||||
return true;
|
|
||||||
if (i2pIsRunningCheck())
|
|
||||||
return true;
|
|
||||||
for (int i = 0; i < 10; i++) {
|
|
||||||
if (i2pIsRunningCheck())
|
|
||||||
return true;
|
|
||||||
sleep(1000);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Runnable REGISTER_UPP = () -> {
|
private final Runnable REGISTER_UPP = () -> {
|
||||||
RouterContext ctx;
|
RouterContext ctx;
|
||||||
while ((ctx = i2pRouter.getContext()) == null) {
|
while ((ctx = i2pRouter.getContext()) == null) {
|
||||||
@@ -290,7 +156,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
null) {
|
null) {
|
||||||
sleep(1000);
|
sleep(1000);
|
||||||
}
|
}
|
||||||
WindowsUpdatePostProcessor wupp = new WindowsUpdatePostProcessor(ctx);
|
WinUpdatePostProcessor wupp = new WinUpdatePostProcessor(ctx);
|
||||||
um.register(wupp, UpdateType.ROUTER_SIGNED_SU3, SU3File.TYPE_EXE);
|
um.register(wupp, UpdateType.ROUTER_SIGNED_SU3, SU3File.TYPE_EXE);
|
||||||
um.register(wupp, UpdateType.ROUTER_DEV_SU3, SU3File.TYPE_EXE);
|
um.register(wupp, UpdateType.ROUTER_DEV_SU3, SU3File.TYPE_EXE);
|
||||||
};
|
};
|
||||||
|
@@ -16,7 +16,7 @@ import net.i2p.update.UpdateType;
|
|||||||
import net.i2p.util.Log;
|
import net.i2p.util.Log;
|
||||||
import net.i2p.util.SystemVersion;
|
import net.i2p.util.SystemVersion;
|
||||||
|
|
||||||
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
public class WinUpdatePostProcessor implements UpdatePostProcessor {
|
||||||
private final Log _log;
|
private final Log _log;
|
||||||
private final RouterContext ctx;
|
private final RouterContext ctx;
|
||||||
private final AtomicBoolean hook = new AtomicBoolean();
|
private final AtomicBoolean hook = new AtomicBoolean();
|
||||||
@@ -26,9 +26,9 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
|
|
||||||
private volatile File positionedFile = null;
|
private volatile File positionedFile = null;
|
||||||
|
|
||||||
WindowsUpdatePostProcessor(RouterContext ctx) {
|
WinUpdatePostProcessor(RouterContext ctx) {
|
||||||
this.ctx = ctx;
|
this.ctx = ctx;
|
||||||
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
|
this._log = ctx.logManager().getLog(WinUpdatePostProcessor.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getVersion() { return version; }
|
public String getVersion() { return version; }
|
148
java/net/i2p/router/WindowsAppUtil.java
Normal file
148
java/net/i2p/router/WindowsAppUtil.java
Normal file
@@ -0,0 +1,148 @@
|
|||||||
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
|
public class WindowsAppUtil extends WindowsServiceUtil {
|
||||||
|
private File checkPathEnvironmentVariable(String name) {
|
||||||
|
String path_override = System.getenv(name);
|
||||||
|
if (path_override != null) {
|
||||||
|
File path = new File(path_override);
|
||||||
|
if (path != null && path.exists()) {
|
||||||
|
if (path.isDirectory())
|
||||||
|
return path.getAbsoluteFile();
|
||||||
|
else
|
||||||
|
throw new RuntimeException(name + " is not a directory: " + path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected File selectHome() { // throws Exception {
|
||||||
|
File i2p = checkPathEnvironmentVariable("I2P_CONFIG");
|
||||||
|
String path_override = System.getenv("I2P_CONFIG");
|
||||||
|
if (i2p == null)
|
||||||
|
i2p = appImageHome();
|
||||||
|
return i2p;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected File selectProgramFile() {
|
||||||
|
File i2p = checkPathEnvironmentVariable("I2P");
|
||||||
|
if (i2p == null)
|
||||||
|
i2p = appImageHome();
|
||||||
|
return i2p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the path to the java home, for jpackage this is related to the
|
||||||
|
* executable itself, which is handy to know. It's a directory called runtime,
|
||||||
|
* relative to the root of the app-image on each platform:
|
||||||
|
*
|
||||||
|
* Windows - Root of appimage is 1 directory above directory named runtime
|
||||||
|
* ./runtime
|
||||||
|
*
|
||||||
|
* Linux - Root of appimage is 2 directories above directory named runtime
|
||||||
|
* ./lib/runtime
|
||||||
|
*
|
||||||
|
* Mac OSX - Unknown for now
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
protected File javaHome() {
|
||||||
|
File jrehome = new File(System.getProperty("java.home"));
|
||||||
|
if (jrehome != null) {
|
||||||
|
if (jrehome.exists()) {
|
||||||
|
return jrehome;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the path to the root of the app-image root by getting the path to
|
||||||
|
* java.home and the OS, and traversing up to the app-image root based on that
|
||||||
|
* information.
|
||||||
|
*
|
||||||
|
* @return the app-image root
|
||||||
|
*/
|
||||||
|
protected File appImageHome() {
|
||||||
|
File jreHome = javaHome();
|
||||||
|
if (jreHome != null) {
|
||||||
|
switch (osName()) {
|
||||||
|
case "windows":
|
||||||
|
return jreHome.getAbsoluteFile().getParentFile();
|
||||||
|
case "mac":
|
||||||
|
case "linux":
|
||||||
|
return jreHome.getAbsoluteFile().getParentFile().getParentFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the path to the binary of the app-image root by getting the path to
|
||||||
|
* java.home and the OS, and traversing up to the app-image root based on that
|
||||||
|
* information, then getting the binary path on a per-platform basis. The path
|
||||||
|
* returned will be relative to the root.
|
||||||
|
*
|
||||||
|
* @return the app-image root
|
||||||
|
*/
|
||||||
|
protected String appImageExe() {
|
||||||
|
File aih = appImageHome();
|
||||||
|
if (aih != null) {
|
||||||
|
switch (osName()) {
|
||||||
|
case "windows":
|
||||||
|
return "I2P.exe";
|
||||||
|
case "mac":
|
||||||
|
case "linux":
|
||||||
|
return "./bin/I2P";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the path to the default config of the app-image by getting the path to
|
||||||
|
* java.home and the OS, and traversing up to the app-image root based on that
|
||||||
|
* information, then appending the config directory to the end onn a
|
||||||
|
* per-platform basis
|
||||||
|
*
|
||||||
|
* @return the app-image root
|
||||||
|
*/
|
||||||
|
protected File appImageConfig() {
|
||||||
|
File aih = appImageHome();
|
||||||
|
if (aih == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
String osName = osName();
|
||||||
|
switch (osName) {
|
||||||
|
case "windows":
|
||||||
|
File winConfigDir = new File(aih, "config");
|
||||||
|
if (winConfigDir != null) {
|
||||||
|
if (winConfigDir.exists()) {
|
||||||
|
return winConfigDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case "mac":
|
||||||
|
case "linux":
|
||||||
|
File linConfigDir = new File(aih, "lib/config");
|
||||||
|
if (linConfigDir != null) {
|
||||||
|
if (linConfigDir.exists()) {
|
||||||
|
return linConfigDir;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String routerConfig() {
|
||||||
|
File appImageHomeDir = selectHome();
|
||||||
|
File routerConf = new File(appImageHomeDir, "router.config");
|
||||||
|
if (routerConf != null) {
|
||||||
|
if (routerConf.exists()) {
|
||||||
|
return routerConf.getAbsolutePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@@ -181,11 +181,13 @@ Function installerFunction
|
|||||||
|
|
||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||||
|
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
Delete "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk"
|
||||||
|
|
||||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$INSTDIR\I2P.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
Delete "$DESKTOP\Browse I2P - Temporary Identity.lnk"
|
||||||
|
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall I2P Easy-Install Bundle.lnk" "$INSTDIR\uninstall-i2pbrowser.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall I2P Easy-Install Bundle.lnk" "$INSTDIR\uninstall-i2pbrowser.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
|
@@ -18,21 +18,11 @@ if [ ! -f ./tor.keyring ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -f "tor-browser-linux64-${version}_${locale}.exe" ]; then
|
if [ ! -f "tor-browser-linux64-${version}_${locale}.exe" ]; then
|
||||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe"
|
wget -cv "https://dist.torproject.org/torbrowser/${version}/tor-browser-windows-x86_64-portable-${version}.exe"
|
||||||
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/torbrowser-install-win64-${version}_${locale}.exe.asc"
|
wget -cv "https://dist.torproject.org/torbrowser/${version}/tor-browser-windows-x86_64-portable-${version}.exe.asc"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
gpgv --keyring ./tor.keyring "torbrowser-install-win64-${version}_${locale}.exe.asc" "torbrowser-install-win64-${version}_${locale}.exe"
|
gpgv --keyring ./tor.keyring "tor-browser-windows-x86_64-portable-${version}.exe.asc" "tor-browser-windows-x86_64-portable-${version}.exe"
|
||||||
|
|
||||||
#tar xvJf "torbrowser-install-win64-${version}_${locale}.exe"
|
7z x "tor-browser-windows-x86_64-portable-${version}.exe" -o"Tor Browser"
|
||||||
#for n in `seq 1 2000`; do echo $n; dd ibs=256 if="torbrowser-install-win64-${version}_${locale}.exe" count=2 skip=$n | file - ; done 2>/dev/null |less
|
#7z --help
|
||||||
#zip -FF "torbrowser-install-win64-${version}_${locale}.exe" --out extracted.zip
|
|
||||||
WINE=$(which wine)
|
|
||||||
if [ -z "$WINE" ]; then
|
|
||||||
"./torbrowser-install-win64-${version}_${locale}.exe" /S #/D .
|
|
||||||
cp -vr "$HOME/Desktop/Tor Browser/" "Tor Browser"
|
|
||||||
else
|
|
||||||
export WINEPREFIX=$(pwd)/../tmp
|
|
||||||
$WINE "torbrowser-install-win64-${version}_${locale}.exe" /S #/D .
|
|
||||||
cp -vr "$WINEPREFIX/drive_c/users/idk/Desktop/Tor Browser/" "Tor Browser"
|
|
||||||
fi
|
|
Reference in New Issue
Block a user