Compare commits

...

149 Commits

Author SHA1 Message Date
601b1db8d5 Update how release notes are posted 2024-03-20 12:02:43 -04:00
c47b7c0f76 use I2P's mktorrent when generating the torrent. use the news.sh script to generate torrent based on the tag. 2024-03-20 00:53:45 -04:00
d4cc7dcfdf Generate news from markdown file 2024-03-19 23:44:01 -04:00
58a7ce4fd4 use latest I2P version if tags aren't available 2024-03-19 22:26:34 -04:00
f8870cd12d use the tag to determine the version to build 2024-03-19 21:41:40 -04:00
aff0563fc3 use the tag to determine the version to build 2024-03-19 21:40:14 -04:00
6d460a9042 WindowsAppUtil and WindowsServiceUtil now do not have references to I2P itself 2024-03-19 20:37:08 -04:00
8809ddaac7 Delete redundant sections from the README.md 2024-03-18 10:30:13 -04:00
958f33db7f Delete ancient sections from when I made this useful as a browser profile launcher for Linux 2024-03-18 10:28:39 -04:00
0bfeaaf841 Give the README.md a canned update about how to use the CI description as the basis for a dev build 2024-03-18 10:27:14 -04:00
134ebeb1d0 sleep 20 minutes for release artifacts 2024-03-12 23:55:40 -04:00
b4a3691aae list outputs non-recursively, only directories, only first 2 levels 2024-03-12 23:20:57 -04:00
03748e0c0e list outputs 2024-03-12 22:54:03 -04:00
d4a40e8c86 Fix 7z command 2024-03-12 22:37:46 -04:00
d38fadc902 get 7z help for version 2024-03-12 22:16:18 -04:00
dbb865603a figure out where install ca-certificates 2024-03-12 21:58:22 -04:00
456b26a860 figure out where wsl keeps 7zip 2024-03-12 21:35:10 -04:00
62284056c3 figure out where wsl keeps 7zip 2024-03-12 21:30:02 -04:00
41c06c821c use 7zip when unpacking TBB into Portable 2024-03-12 21:19:31 -04:00
d32c850ede use relative path when calling wsl 2024-03-12 21:14:06 -04:00
f5f4d1c014 use 7zip to unzip for portable 2024-03-12 20:18:19 -04:00
4ad846d151 Switch to WSL for part of the zip script 2024-03-12 19:58:16 -04:00
6dfeaded43 Rename WUPP 2024-03-12 19:52:20 -04:00
57b500a614 Increase i2p.plugins.firefox version 2024-03-10 00:58:54 -05:00
078e542ef0 Delete redundant shortcuts 2024-03-09 23:13:19 -05:00
81d81adc4c no more self-relaunch! 2024-03-08 22:48:24 -05:00
b82986ccf4 set properties in constructor 2024-03-08 22:00:46 -05:00
4ef50bb85a set properties in constructor 2024-03-08 21:35:50 -05:00
b8809bed47 i2pRouter in WinLauncher can't be final because of REGISTER_UPP 2024-03-08 19:43:26 -05:00
16fc4da41c null check i2pRouter in REGISTER_UPP 2024-03-08 19:36:29 -05:00
2c44a9c8ad get rid of setNotStarting 2024-03-08 19:19:36 -05:00
35666caefd Reign in some of the insanity 2024-03-08 19:04:56 -05:00
bf89c119a7 start getting rid of CCD 2024-03-08 18:44:24 -05:00
1277dae92b Delete unused functions from WinLauncher.java 2024-03-08 16:18:21 -05:00
a4476dc990 fix path for default plugin install 2024-03-08 15:06:30 -05:00
1e959d0aa1 fix path for default plugin install 2024-03-08 14:54:39 -05:00
8f6e7bc83c use i2p.plugins.firefox as a plugin instead of as a library 2024-03-08 11:58:49 -05:00
fc84098dc9 use i2p.plugins.firefox as a plugin instead of as a library 2024-03-07 22:31:18 -05:00
52a33b5334 zip during run phase 2024-03-07 22:18:41 -05:00
e055eb8aa9 don't skip unpacking 2024-03-07 21:21:01 -05:00
8d1eb7e01f remove shasums from ci artifact names 2024-03-07 20:57:38 -05:00
ab1d7047ca do releases builds with CI here too 2024-03-07 16:33:12 -05:00
9a190ae75d do releases builds with CI here too 2024-03-07 16:28:57 -05:00
38aa89e586 remove browser launcher from win launcher 2024-03-06 14:54:31 -05:00
9b10707f14 use powershell-zip if zip isn't around 2024-02-20 17:11:06 -05:00
79f3337056 don't run tbb script on Windows 2024-02-20 17:06:06 -05:00
7a550091f2 try chocowget for zip 2024-02-20 16:51:39 -05:00
4767e1fba2 make sure we're in wsl with zip 2024-02-20 16:37:39 -05:00
ef99328eed add zip to wsl env in buildzip 2024-02-20 16:04:06 -05:00
936966ee4c use choco to install wget 2024-02-20 15:13:55 -05:00
07aed0ab00 use choco to install wget 2024-02-20 14:52:22 -05:00
d70eb26dbf use wsl-bash to generate zip 2024-02-20 14:44:03 -05:00
df2802bf5d fix path for dev build artifact upload 2024-02-20 14:41:03 -05:00
4fdc0a5dc9 set up git config in container 2024-02-20 14:28:49 -05:00
e619b3fd19 pass -c 2024-02-20 14:18:37 -05:00
e1e61ec7b2 use winbash to run buildscripts 2024-02-20 14:06:06 -05:00
3d7444e33e use git-bash to run buildscripts 2024-02-20 11:38:31 -05:00
b75da98147 use wsl-bash to run buildscripts 2024-02-20 10:52:19 -05:00
3d70bc5e59 use git-bash to run buildscripts 2024-02-20 10:45:58 -05:00
ab7b24bb0d call wsl not wsl-bash when using apt-get 2024-02-20 10:39:44 -05:00
9baefba911 don't auto-select wsl-bash 2024-02-20 10:36:12 -05:00
f48d8017c5 add .gitattributes 2024-02-20 09:47:13 -05:00
d01d0bb513 force unix line endings 2024-02-19 19:09:46 -05:00
5e26057f9c force unix line endings 2024-02-19 19:02:43 -05:00
8be149e02f use checkout earlier 2024-02-19 18:46:19 -05:00
d73832f1f6 dos2unix everything in wsl 2024-02-19 18:12:36 -05:00
a7ae0ec8f7 dos2unix everything in wsl 2024-02-19 17:17:26 -05:00
6ec4834a08 work around error that happens in nsis 2024-02-19 17:04:46 -05:00
82d111d598 work around error that happens in nsis 2024-02-19 16:58:47 -05:00
2ed7e7ef98 work around error that happens in nsis 2024-02-19 16:48:59 -05:00
bdf8715ce5 fix syntax error on nsis target 2024-02-19 16:41:58 -05:00
175e811ac3 don't try and specify a shell 2024-02-19 16:37:14 -05:00
b3ff9d50f8 don't try and specify a shell 2024-02-19 16:35:11 -05:00
31135cc664 don't look for .tgz's pointlessly 2024-02-19 16:33:23 -05:00
5c91612f90 try and fix nsis target 2024-02-19 16:32:10 -05:00
c65df41f76 fix TBB download script for unix portable target 2024-02-19 16:27:51 -05:00
1a78538525 pass -y flag 2024-02-19 16:16:34 -05:00
8ec161aceb needs more gettext 2024-02-19 16:15:11 -05:00
c76541979a run apt-get update first 2024-02-19 16:08:46 -05:00
6f14dc1a3a use sudo in ubuntu container 2024-02-19 16:07:35 -05:00
7a32f97f29 install deps in ubuntu container also 2024-02-19 16:05:24 -05:00
790300e996 set default shell to wsl-bash 2024-02-19 16:03:04 -05:00
6a4aa0b74c Work on getting portable and nsis builds to work 2024-02-19 15:57:31 -05:00
32e26956bf Build all potential jpackage targets in CI 2024-02-19 15:42:45 -05:00
b8c1c44e66 Install Ubuntu-20.04 in wsl in CI so we can do the whole build process for all windows platforms 2024-02-19 15:32:52 -05:00
0a52d64847 switch back to what works for tonight 2024-02-01 22:05:23 -05:00
23e77ef901 list users, then fail to install Ubuntu as admin 2024-02-01 21:13:16 -05:00
3f419675fe set i2pversion not config.sh 2024-02-01 21:11:43 -05:00
99a779d89f set i2pversion not config.sh 2024-02-01 18:40:08 -05:00
2ce03a426c set i2pversion not config.sh 2024-02-01 17:54:47 -05:00
ab9965e0b8 don't worry about wsl for now 2024-02-01 17:31:22 -05:00
6491551577 diverges enough for the comment to be erroneous 2024-02-01 17:30:31 -05:00
ec13b0f94b try to fix artifact upload 2024-02-01 17:29:46 -05:00
11b7096fa5 try to fix config.sh in CI 2024-02-01 17:28:46 -05:00
1959aac3a8 try to fix config.sh in CI 2024-02-01 17:17:45 -05:00
1414fe3b53 try to fix config.sh in CI 2024-02-01 17:13:07 -05:00
03a3487aa7 try to fix config.sh in CI 2024-02-01 17:11:56 -05:00
bb55985bb8 try to fix config.sh in CI 2024-02-01 17:10:11 -05:00
95fbcde2dc try to fix config.sh in CI 2024-02-01 17:08:10 -05:00
157821ef91 install dos2unix in CI 2024-02-01 17:05:46 -05:00
371428e03c install nsis in CI 2024-02-01 17:04:58 -05:00
9e90df0181 fix config setup 2024-02-01 17:03:03 -05:00
893f1f9043 call build.sh in correct location 2024-02-01 17:00:43 -05:00
d76c1ff567 fix config setup 2024-02-01 16:58:13 -05:00
56be9ed3e0 fix config setup 2024-02-01 16:56:19 -05:00
e3e19ca4d4 see if jpackage can generate an exe 2024-02-01 16:54:52 -05:00
144e6ba9e0 call bash specifically 2024-02-01 16:36:35 -05:00
b2fdfc1e89 install wsl in runner 2024-02-01 16:34:42 -05:00
b1db589787 set up runner that definitely won't work yet 2024-02-01 16:23:09 -05:00
a3da3c2ace update version numbers 2.4.0 2023-12-11 13:54:41 -05:00
5e27d8588a update version numbers, don't have osname be static 2023-12-11 13:53:14 -05:00
2a185f5fe3 Detect mktorrent if it exists on Windows 2023-07-10 20:18:53 -04:00
f0f194242b add tag to last element in github upload script 2023-07-10 20:00:36 -04:00
b9c6b6db49 add i2p org to github upload script 2023-07-10 19:28:20 -04:00
c14077606b fix upload script 2023-07-10 19:21:49 -04:00
f53a7759e4 update versions 2023-07-10 15:16:06 -04:00
0566665a24 update version numbers 2023-07-10 15:03:20 -04:00
9d8da8b65a update version numbers 2023-07-10 15:02:54 -04:00
idk
cbf693dfb3 move more stuff out of makefiles and into scripts 2023-04-30 05:50:03 +00:00
idk
2b24239267 add torrent releaser script 2023-04-30 05:20:28 +00:00
idk
706ae974bc add download-back buildscript 2023-04-30 05:05:46 +00:00
idk
d7544ced5f Remove redundant clean 2023-04-28 20:36:36 +00:00
idk
ec44c0f6e3 remove redundant clean 2023-04-28 20:35:34 +00:00
idk
10fe05066c use powershell before which wget in wget finder function 2023-04-24 16:28:29 +00:00
idk
a5c7bac581 zip in release upload 2023-04-22 15:33:40 +00:00
idk
7eeb2e4523 add release uploader script 2023-04-22 06:14:05 +00:00
idk
9cae0f78ad add release uploader script 2023-04-22 06:06:11 +00:00
idk
99438cfc33 fix changelog date 2023-04-22 06:00:58 +00:00
idk
eba4ebe3d0 remove last few references to wsl 2023-04-22 05:50:24 +00:00
idk
7f24838725 ShellExecAsUser is not required for installers that do not run as admin, this installer is adminless 2023-04-19 03:30:06 +00:00
idk
673725304c ShellExecAsUser is not required for installers that do not run as admin, this installer is adminless 2023-04-19 02:13:43 +00:00
idk
7cf2bf455a fix licenses path on windows 2023-04-19 02:05:22 +00:00
idk
d177435b50 work around makensis path issues 2023-04-19 01:34:29 +00:00
idk
33fb6ab6d5 work around makensis path issues 2023-04-19 01:33:05 +00:00
idk
29827366fb work around makensis path issues 2023-04-19 01:30:01 +00:00
idk
edfe44bc3b work around makensis path issues 2023-04-19 01:26:11 +00:00
idk
432e2c54f8 bump version 2023-04-19 01:25:02 +00:00
idk
8894c946bc work around makensis path issues 2023-04-19 01:16:51 +00:00
idk
bc9b4a0250 use invoke-webrequest instead of wget on windows 2023-04-19 00:01:20 +00:00
idk
35841c7887 fix positional args for wsl-free build 2023-04-18 23:14:09 +00:00
idk
e3afb9de1d fix paths for wsl-free windows build 2023-04-18 23:03:48 +00:00
idk
3b11def66c fix paths for wsl-free windows build 2023-04-18 22:54:12 +00:00
idk
e152513043 Work around absence of wget, lessens requirement of wsl 2023-04-18 22:35:26 +00:00
idk
81dd3ed5ef update config file, automatically determine JAVA_HOME from java in path, automatically find apache ant 2023-04-18 20:28:41 +00:00
idk
0630f77a4c update .gitignore 2023-04-18 20:16:34 +00:00
idk
204fda1a11 Remove i2pbrowser-jpackage file 2023-04-18 20:14:33 +00:00
idk
9e1ef2d546 Remove i2pbrowser-jpackage file 2023-04-18 20:14:25 +00:00
idk
688bc1b0f3 update from 2.2.0 to 2.2.1 2023-04-18 20:10:10 +00:00
idk
dd566165dd update from -19 to -20 2023-04-18 20:07:41 +00:00
36 changed files with 1012 additions and 709 deletions

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
* -text

118
.github/workflows/ant.yml vendored Normal file
View File

@ -0,0 +1,118 @@
name: Java CI
on: [push]
jobs:
nsis:
runs-on: windows-latest
steps:
- uses: Vampire/setup-wsl@v3
with:
distribution: Ubuntu-20.04
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
git config --global user.email "github@i2p.net"
git config --global user.name "eyedeekay Github CI Build"
- uses: actions/checkout@v4
- run: wsl apt-get update
- run: wsl apt-get install -y nsis nsis-common nsis-pluginapi wget dos2unix curl jq gpg gettext
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: build with script
run: bash -c "./buildscripts/unsigned.sh; ls *.exe"
- name: Upload I2P-Easy-Install-Bundle-unsigned.exe
uses: actions/upload-artifact@v4
with:
name: I2P-Easy-Install-Bundle-unsigned.exe
path: I2P-Easy-Install-Bundle-*.exe
buildjpackagexe:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: build with script
run: bash -c "./buildscripts/exe.sh; ls *.exe"
- name: Upload I2P-Easy-Install-Bundle-unsigned.exe
uses: actions/upload-artifact@v4
with:
name: I2P-EXE-unsigned.exe
path: I2P-EXE-*.exe
buildjpackagmsi:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: build with script
run: bash -c "./buildscripts/msi.sh; ls *.msi"
- name: Upload I2P-Easy-Install-Bundle-unsigned.msi
uses: actions/upload-artifact@v4
with:
name: I2P-MSI-unsigned.msi
path: I2P-MSI-*.msi
buildzip:
runs-on: windows-latest
steps:
- uses: Vampire/setup-wsl@v3
with:
distribution: Ubuntu-20.04
- name: Set git to use LF
run: |
git config --global core.autocrlf false
git config --global core.eol lf
git config --global user.email "github@i2p.net"
git config --global user.name "eyedeekay Github CI Build"
- uses: actions/checkout@v4
- run: wsl apt-get update
- 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
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- name: build with script
run: bash -c "./buildscripts/zip.sh; ls -d * */* "
- name: Upload I2P-windows-portable.zip
uses: actions/upload-artifact@v4
with:
name: I2P-windows-portable.zip
path: I2P-windows-portable.zip
buildtgz:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
- run: |
sudo apt-get update
sudo apt-get install -y nsis nsis-common nsis-pluginapi wget dos2unix curl jq gpg gettext
- name: build with script
run: ./buildscripts/targz.sh; ls *.tar.gz
- name: Upload I2P.tar.gz
uses: actions/upload-artifact@v4
with:
name: I2P.tar.gz
path: I2P.tar.gz

90
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,90 @@
name: Release
#on: [push]
on:
push:
# Sequence of patterns matched against refs/tags
tags:
- 'i2p-firefox-*.*.*' # Release i2p-firefox-1.2.3
- 'i2p-firefox-*.*.*-*' # Release i2p-firefox-1.2.3
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: |
changelog.txt
sparse-checkout-cone-mode: false
- name: sleep 15 minutes
run: |
echo "sleeping 20 minutes to wait for artifacts"
sleep 1m
echo "sleeping 19 minutes to wait for artifacts"
sleep 1m
echo "sleeping 18 minutes to wait for artifacts"
sleep 1m
echo "sleeping 17 minutes to wait for artifacts"
sleep 1m
echo "sleeping 16 minutes to wait for artifacts"
sleep 1m
echo "sleeping 15 minutes to wait for artifacts"
sleep 1m
echo "sleeping 14 minutes to wait for artifacts"
sleep 1m
echo "sleeping 13 minutes to wait for artifacts"
sleep 1m
echo "sleeping 12 minutes to wait for artifacts"
sleep 1m
echo "sleeping 11 minutes to wait for artifacts"
sleep 1m
echo "sleeping 10 minutes to wait for artifacts"
sleep 1m
echo "sleeping 9 minutes to wait for artifacts"
sleep 1m
echo "sleeping 8 minutes to wait for artifacts"
sleep 1m
echo "sleeping 7 minutes to wait for artifacts"
sleep 1m
echo "sleeping 6 minutes to wait for artifacts"
sleep 1m
echo "sleeping 5 minutes to wait for artifacts"
sleep 1m
echo "sleeping 4 minutes to wait for artifacts"
sleep 1m
echo "sleeping 3 minutes to wait for artifacts"
sleep 1m
echo "sleeping 2 minutes to wait for artifacts"
sleep 1m
echo "sleeping 1 minutes to wait for artifacts"
sleep 1m
- name: Download artifacts
id: download-artifact
uses: dawidd6/action-download-artifact@v3
with:
skip_unpack: true
workflow: ant.yml
if_no_artifact_found: fail
# remove .zip file extension
- run: for f in *.zip; do unzip "$f"; rm "$f"; done
- run: echo "" | tee -a changelog.txt
- run: echo "## Checksums" | tee -a changelog.txt
- run: echo "" | tee -a changelog.txt
- run: echo '```' | tee -a changelog.txt
- run: sha256sum * | tee -a changelog.txt
- run: echo '```' | tee -a changelog.txt
- run: echo "" | tee -a changelog.txt
- run: echo '```' | tee -a changelog.txt
- run: file * | tee -a changelog.txt
- run: echo '```' | tee -a changelog.txt
- run: echo "" | tee -a changelog.txt
- run: cat docs/RELEASE.md changelog.txt > RELEASE.md
- name: Upload artifacts
uses: ncipollo/release-action@v1
with:
artifacts: "*"
bodyFile: "RELEASE.md"

5
.gitignore vendored
View File

@ -25,4 +25,7 @@ config_override.sh
i2pkeys
onionkeys
tlskeys
tmp
tmp
/.stfolder/
/.vscode/
*github-release-config*.sh*

46
Dockerfile Normal file
View File

@ -0,0 +1,46 @@
FROM debian:sid
## Originally found at: https://yusuke.blog/2021/10/19/3149 and updated to Java 20.
## This does not work yet.
RUN dpkg --add-architecture i386
RUN apt-get update
RUN apt-get install -y curl fakeroot unzip gnupg dos2unix make nsis* dos2unix curl jq
# install JDK
RUN curl --output /opt/java20.zip https://download.java.net/java/GA/jdk20.0.1/b4887098932d415489976708ad6d1a4b/9/GPL/openjdk-20.0.1_windows-x64_bin.zip \
&& cd /opt/ \
&& unzip java20.zip \
&& rm java20.zip
ENV JAVA_HOME /opt/jdk-20.0.1
# install Wine
RUN apt-get update
RUN apt install --install-recommends wine wine64* wine-binfmt fonts-wine -y
RUN wine --version
RUN wine wineboot --init
# install WIX TOOLSET
RUN mkdir /opt/wix311 \
&& cd /opt/wix311 \
&& curl -L --output /opt/wix311/wix311.zip https://github.com/wixtoolset/wix3/releases/download/wix3112rtm/wix311-binaries.zip \
&& unzip wix311.zip \
&& rm wix311.zip
# WIX TOOLSET is requring .NET.
RUN curl --output winetricks https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks &&\
chmod +x winetricks && \
mv -v winetricks /usr/local/bin
# DONNO why dotnet48 installation fails with "warning: exit status 5 - user selected 'Cancel' "
# https://forum.winehq.org/viewtopic.php?f=8&t=35724
#ENV WINEPREFIX=/dotnet-test
#RUN /usr/local/bin/winetricks --optout -q dotnet48
ENV WINEPATH /opt/jdk-20.0.1/bin\;/opt/wix311
WORKDIR /root
COPY . /root
RUN echo "wine /opt/jdk-20.0.1/bin/jpackage.exe $@" > /opt/jdk-20.0.1/bin/jpackage
RUN chmod +x /opt/jdk-20.0.1/bin/jpackage
CMD ./buildscripts/build.sh

View File

@ -14,29 +14,19 @@ all: version install.exe
fmt:
find . -name '*.java' -exec clang-format -i {} \;
tag:
git tag $(PROFILE_VERSION)
version:
./buildscripts/version.sh
jpackage: version I2P build/I2P/config all
jpackage: version I2P build/I2P all
help: version
@echo "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)"
@echo "$(SIGNER)"
@echo "$(I2P_VERSION)"
@echo "$(MAJOR).$(MINOR).$(BUILD)"
@echo "$(preset)"
prep:
install.exe:
./buildscripts/nsis.sh
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
export PKG_DIR="../i2p.i2p.jpackage-build/pkg-temp"
#export I2P_JBIGI="../i2p.i2p.jpackage-build/installer/lib/jbigi"
./buildscripts/unsigned.sh
distclean: clean
rm -rf I2P
@ -45,10 +35,9 @@ I2P:
./buildscripts/build.sh
build/I2P: I2P build
cp -v I2P build/I2P
src/I2P/config:
build/I2P/config: src/I2P/config build/I2P
build/I2P: build/I2P
#
# Warning: a displayed license file of more than 28752 bytes
@ -65,38 +54,3 @@ build:
@echo "creating build directory"
mkdir -p build
include makefiles/su.mk
include makefiles/su-unsigned.mk
I2P_DATE=`date +%Y-%m-%d`
MAGNET=`bttools torrent dumpinfo i2pwinupdate.su3.torrent | grep 'Magnet' | sed 's|Magnet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
MAGNET_TESTING=`bttools torrent dumpinfo i2pwinupdate-testing.su3.torrent | grep 'MagNet' | sed 's|MagNet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
magnet:
echo "$(MAGNET)"
BLANK=`awk '! NF { print NR; exit }' changelog.txt`
I2P.zip: I2P-jpackage-windows-$(I2P_VERSION).zip
I2P-jpackage-windows-$(I2P_VERSION).zip:
sh -c 'powershell Compress-Archive I2P I2P-jpackage-windows-$(I2P_VERSION).zip || zip I2P-jpackage-windows-$(I2P_VERSION).zip -r I2P'
changelog:
head -n "$(BLANK)" changelog.txt
release-jpackage: I2P-jpackage-windows-$(I2P_VERSION).zip
head -n "$(BLANK)" changelog.txt | gothub release -p -u eyedeekay -r i2p -t i2p-jpackage-windows-$(I2P_VERSION) -n i2p-jpackage-windows-$(I2P_VERSION) -d -; true
update-release-jpackage:
head -n "$(BLANK)" changelog.txt | gothub edit -p -u eyedeekay -r i2p -t i2p-jpackage-windows-$(I2P_VERSION) -n i2p-jpackage-windows-$(I2P_VERSION) -d -; true
delete-release-jpackage:
gothub delete -u eyedeekay -r i2p -t i2p-jpackage-windows-$(I2P_VERSION); true
upload-release-jpackage:
gothub upload -R -u eyedeekay -r i2p -t i2p-jpackage-windows-$(I2P_VERSION) -n "i2p-jpackage-windows-$(I2P_VERSION)" -f "./I2P-jpackage-windows-$(I2P_VERSION).zip"
jpackage-release: release-jpackage upload-release-jpackage

View File

@ -1,5 +1,5 @@
I2P Easy-Install Bundle for Windows(Also/formerly)I2P Browsing Profile for Firefox
==================================================================================
I2P Easy-Install Bundle for Windows, (Formerly)I2P Browsing Profile for Firefox
===============================================================================
Features:
---------
@ -13,6 +13,13 @@ Features:
Build Dependencies:
-------------------
**SHORTCUT:** All the build artifacts can be produced by the description in the `.yaml` files in `.github/workflows`.
These can be run on Github's infrastructure, or on a local(Windows) PC using https://github.com/nektos/act.
Doing things this way deals with all the dependency issues that Windows doesn't really give you a good way to deal with automatically.
It also guarantees that the same base container and environment gets used for every build no matter what machine it runs on.
I highly recommend you use either Github CI or `nektos/act` for dev builds of this software, as it **automates literally every one of the steps**.
CI-based builds follow the `WSL` version of the instructions.
To build this, you will need the following software packages
(all available in Debian and Ubuntu, see WSL section below):
@ -166,8 +173,6 @@ set up and you're using git bash, that is enough to make the scripts compatible
cd i2p.firefox
./buildscripts/unsigned.sh
6. Run `make` to build the installer.
Doing a Release
---------------
@ -180,53 +185,7 @@ bundle is Zlatinb. Standard Windows signing tools are used.
./release.sh
```
produces the binary.
Building a signed update file
-----------------------------
Building a signed update file for automatically updating a Windows I2P router
requires you to either be using linux, or have Go installed in your Cygwin or WSL environment.
On Linux(Where I sign the su3 files), this works:
make su3
to run the signing tool if necessary and then package the installer in a
signed update file.
Docker Support
--------------
**MOVED, DEPRECATION NOTICE:** Most of this functionality has been moved
to http://git.idk.i2p/idk/i2p.plugins.firefox which is more stable,
easier to build and use, and easier to incorporate into other
projects.
- https://git.idk.i2p/idk/i2p.plugins.firefox/-/blob/main/docker.sh
Unix Support
------------
**MOVED. DEPRECATION NOTICE:** Most of this functionality has been moved
to http://git.idk.i2p/idk/i2p.plugins.firefox which is more stable,
easier to build and use, and easier to incorporate into other
projects. It is the better option for nearly every non-Windows case
right now. You can get binary packages from:
- https://github.com/eyedeekay/i2p.plugins.firefox/releases
or look at
- https://i2pgit.org/idk/i2p.plugins.firefox/-/blob/master/PACKAGES.md
for instructions on how to build your own packages. These packages are
unofficial! Although I do dogfood most of them and the `.jar` gets thorough
testing.
**The only remotely interesting Unix functionality that remains in this**
**repository is the construction of a portable. You can use `targz.sh` to**
**generate that. Once generated, `cd I2P && ./lib/torbrowser.sh` to complete**
**setup, and `./bin/I2P` to run it.**
produces the binary and the su3.
Issues
------

View File

@ -7,7 +7,7 @@ cd "$SCRIPT_DIR" || exit 1
. ./config.sh
. ./i2pversion
./build.sh
./buildscripts/build.sh
jpackage --name I2P-EXE --app-version "$I2P_VERSION" \
--verbose \
--java-options "-Xmx512m" \

View File

@ -95,15 +95,25 @@ mkdir -p "$SCRIPT_DIR/build"
cp "$I2P_JARS"/*.jar "$SCRIPT_DIR/build"
cp "$I2P_JBIGI_JAR" "$SCRIPT_DIR/build"
if [ ! -f "$SCRIPT_DIR/build/jna.jar" ]; then
wget -O "$SCRIPT_DIR/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
echo "downloading jna"
wget_download "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar" -O "$SCRIPT_DIR/build/jna.jar"
fi
if [ ! -f "$SCRIPT_DIR/build/jna-platform.jar" ]; then
wget -O "$SCRIPT_DIR/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
echo "downloading jna-platform"
wget_download "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar" -O "$SCRIPT_DIR/build/jna-platform.jar"
fi
if [ ! -f "$SCRIPT_DIR/build/i2pfirefox.jar" ]; then
wget -O "$SCRIPT_DIR/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
if [ ! -f "$SCRIPT_DIR/build/i2pfirefox.zip" ]; then
echo "downloading i2pfirefox jars"
wget_download "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/plugin.zip" -O "$SCRIPT_DIR/build/i2pfirefox.zip"
fi
if [ ! -d "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox" ]; then
mkdir -p "$SCRIPT_DIR/build/I2P/config/plugins/"
unzip "$SCRIPT_DIR/build/i2pfirefox.zip" -d "$SCRIPT_DIR/build/I2P/config/plugins/"
rm -rf "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
mv "$SCRIPT_DIR/build/I2P/config/plugins/plugin" "$SCRIPT_DIR/build/I2P/config/plugins/i2pfirefox"
fi
for dll in "$I2P_JBIGI/"*windows*.dll; do
@ -111,10 +121,12 @@ for dll in "$I2P_JBIGI/"*windows*.dll; do
done
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/WindowsServiceUtil.java \
net/i2p/router/WindowsUpdatePostProcessor.java \
net/i2p/router/WindowsAppUtil.java \
net/i2p/router/I2PAppUtil.java \
net/i2p/router/WinUpdatePostProcessor.java \
net/i2p/router/WinLauncher.java \
net/i2p/router/WinUpdateProcess.java \
net/i2p/router/ZipUpdateProcess.java

65
buildscripts/news.sh Executable file
View File

@ -0,0 +1,65 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/i2pversion"
if [ -f i2pversion_override ]; then
. "$SCRIPT_DIR/i2pversion_override"
fi
. "$SCRIPT_DIR/config.sh"
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
. "$SCRIPT_DIR/config_override.sh"
fi
if [ -z "$I2P_NEWSXML" ]; then
if [ -d "../i2p.newsxml" ]; then
export I2P_NEWSXML="../i2p.newsxml"
else
echo "i2p.newsxml is not in the parent directory and I2P_NEWSXML is unset"
exit 1
fi
fi
cd "$I2P_NEWSXML" || exit 1
export TITLE="Easy-Install for Windows Release $I2P_VERSION"
echo "$TITLE"
export AUTHOR=idk
echo "$AUTHOR"
export EDITOR=true
echo "canceled manual editor"
export I2P_OS=win
echo "$I2P_OS"
export I2P_BRANCH=beta
echo "$I2P_VERSION"
export SUMMARY_HERE=$(head -n 1 "$SCRIPT_DIR/docs/RELEASE.md" | sed "s|# ||g")
echo "$SUMMARY_HERE"
export CONTENT_HERE=$(tail -n +2 "$SCRIPT_DIR/docs/RELEASE.md" | markdown)
echo "$CONTENT_HERE"
./create_new_entry.sh
export DATE=$(date +%Y-%m-%d)
echo "$DATE"
MAGNET=$(transmission-show -m "$SCRIPT_DIR/i2pwinupdate.su3.torrent" 2>&1 3>&1 | tail -n 1)
TORRENTJSON='['
TORRENTJSON+=' {'
TORRENTJSON+=" \"date\": \"$DATE\","
TORRENTJSON+=" \"version\": \"$I2P_VERSION\","
TORRENTJSON+=" \"minVersion\": \"1.5.0\","
TORRENTJSON+=" \"minJavaVersion\": \"1.8\","
TORRENTJSON+=" \"updates\": {"
TORRENTJSON+=" \"su3\": {"
TORRENTJSON+=" \"torrent\": \"$MAGNET\","
TORRENTJSON+=" \"url\": ["
TORRENTJSON+=" \"http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3\""
TORRENTJSON+=' ]'
TORRENTJSON+=' }'
TORRENTJSON+=' }'
TORRENTJSON+=' }'
TORRENTJSON+=']'
echo "$TORRENTJSON" | jq

View File

@ -15,12 +15,7 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
. "$SCRIPT_DIR/config_override.sh"
fi
MAKENSIS=$(which makensis)
if [ -z "$MAKENSIS" ]; then
MAKENSIS="wsl makensis"
fi
cp "$SCRIPT_DIR"/src/nsis/*.nsi "$SCRIPT_DIR"/build
cp "$SCRIPT_DIR"/src/nsis/*.nsh "$SCRIPT_DIR"/build
cp "$SCRIPT_DIR"/src/icons/*.ico "$SCRIPT_DIR"/build
cd "$SCRIPT_DIR"/build && $MAKENSIS i2pbrowser-installer.nsi && cp I2P-Easy-Install-Bundle-*.exe ../ && echo "built windows installer"
cd "$SCRIPT_DIR"/build && makensisi i2pbrowser-installer.nsi && cp I2P-Easy-Install-Bundle-*.exe ../ && echo "built windows installer"

View File

@ -0,0 +1,42 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/i2pversion"
if [ -f i2pversion_override ]; then
. "$SCRIPT_DIR/i2pversion_override"
fi
mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
. "$SCRIPT_DIR/config.sh"
### How to set up this script:
#
# This script will not work unless you give it a Github API key.
# You need to create a file in your $HOME directory, which on
# Windows will by /c/Users/yourusername, called github-release-config.sh,
# containing this key as the variable GITHUB_TOKEN.
# github-release-config.sh must also contain:
# GITHUB_USERNAME=your github username
. "$HOME/github-release-config.sh"
if [ -f ./i2pversion_override ]; then
. ./i2pversion_override
fi
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -t "$I2P_VERSION"
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -t "$I2P_VERSION"
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$I2P_VERSION"
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$I2P_VERSION"
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p.i2p.jpackage-build.tar.gz" -t "$I2P_VERSION"
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p.i2p.jpackage-build.tar.gz" -t "$I2P_VERSION"
echo github-release download -u "$GITHUB_USERNAME" -r i2p -t "$I2P_VERSION" -n "./I2P-jpackage-windows-$I2P_VERSION.zip"
github-release download -u "$GITHUB_USERNAME" -r i2p -t "$I2P_VERSION" -n "./I2P-jpackage-windows-$I2P_VERSION.zip"

50
buildscripts/release-support.sh Executable file
View File

@ -0,0 +1,50 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/i2pversion"
if [ -f i2pversion_override ]; then
. "$SCRIPT_DIR/i2pversion_override"
fi
mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
. "$SCRIPT_DIR/config.sh"
### How to set up this script:
#
# This script will not work unless you give it a Github API key.
# You need to create a file in your $HOME directory, which on
# Windows will by /c/Users/yourusername, called github-release-config.sh,
# containing this key as the variable GITHUB_TOKEN.
# github-release-config.sh must also contain:
# GITHUB_USERNAME=your github username
. "$HOME/github-release-config.sh"
if [ -f ./i2pversion_override ]; then
. ./i2pversion_override
fi
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2pwinupdate.su3" -t "$I2P_VERSION"
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2pwinupdate.su3" -t "$I2P_VERSION"
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2pwinupdate.su3.torrent" -t "$I2P_VERSION"
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2pwinupdate.su3.torrent" -t "$I2P_VERSION"
if [ ! -z "$I2P_SNARK_DIR" ]; then
if [ "$I2P_SNARK_DIR" = "$HOME/.i2p/i2psnark" ]; then
cp -v "i2pwinupdate.su3" "$I2P_SNARK_DIR"
cp -v "i2pwinupdate.su3.torrent" "$I2P_SNARK_DIR"
fi
if [ "$I2P_SNARK_DIR" = "$LOCALAPPDATA/i2p/i2psnark/" ]; then
cp -v "i2pwinupdate.su3" "$I2P_SNARK_DIR"
cp -v "i2pwinupdate.su3.torrent" "$I2P_SNARK_DIR"
fi
if [ "$I2P_SNARK_DIR" = "/var/lib/i2p/i2p-config/i2psnark/" ]; then
sudo cp -v "i2pwinupdate.su3" "$I2P_SNARK_DIR"
sudo cp -v "i2pwinupdate.su3.torrent" "$I2P_SNARK_DIR"
sudo chown i2psvc:i2psvc "$I2P_SNARK_DIR/i2pwinupdate.su3" "$I2P_SNARK_DIR/i2pwinupdate.su3.torrent"
fi
fi

44
buildscripts/release-torrent.sh Executable file
View File

@ -0,0 +1,44 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/i2pversion"
if [ -f i2pversion_override ]; then
. "$SCRIPT_DIR/i2pversion_override"
fi
mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
. "$SCRIPT_DIR/config.sh"
### How to set up this script:
#
# This script will not work unless you give it a Github API key.
# You need to create a file in your $HOME directory, which on
# Windows will by /c/Users/yourusername, called github-release-config.sh,
# containing this key as the variable GITHUB_TOKEN.
# github-release-config.sh must also contain:
# GITHUB_USERNAME=your github username
. "$HOME/github-release-config.sh"
if [ -f ./i2pversion_override ]; then
. ./i2pversion_override
fi
cp -v "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
java -cp "$I2P_LIBS/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe I2P-Easy-Install-Bundle-$I2P_VERSION-signed.su3 "$HOME/.i2p-plugin-keys/news-su3-keystore.ks" $I2P_VERSION $SIGNER
rm -f i2pwinupdate.su3.torrent
cp -v I2P-Easy-Install-Bundle-$I2P_VERSION-signed.su3 i2pwinupdate.su3
java -cp "$I2P_LIBS/*" "org.klomp.snark.Storage" -a http://tracker2.postman.i2p/announce.php -a http://w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa.b32.i2p/a -a http://mb5ir7klpc2tj6ha3xhmrs3mseqvanauciuoiamx2mmzujvg67uq.b32.i2p/a -c "$SIGNER" -m "Official torrent for Windows Easy-Install version $I2P_VERSION" i2pwinupdate.su3
echo "~~~~~~~~~~"
MAGNET=$(transmission-show -m "i2pwinupdate.su3.torrent" 2>&1 3>&1 | tail -n 1)
echo "$MAGNET"
ZIPCHECKSUM=$(sha256sum "i2pwinupdate.su3")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2pwinupdate.su3" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "i2pwinupdate.su3"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2pwinupdate.su3" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "i2pwinupdate.su3"
ZIPCHECKSUM=$(sha256sum "i2pwinupdate.su3.torrent")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2pwinupdate.su3.torrent" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "i2pwinupdate.su3.torrent"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "i2pwinupdate.su3.torrent" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "i2pwinupdate.su3.torrent"

73
buildscripts/release-upload.sh Executable file
View File

@ -0,0 +1,73 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
. "$SCRIPT_DIR/i2pversion"
if [ -f i2pversion_override ]; then
. "$SCRIPT_DIR/i2pversion_override"
fi
mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
. "$SCRIPT_DIR/config.sh"
### How to set up this script:
#
# This script will not work unless you give it a Github API key.
# You need to create a file in your $HOME directory, which on
# Windows will by /c/Users/yourusername, called github-release-config.sh,
# containing this key as the variable GITHUB_TOKEN.
# github-release-config.sh must also contain:
# GITHUB_USERNAME=your github username
git clean -fd
git checkout .
"$SCRIPT_DIR"/buildscripts/unsigned.sh
. "$HOME/github-release-config.sh"
if [ -f ./i2pversion_override ]; then
. ./i2pversion_override
fi
BLANK=$(awk '! NF { print NR; exit }' changelog.txt)
DESCRIPTION="Release build of i2p.firefox for $I2P_VERSION
==========================================================
$(head -n $BLANK changelog.txt)"
echo github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$I2P_VERSION" -d "$DESCRIPTION" -t "$I2P_VERSION"
github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$I2P_VERSION" -d "$DESCRIPTION" -t "$I2P_VERSION"
sleep 2s;
EXECHECKSUM=$(sha256sum "I2P-Easy-Install-Bundle-$I2P_VERSION.exe")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$I2P_VERSION" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$I2P_VERSION" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
powershell Compress-Archive -force I2P I2P.zip
ZIPCHECKSUM=$(sha256sum "I2P.zip")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "I2P.zip"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "I2P.zip"
TARCHECKSUM=$(sha256sum "../i2p.i2p.jpackage-build.tar.gz")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$I2P_VERSION" -n "i2p.i2p.jpackage-build.tar.gz"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$I2P_VERSION" -n "i2p.i2p.jpackage-build.tar.gz"
sh -c "powershell Compress-Archive I2P I2P-jpackage-windows-$I2P_VERSION.zip || zip I2P-jpackage-windows-$I2P_VERSION.zip -r I2P"
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p-jpackage-windows-$I2P_VERSION.zip" -t "$I2P_VERSION" -f "./I2P-jpackage-windows-$I2P_VERSION.zip"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p-jpackage-windows-$I2P_VERSION.zip" -t "$I2P_VERSION" -f "./I2P-jpackage-windows-$I2P_VERSION.zip"
GITHUB_USERNAME=i2p
echo github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$I2P_VERSION" -d "$DESCRIPTION" -t "$I2P_VERSION"
github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$I2P_VERSION" -d "$DESCRIPTION" -t "$I2P_VERSION"
sleep 2s;
EXECHECKSUM=$(sha256sum "I2P-Easy-Install-Bundle-$I2P_VERSION.exe")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$I2P_VERSION" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" -l "$EXECHECKSUM" -t "$I2P_VERSION" -n "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
powershell Compress-Archive -force I2P I2P.zip
ZIPCHECKSUM=$(sha256sum "I2P.zip")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "I2P.zip"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$I2P_VERSION" -n "I2P.zip"
TARCHECKSUM=$(sha256sum "../i2p.i2p.jpackage-build.tar.gz")
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$I2P_VERSION" -n "i2p.i2p.jpackage-build.tar.gz"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "../i2p.i2p.jpackage-build.tar.gz" -l "Upstream I2P Router source code $TARCHECKSUM" -t "$I2P_VERSION" -n "i2p.i2p.jpackage-build.tar.gz"
sh -c "powershell Compress-Archive I2P I2P-jpackage-windows-$I2P_VERSION.zip || zip I2P-jpackage-windows-$I2P_VERSION.zip -r I2P"
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p-jpackage-windows-$I2P_VERSION.zip" -t "$I2P_VERSION" -f "./I2P-jpackage-windows-$I2P_VERSION.zip"
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "i2p-jpackage-windows-$I2P_VERSION.zip" -t "$I2P_VERSION" -f "./I2P-jpackage-windows-$I2P_VERSION.zip"

View File

@ -10,7 +10,6 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
fi
export machine=unix
"$SCRIPT_DIR"/buildscripts/clean.sh
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
"$SCRIPT_DIR"/buildscripts/build.sh
cd "$SCRIPT_DIR/I2P" || exit 1

View File

@ -1,7 +1,7 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
cd "$SCRIPT_DIR" || cd ../ ; SCRIPT_DIR=$(pwd)
. "$SCRIPT_DIR/config.sh"
@ -10,6 +10,5 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
fi
"$SCRIPT_DIR"/buildscripts/clean.sh
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
"$SCRIPT_DIR"/buildscripts/build.sh
"$SCRIPT_DIR"/buildscripts/nsis.sh

View File

@ -18,9 +18,9 @@ fi
echo "!define VERSIONMAJOR $VERSIONMAJOR" > "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
echo "!define VERSIONMINOR $VERSIONMINOR" >> "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
echo "!define VERSIONBUILD $VERSIONBUILD" >> "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi
echo "!define I2P_VERSION $PROFILE_VERSION" > "$SCRIPT_DIR"/src/nsis/i2pbrowser-jpackage.nsi
echo "!define I2P_VERSION $I2P_VERSION" > "$SCRIPT_DIR"/src/nsis/i2pbrowser-jpackage.nsi
mkdir -p "$SCRIPT_DIR"/build
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
echo "$I2P_VERSION" > "$SCRIPT_DIR"/build/version.txt
echo "$I2P_VERSION" > "$SCRIPT_DIR"/build/version.txt
sed 's|!define VERSION||g' "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version

View File

@ -1,7 +1,7 @@
#! /usr/bin/env bash
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
cd "$SCRIPT_DIR" || exit 1
cd "$SCRIPT_DIR" || cd ../ ; SCRIPT_DIR=$(pwd)
. "$SCRIPT_DIR/config.sh"
@ -9,7 +9,6 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
. "$SCRIPT_DIR/config_override.sh"
fi
"$SCRIPT_DIR"/buildscripts/clean.sh
wsl "$SCRIPT_DIR"/buildscripts/clean.sh
"$SCRIPT_DIR"/buildscripts/build.sh
cd "$SCRIPT_DIR/I2P" || exit 1
@ -17,7 +16,8 @@ TORSOCKS=$(which torsocks)
if [ -f "${TORSOCKS}" ]; then
. "${TORSOCKS}" on
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")"
. "${TORSOCKS}" off
locale="en-US" # mention your locale. default = en-US
@ -29,5 +29,6 @@ rm -vrf "tor-browser_${locale}"
cd "$SCRIPT_DIR" || exit 1
rm -rf I2P-portable && cp -r I2P I2P-portable
#powershell Compress-Archive -force I2P-portable I2P-windows-portable.zip
zip -r I2P-windows-portable.zip I2P-portable
which zip && zip -r I2P-windows-portable.zip I2P-portable
which zip || powershell Compress-Archive -force I2P-portable I2P-windows-portable.zip

View File

@ -1,4 +1,4 @@
2022-01-23 idk
2023-01-23 idk
* Move build scripts to their own directory and make them use correct paths when moved
* Add EXTRA to router when generating embedded router jars.

View File

@ -5,24 +5,69 @@
uname=$(uname)
#export PATH="$PATH:/c/Program Files/Java/jdk-17.0.3/bin/"
#export JAVA_HOME="/c/Program Files/Java/jdk-17.0.3"
# to use it for Oracle OpenJDK18
# Third-party builders should always override this in config_override.sh
if [ -z "$SIGNER" ]; then
SIGNER=hankhill19580@gmail.com
export SIGNER=hankhill19580@gmail.com
fi
if [ -z "$I2P_LIBS" ]; then
if [ -d "$HOME/i2p/lib/" ]; then
I2P_LIBS="$HOME/i2p/lib/"
fi
if [ -d "$LOCALAPPDATA/i2p/lib/" ]; then
I2P_LIBS="$LOCALAPPDATA/i2p/lib/"
fi
if [ -d "/usr/share/i2p/lib/" ]; then
I2P_LIBS="/usr/share/i2p/lib/"
fi
fi
if [ -z "$I2P_SNARK_DIR" ]; then
if [ -d "$HOME/.i2p/i2psnark" ]; then
I2P_SNARK_DIR="$HOME/.i2p/i2psnark"
fi
if [ -d "$LOCALAPPDATA/i2p/i2psnark/" ]; then
I2P_SNARK_DIR="$LOCALAPPDATA/i2p/i2psnark/"
fi
if [ -d "/var/lib/i2p/i2p-config/i2psnark/" ]; then
I2P_SNARK_DIR="/var/lib/i2p/i2p-config/i2psnark/"
fi
fi
NSIS_PATH="/c/Program Files (x86)/NSIS/Bin"
PATH="$NSIS_PATH:$PATH:$NSIS_PATH/"
export PATH="$NSIS_PATH:$PATH:$NSIS_PATH/"
wget_download(){
which powershell && powershell Invoke-WebRequest $@ && return
wget $@
}
makensisi(){
which makensis && makensis $@ && return
which wsl && wsl makensis $@ && return
}
make_make(){
which make && make $@ && return
which wsl && wsl make $@ && return
}
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
export PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
JAVA_HOME="/c/Program Files/Java/jdk-19"
export JAVA_HOME="/c/Program Files/Java/jdk-19"
JAVA_HOME=$(java -XshowSettings:properties -version 2>&1 | findstr "java.home" | sed 's| java.home = ||g')
export JAVA_HOME="$JAVA_HOME"
PATH="$JAVA_HOME/bin/:$PATH:$JAVA_HOME/bin/"
export PATH="$JAVA_HOME/bin/:$PATH:$JAVA_HOME/bin/"
HOST=win32
export HOST=win32
fi
if [ "${uname}" != "Linux" ]; then
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
export PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
JAVA_HOME="/c/Program Files/Java/jdk-19"
export JAVA_HOME="/c/Program Files/Java/jdk-19"
JAVA_HOME=$(java -XshowSettings:properties -version 2>&1 | findstr "java.home" | sed 's| java.home = ||g')
export JAVA_HOME="$JAVA_HOME"
PATH="$JAVA_HOME/bin/:$PATH:$JAVA_HOME/bin/"
export PATH="$JAVA_HOME/bin/:$PATH:$JAVA_HOME/bin/"
HOST=win32
export HOST=win32
fi
@ -32,10 +77,10 @@ fi
## This isn't a default install location, obviously, it's where I unzipped it.
## It won't work for you unless you kurtly tell Windows that your name is `user`
## every time you make an account, like I do.
#PATH="/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19/bin/:$PATH:/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19/bin/"
#export PATH="/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19/bin/:$PATH:/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19/bin/"
#JAVA_HOME=/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19
#export JAVA_HOME=/c/Users/user/Downloads/openjdk-19_windows-x64_bin/jdk-19
#PATH="/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20/bin/:$PATH:/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20/bin/"
#export PATH="/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20/bin/:$PATH:/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20/bin/"
#JAVA_HOME=/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20
#export JAVA_HOME=/c/Users/user/Downloads/openjdk-20_windows-x64_bin/jdk-20
## Other potential values(NOT exhaustive):
@ -72,8 +117,17 @@ fi
# You can also use this to temporarily add applications into the PATH that are
# required to build this if you do not wish to edit your PATH across the entire
# Windows session, and for setting ANT_HOME
#export ANT_HOME="/c/apache-ant-1.10.9"
#export PATH="$PATH:$ANT_HOME/bin/"
if [ -d "/c/apache-ant-"* ]; then
ANT_HOME=$(ls -d /c/apache-ant-*)
export ANT_HOME="$ANT_HOME"
export PATH="$PATH:$ANT_HOME/bin/"
fi
if [ -d "/c/mktorrent"* ]; then
MKTORRENT_HOME=$(ls -d /c/mktorrent*)
export MKTORRENT_HOME="$MKTORRENT_HOME"
export PATH="$PATH:$MKTORRENT_HOME/bin/"
fi
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"

33
docs/RELEASE.md Normal file
View File

@ -0,0 +1,33 @@
# I2P Easy-Install Bundle for Windows 2.4.9
This is a pre-release of the I2P Easy-Install Bundle for Windows.
This changes how the I2P bundle and browser profile manager are installed and integrated with the host system.
The Easy-Install bundle is now a "portable" system that can be moved to different locations within or between Windows file-systems while retaining all built-in functionality.
A shortcut for starting the I2P router is still provided by the installer for convenience, but the shortcuts for starting the I2P Browser are now integrated with the I2P desktop UI.
The browser profile manager itself has been split away from the monolithic I2P router+Java/jpackage, and moved into an I2P plugin managed by the router.
While this was done primarily to reduce how complex the existing code was, this also results in behavior which is closer to the main distribution of I2P for Windows and will lead to a more flexible installer, which can bundle additional default plugins and may be suitable for installation as a Windows service.
I2P Plugins can also be updated independently of the router that hosts them, so it will be possible to update the browser profile manager independently of the router itself.
It also means that the browser profile manager can be un-installed by uninstalling the plugin, and much more importantly that the browser profile manager is now compatible with all Java I2P distributions.
**Why a dev build 3 weeks before the release?**
By further delineating the components of the bundle, these changes also affected how the release process happens.
In particular the build process of each component has been encapsulated in a CI description which can be reproduced on a local PC.
This simplifies and automates the build process by ensuring that up-to-date build tools are installed in a brand-new container for every build.
In effect this should speed up the release process for I2P Easy-Install for Windows considerably.
This release is a test-run of the new process, so I can document what is going on.
It breaks down roughly like this:
- It takes ~22 minutes to compile all the targets for the `i2p.plugins.firefox` and make the resulting artifacts available. During this process, I must insert 1 HSM and enter 1 password. (This part used to be about 30 steps, now it takes 1)
- It takes ~22 minutes to compile all the targets for the `i2p.firefox` project and make the resulting artifacts available. This process produces only unsigned artifacts identified by their hashes, and is non-interactive. (This part used to be around 60 steps the first time, and 40 steps each additional time)
- `i2p.firefox` updates are signed in their `.su3` form. The `NSIS`-powered `.exe` installer is the current updater. The next step is to sign *just this installer* and generate a torrent of the result. (This process used to depend on the previous build process and couldn't be done independently. Now it takes about 30 seconds)
- Generate and sign a newsfeed to notify the users of an update. This process is the only process that is **slower** when containerized, because there are dozens of feeds to be signed in their respective containers. It takes about an hour.
For you the end user, nothing much should change.
You'll get your updates a lot faster, and have more options available for testing.
The same installer is used for the updater, and the process is handled the same way.
However for developers, testers, and maintainers, this release will result in big changes for the better.
This release still embeds a `2.4.0` Java I2P router. No changes have been made to update the embedded router.
Network behavior will be unchanged until the official `2.5.0` release.

View File

@ -2,14 +2,25 @@
JNA_VERSION=5.12.1
export JNA_VERSION=5.12.1
I2PFIREFOX_VERSION=1.0.9
export I2PFIREFOX_VERSION=1.0.9
# Comment this out to build from an alternate branch or
# the tip of the master branch.
VERSIONMAJOR=2
VERSIONMINOR=2
VERSIONBUILD=0
I2PFIREFOX_VERSION=1.4.991
export I2PFIREFOX_VERSION=1.4.991
export GITHUB_TAG=$(git describe --tags --abbrev=0 | sed 's|i2p||g' | tr -d [a-z-])
VERSIONMAJOR=$(echo "$GITHUB_TAG" | cut -d . -f 1)
VERSIONMINOR=$(echo "$GITHUB_TAG" | cut -d . -f 2)
VERSIONBUILD=$(echo "$GITHUB_TAG" | cut -d . -f 3)
if [ -z "$VERSIONBUILD" ]; then
VERSIONBUILD=2
fi
if [ -z "$VERSIONMINOR" ]; then
VERSIONMINOR=4
fi
if [ -z "$VERSIONMAJOR" ]; then
VERSIONMAJOR=0
fi
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
VERSION=i2p-2.2.0
export VERSION=i2p-2.2.0
# Comment this out to build from an alternate branch or
# the tip of the master branch.
VERSION=i2p-2.4.0
export VERSION=i2p-2.4.0

View File

@ -9,26 +9,14 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import net.i2p.util.Log;
public class CopyConfigDir extends WindowsServiceUtil {
final Logger logger = Logger.getLogger("configlog");
public class CopyConfigDir extends I2PAppUtil {
final Log logger;
public void initLogger() {
try {
// 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 CopyConfigDir(RouterContext ctx) {
logger = ctx.logManager().getLog(CopyConfigDir.class);
}
public boolean copyDirectory(String baseDir, String workDir) {
@ -73,7 +61,7 @@ public class CopyConfigDir extends WindowsServiceUtil {
try {
jpackagedConfigsInUse.createNewFile();
} catch (IOException e) {
logger.warning(
logger.warn(
"Error creating jpackaged file, delete config files manually when uninstalling");
}
}
@ -128,164 +116,19 @@ public class CopyConfigDir extends WindowsServiceUtil {
out.close();
return 1;
} catch (Throwable e) {
logger.warning(e.toString());
logger.warning("failed to copy " + basePath.getAbsolutePath() + " to " +
workPath.getAbsolutePath());
logger.warn(e.toString());
logger.warn("failed to copy " + basePath.getAbsolutePath() + " to " +
workPath.getAbsolutePath());
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() {
File appImageConfigDir = appImageConfig();
File appImageHomeDir = selectHome();
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
*
@ -299,7 +142,7 @@ public class CopyConfigDir extends WindowsServiceUtil {
* @return
*/
protected File logFile(String p) {
File log = new File(selectProgramFile(), "logs");
File log = new File(selectHome(), "logs");
if (!log.exists())
log.mkdirs();
return new File(log, p);

View File

@ -0,0 +1,106 @@
package net.i2p.router;
import java.io.File;
import java.io.IOException;
import javax.swing.JOptionPane;
public class I2PAppUtil extends WindowsAppUtil {
public String ServiceUpdaterString() {
return "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.su3";
}
public String ServiceBackupUpdaterString() {
return "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news.su3";
}
public String ServiceStaticUpdaterString() {
return "http://echelon.i2p/i2p/i2pupdate.sud,http://stats.i2p/i2p/i2pupdate.sud";
}
public String getProgramFilesInstall() {
String programFiles = System.getenv("PROGRAMFILES");
if (programFiles != null) {
File programFilesI2P = new File(programFiles, "i2p/i2p.exe");
if (programFilesI2P.exists())
return programFilesI2P.getAbsolutePath();
}
String programFiles86 = System.getenv("PROGRAMFILES86");
if (programFiles86 != null) {
File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe");
if (programFiles86I2P.exists())
return programFiles86I2P.getAbsolutePath();
}
return null;
}
public boolean checkProgramFilesInstall() {
String programFiles = System.getenv("PROGRAMFILES");
if (programFiles != null) {
File programFilesI2P = new File(programFiles, "i2p/i2p.exe");
if (programFilesI2P.exists())
return true;
}
String programFiles86 = System.getenv("PROGRAMFILES86");
if (programFiles86 != null) {
File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe");
if (programFiles86I2P.exists())
return true;
}
return false;
}
public boolean promptUserInstallStartIfAvailable() {
if (osName() != "windows") {
return true;
}
if (checkProgramFilesInstall()) {
int a;
String message =
"It appears you have an existing, unbundled I2P rotuer installed.\n";
message +=
"However, it is not running yet. Please start it using the shortcut on the desktop.\n";
message +=
"If you click \"No\", the Easy-Install router will be launched instead.\n";
a = JOptionPane.showConfirmDialog(null, message,
"I2P Service detected not running",
JOptionPane.YES_NO_OPTION);
if (a == JOptionPane.NO_OPTION) {
// Do nothing here, this will continue on to launch a jpackaged router
return true;
} else {
try {
String pfi = getProgramFilesInstall();
if (pfi != null)
Runtime.getRuntime().exec(new String[] {pfi});
} catch (IOException e) {
return false;
}
return true;
}
}
return true;
}
/**
* 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) {
// get the name of the aih directory itself, which will be the default
// name of the executable as well
String baseName = "I2P";
switch (osName()) {
case "windows":
return baseName + ".exe";
case "mac":
case "linux":
return "./bin/" + baseName;
}
}
return null;
}
}

View File

@ -5,18 +5,14 @@ import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
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.crypto.*;
import net.i2p.i2pfirefox.*;
import net.i2p.router.Router;
import net.i2p.router.RouterLaunch;
import net.i2p.update.*;
import net.i2p.update.UpdateManager;
import net.i2p.update.UpdatePostProcessor;
import net.i2p.update.UpdateType.*;
import net.i2p.util.Log;
/**
* Launches a router from %WORKINGDIR%/I2P using configuration data in
@ -28,65 +24,14 @@ import net.i2p.update.UpdateType.*;
* appdata
* router.pid - the pid of the java process.
*/
public class WinLauncher extends CopyConfigDir {
WindowsUpdatePostProcessor wupp = null;
public class WinLauncher extends I2PAppUtil {
private final CopyConfigDir copyConfigDir;
WinUpdatePostProcessor wupp = null;
private Router i2pRouter;
public static void main(String[] args) {
var launcher = new WinLauncher();
launcher.setupLauncher();
launcher.initLogger();
int privateBrowsing = 0;
boolean usabilityMode = false;
boolean chromiumFirst = false;
int proxyTimeoutTime = 200;
ArrayList<String> newArgsList = new ArrayList<String>();
if (args != null) {
if (args.length > 0) {
for (String arg : args) {
if (arg.equals("-private")) {
privateBrowsing = 1;
launcher.logger.info(
"Private browsing is true, profile will be discarded at end of session.");
} else if (arg.equals("-chromium")) {
chromiumFirst = true;
launcher.logger.info("Chromium will be selected before Firefox.");
} else if (arg.equals("-usability")) {
usabilityMode = true;
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();
private final Log logger;
public WinLauncher() {
File programs = programFile();
File home = homeDir();
System.setProperty(
"i2p.dir.base",
@ -101,42 +46,42 @@ public class WinLauncher extends CopyConfigDir {
* to find the JVM and Runtime bundle. This broke Windows 11 installs.
*/
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("i2p.dir.base"));
launcher.logger.info("\t" + System.getProperty("i2p.dir.config"));
launcher.logger.info("\t" + System.getProperty("router.pid"));
boolean continuerunning = launcher.promptServiceStartIfAvailable("i2p");
if (!continuerunning) {
launcher.logger.severe(
launcher.logger.error(
"Service startup failure, please start I2P service with services.msc");
System.exit(2);
}
continuerunning = launcher.promptUserInstallStartIfAvailable();
if (!continuerunning) {
launcher.logger.severe("User-install startup required.");
launcher.logger.error("User-install startup required.");
System.exit(2);
}
// This actually does most of what we use NSIS for if NSIS hasn't
// already done it, which essentially makes this whole thing portable.
if (!launcher.copyConfigDir()) {
launcher.logger.severe("Cannot copy the configuration directory");
if (!launcher.copyConfigDir.copyConfigDir()) {
launcher.logger.error("Cannot copy the configuration directory");
System.exit(1);
}
if (launcher.launchBrowser(privateBrowsing, usabilityMode, chromiumFirst,
proxyTimeoutTime, newArgsList)) {
System.exit(0);
}
launcher.i2pRouter =
new Router(launcher.routerConfig(), System.getProperties());
if (!launcher.isInstalled("i2p")) {
if (launcher.i2pRouter.saveConfig("routerconsole.browser", null)) {
launcher.logger.info("removed routerconsole.browser config");
}
if (launcher.i2pRouter.saveConfig("routerconsole.browser",
launcher.appImageExe() +
" -noproxycheck")) {
if (launcher.i2pRouter.saveConfig("routerconsole.browser", "NUL")) {
launcher.logger.info("updated routerconsole.browser config " +
launcher.appImageExe());
}
@ -148,8 +93,6 @@ public class WinLauncher extends CopyConfigDir {
registrationThread.setDaemon(true);
registrationThread.start();
launcher.setNotStarting();
launcher.i2pRouter.runRouter();
}
@ -161,11 +104,11 @@ public class WinLauncher extends CopyConfigDir {
}
private File programFile() {
File programs = selectProgramFile();
File programs = selectHome();
if (!programs.exists())
programs.mkdirs();
else if (!programs.isDirectory()) {
logger.warning(
logger.warn(
programs +
" exists but is not a directory. Please get it out of the way");
System.exit(1);
@ -178,7 +121,7 @@ public class WinLauncher extends CopyConfigDir {
if (!home.exists())
home.mkdirs();
else if (!home.isDirectory()) {
logger.warning(
logger.warn(
home +
" exists but is not a directory. Please get it out of the way");
System.exit(1);
@ -186,29 +129,6 @@ public class WinLauncher extends CopyConfigDir {
return home;
}
private boolean launchBrowser(int privateBrowsing, boolean usabilityMode,
boolean chromiumFirst, int proxyTimeoutTime,
ArrayList<String> newArgsList) {
if (i2pIsRunning()) {
logger.info("I2P is already running, launching an I2P browser");
I2PBrowser i2pBrowser = new I2PBrowser();
i2pBrowser.usability = usabilityMode;
i2pBrowser.chromiumFirst = chromiumFirst;
i2pBrowser.firefox = !chromiumFirst;
i2pBrowser.chromium = chromiumFirst;
if (chromiumFirst) {
logger.warning("favoring Chromium instead of Firefox");
}
i2pBrowser.setProxyTimeoutTime(proxyTimeoutTime);
System.out.println("I2PBrowser");
String[] newArgs = newArgsList.toArray(new String[newArgsList.size()]);
setNotStarting();
i2pBrowser.launch(privateBrowsing, newArgs);
return true;
}
return false;
}
// see
// https://stackoverflow.com/questions/434718/sockets-discover-port-availability-using-java
private boolean isAvailable(int portNr) {
@ -221,93 +141,6 @@ public class WinLauncher extends CopyConfigDir {
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 = () -> {
RouterContext ctx;
while ((ctx = i2pRouter.getContext()) == null) {
@ -323,7 +156,7 @@ public class WinLauncher extends CopyConfigDir {
null) {
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_DEV_SU3, SU3File.TYPE_EXE);
};

View File

@ -16,7 +16,7 @@ import net.i2p.update.UpdateType;
import net.i2p.util.Log;
import net.i2p.util.SystemVersion;
public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
public class WinUpdatePostProcessor implements UpdatePostProcessor {
private final Log _log;
private final RouterContext ctx;
private final AtomicBoolean hook = new AtomicBoolean();
@ -26,9 +26,9 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
private volatile File positionedFile = null;
WindowsUpdatePostProcessor(RouterContext ctx) {
WinUpdatePostProcessor(RouterContext ctx) {
this.ctx = ctx;
this._log = ctx.logManager().getLog(WindowsUpdatePostProcessor.class);
this._log = ctx.logManager().getLog(WinUpdatePostProcessor.class);
}
public String getVersion() { return version; }

View File

@ -0,0 +1,143 @@
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("JPACKAGE_HOME");
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) {
// get the name of the aih directory itself, which will be the default
// name of the executable as well
String baseName = aih.getName();
switch (osName()) {
case "windows":
return baseName + ".exe";
case "mac":
case "linux":
return "./bin/" + baseName;
}
}
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;
}
}

View File

@ -145,87 +145,13 @@ public class WindowsServiceUtil {
return false;
}
}
return isStart("i2p");
return isStart(serviceName);
}
return true;
}
return true;
}
public String ServiceUpdaterString() {
return "http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/news.su3";
}
public String ServiceBackupUpdaterString() {
return "http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news.su3";
}
public String ServiceStaticUpdaterString() {
return "http://echelon.i2p/i2p/i2pupdate.sud,http://stats.i2p/i2p/i2pupdate.sud";
}
public String getProgramFilesInstall() {
String programFiles = System.getenv("PROGRAMFILES");
if (programFiles != null) {
File programFilesI2P = new File(programFiles, "i2p/i2p.exe");
if (programFilesI2P.exists())
return programFilesI2P.getAbsolutePath();
}
String programFiles86 = System.getenv("PROGRAMFILES86");
if (programFiles86 != null) {
File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe");
if (programFiles86I2P.exists())
return programFiles86I2P.getAbsolutePath();
}
return null;
}
public boolean checkProgramFilesInstall() {
String programFiles = System.getenv("PROGRAMFILES");
if (programFiles != null) {
File programFilesI2P = new File(programFiles, "i2p/i2p.exe");
if (programFilesI2P.exists())
return true;
}
String programFiles86 = System.getenv("PROGRAMFILES86");
if (programFiles86 != null) {
File programFiles86I2P = new File(programFiles86, "i2p/i2p.exe");
if (programFiles86I2P.exists())
return true;
}
return false;
}
public boolean promptUserInstallStartIfAvailable() {
if (osName() != "windows") {
return true;
}
if (checkProgramFilesInstall()) {
int a;
String message =
"It appears you have an existing, unbundled I2P rotuer installed.\n";
message +=
"However, it is not running yet. Please start it using the shortcut on the desktop.\n";
message +=
"If you click \"No\", the Easy-Install router will be launched instead.\n";
a = JOptionPane.showConfirmDialog(null, message,
"I2P Service detected not running",
JOptionPane.YES_NO_OPTION);
if (a == JOptionPane.NO_OPTION) {
// Do nothing here, this will continue on to launch a jpackaged router
return true;
} else {
try {
String pfi = getProgramFilesInstall();
if (pfi != null)
Runtime.getRuntime().exec(new String[] {pfi});
} catch (IOException e) {
return false;
}
return true;
}
}
return true;
}
public String getServiceState(String serviceName) {
String stateString = "uninstalled";
int state = getServiceStateInt(serviceName);
@ -260,7 +186,7 @@ public class WindowsServiceUtil {
*
* @return os name in lower-case, "windows" "mac" or "linux"
*/
protected static String osName() {
protected String osName() {
String osName = System.getProperty("os.name").toLowerCase();
if (osName.contains("windows"))
return "windows";

View File

@ -1,35 +0,0 @@
prepupdate-unsignedexe:
cp -v "I2P-Profile-Installer-$(PROFILE_VERSION).su3" i2pwinupdate-unsignedexe.su3
su3-unsignedexe: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Profile-Installer-$(PROFILE_VERSION)" -signer "$(SIGNER)" -version "$(I2P_VERSION)"
java -cp "$(HOME)/i2p/lib/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Profile-Installer-$(PROFILE_VERSION).exe I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" "$(I2P_VERSION)" $(SIGNER)
i2pwinupdate-unsignedexe.su3.torrent: prepupdate-unsignedexe su3-unsignedexe
mktorrent \
--announce=http://tracker2.postman.i2p/announce.php \
--announce=http://w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa.b32.i2p/a \
--announce=http://mb5ir7klpc2tj6ha3xhmrs3mseqvanauciuoiamx2mmzujvg67uq.b32.i2p/a \
i2pwinupdate-unsignedexe.su3
torrent-unsignedexe: i2pwinupdate-unsignedexe.su3.torrent
testing-releases.json: torrent-unsignedexe
mkdir -p ../i2p.newsxml/data/win/testing/
@echo "[" | tee ../i2p.newsxml/data/win/testing/releases.json
@echo " {" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"date\": \"$(I2P_DATE)\"," | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"version\": \"$(I2P_VERSION)\"," | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"minVersion\": \"1.5.0\"," | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"minJavaVersion\": \"1.8\"," | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"updates\": {" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"su3\": {" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"torrent\": \"$(MAGNET_TESTING)\"," | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"url\": [" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " \"http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3\"" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " ]" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/testing/releases.json
@echo "]" | tee -a ../i2p.newsxml/data/win/testing/releases.json

View File

@ -1,41 +0,0 @@
GOPATH=$(HOME)/go
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools:
git clone https://i2pgit.org/idk/su3-tools $(GOPATH)/src/i2pgit.org/idk/su3-tools; true
git pull --all
cd $(GOPATH)/src/i2pgit.org/idk/su3-tools && \
go mod vendor && go build
prepupdate:
cp -v "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.su3" i2pwinupdate.su3
su3: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed" -signer "$(SIGNER)" -version "$(PROFILE_VERSION)"
java -cp "$(HOME)/i2p/lib/*" net.i2p.crypto.SU3File sign -c ROUTER -f EXE I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.exe I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" $(PROFILE_VERSION) $(SIGNER)
i2pwinupdate.su3.torrent: prepupdate su3
mktorrent \
--announce=http://tracker2.postman.i2p/announce.php \
--announce=http://w7tpbzncbcocrqtwwm3nezhnnsw4ozadvi2hmvzdhrqzfxfum7wa.b32.i2p/a \
--announce=http://mb5ir7klpc2tj6ha3xhmrs3mseqvanauciuoiamx2mmzujvg67uq.b32.i2p/a \
i2pwinupdate.su3
torrent: i2pwinupdate.su3.torrent
releases.json:
@echo "[" | tee ../i2p.newsxml/data/win/beta/releases.json
@echo " {" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"date\": \"$(I2P_DATE)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"version\": \"$(PROFILE_VERSION)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"minVersion\": \"1.5.0\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"minJavaVersion\": \"1.8\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"updates\": {" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"su3\": {" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"torrent\": \"$(MAGNET)\"," | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"url\": [" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " \"http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3\"" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " ]" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo " }" | tee -a ../i2p.newsxml/data/win/beta/releases.json
@echo "]" | tee -a ../i2p.newsxml/data/win/beta/releases.json

View File

@ -10,7 +10,6 @@ UniCode true
!define CONSOLE_URL "http://127.0.0.1:7657/home"
!include i2pbrowser-version.nsi
!include i2pbrowser-jpackage.nsi
!include FindProcess.nsh
#var INSTDIR
@ -152,8 +151,8 @@ Function routerDetect
createDirectory "$INSTDIR\"
SetOutPath "$INSTDIR\"
File /a /r "I2P/config/certificates"
File /a /r "I2P/config/geoip"
File /a /r "I2P\config\certificates\"
File /a /r "I2P\config\geoip\"
FunctionEnd
Function installerFunction
@ -178,15 +177,17 @@ Function installerFunction
# Install the licenses
createDirectory "$INSTDIR\licenses"
SetOutPath "$INSTDIR\licenses"
File /a /r "licenses/*"
File /a /r "licenses\"
SetOutPath "$INSTDIR"
createDirectory "$SMPROGRAMS\${APPNAME}"
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 - 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"
SetOutPath "$INSTDIR"
@ -275,21 +276,9 @@ Function LaunchLink
${If} ${Silent}
ReadEnvStr $0 RESTART_I2P
${If} $0 != ""
UserInfo::GetAccountType
pop $0
${If} $0 == "admin"
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
${Else}
ExecShell "" "$DESKTOP\Browse I2P.lnk"
${EndIf}
${EndIf}
${Else}
UserInfo::GetAccountType
pop $0
${If} $0 == "admin"
ShellExecAsUser::ShellExecAsUser "open" "$DESKTOP\Browse I2P.lnk"
${Else}
ExecShell "" "$DESKTOP\Browse I2P.lnk"
${EndIf}
${EndIf}
FunctionEnd

View File

@ -1 +0,0 @@
!define I2P_VERSION

View File

@ -1,3 +1,3 @@
!define VERSIONMAJOR 2
!define VERSIONMINOR 2
!define VERSIONMINOR 4
!define VERSIONBUILD 0

View File

@ -18,10 +18,11 @@ if [ ! -f ./tor.keyring ]; then
fi
if [ ! -f "tor-browser-linux64-${version}_${locale}.tar.xz" ]; then
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz"
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux64-${version}_${locale}.tar.xz.asc"
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux-x86_64-${version}.tar.xz"
https://dist.torproject.org/torbrowser/13.0.9/
wget -cv "https://www.torproject.org/dist/torbrowser/${version}/tor-browser-linux-x86_64-${version}.tar.xz.asc"
fi
gpgv --keyring ./tor.keyring "tor-browser-linux64-${version}_${locale}.tar.xz.asc" "tor-browser-linux64-${version}_${locale}.tar.xz"
gpgv --keyring ./tor.keyring "tor-browser-linux-x86_64-${version}.tar.xz.asc" "tor-browser-linux-x86_64-${version}.tar.xz"
tar xvJf "tor-browser-linux64-${version}_${locale}.tar.xz"
tar xvJf "tor-browser-linux-x86_64-${version}.tar.xz"

View File

@ -18,21 +18,11 @@ if [ ! -f ./tor.keyring ]; then
fi
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://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"
wget -cv "https://dist.torproject.org/torbrowser/${version}/tor-browser-windows-x86_64-portable-${version}.exe.asc"
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"
#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
#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
7z x "tor-browser-windows-x86_64-portable-${version}.exe" -o"Tor Browser"
#7z --help