Compare commits
94 Commits
20220920.j
...
20230202
Author | SHA1 | Date | |
---|---|---|---|
dd47ffd902 | |||
b2f92840e5 | |||
0cffa15047 | |||
0a6dae1aac | |||
6e3fcd3285 | |||
57fa862f01 | |||
2225b47459 | |||
78989a8bbd | |||
e7025ae941 | |||
d7423eb595 | |||
4cb8febe3b | |||
039faf8280 | |||
3a17a3926d | |||
e09d2a41ec | |||
848fabd27c | |||
da58c26935 | |||
c84522a244 | |||
d8953824c5 | |||
b67235b2a9 | |||
00bf0f267e | |||
a1d07cffee | |||
c678c6eca2 | |||
2a162fb4c1 | |||
e594ce9bb5 | |||
4a312198ff | |||
f0fb375e13 | |||
f19a5ca002 | |||
45deb5ac28 | |||
7403cf2e8f | |||
046090ea11 | |||
00098cbf53 | |||
c4980a61f0 | |||
20b5ffdb17 | |||
4a6926fcbf | |||
5b12f20406 | |||
da29268898 | |||
79f016cb1c | |||
e19ce19368 | |||
2e4f110c30 | |||
1bb8238e68 | |||
6bfec5d6ef | |||
f7c6251f30 | |||
1a1e25a52f | |||
b8b19786b1 | |||
8c2c839337 | |||
f56771ac8a | |||
e0d5d61518 | |||
c4c40eee8f | |||
2db71e402d | |||
6e9df08473 | |||
b98b488f70 | |||
52b34a5d6a | |||
c1b20d4f2b | |||
c656b80674 | |||
4ceddb976d | |||
8f14378aee | |||
c5af86adfd | |||
9469293bcf | |||
44ce8335a1 | |||
8a9ce211f3 | |||
037250ae46 | |||
f93c4660da | |||
2f516f0c11 | |||
f3d871d64b | |||
51a82601f0 | |||
85e30d36d7 | |||
7e21d86ab4 | |||
6fbe64d8e2 | |||
91beec4f75 | |||
5f3a3d46f6 | |||
23d013765a | |||
b3ff2dfdbf | |||
d58aeb6b19 | |||
5d2e5dc69b | |||
8fd6d6f45f | |||
7f0d5eb0b2 | |||
cd8be4196e | |||
3548ea0ed6 | |||
730b9ed267 | |||
67e0b87d97 | |||
1424913447 | |||
c0cb68f972 | |||
52c91e1e65 | |||
9e6ea435af | |||
308055143f | |||
53f731f945 | |||
7ec56455cd | |||
c11f982088 | |||
58e1276072 | |||
20240c9e75 | |||
4079d6a8b1 | |||
8b893d1116 | |||
0d209bb2a8 | |||
186493b154 |
4
.gitignore
vendored
4
.gitignore
vendored
@ -22,3 +22,7 @@ cmd
|
|||||||
*.zip
|
*.zip
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
config_override.sh
|
config_override.sh
|
||||||
|
i2pkeys
|
||||||
|
onionkeys
|
||||||
|
tlskeys
|
||||||
|
tmp
|
99
GOALS.md
Normal file
99
GOALS.md
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
Feature Goals
|
||||||
|
=============
|
||||||
|
|
||||||
|
For information about the "Goals guiding the Goals" see: `[PRINCIPLES]`.
|
||||||
|
|
||||||
|
While Windows is the primary platform, some goals may represent cross-platform
|
||||||
|
utility as well. Since a portable jpackage really only needs slightly different
|
||||||
|
arguments on different platforms, cross-platform support is often low-cost.
|
||||||
|
|
||||||
|
- **See Also:**
|
||||||
|
- *Browser Integrations are provided by browser extensions which are contained in their own repositories.*
|
||||||
|
- Firefox:
|
||||||
|
- [git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox](http://git.idk.i2p/idk/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||||
|
- [i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox](https://i2pgit.org/idk/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||||
|
- [github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox](https://github.com/eyedeekay/I2P-in-Private-Browsing-Mode-Firefox/)
|
||||||
|
- Chromium:
|
||||||
|
- [git.idk.i2p/idk/I2P-Configuration-For-Chromium](http://git.idk.i2p/idk/I2P-Configuration-For-Chromium/)
|
||||||
|
- [i2pgit.org/idk/I2P-Configuration-For-Chromium](https://i2pgit.org/idk/I2P-Configuration-For-Chromium/)
|
||||||
|
- [github.com/eyedeekay/I2P-Configuration-For-Chromium](https://github.com/eyedeekay/I2P-Configuration-For-Chromium/)
|
||||||
|
- *Browser profile management are provided by a freestanding, cross-platform library which is contained in its own repository.*
|
||||||
|
- [git.idk.i2p/idk/i2p.plugins.firefox](http://git.idk.i2p/idk/i2p.plugins.firefox)
|
||||||
|
- [i2pgit.org/idk/i2p.plugins.firefox](https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||||
|
- [github.com/eyedeekay/i2p.plugins.firefox](https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||||
|
|
||||||
|
Build Methods
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- `[X]` Cleanly separate jpackage generation phase from NSIS generation phase
|
||||||
|
- `[X]` Enable archive builds for generating Windows `.exe`'s from Linux hosts
|
||||||
|
|
||||||
|
Installation Methods
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
- `[X]` NSIS installer
|
||||||
|
- `[X]` Portable, directory-based install
|
||||||
|
- `[ ]` Windows Service Support
|
||||||
|
|
||||||
|
Update Methods
|
||||||
|
--------------
|
||||||
|
|
||||||
|
- `[X]` NSIS installer in Default Directory
|
||||||
|
- `[X]` NSIS installer in Portable Directory
|
||||||
|
- `[X]` Handle admin and non-admin updates automatically
|
||||||
|
- `[ ]` Zip-Only portable updater
|
||||||
|
|
||||||
|
Launcher
|
||||||
|
--------
|
||||||
|
|
||||||
|
- `[X]` Detect and handle un-bundled routers on the host system, policy of non-interference
|
||||||
|
- `[X]` Wait for router console to be ready to launch router-console browser
|
||||||
|
- `[X]` Wait for proxy to be ready to launch I2P Web Browser
|
||||||
|
- `[X]` Launch browser instead of router when a repeat-launch is detected
|
||||||
|
- `[X]` GUI component for launching each available component
|
||||||
|
- `[X]` Introduce `browser.properties` for customization
|
||||||
|
- `[ ]` Registry-based browser discovery [Firefox](http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/3) [Chromium](http://git.idk.i2p/idk/i2p.plugins.firefox/-/issues/4)
|
||||||
|
|
||||||
|
Browser Configuration All
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
- `[X]` Use identical extensions in Firefox-based and Chromium-based browsers wherever possible
|
||||||
|
- `[X]` Always use a dedicated, I2P Easy-Install specific profile directory
|
||||||
|
- `[X]` Always configure an HTTP Proxy, and safe access to the router console
|
||||||
|
- `[X]` Provide I2P-Specific integrations to the browser UI through WebExtensions
|
||||||
|
- `[X]` Operate in "Strict" mode where the maximum level of defenses are up
|
||||||
|
- `[X]` Operate in "Usability" mode where defense is balanced with utility
|
||||||
|
- `[X]` Operate in "App" mode where we work as a single-purpose window where it is hard to access arbitrary, potentially malicious resources
|
||||||
|
- `[X]` All I2P-Specific profiles should be possible to generate automatically, sight-unseen
|
||||||
|
|
||||||
|
Browser Configuration Firefox
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
- `[X]` When using Firefox, download extension updates automatically, from AMO, using an outproxy
|
||||||
|
- `[X]` Integrate I2P in Private Browsing for to provide UI for I2P within Firefox
|
||||||
|
- `[X]` Prevent WebRTC proxy escapes by setting mode `4` `disable_non_proxied_udp` or higher
|
||||||
|
- `[X]` Customize panel for Firefox `App` mode(Not required for Chromiums)
|
||||||
|
|
||||||
|
Browser Configuration Chromium
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
- `[X]` When using Chromium, load extensions from source and freeze them without updates to prevent unproxied updating.
|
||||||
|
- `[X]` Integrate `I2PChrome.js` to provide UI for I2P within Chrome
|
||||||
|
- `[X]` Prevent WebRTC proxy escapes by setting mode `4` `disable_non_proxied_udp`
|
||||||
|
|
||||||
|
Browser Configuration Strict Mode
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
- `[X]` Disable Javascript by default with NoScript
|
||||||
|
- `[X]` Enforce HTTPS where available with HTTPS Everywhere **OR** HTTPS only Mode
|
||||||
|
- `[ ]` Proactively enumerate and disable "Fine" fingerprinting vectors where possible(ongoing)
|
||||||
|
- `[ ]` When running in Tor Browser, look as much like Tor Browser as possible but use an outproxy(ongoing)
|
||||||
|
|
||||||
|
Browser Configuration Usability Mode
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
- `[X]` Enable Javascript by default but limit it with jShelter
|
||||||
|
- `[X]` Enforce HTTPS where available with HTTPS Everywhere **OR** HTTPS only Mode
|
||||||
|
- `[X]` Limit attempts to fetch useless junk like advertising with an up-to-date uBlock Origin
|
||||||
|
- `[X]` Limit attempts to reach clearnet CDN's with LocalCDN
|
||||||
|
- `[X]` Isolate `.onion` traffic from `outproxy` traffic and `.i2p` traffic using Onion in Container Tabs
|
90
Makefile
90
Makefile
@ -7,27 +7,18 @@ preset=`rm .version; make version`
|
|||||||
|
|
||||||
-include .version
|
-include .version
|
||||||
|
|
||||||
PROFILE_VERSION=$(MAJOR).$(MINOR).$(BUILD)
|
PROFILE_VERSION=$(VERSIONMAJOR).$(VERSIONMINOR).$(VERSIONBUILD)
|
||||||
|
|
||||||
all: version prep install.exe
|
all: version install.exe
|
||||||
|
|
||||||
|
fmt:
|
||||||
|
find . -name '*.java' -exec clang-format -i {} \;
|
||||||
|
|
||||||
tag:
|
tag:
|
||||||
git tag $(PROFILE_VERSION)
|
git tag $(PROFILE_VERSION)
|
||||||
|
|
||||||
version:
|
version:
|
||||||
echo !define VERSIONMAJOR $(VERSIONMAJOR) > src/nsis/i2pbrowser-version.nsi
|
./buildscripts/version.sh
|
||||||
echo !define VERSIONMINOR $(VERSIONMINOR) >> src/nsis/i2pbrowser-version.nsi
|
|
||||||
echo !define VERSIONBUILD $(VERSIONBUILD) >> src/nsis/i2pbrowser-version.nsi
|
|
||||||
sed 's|!define VERSION||g' src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
|
|
||||||
rm -f version.txt
|
|
||||||
make version.txt i2pbrowser-jpackage.nsi
|
|
||||||
|
|
||||||
version.txt:
|
|
||||||
echo "$(PROFILE_VERSION)" > src/profile/version.txt
|
|
||||||
echo "$(PROFILE_VERSION)" > src/app-profile/version.txt
|
|
||||||
|
|
||||||
i2pbrowser-jpackage.nsi:
|
|
||||||
echo "!define I2P_VERSION $(PROFILE_VERSION)" > src/nsis/i2pbrowser-jpackage.nsi
|
|
||||||
|
|
||||||
jpackage: version I2P build/I2P/config all
|
jpackage: version I2P build/I2P/config all
|
||||||
|
|
||||||
@ -38,58 +29,26 @@ help: version
|
|||||||
@echo "$(MAJOR).$(MINOR).$(BUILD)"
|
@echo "$(MAJOR).$(MINOR).$(BUILD)"
|
||||||
@echo "$(preset)"
|
@echo "$(preset)"
|
||||||
|
|
||||||
prep: #launchers build/licenses profile.tgz app-profile.tgz profile build/I2P build/I2P/config #
|
prep:
|
||||||
make build/licenses
|
|
||||||
echo "licenses" >make.log
|
|
||||||
make build/I2P
|
|
||||||
echo "buildi2p" >make.log
|
|
||||||
make build/I2P/config
|
|
||||||
echo "buildi2pconfig" >make.log
|
|
||||||
cp src/nsis/*.nsi build
|
|
||||||
echo "nsi1" >make.log
|
|
||||||
cp src/nsis/*.nsh build
|
|
||||||
echo "nsi2" >make.log
|
|
||||||
cp src/icons/*.ico build
|
|
||||||
|
|
||||||
install.exe: #build/licenses
|
install.exe:
|
||||||
cd build && makensis i2pbrowser-installer.nsi && cp I2P-Easy-Install-Bundle-*.exe ../ && echo "built windows installer"
|
./buildscripts/nsis.sh
|
||||||
|
|
||||||
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
export RES_DIR="../i2p.i2p.jpackage-build/installer/resources"
|
||||||
export PKG_DIR="../i2p.i2p.jpackage-build/pkg-temp"
|
export PKG_DIR="../i2p.i2p.jpackage-build/pkg-temp"
|
||||||
export I2P_JBIGI="../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
#export I2P_JBIGI="../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf I2P
|
rm -rf I2P
|
||||||
|
|
||||||
I2P:
|
I2P:
|
||||||
./build.sh
|
./buildscripts/build.sh
|
||||||
|
|
||||||
build/I2P: I2P build
|
build/I2P: I2P build
|
||||||
rm -rf build/I2P
|
|
||||||
cp -rv I2P build/I2P ; true
|
|
||||||
cp "$(I2P_JBIGI)"/*windows*.dll build/I2P/runtime/lib; true
|
|
||||||
|
|
||||||
src/I2P/config:
|
src/I2P/config:
|
||||||
mkdir -p src/I2P/config
|
|
||||||
rm -rf src/I2P/config/geoip src/I2P/config/webapps src/I2P/config/certificates
|
|
||||||
echo true | tee src/I2P/config/jpackaged
|
|
||||||
cp -v $(RES_DIR)/clients.config src/I2P/config/
|
|
||||||
cp -v $(RES_DIR)/wrapper.config src/I2P/config/
|
|
||||||
#grep -v 'router.updateURL' $(RES_DIR)/router.config > src/I2P/config/router.config
|
|
||||||
cat router.config > src/I2P/config/router.config
|
|
||||||
cat i2ptunnel.config > src/I2P/config/i2ptunnel.config
|
|
||||||
cp -v $(RES_DIR)/hosts.txt src/I2P/config/hosts.txt
|
|
||||||
cp -R $(RES_DIR)/certificates src/I2P/config/certificates
|
|
||||||
cp -R $(RES_DIR)/eepsite src/I2P/config/eepsite
|
|
||||||
mkdir -p src/I2P/config/geoip
|
|
||||||
cp -v $(RES_DIR)/GeoLite2-Country.mmdb.gz src/I2P/config/geoip/GeoLite2-Country.mmdb.gz
|
|
||||||
cp -R "$(PKG_DIR)"/webapps src/I2P/config/webapps
|
|
||||||
cd src/I2P/config/geoip && gunzip GeoLite2-Country.mmdb.gz; cd ../../..
|
|
||||||
|
|
||||||
build/I2P/config: src/I2P/config build/I2P
|
build/I2P/config: src/I2P/config build/I2P
|
||||||
cp -rv src/I2P/config build/I2P/config
|
|
||||||
# cp -rv build/I2P/* I2P/
|
|
||||||
# cp -rv src/I2P/config build/I2P/.i2p
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Warning: a displayed license file of more than 28752 bytes
|
# Warning: a displayed license file of more than 28752 bytes
|
||||||
@ -97,24 +56,10 @@ build/I2P/config: src/I2P/config build/I2P
|
|||||||
# Possibly related: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895064
|
# Possibly related: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895064
|
||||||
#
|
#
|
||||||
build/licenses: build
|
build/licenses: build
|
||||||
mkdir -p build/licenses
|
./buildscripts/licenses.sh
|
||||||
cp license/* build/licenses
|
|
||||||
cp LICENSE.md build/licenses/MIT.txt
|
|
||||||
cat build/licenses/LICENSE.index \
|
|
||||||
build/licenses/EPL.txt \
|
|
||||||
build/licenses/GPL+CLASSPATH.txt \
|
|
||||||
build/licenses/HTTPS-Everywhere.txt \
|
|
||||||
build/licenses/LICENSE.tor \
|
|
||||||
build/licenses/MIT.txt \
|
|
||||||
build/licenses/MPL2.txt \
|
|
||||||
build/licenses/NoScript.txt \
|
|
||||||
build/licenses/NSS.txt \
|
|
||||||
build/licenses/I2P.txt > build/licenses/LICENSE.txt
|
|
||||||
unix2dos build/licenses/LICENSE.txt
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Easy-Install-Bundle-*.exe *.deb src/I2P/config *.su3 .version *.url make.log
|
./buildscripts/clean.sh
|
||||||
git clean -fdx src build
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@echo "creating build directory"
|
@echo "creating build directory"
|
||||||
@ -124,12 +69,13 @@ include makefiles/su.mk
|
|||||||
|
|
||||||
include makefiles/su-unsigned.mk
|
include makefiles/su-unsigned.mk
|
||||||
|
|
||||||
include makefiles/debian.mk
|
|
||||||
|
|
||||||
I2P_DATE=`date +%Y-%m-%d`
|
I2P_DATE=`date +%Y-%m-%d`
|
||||||
|
|
||||||
MAGNET=`bttools torrent printinfo i2pwinupdate.su3.torrent | grep 'MagNet' | sed 's|MagNet: ||g' | sed 's|%3A|:|g'| sed 's|%2F|/|g'`
|
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 printinfo i2pwinupdate-testing.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`
|
BLANK=`awk '! NF { print NR; exit }' changelog.txt`
|
||||||
|
|
||||||
|
123
PRINCIPLES.md
Normal file
123
PRINCIPLES.md
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
Guidance
|
||||||
|
========
|
||||||
|
|
||||||
|
This document explains the ideas which are guiding the development of
|
||||||
|
features specific to the I2P Easy-Install bundle.
|
||||||
|
|
||||||
|
The general idea is that it is possible, on most platforms, to make I2P
|
||||||
|
post-install configuration much simpler and much less error-prone. Each
|
||||||
|
section of this document has guidance for a different "Meta-Feature" of
|
||||||
|
the I2P Easy-Install Bundle. For granular, specific information about
|
||||||
|
goals both achieved and un-achieved see `[GOALS]`.
|
||||||
|
|
||||||
|
- **Sections:**
|
||||||
|
|
||||||
|
1. Guidance for Browser Profile Configuration
|
||||||
|
|
||||||
|
Guidance for Browser Profile Configuration
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
- **See also:**
|
||||||
|
- [git.idk.i2p/idk/i2p.plugins.firefox](http://git.idk.i2p/idk/i2p.plugins.firefox)
|
||||||
|
- [i2pgit.org/idk/i2p.plugins.firefox](https://i2pgit.org/idk/i2p.plugins.firefox)
|
||||||
|
- [github.com/eyedeekay/i2p.plugins.firefox](https://github.com/eyedeekay/i2p.plugins.firefox)
|
||||||
|
|
||||||
|
The I2P Easy-Install Bundle for Windows considers basic configuration tasks
|
||||||
|
"Features" when they can be automated. The quintessential example of this
|
||||||
|
is **``Browser Profile Configuration``** where it injects settings into a
|
||||||
|
pre-existing browser from the host system. Solving this problem pre-dates
|
||||||
|
the evolution of `i2p.firefox` into a fully-fledged I2P router distribution
|
||||||
|
and has been the defining goal of this project for its entire existence.
|
||||||
|
|
||||||
|
However, what good browser profile configuration is, is as complicated as
|
||||||
|
how to deploy it. I2P has a unique opportunity to decide how it will handle
|
||||||
|
problems related to browsing in its own context while the network grows
|
||||||
|
and synthesize a useful number of safe browser configurations while also
|
||||||
|
reducing existing browser config fragmentation.
|
||||||
|
|
||||||
|
Easy-Install attempts to limit the number of "Coarse Fingerprints" which it will
|
||||||
|
produce by default to a predictable number. A Coarse Fingerprint is basically
|
||||||
|
a fingerprint "That we know we're making" by offering the ability to configure
|
||||||
|
something differently.
|
||||||
|
|
||||||
|
- **That means:**
|
||||||
|
|
||||||
|
1. It considers the browser integral to the interactive use of the I2P network by a large fraction of users.
|
||||||
|
2. It considers effective browser configuration **impossible for a single user to achieve** because effective browser configuration must have the characteristic of being reflected en-masse(anti-fingerprinting measures are only remotely effective when widely used).
|
||||||
|
3. The browser profile it injects inherits the runtime security characteristics of the **host browser**.
|
||||||
|
4. The browser profile it injects obtains runtime privacy characteristics of the **easy-install bundle**
|
||||||
|
5. The number of coarse browser fingerprint sets is reduced from indeterminately large to `[supported browsers]*[variant configurations]`
|
||||||
|
6. It attempts to balance flexibility with privacy, and accommodate people's preferences where possible.
|
||||||
|
7. It considers browser vendors better at providing browser updates than the I2P Project
|
||||||
|
|
||||||
|
Browser Configurations and Coarse Fingerprints
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
At this time it offers configuration for Tor Browser, Firefox, Waterfox, and
|
||||||
|
LibreWolf for Firefox-based browsers, and Ungoogled-Chromium, Chromium, Brave,
|
||||||
|
Chrome, and Edgium configuration for Chromium-based browsers. That is a total
|
||||||
|
of **Nine(9)** main browsers. There are **Two(2)** variant configurations,
|
||||||
|
which correspond to "Strict" and "Usability" Modes. That makes a total of
|
||||||
|
**Eighteen(18)** coarse browser fingerprints produced by this bundle. It also
|
||||||
|
has the ability to launch in a "Restricted to Apps" mode where it is only
|
||||||
|
possible to visit I2P sites using links on the I2P application interface(router
|
||||||
|
console, hidden services manager) itself.
|
||||||
|
|
||||||
|
### Strict Mode
|
||||||
|
|
||||||
|
This is not on its face as good as having an almost entirely unified browser
|
||||||
|
fingerprint like Tor Browser attempts to have. It is a simple fact that 18
|
||||||
|
is greater than one. Every active attempt to gain granularity from a browser
|
||||||
|
outside of off-the-shelf Fingerprinting techniques is classified as "Fine"
|
||||||
|
fingerprinting. It is unpredictable, and harder to defend against, more likely
|
||||||
|
to exhibit novelty, and more likely to be affected by the host browser's
|
||||||
|
security. When fingerprinters get this creative disabling Javascript by default
|
||||||
|
is the most complete defense. This is the primary characteristic of Strict Mode,
|
||||||
|
it disables Javascript by default with NoScript. **Strict Mode is the only**
|
||||||
|
**partial defense against fine-fingerprinting offered by this product.** Even
|
||||||
|
disabling Javascript does not close all fine fingerprinting vectors, but it
|
||||||
|
does close most of them and reduce attack surface significantly. It is recommended
|
||||||
|
in combination with Tor Browser, and attempts to be somewhat closer to Tor Browser
|
||||||
|
than Usability Mode. It is the default mode of operation.
|
||||||
|
|
||||||
|
### Usability Mode
|
||||||
|
|
||||||
|
In contrast to Strict Mode, Usability mode offers the greatest agreeable number
|
||||||
|
of browser features enabled by default, including a restricted subset of Javascript.
|
||||||
|
It makes no attempt at all to look like Tor Browser, even when using Tor Browser
|
||||||
|
as a host browser. It does attempt to optimize the browser for use within I2P, including
|
||||||
|
specific optimizations to keep traffic in-network or even retrieve information which is
|
||||||
|
stored on the localhost(while avoiding cache timing attacks). It does this by deploying
|
||||||
|
an alternative loadout of extensions, including ones which block advertising by default
|
||||||
|
and which include a cache of CDN resources in local browser storage.
|
||||||
|
|
||||||
|
### Firefox-Based Browsers
|
||||||
|
|
||||||
|
Because of the relatively high configurability of Firefox-based browser
|
||||||
|
telemetry, Firefox-based browsers are preferred over Chromium-based browsers.
|
||||||
|
Chromium-based browsers will be used by default **only** if a Firefox based
|
||||||
|
browser is unavailable. Only Firefox-variant releases of the Extended Support
|
||||||
|
Release or of the latest stable release are supportable. If a variant lags
|
||||||
|
behind Firefox releases, it will be dropped. The primary reason for the default
|
||||||
|
"Ordering" of Firefox Profile Selection is the speed at which updates can be
|
||||||
|
expected to be applied.
|
||||||
|
|
||||||
|
### Chromium-Based Browsers
|
||||||
|
|
||||||
|
Chromium-based browser selection is more subjective and slightly more ad-hoc.
|
||||||
|
Chromium browsers are chosen based on the variant's stated goals and perceived
|
||||||
|
efficacy in pursuing those goals. For example, if a Chromium distribution is
|
||||||
|
focused on removing telemetry or providing anti-fingerprinting, it is chosen
|
||||||
|
before a Chromium that is provided by Google or integrated tightly with the
|
||||||
|
host OS. This is a matter of judgement on my part and if you disagree you should
|
||||||
|
open an issue and argue with me. I'm not infallible, I'll listen.
|
||||||
|
|
||||||
|
### All other browsers
|
||||||
|
|
||||||
|
With all other browsers attempts at anti-fingerprinting are a moot point. It offers
|
||||||
|
limited configuration options using widely-supported generic browser configuration
|
||||||
|
means. If it doesn't recognize a Firefox or Chromium browser on the host, then it
|
||||||
|
sets the common proxy environment variables `http_proxy` `https_proxy` `ALL_PROXY`
|
||||||
|
and `NO_PROXY` to their appropriate values before launching the browser configuration
|
||||||
|
and attempts to set a directory for the runtime configuration(Profile) by changing
|
||||||
|
to the profile directory.
|
28
README.md
28
README.md
@ -57,7 +57,7 @@ The Windows build tools listed above must be installed on the Windows host machi
|
|||||||
TODO: Add links to the respective instructions for each of these.
|
TODO: Add links to the respective instructions for each of these.
|
||||||
|
|
||||||
**Note that after the dependencies are installed, this step is automated**
|
**Note that after the dependencies are installed, this step is automated**
|
||||||
**with `./build.sh`.**
|
**with `./buildscripts/build.sh`.**
|
||||||
|
|
||||||
In order to include a jpackaged(dependency-free) I2P router in the Profile
|
In order to include a jpackaged(dependency-free) I2P router in the Profile
|
||||||
Bundle you will need to build the jpackaged I2P router as an "App Image" on
|
Bundle you will need to build the jpackaged I2P router as an "App Image" on
|
||||||
@ -127,10 +127,10 @@ Ubuntu in WSL.
|
|||||||
ant clean pkg
|
ant clean pkg
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
7. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
7. Move into the i2p.firefox directory. Run the `./buildscripts/build.sh` script.
|
||||||
|
|
||||||
cd i2p.firefox
|
cd i2p.firefox
|
||||||
./build.sh
|
./buildscripts/build.sh
|
||||||
|
|
||||||
8. Compile the NSIS installer using WSL.
|
8. Compile the NSIS installer using WSL.
|
||||||
|
|
||||||
@ -143,18 +143,9 @@ I highly recommend you look into the Chocolatey package manager, which makes it
|
|||||||
easier to configure these tools and keep them up to date.
|
easier to configure these tools and keep them up to date.
|
||||||
|
|
||||||
**Prerequisites:** In addition to the other prerequisites, you will need to to have
|
**Prerequisites:** In addition to the other prerequisites, you will need to to have
|
||||||
`make` installed with `cygwin`. If you are using this method, you cannot use the
|
`make` installed with `cygwin`. For our purposes, as long as everything else is
|
||||||
automated build scripts without a hack. You will need to create a file called `wsl`
|
set up and you're using git bash, that is enough to make the scripts compatible with
|
||||||
in a place that is in the path used by `git-bash.exe` sessions, with the content:
|
`cygwin`. Cygwin builds without git bash are not likely to work.
|
||||||
|
|
||||||
```
|
|
||||||
#! /usr/bin/env bash
|
|
||||||
$@
|
|
||||||
```
|
|
||||||
|
|
||||||
For our purposes, as long as everything else is set up and you're using git bash,
|
|
||||||
that is enough to make the scripts compatible with `cygwin`. Cygwin builds without
|
|
||||||
git bash are not likely to work.
|
|
||||||
|
|
||||||
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages. Select the `make` `jq` `dos2unix` and `curl` packages.
|
1. Run the Cygwin `setup-$arch.exe` for your platform to set up new packages. Select the `make` `jq` `dos2unix` and `curl` packages.
|
||||||
2. Open a cygwin terminal.
|
2. Open a cygwin terminal.
|
||||||
@ -170,10 +161,10 @@ git bash are not likely to work.
|
|||||||
ant clean pkg
|
ant clean pkg
|
||||||
cd ..
|
cd ..
|
||||||
|
|
||||||
5. Move into the i2p.firefox directory. Run the `./build.sh` script.
|
5. Move into the i2p.firefox directory. Run the `./buildscripts/unsigned.sh` script.
|
||||||
|
|
||||||
cd i2p.firefox
|
cd i2p.firefox
|
||||||
./build.sh
|
./buildscripts/unsigned.sh
|
||||||
|
|
||||||
6. Run `make` to build the installer.
|
6. Run `make` to build the installer.
|
||||||
|
|
||||||
@ -234,7 +225,8 @@ testing.
|
|||||||
|
|
||||||
**The only remotely interesting Unix functionality that remains in this**
|
**The only remotely interesting Unix functionality that remains in this**
|
||||||
**repository is the construction of a portable. You can use `targz.sh` to**
|
**repository is the construction of a portable. You can use `targz.sh` to**
|
||||||
**generate that.**
|
**generate that. Once generated, `cd I2P && ./lib/torbrowser.sh` to complete**
|
||||||
|
**setup, and `./bin/I2P` to run it.**
|
||||||
|
|
||||||
Issues
|
Issues
|
||||||
------
|
------
|
||||||
|
@ -1,4 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
curl -s "https://addons.mozilla.org/api/v5/addons/addon/$1/versions/?page_size=1" | jq '.results | .[0] | .file | .url' | tr -d '"'
|
|
||||||
|
|
47
build.sh
47
build.sh
@ -1,47 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
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 config_overide.sh ]; then
|
|
||||||
. "$SCRIPT_DIR/config_override.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
. "$SCRIPT_DIR/launcher.sh"
|
|
||||||
|
|
||||||
if [ -z $I2P_VERSION ]; then
|
|
||||||
I2P_VERSION=$("$JAVA_HOME"/bin/java -cp build/router.jar net.i2p.router.RouterVersion | sed "s/.*: //" | head -n 1 | sed 's|-|.|g')
|
|
||||||
fi
|
|
||||||
echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
|
|
||||||
|
|
||||||
rm -rf I2P
|
|
||||||
|
|
||||||
make src/I2P/config
|
|
||||||
|
|
||||||
"$JAVA_HOME"/bin/jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
|
|
||||||
--verbose \
|
|
||||||
--java-options "-Xmx512m" \
|
|
||||||
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
|
||||||
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
|
||||||
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
|
||||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
|
||||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
|
||||||
$JPACKAGE_OPTS \
|
|
||||||
--resource-dir build \
|
|
||||||
--app-content src/I2P/config \
|
|
||||||
--app-content src/icons/windowsUIToopie2.png \
|
|
||||||
--app-content src/icons/ui2pbrowser_icon.ico \
|
|
||||||
--icon src/icons/windowsUIToopie2.png \
|
|
||||||
--input build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
|
|
||||||
|
|
||||||
cp "$I2P_PKG/licenses/"* license/
|
|
||||||
cp "$HERE/../i2p.i2p.jpackage-build/LICENSE.txt" license/I2P.txt
|
|
83
buildscripts/build.sh
Executable file
83
buildscripts/build.sh
Executable file
@ -0,0 +1,83 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
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 config_overide.sh ]; then
|
||||||
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||||
|
|
||||||
|
if [ -z $machine ]; then
|
||||||
|
unameOut="$(uname -s)"
|
||||||
|
case "${unameOut}" in
|
||||||
|
Linux*) machine=Linux;;
|
||||||
|
Darwin*) machine=Mac;;
|
||||||
|
*) machine="UNKNOWN:${unameOut}"
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
ICON="$SCRIPT_DIR/src/icons/ui2pbrowser_icon.ico"
|
||||||
|
|
||||||
|
if [ "$machine" = "Mac" ]; then
|
||||||
|
rm -rf I2P
|
||||||
|
"$SCRIPT_DIR"/buildscripts/getprebuilt.sh
|
||||||
|
exit 0
|
||||||
|
elif [ "$machine" = "Linux" ]; then
|
||||||
|
rm -rf I2P
|
||||||
|
"$SCRIPT_DIR"/buildscripts/getprebuilt.sh
|
||||||
|
exit 0
|
||||||
|
elif [ "$machine" = "unix" ]; then
|
||||||
|
ICON="$SCRIPT_DIR"/src/icons/windowsUIToopie2.png
|
||||||
|
export EXTRACODE="unix"
|
||||||
|
export EXTRA=" public final static String EXTRA = \"-$EXTRACODE\";"
|
||||||
|
fi
|
||||||
|
|
||||||
|
. "$SCRIPT_DI"$SCRIPT_DIR"/buildscripts/launcher.sh"
|
||||||
|
|
||||||
|
if [ -z $I2P_VERSION ]; then
|
||||||
|
I2P_VERSION=$("$JAVA_HOME"/bin/java -cp $SCRIPT_DIR/build/router.jar net.i2p.router.RouterVersion | sed "s/.*: //" | head -n 1 | sed 's|-|.|g')
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "preparing to invoke jpackage for I2P version $I2P_VERSION"
|
||||||
|
|
||||||
|
rm -rf I2P
|
||||||
|
|
||||||
|
if [ ! -d "I2P" ]; then
|
||||||
|
"$JAVA_HOME"/bin/jpackage --type app-image --name I2P --app-version "$I2P_VERSION" \
|
||||||
|
--verbose \
|
||||||
|
--java-options "-Xmx512m" \
|
||||||
|
--java-options "--add-opens java.base/java.lang=ALL-UNNAMED" \
|
||||||
|
--java-options "--add-opens java.base/sun.nio.fs=ALL-UNNAMED" \
|
||||||
|
--java-options "--add-opens java.base/java.nio=ALL-UNNAMED" \
|
||||||
|
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||||
|
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||||
|
$JPACKAGE_OPTS \
|
||||||
|
--resource-dir $SCRIPT_DIR/build \
|
||||||
|
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||||
|
--app-content "$SCRIPT_DIR"/src/unix/torbrowser.sh \
|
||||||
|
--app-content "$SCRIPT_DIR"/src/win/torbrowser-windows.sh \
|
||||||
|
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||||
|
--app-content "$SCRIPT_DIR"/src/icons/ui2pbrowser_icon.ico \
|
||||||
|
--icon "${ICON}" \
|
||||||
|
--input $SCRIPT_DIR/build --main-jar launcher.jar --main-class net.i2p.router.WinLauncher
|
||||||
|
fi
|
||||||
|
|
||||||
|
cp "$I2P_PKG/licenses/"* license/
|
||||||
|
cp "$SCRIPT_DIR/../i2p.i2p.jpackage-build/LICENSE.txt" license/I2P.txt
|
||||||
|
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR"/build/I2P
|
||||||
|
cp -rv "$SCRIPT_DIR"/I2P/* "$SCRIPT_DIR"/build/I2P
|
||||||
|
cp -rv src/I2P/config build/I2P/config
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/config.sh"
|
. "$SCRIPT_DIR/config.sh"
|
||||||
@ -31,4 +31,5 @@ rm -rf \
|
|||||||
*.jar \
|
*.jar \
|
||||||
*.exe \
|
*.exe \
|
||||||
*.dmg
|
*.dmg
|
||||||
make clean
|
rm -rf build app-profile-*.tgz profile-*.tgz I2P-Easy-Install-Bundle-*.exe *.deb src/I2P/config *.su3 .version *.url make.log
|
||||||
|
git clean -fdx src build onionkeys tlskeys i2pkeys
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/i2pversion"
|
. "$SCRIPT_DIR/i2pversion"
|
||||||
@ -25,7 +25,7 @@ fi
|
|||||||
# GITHUB_USERNAME=your github username
|
# GITHUB_USERNAME=your github username
|
||||||
git clean -fd
|
git clean -fd
|
||||||
git checkout .
|
git checkout .
|
||||||
./targz.sh
|
"$SCRIPT_DIR"/buildscripts/targz.sh
|
||||||
|
|
||||||
. "$HOME/github-release-config.sh"
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
||||||
@ -50,3 +50,4 @@ sleep 2s
|
|||||||
ZIPCHECKSUM=$(sha256sum "I2P.tar.gz")
|
ZIPCHECKSUM=$(sha256sum "I2P.tar.gz")
|
||||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
||||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.tar.gz" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.tar.gz"
|
||||||
|
|
52
buildscripts/daily-portable-windows.sh
Executable file
52
buildscripts/daily-portable-windows.sh
Executable file
@ -0,0 +1,52 @@
|
|||||||
|
#! /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 config_overide.sh ]; then
|
||||||
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
### 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 .
|
||||||
|
|
||||||
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
||||||
|
if [ -f ./i2pversion_override ]; then
|
||||||
|
. ./i2pversion_override
|
||||||
|
fi
|
||||||
|
|
||||||
|
TODAYSDATE=$(date +%Y%m%d)
|
||||||
|
|
||||||
|
if [ -z "$DESCRIPTION" ]; then
|
||||||
|
DESCRIPTION="Daily unsigned build of i2p.firefox for $TODAYSDATE
|
||||||
|
===================================================
|
||||||
|
|
||||||
|
These builds are automatically built on a daily basis and may have serious bugs.
|
||||||
|
They are intended for testing purposes only, use them at your own risk.
|
||||||
|
"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$TODAYSDATE" -d "$DESCRIPTION" -t "$TODAYSDATE"
|
||||||
|
github-release release -p -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "$TODAYSDATE" -d "$DESCRIPTION" -t "$TODAYSDATE"
|
||||||
|
|
||||||
|
"$SCRIPT_DIR"/buildscripts/zip.sh
|
||||||
|
WINZIPCHECKSUM=$(sha256sum "I2P-windows-portable.zip")
|
||||||
|
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-windows-portable.zip" -l "$WINZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P-windows-portable.zip"
|
||||||
|
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P-windows-portable.zip" -l "$WINZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P-windows-portable.zip"
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
||||||
@ -25,7 +25,7 @@ fi
|
|||||||
git clean -fd
|
git clean -fd
|
||||||
git checkout .
|
git checkout .
|
||||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
||||||
./unsigned.sh
|
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||||
|
|
||||||
. "$HOME/github-release-config.sh"
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/i2pversion"
|
. "$SCRIPT_DIR/i2pversion"
|
||||||
@ -22,7 +22,7 @@ mv "$SCRIPT_DIR/config_override.sh" "$SCRIPT_DIR/config_override.sh.bak"
|
|||||||
# GITHUB_USERNAME=your github username
|
# GITHUB_USERNAME=your github username
|
||||||
git clean -fd
|
git clean -fd
|
||||||
git checkout .
|
git checkout .
|
||||||
./unsigned.sh
|
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||||
|
|
||||||
. "$HOME/github-release-config.sh"
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
||||||
@ -51,7 +51,6 @@ powershell Compress-Archive -force I2P I2P.zip
|
|||||||
ZIPCHECKSUM=$(sha256sum "I2P.zip")
|
ZIPCHECKSUM=$(sha256sum "I2P.zip")
|
||||||
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
echo github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||||
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
github-release upload -R -u "$GITHUB_USERNAME" -r "i2p.firefox" -f "I2P.zip" -l "$ZIPCHECKSUM" -t "$TODAYSDATE" -n "I2P.zip"
|
||||||
|
|
||||||
TARCHECKSUM=$(sha256sum "../i2p.i2p.jpackage-build.tar.gz")
|
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 "$TODAYSDATE" -n "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 "$TODAYSDATE" -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 "$TODAYSDATE" -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 "$TODAYSDATE" -n "i2p.i2p.jpackage-build.tar.gz"
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
cp -v "$SCRIPT_DIR/config_override.example.sh" config_override.sh
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/i2pversion"
|
. "$SCRIPT_DIR/i2pversion"
|
@ -2,7 +2,8 @@
|
|||||||
|
|
||||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||||
|
|
||||||
# Motivation
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. ./config.sh
|
. ./config.sh
|
||||||
. ./i2pversion
|
. ./i2pversion
|
||||||
@ -16,10 +17,10 @@ jpackage --name I2P-EXE --app-version "$I2P_VERSION" \
|
|||||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||||
$JPACKAGE_OPTS \
|
$JPACKAGE_OPTS \
|
||||||
--app-content src/I2P/config \
|
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||||
--app-content src/icons/windowsUIToopie2.png \
|
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||||
--icon src/icons/windowsUIToopie2.png \
|
--icon "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||||
--input build \
|
--input "$SCRIPT_DIR/build" \
|
||||||
--verbose \
|
--verbose \
|
||||||
--type exe \
|
--type exe \
|
||||||
--win-dir-chooser \
|
--win-dir-chooser \
|
16
buildscripts/experimental.sh
Executable file
16
buildscripts/experimental.sh
Executable file
@ -0,0 +1,16 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
|
. "$SCRIPT_DIR/config.sh"
|
||||||
|
|
||||||
|
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||||
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$SCRIPT_DIR"/buildscripts/clean.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/nsis.sh
|
64
buildscripts/getprebuilt.sh
Executable file
64
buildscripts/getprebuilt.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
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 config_overide.sh ]; then
|
||||||
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||||
|
echo "version set"
|
||||||
|
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||||
|
echo "licenses generated"
|
||||||
|
. "$HOME/github-release-config.sh"
|
||||||
|
|
||||||
|
if [ -z $TODAYSDATE ]; then
|
||||||
|
TODAYSDATE=$(date -d '-1 day' '+%Y%m%d')
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f I2P.zip ]; then
|
||||||
|
echo github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$TODAYSDATE"
|
||||||
|
github-release download -u "$GITHUB_USERNAME" -r "i2p.firefox" -n "I2P.zip" -t "$TODAYSDATE"
|
||||||
|
fi
|
||||||
|
unzip -FF I2P.zip || true
|
||||||
|
echo "unzipped prebuilt router"
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
echo "moved prebuilt router"
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
export I2P_PKG="$SCRIPT_DIR/../i2p.i2p.jpackage-build/pkg-temp"
|
||||||
|
export RES_DIR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/resources"
|
||||||
|
export I2P_JARS="$I2P_PKG/lib"
|
||||||
|
export I2P_JBIGI="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||||
|
export I2P_JBIGI_JAR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/build/jbigi.jar"
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR/src/I2P/config"
|
||||||
|
rm -rf "$SCRIPT_DIR/src/I2P/config/geoip" "$SCRIPT_DIR/src/I2P/config/webapps" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||||
|
cp -v "$RES_DIR/clients.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||||
|
cp -v "$RES_DIR/wrapper.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||||
|
#grep -v 'router.updateURL' $(RES_DIR)/router.config > "$SCRIPT_DIR"/src/I2P/config/router.config
|
||||||
|
cat router.config > "$SCRIPT_DIR/src/I2P/config/router.config"
|
||||||
|
cat i2ptunnel.config > "$SCRIPT_DIR/src/I2P/config/i2ptunnel.config"
|
||||||
|
cp -v "$RES_DIR/hosts.txt" "$SCRIPT_DIR/src/I2P/config/hosts.txt"
|
||||||
|
cp -r "$RES_DIR/certificates" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||||
|
cp -r "$RES_DIR/eepsite" "$SCRIPT_DIR/src/I2P/config/eepsite"
|
||||||
|
mkdir -p "$SCRIPT_DIR/src/I2P/config/geoip"
|
||||||
|
cp -v "$RES_DIR/GeoLite2-Country.mmdb.gz" "$SCRIPT_DIR/src/I2P/config/geoip/GeoLite2-Country.mmdb.gz"
|
||||||
|
#cp -r "$I2P_PKG/webapps" "$SCRIPT_DIR/src/I2P/config/webapps"
|
||||||
|
cd "$SCRIPT_DIR/src/I2P/config/geoip" && gunzip GeoLite2-Country.mmdb.gz; cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR"/build/I2P
|
||||||
|
cp -rv "$SCRIPT_DIR"/I2P/* "$SCRIPT_DIR"/build/I2P
|
||||||
|
cp -rv "$SCRIPT_DIR"/src/I2P/config "$SCRIPT_DIR"/build/I2P/config
|
124
buildscripts/launcher.sh
Executable file
124
buildscripts/launcher.sh
Executable file
@ -0,0 +1,124 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
set -e
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
COUNT="Ten Nine Eight Seven Six Five Four Three Two One"
|
||||||
|
|
||||||
|
which java
|
||||||
|
export JAVA=$(java --version | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t\- ')
|
||||||
|
|
||||||
|
if [ "$JAVA" -lt "14" ]; then
|
||||||
|
echo "Java 14+ must be used to compile with jpackage, java is $JAVA"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [ "$JAVA" -lt "17" ]; then
|
||||||
|
echo "It is highly recommended that you use Java 17+ to build release packages"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z "${JAVA_HOME}" ]; then
|
||||||
|
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||||
|
fi
|
||||||
|
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
||||||
|
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
||||||
|
fi
|
||||||
|
echo "Building with: $JAVA, $JAVA_HOME"
|
||||||
|
sleep 5s
|
||||||
|
|
||||||
|
"$SCRIPT_DIR"/buildscripts/version.sh
|
||||||
|
"$SCRIPT_DIR"/buildscripts/licenses.sh
|
||||||
|
|
||||||
|
#SCRIPT_DIR="$PWD"
|
||||||
|
export I2P_PKG="$SCRIPT_DIR/../i2p.i2p.jpackage-build/pkg-temp"
|
||||||
|
export RES_DIR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/resources"
|
||||||
|
export I2P_JARS="$I2P_PKG/lib"
|
||||||
|
export I2P_JBIGI="$SCRIPT_DIR/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
||||||
|
export I2P_JBIGI_JAR="$SCRIPT_DIR/../i2p.i2p.jpackage-build/build/jbigi.jar"
|
||||||
|
if [ ! -d "$SCRIPT_DIR/../i2p.i2p.jpackage-build/" ]; then
|
||||||
|
git clone --depth=1 -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$SCRIPT_DIR/../i2p.i2p.jpackage-build/"
|
||||||
|
fi
|
||||||
|
cd "$SCRIPT_DIR/../i2p.i2p.jpackage-build/"
|
||||||
|
OLDEXTRA=$(find . -name RouterVersion.java -exec grep 'String EXTRA' {} \;)
|
||||||
|
if [ -z "$EXTRA" ]; then
|
||||||
|
export EXTRACODE="win"
|
||||||
|
export EXTRA=" public final static String EXTRA = \"-$EXTRACODE\";"
|
||||||
|
fi
|
||||||
|
find . -name RouterVersion.java -exec sed -i "s|$OLDEXTRA|$EXTRA|g" {} \;
|
||||||
|
git checkout -b "i2p-$VERSION-$EXTRACODE" && git commit -am "i2p-$VERSION-$EXTRACODE"
|
||||||
|
git pull --tags
|
||||||
|
git archive --format=tar.gz --output="$SCRIPT_DIR/../i2p.firefox/i2p.i2p.jpackage-build.tar.gz" "i2p-$VERSION-$EXTRACODE"
|
||||||
|
|
||||||
|
for i in $COUNT; do
|
||||||
|
echo -n "$i...."; sleep 1s
|
||||||
|
done
|
||||||
|
ant distclean pkg || true
|
||||||
|
ant jbigi
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR/src/I2P/config"
|
||||||
|
rm -rf "$SCRIPT_DIR/src/I2P/config/geoip" "$SCRIPT_DIR/src/I2P/config/webapps" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||||
|
cp -v "$RES_DIR/clients.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||||
|
cp -v "$RES_DIR/wrapper.config" "$SCRIPT_DIR/src/I2P/config/"
|
||||||
|
#grep -v 'router.updateURL' $(RES_DIR)/router.config > "$SCRIPT_DIR"/src/I2P/config/router.config
|
||||||
|
cat router.config > "$SCRIPT_DIR/src/I2P/config/router.config"
|
||||||
|
cat i2ptunnel.config > "$SCRIPT_DIR/src/I2P/config/i2ptunnel.config"
|
||||||
|
cp -v "$RES_DIR/hosts.txt" "$SCRIPT_DIR/src/I2P/config/hosts.txt"
|
||||||
|
cp -R "$RES_DIR/certificates" "$SCRIPT_DIR/src/I2P/config/certificates"
|
||||||
|
cp -R "$RES_DIR/eepsite" "$SCRIPT_DIR/src/I2P/config/eepsite"
|
||||||
|
mkdir -p "$SCRIPT_DIR/src/I2P/config/geoip"
|
||||||
|
cp -v "$RES_DIR/GeoLite2-Country.mmdb.gz" "$SCRIPT_DIR/src/I2P/config/geoip/GeoLite2-Country.mmdb.gz"
|
||||||
|
cp -R "$I2P_PKG/webapps" "$SCRIPT_DIR/src/I2P/config/webapps"
|
||||||
|
cd "$SCRIPT_DIR/src/I2P/config/geoip" && gunzip GeoLite2-Country.mmdb.gz; cd ../../..
|
||||||
|
|
||||||
|
echo "compiling custom launcher"
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
|
||||||
|
for dll in "$I2P_JBIGI/"*windows*.dll; do
|
||||||
|
jar uf "$SCRIPT_DIR/build/jbigi.jar" "$dll"
|
||||||
|
done
|
||||||
|
|
||||||
|
cd "$SCRIPT_DIR"/java
|
||||||
|
"$JAVA_HOME"/bin/javac -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/Elevator.java \
|
||||||
|
net/i2p/router/Shell32X.java \
|
||||||
|
net/i2p/router/WindowsServiceUtil.java \
|
||||||
|
net/i2p/router/WinLauncher.java \
|
||||||
|
net/i2p/router/WindowsUpdatePostProcessor.java \
|
||||||
|
net/i2p/router/WinUpdateProcess.java \
|
||||||
|
net/i2p/router/WindowsServiceUtil.java \
|
||||||
|
net/i2p/router/ZipUpdateProcess.java
|
||||||
|
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
#echo "building launcher.jar"
|
||||||
|
cd "$SCRIPT_DIR/build"
|
||||||
|
"$JAVA_HOME"/bin/jar -cf launcher.jar net
|
||||||
|
cd ..
|
31
buildscripts/licenses.sh
Executable file
31
buildscripts/licenses.sh
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#! /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
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR"/build/licenses
|
||||||
|
cp "$SCRIPT_DIR"/license/* "$SCRIPT_DIR"/build/licenses
|
||||||
|
cp "$SCRIPT_DIR"/LICENSE.md "$SCRIPT_DIR"/build/licenses/MIT.txt
|
||||||
|
cat "$SCRIPT_DIR"/build/licenses/LICENSE.index \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/EPL.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/GPL+CLASSPATH.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/HTTPS-Everywhere.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/LICENSE.tor \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/MIT.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/MPL2.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/NoScript.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/NSS.txt \
|
||||||
|
"$SCRIPT_DIR"/build/licenses/I2P.txt > "$SCRIPT_DIR"/build/licenses/LICENSE.txt
|
||||||
|
unix2dos "$SCRIPT_DIR"/build/licenses/LICENSE.txt
|
@ -2,12 +2,13 @@
|
|||||||
|
|
||||||
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
## EXPERIMENTAL. PROBABLY WON'T SEE THE LIGHT OF DAY BUT MAYBE I GET LUCKY.
|
||||||
|
|
||||||
# Motivation
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. ./config.sh
|
. ./config.sh
|
||||||
. ./i2pversion
|
. ./i2pversion
|
||||||
|
|
||||||
./build.sh
|
"$SCRIPT_DIR"/buildscripts/build.sh
|
||||||
jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
||||||
--verbose \
|
--verbose \
|
||||||
--java-options "-Xmx512m" \
|
--java-options "-Xmx512m" \
|
||||||
@ -17,10 +18,10 @@ jpackage --name I2P-MSI --app-version "$I2P_VERSION" \
|
|||||||
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
--java-options "--add-opens java.base/java.util.Properties=ALL-UNNAMED" \
|
||||||
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
--java-options "--add-opens java.base/java.util.Properties.defaults=ALL-UNNAMED" \
|
||||||
$JPACKAGE_OPTS \
|
$JPACKAGE_OPTS \
|
||||||
--app-content src/I2P/config \
|
--app-content "$SCRIPT_DIR"/src/I2P/config \
|
||||||
--app-content src/icons/windowsUIToopie2.png \
|
--app-content "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||||
--icon src/icons/windowsUIToopie2.png \
|
--icon "$SCRIPT_DIR"/src/icons/windowsUIToopie2.png \
|
||||||
--input build \
|
--input "$SCRIPT_DIR/build" \
|
||||||
--verbose \
|
--verbose \
|
||||||
--type msi \
|
--type msi \
|
||||||
--win-dir-chooser \
|
--win-dir-chooser \
|
26
buildscripts/nsis.sh
Executable file
26
buildscripts/nsis.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#! /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
|
||||||
|
|
||||||
|
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"
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/config.sh"
|
. "$SCRIPT_DIR/config.sh"
|
||||||
@ -9,5 +9,5 @@ if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
|||||||
. "$SCRIPT_DIR/config_override.sh"
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
./unsigned.sh
|
"$SCRIPT_DIR"/buildscripts/unsigned.sh
|
||||||
./sign.sh
|
"$SCRIPT_DIR"/buildscripts/sign.sh
|
@ -1,6 +1,6 @@
|
|||||||
#! /usr/bin/env bash
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
. "$SCRIPT_DIR/i2pversion"
|
. "$SCRIPT_DIR/i2pversion"
|
||||||
@ -40,6 +40,8 @@ if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
|||||||
linuxsign I2P-Easy-Install-Bundle-$I2P_VERSION.exe
|
linuxsign I2P-Easy-Install-Bundle-$I2P_VERSION.exe
|
||||||
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
||||||
else
|
else
|
||||||
signtool.exe sign -a "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
|
#signtool.exe sign -a "I2P-Easy-Install-Bundle-$I2P_VERSION.exe"
|
||||||
|
echo "WARNING: Signing is temporarily disabled for the installer."
|
||||||
|
sleep 5s
|
||||||
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
cp "I2P-Easy-Install-Bundle-$I2P_VERSION.exe" "I2P-Easy-Install-Bundle-$I2P_VERSION-signed.exe"
|
||||||
fi
|
fi
|
32
buildscripts/targz.sh
Executable file
32
buildscripts/targz.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
|
. "$SCRIPT_DIR/config.sh"
|
||||||
|
|
||||||
|
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
||||||
|
. "$SCRIPT_DIR/config_override.sh"
|
||||||
|
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
|
||||||
|
|
||||||
|
TORSOCKS=$(which torsocks)
|
||||||
|
if [ -f "${TORSOCKS}" ]; then
|
||||||
|
. "${TORSOCKS}" on
|
||||||
|
fi
|
||||||
|
"$SCRIPT_DIR"/src/unix/torbrowser.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
|
||||||
|
if [ -d /etc/default/locale ]; then
|
||||||
|
. /etc/default/locale
|
||||||
|
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||||
|
fi
|
||||||
|
rm -vrf "tor-browser_${locale}"
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
|
tar czvf I2P.tar.gz I2P
|
15
buildscripts/unsigned.sh
Executable file
15
buildscripts/unsigned.sh
Executable file
@ -0,0 +1,15 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
|
. "$SCRIPT_DIR/config.sh"
|
||||||
|
|
||||||
|
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
|
||||||
|
"$SCRIPT_DIR"/buildscripts/nsis.sh
|
26
buildscripts/version.sh
Executable file
26
buildscripts/version.sh
Executable file
@ -0,0 +1,26 @@
|
|||||||
|
#! /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
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
mkdir -p "$SCRIPT_DIR"/build
|
||||||
|
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
|
||||||
|
echo "$PROFILE_VERSION" > "$SCRIPT_DIR"/build/version.txt
|
||||||
|
sed 's|!define VERSION||g' "$SCRIPT_DIR"/src/nsis/i2pbrowser-version.nsi | sed 's| |=|g' > .version
|
33
buildscripts/zip.sh
Executable file
33
buildscripts/zip.sh
Executable file
@ -0,0 +1,33 @@
|
|||||||
|
#! /usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)/..
|
||||||
|
cd "$SCRIPT_DIR" || exit 1
|
||||||
|
|
||||||
|
. "$SCRIPT_DIR/config.sh"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
TORSOCKS=$(which torsocks)
|
||||||
|
if [ -f "${TORSOCKS}" ]; then
|
||||||
|
. "${TORSOCKS}" on
|
||||||
|
fi
|
||||||
|
"$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
|
||||||
|
if [ -d /etc/default/locale ]; then
|
||||||
|
. /etc/default/locale
|
||||||
|
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||||
|
fi
|
||||||
|
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
|
@ -1,3 +1,7 @@
|
|||||||
|
2022-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.
|
||||||
|
|
||||||
2022-09-20 idk
|
2022-09-20 idk
|
||||||
* improve compatibility with local service installs and with un-bundled installs side-by-side with bundled intalls
|
* improve compatibility with local service installs and with un-bundled installs side-by-side with bundled intalls
|
||||||
* version 1.9.7
|
* version 1.9.7
|
||||||
|
24
config.sh
24
config.sh
@ -10,17 +10,21 @@ uname=$(uname)
|
|||||||
# to use it for Oracle OpenJDK18
|
# to use it for Oracle OpenJDK18
|
||||||
|
|
||||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/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-18.0.2"
|
JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
export JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||||
|
HOST=win32
|
||||||
|
export HOST=win32
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${uname}" != "Linux" ]; then
|
if [ "${uname}" != "Linux" ]; then
|
||||||
PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/bin/"
|
PATH="/c/Program Files/Java/jdk-19/bin/:$PATH:/c/Program Files/Java/jdk-19/bin/"
|
||||||
export PATH="/c/Program Files/Java/jdk-18.0.2/bin/:$PATH:/c/Program Files/Java/jdk-18.0.2/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-18.0.2"
|
JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||||
export JAVA_HOME="/c/Program Files/Java/jdk-18.0.2"
|
export JAVA_HOME="/c/Program Files/Java/jdk-19"
|
||||||
|
HOST=win32
|
||||||
|
export HOST=win32
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@ -74,9 +78,13 @@ fi
|
|||||||
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
if [[ -n "$IS_WSL" || -n "$WSL_DISTRO_NAME" ]]; then
|
||||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||||
|
PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||||
|
export PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "${uname}" != "Linux" ]; then
|
if [ "${uname}" != "Linux" ]; then
|
||||||
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||||
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
export PATH="$PATH:/c/Program Files (x86)/Windows Kits/10/App Certification Kit/"
|
||||||
|
PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||||
|
export PATH="$PATH:C:\Users\user\Downloads\m4-1.4.14-1-bin\bin"
|
||||||
fi
|
fi
|
@ -1 +0,0 @@
|
|||||||
A browser profile and accompanying script for launching it. Used to combine I2P with Firefox in a reasonably safe way.
|
|
@ -1,15 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
|
||||||
|
|
||||||
. "$SCRIPT_DIR/config.sh"
|
|
||||||
|
|
||||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
|
||||||
. "$SCRIPT_DIR/config_override.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
./clean.sh
|
|
||||||
wsl make distclean
|
|
||||||
./build.sh
|
|
||||||
wsl make
|
|
@ -21,7 +21,7 @@ tunnel.0.type=httpclient
|
|||||||
tunnel.0.sharedClient=false
|
tunnel.0.sharedClient=false
|
||||||
tunnel.0.interface=127.0.0.1
|
tunnel.0.interface=127.0.0.1
|
||||||
tunnel.0.listenPort=4444
|
tunnel.0.listenPort=4444
|
||||||
tunnel.0.proxyList=false.i2p
|
tunnel.0.proxyList=exit.stormycloud.i2p
|
||||||
tunnel.0.i2cpHost=127.0.0.1
|
tunnel.0.i2cpHost=127.0.0.1
|
||||||
tunnel.0.i2cpPort=7654
|
tunnel.0.i2cpPort=7654
|
||||||
tunnel.0.option.inbound.nickname=HTTP Proxy
|
tunnel.0.option.inbound.nickname=HTTP Proxy
|
||||||
@ -31,7 +31,7 @@ tunnel.0.option.i2cp.reduceIdleTime=900000
|
|||||||
tunnel.0.option.i2cp.reduceOnIdle=true
|
tunnel.0.option.i2cp.reduceOnIdle=true
|
||||||
tunnel.0.option.i2cp.reduceQuantity=1
|
tunnel.0.option.i2cp.reduceQuantity=1
|
||||||
tunnel.0.option.i2p.streaming.connectDelay=1000
|
tunnel.0.option.i2p.streaming.connectDelay=1000
|
||||||
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=false.i2p
|
tunnel.0.option.i2ptunnel.httpclient.SSLOutproxies=exit.stormycloud.i2p
|
||||||
tunnel.0.option.inbound.length=3
|
tunnel.0.option.inbound.length=3
|
||||||
tunnel.0.option.inbound.lengthVariance=0
|
tunnel.0.option.inbound.lengthVariance=0
|
||||||
tunnel.0.option.outbound.length=3
|
tunnel.0.option.outbound.length=3
|
||||||
|
19
i2pversion
19
i2pversion
@ -1,16 +1,15 @@
|
|||||||
#! /usr/bin/env sh
|
#! /usr/bin/env sh
|
||||||
|
|
||||||
JNA_VERSION=5.11.0
|
JNA_VERSION=5.12.1
|
||||||
export JNA_VERSION=5.11.0
|
export JNA_VERSION=5.12.1
|
||||||
I2PFIREFOX_VERSION=0.0.36
|
I2PFIREFOX_VERSION=1.0.7
|
||||||
export I2PFIREFOX_VERSION=0.0.36
|
export I2PFIREFOX_VERSION=1.0.7
|
||||||
# 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=1
|
VERSIONMAJOR=2
|
||||||
VERSIONMINOR=9
|
VERSIONMINOR=1
|
||||||
VERSIONBUILD=7
|
VERSIONBUILD=0
|
||||||
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
export I2P_VERSION="$VERSIONMAJOR.$VERSIONMINOR.$VERSIONBUILD"
|
||||||
VERSION=i2p-jpackage-1.9.4
|
VERSION=i2p-2.1.0
|
||||||
export VERSION=i2p-jpackage-1.9.4
|
export VERSION=i2p-2.1.0
|
||||||
|
|
@ -46,7 +46,7 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
|||||||
if (copyDirectory(file, new File(newPath)))
|
if (copyDirectory(file, new File(newPath)))
|
||||||
return false;
|
return false;
|
||||||
if (file.isFile())
|
if (file.isFile())
|
||||||
if (!copyFile(file, new File(newPath), true))
|
if (0 == copyFile(file, new File(newPath), true))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -61,37 +61,52 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
|||||||
if (file.isDirectory())
|
if (file.isDirectory())
|
||||||
if (!copyConfigDirectory(file, new File(newPath)))
|
if (!copyConfigDirectory(file, new File(newPath)))
|
||||||
return false;
|
return false;
|
||||||
if (file.isFile())
|
if (file.isFile()) {
|
||||||
if (!copyFileNeverOverwrite(
|
int cnr = copyFileNeverOverwrite(file, new File(newPath));
|
||||||
file,
|
if (0 == cnr)
|
||||||
new File(newPath))) // new File(workDir, file.toString())))
|
|
||||||
return false;
|
return false;
|
||||||
|
if (1 == cnr) {
|
||||||
|
logger.info(
|
||||||
|
"using jpackaged configs in a jpackaged install, creating jpackaged file");
|
||||||
|
File jpackagedConfigsInUse = new File(appImageHome(), "jpackaged");
|
||||||
|
if (!jpackagedConfigsInUse.exists()) {
|
||||||
|
try {
|
||||||
|
jpackagedConfigsInUse.createNewFile();
|
||||||
|
} catch (IOException e) {
|
||||||
|
logger.warning(
|
||||||
|
"Error creating jpackaged file, delete config files manually when uninstalling");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (-1 == cnr) {
|
||||||
|
logger.info(
|
||||||
|
"not overwriting existing config file, not creating jpackaged file");
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean copyFileNeverOverwrite(String basePath,
|
public static int copyFileNeverOverwrite(String basePath, String workPath) {
|
||||||
String workPath) {
|
|
||||||
File baseFile = new File(basePath);
|
File baseFile = new File(basePath);
|
||||||
File workFile = new File(workPath);
|
File workFile = new File(workPath);
|
||||||
return copyFileNeverOverwrite(baseFile, workFile);
|
return copyFileNeverOverwrite(baseFile, workFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean copyFileNeverOverwrite(File basePath, File workPath) {
|
public static int copyFileNeverOverwrite(File basePath, File workPath) {
|
||||||
return copyFile(basePath, workPath, false);
|
return copyFile(basePath, workPath, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean copyFile(File basePath, File workPath,
|
public static int copyFile(File basePath, File workPath, boolean overWrite) {
|
||||||
boolean overWrite) {
|
|
||||||
if (!basePath.exists()) {
|
if (!basePath.exists()) {
|
||||||
logger.info(basePath.getAbsolutePath() + " doesn't exist, not copying");
|
logger.info(basePath.getAbsolutePath() + " doesn't exist, not copying");
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!overWrite && workPath.exists()) {
|
if (!overWrite && workPath.exists()) {
|
||||||
logger.info(workPath.getAbsolutePath() +
|
logger.info(workPath.getAbsolutePath() +
|
||||||
" already exists, not overwriting");
|
" already exists, not overwriting");
|
||||||
return true;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
File workDir = workPath.getParentFile();
|
File workDir = workPath.getParentFile();
|
||||||
@ -111,12 +126,12 @@ public class CopyConfigDir extends WindowsServiceUtil {
|
|||||||
}
|
}
|
||||||
in.close();
|
in.close();
|
||||||
out.close();
|
out.close();
|
||||||
return true;
|
return 1;
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
logger.warning(e.toString());
|
logger.warning(e.toString());
|
||||||
logger.warning("failed to copy " + basePath.getAbsolutePath() + " to " +
|
logger.warning("failed to copy " + basePath.getAbsolutePath() + " to " +
|
||||||
workPath.getAbsolutePath());
|
workPath.getAbsolutePath());
|
||||||
return false;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
setupLauncher();
|
setupLauncher();
|
||||||
initLogger();
|
initLogger();
|
||||||
boolean privateBrowsing = false;
|
int privateBrowsing = 0;
|
||||||
boolean usabilityMode = false;
|
boolean usabilityMode = false;
|
||||||
boolean chromiumFirst = false;
|
boolean chromiumFirst = false;
|
||||||
int proxyTimeoutTime = 200;
|
int proxyTimeoutTime = 200;
|
||||||
@ -46,7 +46,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
if (args.length > 0) {
|
if (args.length > 0) {
|
||||||
for (String arg : args) {
|
for (String arg : args) {
|
||||||
if (arg.equals("-private")) {
|
if (arg.equals("-private")) {
|
||||||
privateBrowsing = true;
|
privateBrowsing = 1;
|
||||||
logger.info(
|
logger.info(
|
||||||
"Private browsing is true, profile will be discarded at end of session.");
|
"Private browsing is true, profile will be discarded at end of session.");
|
||||||
} else if (arg.equals("-chromium")) {
|
} else if (arg.equals("-chromium")) {
|
||||||
@ -88,7 +88,9 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
File programs = programFile();
|
File programs = programFile();
|
||||||
File home = homeDir();
|
File home = homeDir();
|
||||||
|
|
||||||
System.setProperty("i2p.dir.base", programs.getAbsolutePath());
|
System.setProperty(
|
||||||
|
"i2p.dir.base",
|
||||||
|
new File(programs.getAbsolutePath(), "config").getAbsolutePath());
|
||||||
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
System.setProperty("i2p.dir.config", home.getAbsolutePath());
|
||||||
System.setProperty("router.pid",
|
System.setProperty("router.pid",
|
||||||
String.valueOf(ProcessHandle.current().pid()));
|
String.valueOf(ProcessHandle.current().pid()));
|
||||||
@ -153,15 +155,27 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void fixServiceConfig() {
|
private static void fixServiceConfig() {
|
||||||
|
if (osName() != "windows")
|
||||||
|
return;
|
||||||
// If the user installed the Easy bundle before installing the
|
// If the user installed the Easy bundle before installing the
|
||||||
// regulalr bundle, then they have a config file which contains the
|
// IzPack installer, then they have a config file which contains the
|
||||||
// wrong update URL. Check for it, and change it back if necessary.
|
// wrong update URL. Check for it, and change it back if necessary.
|
||||||
// closes #23
|
// closes #23
|
||||||
i2pRouter = new Router(routerConfig(), System.getProperties());
|
String routerconf = routerConfig();
|
||||||
|
if (routerconf != null) {
|
||||||
|
File routerconffile = new File(routerconf);
|
||||||
|
if (!routerconffile.exists()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (isInstalled("i2p") || checkProgramFilesInstall()) {
|
if (isInstalled("i2p") || checkProgramFilesInstall()) {
|
||||||
|
i2pRouter = new Router(routerconf, System.getProperties());
|
||||||
String newsURL = i2pRouter.getConfigSetting("router.newsURL");
|
String newsURL = i2pRouter.getConfigSetting("router.newsURL");
|
||||||
if (newsURL != null) {
|
if (newsURL != null) {
|
||||||
if (newsURL.contains("win/beta")) {
|
if (newsURL.contains(
|
||||||
|
"http://dn3tvalnjz432qkqsvpfdqrwpqkw3ye4n4i2uyfr4jexvo3sp5ka.b32.i2p/news/win/beta/news.su3")) {
|
||||||
logger.info(
|
logger.info(
|
||||||
"checked router.newsURL config, containes win/beta in a service install, invalid update type");
|
"checked router.newsURL config, containes win/beta in a service install, invalid update type");
|
||||||
if (i2pRouter.saveConfig("router.newsURL", ServiceUpdaterString())) {
|
if (i2pRouter.saveConfig("router.newsURL", ServiceUpdaterString())) {
|
||||||
@ -172,7 +186,8 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
}
|
}
|
||||||
String backupNewsURL = i2pRouter.getConfigSetting("router.backupNewsURL");
|
String backupNewsURL = i2pRouter.getConfigSetting("router.backupNewsURL");
|
||||||
if (backupNewsURL != null) {
|
if (backupNewsURL != null) {
|
||||||
if (backupNewsURL.contains("win/beta")) {
|
if (backupNewsURL.contains(
|
||||||
|
"http://tc73n4kivdroccekirco7rhgxdg5f3cjvbaapabupeyzrqwv5guq.b32.i2p/win/beta/news.su3")) {
|
||||||
logger.info(
|
logger.info(
|
||||||
"checked router.backupNewsURL config, containes win/beta in a service install, invalid update type");
|
"checked router.backupNewsURL config, containes win/beta in a service install, invalid update type");
|
||||||
if (i2pRouter.saveConfig("router.backupNewsURL",
|
if (i2pRouter.saveConfig("router.backupNewsURL",
|
||||||
@ -184,9 +199,10 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
}
|
}
|
||||||
String updateURL = i2pRouter.getConfigSetting("router.updateURL");
|
String updateURL = i2pRouter.getConfigSetting("router.updateURL");
|
||||||
if (updateURL != null) {
|
if (updateURL != null) {
|
||||||
if (updateURL.contains("i2pwinupdate.su3")) {
|
if (updateURL.contains(
|
||||||
|
"http://ekm3fu6fr5pxudhwjmdiea5dovc3jdi66hjgop4c7z7dfaw7spca.b32.i2p/i2pwinupdate.su3")) {
|
||||||
logger.info(
|
logger.info(
|
||||||
"checked router.updateURL config, containes win/beta in a service install, invalid update type");
|
"checked router.updateURL config, containes easy-intall update in a service install, invalid update type");
|
||||||
if (i2pRouter.saveConfig("router.updateURL",
|
if (i2pRouter.saveConfig("router.updateURL",
|
||||||
ServiceStaticUpdaterString())) {
|
ServiceStaticUpdaterString())) {
|
||||||
logger.info("updated routerconsole.browser config " +
|
logger.info("updated routerconsole.browser config " +
|
||||||
@ -230,7 +246,7 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
return home;
|
return home;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean launchBrowser(boolean privateBrowsing,
|
private static boolean launchBrowser(int privateBrowsing,
|
||||||
boolean usabilityMode,
|
boolean usabilityMode,
|
||||||
boolean chromiumFirst,
|
boolean chromiumFirst,
|
||||||
int proxyTimeoutTime,
|
int proxyTimeoutTime,
|
||||||
@ -299,6 +315,12 @@ public class WinLauncher extends CopyConfigDir {
|
|||||||
logger.info(e.toString());
|
logger.info(e.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
setNotStarting();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean checkStarting() {
|
private static boolean checkStarting() {
|
||||||
|
@ -62,13 +62,22 @@ class WinUpdateProcess implements Runnable {
|
|||||||
env.put("RESTART_I2P", "true");
|
env.put("RESTART_I2P", "true");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
pb.directory(workingDir)
|
Process p = pb.directory(workingDir)
|
||||||
.redirectErrorStream(true)
|
.redirectErrorStream(true)
|
||||||
.redirectOutput(logFile)
|
.redirectOutput(logFile)
|
||||||
.start();
|
.start();
|
||||||
|
exitCode = p.waitFor();
|
||||||
|
if (exitCode != 0)
|
||||||
|
_log.error("Update failed with exit code " + exitCode + " see " +
|
||||||
|
logFile.getAbsolutePath() + " for more details");
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
_log.error(
|
_log.error(
|
||||||
"Unable to run update-program in background. Update will fail.");
|
"Unable to run update program in background. Update will fail.",
|
||||||
|
ex);
|
||||||
|
} catch (InterruptedException ex) {
|
||||||
|
_log.error(
|
||||||
|
"Unable to run update program in background. Update will fail.",
|
||||||
|
ex);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// If we cant write to the log file and we're on Windows, use the elevator
|
// If we cant write to the log file and we're on Windows, use the elevator
|
||||||
|
@ -39,14 +39,27 @@ public class WindowsUpdatePostProcessor implements UpdatePostProcessor {
|
|||||||
String version, File file)
|
String version, File file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
_log.info("Got an update to post-process");
|
_log.info("Got an update to post-process");
|
||||||
if (SystemVersion.isWindows()) {
|
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
|
||||||
|
type != UpdateType.ROUTER_DEV_SU3) {
|
||||||
|
_log.warn("Unsupported update type " + type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (fileType != SU3File.TYPE_ZIP) {
|
||||||
|
this.positionedFile = moveUpdateInstaller(file);
|
||||||
|
this.version = version;
|
||||||
|
|
||||||
if (type != UpdateType.ROUTER_SIGNED_SU3 &&
|
if (!hook.compareAndSet(false, true)) {
|
||||||
type != UpdateType.ROUTER_DEV_SU3) {
|
_log.info("shutdown hook was already set");
|
||||||
_log.warn("Unsupported update type " + type);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_log.info("adding shutdown hook");
|
||||||
|
|
||||||
|
ctx.addFinalShutdownTask(
|
||||||
|
new ZipUpdateProcess(ctx, this::getVersion, this::getFile));
|
||||||
|
}
|
||||||
|
if (SystemVersion.isWindows()) {
|
||||||
|
|
||||||
if (fileType != SU3File.TYPE_EXE) {
|
if (fileType != SU3File.TYPE_EXE) {
|
||||||
_log.warn("Unsupported file type " + fileType);
|
_log.warn("Unsupported file type " + fileType);
|
||||||
return;
|
return;
|
||||||
|
112
java/net/i2p/router/ZipUpdateProcess.java
Normal file
112
java/net/i2p/router/ZipUpdateProcess.java
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package net.i2p.router;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.function.*;
|
||||||
|
import java.util.zip.ZipEntry;
|
||||||
|
import java.util.zip.ZipInputStream;
|
||||||
|
import net.i2p.I2PAppContext;
|
||||||
|
import net.i2p.router.*;
|
||||||
|
import net.i2p.util.Log;
|
||||||
|
|
||||||
|
public class ZipUpdateProcess implements Runnable {
|
||||||
|
private final RouterContext ctx;
|
||||||
|
private final Supplier<String> versionSupplier;
|
||||||
|
private final Supplier<File> fileSupplier;
|
||||||
|
private final Log _log;
|
||||||
|
|
||||||
|
ZipUpdateProcess(RouterContext ctx, Supplier<String> versionSupplier,
|
||||||
|
Supplier<File> fileSupplier) {
|
||||||
|
this.ctx = ctx;
|
||||||
|
this.versionSupplier = versionSupplier;
|
||||||
|
this.fileSupplier = fileSupplier;
|
||||||
|
this._log = ctx.logManager().getLog(ZipUpdateProcess.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private File workDir() throws IOException {
|
||||||
|
if (ctx != null) {
|
||||||
|
File workDir =
|
||||||
|
new File(ctx.getConfigDir().getAbsolutePath(), "i2p_update_zip");
|
||||||
|
if (workDir.exists()) {
|
||||||
|
if (workDir.isFile())
|
||||||
|
throw new IOException(workDir +
|
||||||
|
" exists but is a file, get it out of the way");
|
||||||
|
return workDir;
|
||||||
|
} else {
|
||||||
|
workDir.mkdirs();
|
||||||
|
}
|
||||||
|
return workDir;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unzipUpdateInstaller() throws IOException {
|
||||||
|
String version = versionSupplier.get();
|
||||||
|
File file = fileSupplier.get();
|
||||||
|
if (file == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
File workingDir = workDir();
|
||||||
|
File zipFile = new File(workingDir, "i2pupdate_portable.zip");
|
||||||
|
File destDir = ctx.getConfigDir();
|
||||||
|
|
||||||
|
String errors = unzip(zipFile.getAbsolutePath(), destDir.getAbsolutePath());
|
||||||
|
_log.error(errors);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
try {
|
||||||
|
unzipUpdateInstaller();
|
||||||
|
} catch (IOException ioe) {
|
||||||
|
_log.error("Error running updater, update may fail." + ioe);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// copied wholesale from this example:
|
||||||
|
// https://www.digitalocean.com/community/tutorials/java-unzip-file-example
|
||||||
|
// It doesn't check for zip-slips, but that's fine because if somebody's able
|
||||||
|
// to deliver a malicious update then they can just run code anyway so there's
|
||||||
|
// no point.
|
||||||
|
private static String unzip(String zipFilePath, String destDir) {
|
||||||
|
File dir = new File(destDir);
|
||||||
|
// create output directory if it doesn't exist
|
||||||
|
if (!dir.exists())
|
||||||
|
dir.mkdirs();
|
||||||
|
FileInputStream fis;
|
||||||
|
// buffer for read and write data to file
|
||||||
|
byte[] buffer = new byte[1024];
|
||||||
|
try {
|
||||||
|
fis = new FileInputStream(zipFilePath);
|
||||||
|
ZipInputStream zis = new ZipInputStream(fis);
|
||||||
|
ZipEntry ze = zis.getNextEntry();
|
||||||
|
while (ze != null) {
|
||||||
|
String fileName = ze.getName();
|
||||||
|
File newFile = new File(destDir + File.separator + fileName);
|
||||||
|
System.out.println("Unzipping to " + newFile.getAbsolutePath());
|
||||||
|
// create directories for sub directories in zip
|
||||||
|
new File(newFile.getParent()).mkdirs();
|
||||||
|
FileOutputStream fos = new FileOutputStream(newFile);
|
||||||
|
int len;
|
||||||
|
while ((len = zis.read(buffer)) > 0) {
|
||||||
|
fos.write(buffer, 0, len);
|
||||||
|
}
|
||||||
|
fos.close();
|
||||||
|
// close this ZipEntry
|
||||||
|
zis.closeEntry();
|
||||||
|
ze = zis.getNextEntry();
|
||||||
|
}
|
||||||
|
// close last ZipEntry
|
||||||
|
zis.closeEntry();
|
||||||
|
zis.close();
|
||||||
|
fis.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
return e.toString();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
88
launcher.sh
88
launcher.sh
@ -1,88 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
COUNT="Ten Nine Eight Seven Six Five Four Three Two One"
|
|
||||||
|
|
||||||
which java
|
|
||||||
export JAVA=$(java --version | tr -d 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\n' | cut -d ' ' -f 2 | cut -d '.' -f 1 | tr -d '\n\t\- ')
|
|
||||||
|
|
||||||
if [ "$JAVA" -lt "14" ]; then
|
|
||||||
echo "Java 14+ must be used to compile with jpackage, java is $JAVA"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
if [ "$JAVA" -lt "17" ]; then
|
|
||||||
echo "It is highly recommended that you use Java 17+ to build release packages"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z "${JAVA_HOME}" ]; then
|
|
||||||
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
|
||||||
fi
|
|
||||||
if [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
|
|
||||||
export JAVA_HOME=`type -p java|xargs readlink -f|xargs dirname|xargs dirname`
|
|
||||||
fi
|
|
||||||
echo "Building with: $JAVA, $JAVA_HOME"
|
|
||||||
sleep 5s
|
|
||||||
|
|
||||||
HERE="$PWD"
|
|
||||||
if [ ! -d "$HERE/../i2p.i2p.jpackage-build/" ]; then
|
|
||||||
git clone -b "$VERSION" https://i2pgit.org/i2p-hackers/i2p.i2p "$HERE/../i2p.i2p.jpackage-build/"
|
|
||||||
tar --exclude="$HERE/../i2p.i2p.jpackage-build/.git" -cvzf i2p.i2p.jpackage-build.tar.gz "$HERE/../i2p.i2p.jpackage-build/"
|
|
||||||
fi
|
|
||||||
cd "$HERE/../i2p.i2p.jpackage-build/"
|
|
||||||
for i in $COUNT; do
|
|
||||||
echo -n "$i...."; sleep 1s
|
|
||||||
done
|
|
||||||
ant distclean pkg || true
|
|
||||||
|
|
||||||
cd "$HERE"
|
|
||||||
export I2P_PKG="$HERE/../i2p.i2p.jpackage-build/pkg-temp"
|
|
||||||
export RES_DIR="$HERE/../i2p.i2p.jpackage-build/installer/resources"
|
|
||||||
export I2P_JARS="$I2P_PKG/lib"
|
|
||||||
export I2P_JBIGI="$HERE/../i2p.i2p.jpackage-build/installer/lib/jbigi"
|
|
||||||
|
|
||||||
echo "compiling custom launcher"
|
|
||||||
mkdir -p build
|
|
||||||
cp "$I2P_JARS"/*.jar build
|
|
||||||
if [ ! -f "$HERE/build/jna.jar" ]; then
|
|
||||||
wget -O "$HERE/build/jna.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna/$JNA_VERSION/jna-$JNA_VERSION.jar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$HERE/build/jna-platform.jar" ]; then
|
|
||||||
wget -O "$HERE/build/jna-platform.jar" "https://repo1.maven.org/maven2/net/java/dev/jna/jna-platform/$JNA_VERSION/jna-platform-$JNA_VERSION.jar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$HERE/build/i2pfirefox.jar" ]; then
|
|
||||||
wget -O "$HERE/build/i2pfirefox.jar" "https://github.com/eyedeekay/i2p.plugins.firefox/releases/download/$I2PFIREFOX_VERSION/i2pfirefox.jar"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cd java
|
|
||||||
"$JAVA_HOME"/bin/javac -d ../build -classpath "$HERE/build/i2pfirefox.jar:$HERE/build/jna.jar":"$HERE/build/jna-platform.jar":"$HERE/build/i2p.jar":"$HERE/build/router.jar":"$HERE/build/routerconsole.jar" \
|
|
||||||
net/i2p/router/CopyConfigDir.java \
|
|
||||||
net/i2p/router/Elevator.java \
|
|
||||||
net/i2p/router/Shell32X.java \
|
|
||||||
net/i2p/router/WinLauncher.java \
|
|
||||||
net/i2p/router/WindowsUpdatePostProcessor.java \
|
|
||||||
net/i2p/router/WinUpdateProcess.java \
|
|
||||||
net/i2p/router/WindowsServiceUtil.java
|
|
||||||
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
#echo "building launcher.jar"
|
|
||||||
cd build
|
|
||||||
"$JAVA_HOME"/bin/jar -cf launcher.jar net
|
|
||||||
cd ..
|
|
@ -1,4 +0,0 @@
|
|||||||
orig:
|
|
||||||
tar --exclude=debian --exclude=.git -cvzf ../i2p-firefox-profile_$(PROFILE_VERSION).orig.tar.gz .
|
|
||||||
|
|
||||||
## HOWTO: Don't bother. See http://i2pgit.org/idk/i2p.plugins.firefox debian jpackages.
|
|
@ -1 +0,0 @@
|
|||||||
# DEPRECATED: see https://i2pgit.org/idk/i2p.plugins.firefox for much better replacement.
|
|
@ -1 +0,0 @@
|
|||||||
#DEPRECATED moved to i2p.plugins.firefox as "Base/Strict Mode"
|
|
@ -1,39 +0,0 @@
|
|||||||
install:
|
|
||||||
install -D -m644 src/unix/i2pbrowserrc /etc/i2pbrowser/i2pbrowserrc
|
|
||||||
install -D -m644 src/unix/i2pbrowserdebianrc /etc/i2pbrowser/i2pbrowserdebianrc
|
|
||||||
install -D -m755 build/profile/i2pbrowser.sh /usr/local/bin/i2pbrowser
|
|
||||||
install -D -m755 build/app-profile/i2pconfig.sh /usr/local/bin/i2pconfig
|
|
||||||
install -D -m755 src/unix/i2p-config-service-setup.sh /usr/local/bin/i2p-config-service-setup
|
|
||||||
cp -vr build/profile /var/lib/i2pbrowser/profile
|
|
||||||
cp -vr build/app-profile /var/lib/i2pbrowser/app-profile
|
|
||||||
cp -vr src/icons /var/lib/i2pbrowser/icons
|
|
||||||
cp src/unix/desktop/i2pbrowser.desktop /usr/share/applications
|
|
||||||
cp src/unix/desktop/i2pconfig.desktop /usr/share/applications
|
|
||||||
|
|
||||||
uninstall:
|
|
||||||
rm -rfv /etc/i2pbrowser \
|
|
||||||
/var/lib/i2pbrowser \
|
|
||||||
/etc/i2pbrowser/i2pbrowserrc \
|
|
||||||
/usr/local/bin/i2pbrowser \
|
|
||||||
/usr/local/bin/i2pconfig \
|
|
||||||
/usr/local/bin/i2p-config-service-setup \
|
|
||||||
/usr/share/applications/i2pbrowser.desktop \
|
|
||||||
/usr/share/applications/i2pconfig.desktop
|
|
||||||
|
|
||||||
checkinstall: .version
|
|
||||||
checkinstall \
|
|
||||||
--default \
|
|
||||||
--install=no \
|
|
||||||
--fstrans=yes \
|
|
||||||
--pkgname=i2p-firefox \
|
|
||||||
--pkgversion=$(PROFILE_VERSION) \
|
|
||||||
--pkggroup=net \
|
|
||||||
--pkgrelease=1 \
|
|
||||||
--pkgsource="https://i2pgit.org/i2p-hackers/i2p.firefox" \
|
|
||||||
--maintainer="$(SIGNER)" \
|
|
||||||
--requires="firefox,wget" \
|
|
||||||
--suggests="i2p,i2p-router,syndie,tor,tsocks" \
|
|
||||||
--nodoc \
|
|
||||||
--deldoc=yes \
|
|
||||||
--deldesc=yes \
|
|
||||||
--backup=no
|
|
@ -1 +0,0 @@
|
|||||||
#DEPRECATED moved to i2p.plugins.firefox as "Usability Mode"
|
|
@ -7,11 +7,11 @@ $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools:
|
|||||||
go mod vendor && go build
|
go mod vendor && go build
|
||||||
|
|
||||||
prepupdate:
|
prepupdate:
|
||||||
cp -v "I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3" i2pwinupdate.su3
|
cp -v "I2P-Easy-Install-Bundle-$(PROFILE_VERSION)-signed.su3" i2pwinupdate.su3
|
||||||
|
|
||||||
su3: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
|
su3: $(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools
|
||||||
$(GOPATH)/src/i2pgit.org/idk/su3-tools/su3-tools -name "I2P-Profile-Installer-$(PROFILE_VERSION)-signed" -signer "$(SIGNER)" -version "$(I2P_VERSION)"
|
$(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-Profile-Installer-$(PROFILE_VERSION)-signed.exe I2P-Profile-Installer-$(PROFILE_VERSION)-signed.su3 "$(HOME)/.i2p-plugin-keys/news-su3-keystore.ks" $(PROFILE_VERSION) $(SIGNER)
|
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
|
i2pwinupdate.su3.torrent: prepupdate su3
|
||||||
mktorrent \
|
mktorrent \
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
||||||
<!-- This is an automatically generated file.
|
|
||||||
It will be read and overwritten.
|
|
||||||
DO NOT EDIT! -->
|
|
||||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
||||||
<TITLE>Bookmarks</TITLE>
|
|
||||||
<H1>Bookmarks Menu</H1>
|
|
||||||
|
|
||||||
<DL><p>
|
|
||||||
<DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649424">Recent Tags</A>
|
|
||||||
<HR> <DT><A HREF="http://legwork.i2p/yacysearch.html?query=%s&verify=cacheonly&contentdom=text&nav=location%2Chosts%2Cauthors%2Cnamespace%2Ctopics%2Cfiletype%2Cprotocol%2Clanguage&startRecord=0&indexof=off&meanCount=5&resource=global&prefermaskfilter=&maximumRecords=10&timezoneOffset=0" ADD_DATE="1539652098" LAST_MODIFIED="1539652098" SHORTCUTURL="legwork.i2p">Search YaCy 'legwork': Search Page</A>
|
|
||||||
<DD>Software HTTP Freeware Home Page
|
|
||||||
<DT><H3 ADD_DATE="1539649419" LAST_MODIFIED="1539649423" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
|
|
||||||
<DL><p>
|
|
||||||
<DT><A HREF="place:sort=8&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649423">Most Visited</A>
|
|
||||||
<DT><A HREF="http://i2p-projekt.i2p/" ADD_DATE="1538511080" LAST_MODIFIED="1538511080">I2P Anonymous Network</A>
|
|
||||||
<DD>Anonymous peer-to-peer distributed communication layer built with open source tools and designed to run any traditional Internet service such as email, IRC or web hosting.
|
|
||||||
</DL><p>
|
|
||||||
</DL>
|
|
@ -1,45 +0,0 @@
|
|||||||
@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
|
|
||||||
|
|
||||||
/* only needed once */
|
|
||||||
|
|
||||||
@namespace html url("http://www.w3.org/1999/xhtml");
|
|
||||||
#PersonalToolbar,
|
|
||||||
#PanelUI-Button,
|
|
||||||
#PanelUI-menu-button,
|
|
||||||
#star-button,
|
|
||||||
#forward-button,
|
|
||||||
#home-button,
|
|
||||||
#bookmarks-toolbar-button,
|
|
||||||
#library-button,
|
|
||||||
#sidebar-button,
|
|
||||||
#pocket-button,
|
|
||||||
#fxa-toolbar-menu-button,
|
|
||||||
#reader-mode-button,
|
|
||||||
#identity-icon {
|
|
||||||
visibility: collapse;
|
|
||||||
}
|
|
||||||
|
|
||||||
#urlbar-background {
|
|
||||||
background-color: black !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Remove back button circle */
|
|
||||||
|
|
||||||
#back-button:not(:hover),
|
|
||||||
#back-button:not(:hover)>.toolbarbutton-icon {
|
|
||||||
background: transparent !important;
|
|
||||||
border: none !important;
|
|
||||||
box-shadow: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#back-button:hover,
|
|
||||||
#back-button:hover>.toolbarbutton-icon {
|
|
||||||
border: none !important;
|
|
||||||
border-radius: 2px !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
#urlbar-container,
|
|
||||||
#nav-bar {
|
|
||||||
visibility: collapse !important
|
|
||||||
}
|
|
@ -1,65 +0,0 @@
|
|||||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
|
||||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
|
||||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
|
||||||
|
|
||||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
|
||||||
|
|
||||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
|
||||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
|
||||||
//configurable in a similar way to the host:port configuration when that happens.
|
|
||||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
|
||||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
|
||||||
|
|
||||||
user_pref("extensions.torlauncher.start_tor", false);
|
|
||||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
|
||||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
|
||||||
|
|
||||||
// Resist-fingerprinting and first-party isolation enable
|
|
||||||
|
|
||||||
user_pref("privacy.resistFingerprinting", true);
|
|
||||||
user_pref("privacy.firstparty.isolate", true);
|
|
||||||
|
|
||||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
|
||||||
|
|
||||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
|
||||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
|
||||||
user_pref("network.proxy.type", 1);
|
|
||||||
user_pref("network.proxy.http", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.http_port", 4444);
|
|
||||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ssl_port", 4444);
|
|
||||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ftp_port", 4444);
|
|
||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
|
||||||
user_pref("browser.startup.homepage", "about:blank");
|
|
||||||
user_pref("dom.security.https_only_mode", false);
|
|
||||||
user_pref("keyword.enabled", false);
|
|
||||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
|
||||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
|
||||||
|
|
||||||
user_pref("toolkit.legacyUserProfileCustomizations.stylesheets", true);
|
|
||||||
user_pref("extensions.pocket.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://127.0.0.1:7657/home,http://127.0.0.1:7657/i2psnark/,http://127.0.0.1:7657/susimail/");
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
|
||||||
user_pref("ui.use_standins_for_native_colors", true);
|
|
||||||
user_pref("webgl.disable-extensions", true);
|
|
||||||
user_pref("webgl.min_capability_mode", true);
|
|
||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|
||||||
user_pref("webgl.enable-webgl2", false);
|
|
||||||
user_pref("media.navigator.enabled", false);
|
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
|
||||||
user_pref("browser.display.use_system_colors", false);
|
|
||||||
user_pref("extensions.autoDisableScopes", 0);
|
|
||||||
user_pref("extensions.enabledScopes", 1);
|
|
Binary file not shown.
@ -1,229 +0,0 @@
|
|||||||
/*
|
|
||||||
Overrides#
|
|
||||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
|
||||||
for licensing information.
|
|
||||||
|
|
||||||
HTTPS Everywhere Preferences:
|
|
||||||
*/
|
|
||||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
|
||||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
|
||||||
|
|
||||||
/*
|
|
||||||
NoScript Preferences: #In order to disable all scripts by
|
|
||||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
|
||||||
and comment out the following line
|
|
||||||
*/
|
|
||||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
|
||||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.mandatory", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.ABE.enabled", false);
|
|
||||||
user_pref("noscript.ABE.notify", false);
|
|
||||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
|
||||||
user_pref("noscript.confirmUnblock", false);
|
|
||||||
user_pref("noscript.contentBlocker", true);
|
|
||||||
user_pref("noscript.firstRunRedirection", false);
|
|
||||||
user_pref("noscript.global", true);
|
|
||||||
user_pref("noscript.gtemp", "");
|
|
||||||
user_pref("noscript.opacizeObject", 3);
|
|
||||||
user_pref("noscript.forbidWebGL", true);
|
|
||||||
user_pref("noscript.forbidFonts", true);
|
|
||||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
|
||||||
user_pref("noscript.policynames", "");
|
|
||||||
user_pref("noscript.secureCookies", true);
|
|
||||||
user_pref("noscript.showAllowPage", false);
|
|
||||||
user_pref("noscript.showBaseDomain", false);
|
|
||||||
user_pref("noscript.showDistrust", false);
|
|
||||||
user_pref("noscript.showRecentlyBlocked", false);
|
|
||||||
user_pref("noscript.showTemp", false);
|
|
||||||
user_pref("noscript.showTempToPerm", false);
|
|
||||||
user_pref("noscript.showUntrusted", false);
|
|
||||||
user_pref("noscript.STS.enabled", false);
|
|
||||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
|
||||||
user_pref("noscript.temp", "");
|
|
||||||
user_pref("noscript.untrusted", "");
|
|
||||||
user_pref("noscript.forbidMedia", true);
|
|
||||||
user_pref("noscript.allowWhitelistUpdates", false);
|
|
||||||
user_pref("noscript.fixLinks", false);
|
|
||||||
// Now handled by plugins.click_to_play // Not in this one.
|
|
||||||
user_pref("noscript.forbidFlash", true);
|
|
||||||
user_pref("noscript.forbidSilverlight", true);
|
|
||||||
user_pref("noscript.forbidJava", true);
|
|
||||||
user_pref("noscript.forbidPlugins", true);
|
|
||||||
// Usability tweaks
|
|
||||||
user_pref("noscript.showPermanent", false);
|
|
||||||
user_pref("noscript.showTempAllowPage", true);
|
|
||||||
user_pref("noscript.showRevokeTemp", true);
|
|
||||||
user_pref("noscript.notify", false);
|
|
||||||
user_pref("noscript.autoReload", true);
|
|
||||||
user_pref("noscript.autoReload.allTabs", false);
|
|
||||||
user_pref("noscript.cascadePermissions", true);
|
|
||||||
user_pref("noscript.restrictSubdocScripting", true);
|
|
||||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
|
||||||
user_pref("noscript.volatilePrivatePermissions", true);
|
|
||||||
user_pref("noscript.clearClick", 0);
|
|
||||||
|
|
||||||
user_pref("intl.locale.matchOS", false);
|
|
||||||
|
|
||||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
|
||||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
|
||||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
|
||||||
|
|
||||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
|
||||||
|
|
||||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
|
||||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
|
||||||
//configurable in a similar way to the host:port configuration when that happens.
|
|
||||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
|
||||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
|
||||||
|
|
||||||
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
|
|
||||||
// I make it true, the SOCKS outproxy will have something to connect to. But I
|
|
||||||
// need to test more to find out if that's prudent.
|
|
||||||
user_pref("extensions.torlauncher.start_tor", false);
|
|
||||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
|
||||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
|
||||||
|
|
||||||
// Resist-fingerprinting and first-party isolation enable
|
|
||||||
|
|
||||||
user_pref("privacy.resistFingerprinting", true);
|
|
||||||
user_pref("privacy.firstparty.isolate", true);
|
|
||||||
|
|
||||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
|
||||||
|
|
||||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
|
||||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
|
||||||
user_pref("network.proxy.type", 1);
|
|
||||||
user_pref("network.proxy.http", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.http_port", 4444);
|
|
||||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ssl_port", 4444);
|
|
||||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ftp_port", 4444);
|
|
||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
|
||||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
|
||||||
|
|
||||||
// Privacy-harden and disable irrelevant features.
|
|
||||||
user_pref("app.normandy.api_url", "");
|
|
||||||
user_pref("app.normandy.enabled", false);
|
|
||||||
user_pref("app.update.auto", false);
|
|
||||||
user_pref("app.update.enabled", false);
|
|
||||||
user_pref("beacon.enabled", false);
|
|
||||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
|
||||||
user_pref("browser.cache.disk_cache_ssl", false);
|
|
||||||
user_pref("browser.cache.disk.enable", false);
|
|
||||||
user_pref("browser.cache.offline.enable", false);
|
|
||||||
user_pref("browser.disableResetPrompt", true);
|
|
||||||
user_pref("browser.display.use_document_fonts", 0);
|
|
||||||
user_pref("browser.fixup.alternate.enabled", false);
|
|
||||||
user_pref("browser.formfill.enable", false);
|
|
||||||
user_pref("browser.library.activity-stream.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
|
||||||
user_pref("browser.newtabpage.enhanced", false);
|
|
||||||
user_pref("browser.newtabpage.introShown", true);
|
|
||||||
user_pref("browser.newtab.preload", false);
|
|
||||||
user_pref("browser.onboarding.enabled", false);
|
|
||||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
|
||||||
user_pref("browser.safebrowsing.appRepURL", "");
|
|
||||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
|
||||||
user_pref("browser.safebrowsing.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
|
||||||
user_pref("browser.search.geoip.timeout", 1);
|
|
||||||
user_pref("browser.search.suggest.enabled", false);
|
|
||||||
user_pref("browser.selfsupport.url", "");
|
|
||||||
user_pref("browser.send_pings", false);
|
|
||||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
|
||||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
|
||||||
user_pref("browser.startup.page", 0);
|
|
||||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
|
||||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
|
||||||
user_pref("browser.urlbar.trimURLs", false);
|
|
||||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
|
||||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
|
||||||
user_pref("dom.battery.enabled", false);
|
|
||||||
user_pref("dom.enable_performance", false);
|
|
||||||
user_pref("dom.enable_performance_navigation_timing", false);
|
|
||||||
user_pref("dom.enable_resource_timing", false);
|
|
||||||
user_pref("dom.event.clipboardevents.enabled", false);
|
|
||||||
user_pref("dom.gamepad.enabled", false);
|
|
||||||
user_pref("dom.indexedDB.enabled", false);
|
|
||||||
user_pref("dom.min_timeout_value", 400);
|
|
||||||
user_pref("dom.push.connection.enabled", false);
|
|
||||||
user_pref("dom.push.enabled", false);
|
|
||||||
user_pref("dom.serviceWorkers.enabled", false);
|
|
||||||
user_pref("dom.serviceWorkers.interception.enabled", false);
|
|
||||||
user_pref("dom.storage.enabled", false);
|
|
||||||
user_pref("dom.webaudio.enabled", false);
|
|
||||||
user_pref("extensions.autoDisableScopes", 0);
|
|
||||||
user_pref("extensions.enabledScopes", 1);
|
|
||||||
user_pref("extensions.getAddons.cache.enabled", false);
|
|
||||||
user_pref("extensions.getAddons.showPane", false);
|
|
||||||
user_pref("extensions.pocket.enabled", false);
|
|
||||||
user_pref("extensions.screenshots.disabled", true);
|
|
||||||
user_pref("extensions.webservice.discoverURL", "");
|
|
||||||
user_pref("geo.enabled", false);
|
|
||||||
user_pref("geo.wifi.uri", "");
|
|
||||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
|
||||||
user_pref("javascript.options.shared_memory", false);
|
|
||||||
user_pref("layout.css.visited_links_enabled", false);
|
|
||||||
user_pref("media.autoplay.enabled", false);
|
|
||||||
user_pref("media.cache_size", 0);
|
|
||||||
user_pref("media.navigator.enabled", false);
|
|
||||||
user_pref("media.peerconnection.ice.no_host", true);
|
|
||||||
user_pref("media.video_stats.enabled", false);
|
|
||||||
user_pref("captivedetect.canonicalURL", "");
|
|
||||||
user_pref("network.captive-portal-service.enabled", false);
|
|
||||||
user_pref("network.cookie.cookieBehavior", 1);
|
|
||||||
user_pref("network.cookie.lifetimePolicy", 2);
|
|
||||||
user_pref("network.dns.disablePrefetch", true);
|
|
||||||
user_pref("network.http.referer.spoofSource", true);
|
|
||||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
|
||||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
|
||||||
user_pref("network.prefetch-next", false);
|
|
||||||
user_pref("privacy.donottrackheader.enabled", true);
|
|
||||||
user_pref("privacy.donottrackheader.value", 1);
|
|
||||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
|
||||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
|
||||||
user_pref("toolkit.telemetry.enabled", false);
|
|
||||||
user_pref("toolkit.telemetry.server", "");
|
|
||||||
user_pref("toolkit.telemetry.unified", false);
|
|
||||||
user_pref("webgl.disabled", true);
|
|
||||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
|
||||||
user_pref("breakpad.reportURL", "");
|
|
||||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("browser.newtabpage.enabled", true);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
|
||||||
user_pref("dom.security.https_only_mode", false);
|
|
||||||
user_pref("keyword.enabled", false);
|
|
||||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
|
||||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
|
||||||
user_pref("ui.use_standins_for_native_colors", true);
|
|
||||||
user_pref("webgl.disable-extensions", true);
|
|
||||||
user_pref("webgl.min_capability_mode", true);
|
|
||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|
||||||
user_pref("webgl.enable-webgl2", false);
|
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
|
||||||
user_pref("browser.privatebrowsing.autostart", false);
|
|
||||||
user_pref("browser.display.use_system_colors", false);
|
|
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
|||||||
1.9.7
|
|
Binary file not shown.
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 67 KiB |
@ -12,12 +12,125 @@
|
|||||||
!ifndef FindProcess
|
!ifndef FindProcess
|
||||||
!define FindProcess '!insertmacro FindProcess'
|
!define FindProcess '!insertmacro FindProcess'
|
||||||
|
|
||||||
|
!ifndef un.FindProcess
|
||||||
|
!define un.FindProcess '!insertmacro un.FindProcess'
|
||||||
|
|
||||||
!macro FindProcess ProcessList BoolReturn
|
!macro FindProcess ProcessList BoolReturn
|
||||||
Push '${ProcessList}'
|
Push '${ProcessList}'
|
||||||
Call FindProcess
|
Call FindProcess
|
||||||
Pop ${BoolReturn}
|
Pop ${BoolReturn}
|
||||||
!macroend
|
!macroend
|
||||||
|
|
||||||
|
!macro un.FindProcess ProcessList BoolReturn
|
||||||
|
Push '${ProcessList}'
|
||||||
|
Call un.FindProcess
|
||||||
|
Pop ${BoolReturn}
|
||||||
|
!macroend
|
||||||
|
|
||||||
|
Function un.FindProcess
|
||||||
|
# return True if any process in ProcessList is active
|
||||||
|
Exch $0 ; get ProcessList, save $0
|
||||||
|
Push $1
|
||||||
|
Push $2
|
||||||
|
Push $R0
|
||||||
|
Push $R1
|
||||||
|
Push $R2
|
||||||
|
|
||||||
|
StrCpy $2 "$0," ; $2 = ProcessList
|
||||||
|
|
||||||
|
Push 0 ; set return value = False
|
||||||
|
|
||||||
|
# method based upon one by Phoenix1701@gmail.com 1/27/07
|
||||||
|
|
||||||
|
System::Alloc 1024
|
||||||
|
Pop $R0 ; process list buffer
|
||||||
|
|
||||||
|
# get an array of all process ids
|
||||||
|
System::Call "Psapi::EnumProcesses(i R0, i 1024, *i .R1)i .r0"
|
||||||
|
${Unless} $0 = 0
|
||||||
|
|
||||||
|
IntOp $R1 $R1 / 4 ; Divide by sizeof(DWORD) to get $R1 process count
|
||||||
|
IntOp $R1 $R1 - 1 ; decr for 0 base loop
|
||||||
|
|
||||||
|
ClearErrors
|
||||||
|
${For} $R2 0 $R1
|
||||||
|
# get a PID from the array
|
||||||
|
IntOp $0 $R2 << 2
|
||||||
|
IntOp $0 $0 + $R0 ; buffer.dword[i]
|
||||||
|
System::Call "*$0(i .r0)" ; Get next PID
|
||||||
|
|
||||||
|
${Unless} $0 = 0
|
||||||
|
Push $0
|
||||||
|
Call un.GetProcessName
|
||||||
|
Pop $1
|
||||||
|
|
||||||
|
# is this process one we are looking for?
|
||||||
|
${WordFind} '$2' ',' 'E/$1' $0
|
||||||
|
${Unless} ${Errors}
|
||||||
|
# yes, change return value
|
||||||
|
Pop $0 ; discard old result
|
||||||
|
Push 1 ; set return True
|
||||||
|
|
||||||
|
# exit the loop
|
||||||
|
${Break}
|
||||||
|
${EndUnless}
|
||||||
|
${EndUnless}
|
||||||
|
${Next}
|
||||||
|
|
||||||
|
${EndUnless}
|
||||||
|
|
||||||
|
System::Free $R0
|
||||||
|
|
||||||
|
Pop $0 ; get return value
|
||||||
|
Pop $R2 ; restore registers
|
||||||
|
Pop $R1
|
||||||
|
Pop $R0
|
||||||
|
Pop $2
|
||||||
|
Pop $1
|
||||||
|
Exch $0
|
||||||
|
FunctionEnd
|
||||||
|
|
||||||
|
Function un.GetProcessName
|
||||||
|
# ( Pid -- ProcessName )
|
||||||
|
Exch $2 ; get Pid, save $2
|
||||||
|
Push $0
|
||||||
|
Push $1
|
||||||
|
Push $3
|
||||||
|
Push $R0
|
||||||
|
|
||||||
|
System::Call "Kernel32::OpenProcess(i 1040, i 0, i r2)i .r3"
|
||||||
|
|
||||||
|
StrCpy $2 "<unknown>" ; set return value
|
||||||
|
|
||||||
|
${Unless} $3 = 0 ; $3 is hProcess
|
||||||
|
# get hMod array
|
||||||
|
System::Alloc 1024
|
||||||
|
Pop $R0
|
||||||
|
|
||||||
|
# params: Pid, &hMod, sizeof(hMod), &cb
|
||||||
|
System::Call "Psapi::EnumProcessModules(i r3, i R0, i 1024, *i .r1)i .r0"
|
||||||
|
|
||||||
|
${Unless} $0 = 0
|
||||||
|
# get first hMod
|
||||||
|
System::Call "*$R0(i .r0)"
|
||||||
|
|
||||||
|
# get BaseName; params: Pid, hMod, szBuffer, sizeof(szBuffer)
|
||||||
|
System::Call "Psapi::GetModuleBaseName(i r3, i r0, t .r2, i 256)i .r0"
|
||||||
|
${EndUnless}
|
||||||
|
|
||||||
|
System::Free $R0
|
||||||
|
System::Call "kernel32::CloseHandle(i r3)"
|
||||||
|
${EndUnless}
|
||||||
|
|
||||||
|
Pop $R0 ; restore registers
|
||||||
|
Pop $3
|
||||||
|
Pop $1
|
||||||
|
Pop $0
|
||||||
|
Exch $2 ; save process name
|
||||||
|
FunctionEnd
|
||||||
|
!endif
|
||||||
|
|
||||||
|
|
||||||
Function FindProcess
|
Function FindProcess
|
||||||
# return True if any process in ProcessList is active
|
# return True if any process in ProcessList is active
|
||||||
Exch $0 ; get ProcessList, save $0
|
Exch $0 ; get ProcessList, save $0
|
||||||
|
@ -4,7 +4,7 @@ UniCode true
|
|||||||
!define APPNAME "I2PBrowser-Launcher"
|
!define APPNAME "I2PBrowser-Launcher"
|
||||||
!define COMPANYNAME "I2P"
|
!define COMPANYNAME "I2P"
|
||||||
!define DESCRIPTION "This is a tool which contains an I2P router, a bundled JVM, and a tool for automatically configuring a browser to use with I2P."
|
!define DESCRIPTION "This is a tool which contains an I2P router, a bundled JVM, and a tool for automatically configuring a browser to use with I2P."
|
||||||
!define I2P_MESSAGE "Could not find I2P. Installing portable Jpackaged I2P."
|
!define I2P_MESSAGE "Please choose a directory."
|
||||||
!define LAUNCH_TEXT "Start I2P?"
|
!define LAUNCH_TEXT "Start I2P?"
|
||||||
!define LICENSE_TITLE "Many Licenses"
|
!define LICENSE_TITLE "Many Licenses"
|
||||||
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
!define CONSOLE_URL "http://127.0.0.1:7657/home"
|
||||||
@ -13,12 +13,12 @@ UniCode true
|
|||||||
!include i2pbrowser-jpackage.nsi
|
!include i2pbrowser-jpackage.nsi
|
||||||
!include FindProcess.nsh
|
!include FindProcess.nsh
|
||||||
|
|
||||||
var I2PINSTEXE
|
#var INSTDIR
|
||||||
|
|
||||||
SetOverwrite on
|
SetOverwrite on
|
||||||
|
|
||||||
!define I2PINSTEXE
|
!define INSTDIR
|
||||||
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2p"
|
!define I2PINSTEXE_USERMODE "$LOCALAPPDATA\i2peasy"
|
||||||
|
|
||||||
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
!define RAM_NEEDED_FOR_64BIT 0x80000000
|
||||||
|
|
||||||
@ -122,18 +122,20 @@ PageEx license
|
|||||||
PageExEnd
|
PageExEnd
|
||||||
PageEx directory
|
PageEx directory
|
||||||
dirtext "${I2P_MESSAGE}"
|
dirtext "${I2P_MESSAGE}"
|
||||||
dirvar $I2PINSTEXE
|
dirvar $INSTDIR
|
||||||
PageCallbacks routerDetect
|
PageCallbacks routerDetect
|
||||||
PageExEnd
|
PageExEnd
|
||||||
Page instfiles
|
Page instfiles
|
||||||
|
|
||||||
Function .onInit
|
Function .onInit
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
# Note: This is all redundant and I know it.
|
||||||
|
# Admin installs have been migrated to user-mode installs.
|
||||||
|
# But I'm leaving it because I might need it again if I support service installs.
|
||||||
|
StrCpy $INSTDIR "${I2PINSTEXE_USERMODE}"
|
||||||
UserInfo::GetAccountType
|
UserInfo::GetAccountType
|
||||||
pop $0
|
pop $0
|
||||||
${If} $0 != "admin"
|
${If} $0 != "admin"
|
||||||
StrCpy $INSTDIR "$LOCALAPPDATA\${COMPANYNAME}\${APPNAME}"
|
StrCpy $INSTDIR "${I2PINSTEXE_USERMODE}"
|
||||||
StrCpy $I2PINSTEXE "${I2PINSTEXE_USERMODE}"
|
|
||||||
${EndIf}
|
${EndIf}
|
||||||
!insertmacro MUI_LANGDLL_DISPLAY
|
!insertmacro MUI_LANGDLL_DISPLAY
|
||||||
#Call ShouldInstall64Bit
|
#Call ShouldInstall64Bit
|
||||||
@ -141,34 +143,22 @@ Function .onInit
|
|||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function routerDetect
|
Function routerDetect
|
||||||
createDirectory $I2PINSTEXE
|
createDirectory $INSTDIR
|
||||||
SetOutPath $I2PINSTEXE\app
|
SetOutPath $INSTDIR\app
|
||||||
File /a /r "I2P\app\"
|
File /a /r "I2P\app\"
|
||||||
SetOutPath $I2PINSTEXE\runtime
|
SetOutPath $INSTDIR\runtime
|
||||||
File /a /r "I2P\runtime\"
|
File /a /r "I2P\runtime\"
|
||||||
SetOutPath $I2PINSTEXE
|
SetOutPath $INSTDIR\config
|
||||||
|
File /a /r "I2P\config\"
|
||||||
|
SetOutPath $INSTDIR
|
||||||
File /a /r "I2P\I2P.exe"
|
File /a /r "I2P\I2P.exe"
|
||||||
# The NSIS Installer uses an ico icon, the jpackage-only ones use png
|
# The NSIS Installer uses an ico icon, the jpackage-only ones use png
|
||||||
File /a /r "I2P\ui2pbrowser_icon.ico"
|
File /a /r "I2P\ui2pbrowser_icon.ico"
|
||||||
File "I2P\config\jpackaged"
|
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE\"
|
createDirectory "$INSTDIR\"
|
||||||
SetOutPath "$I2PINSTEXE\"
|
SetOutPath "$INSTDIR\"
|
||||||
IfFileExists $I2PINSTEXE\router.config +2 0
|
|
||||||
File /a /r "I2P/config/router.config"
|
|
||||||
IfFileExists $I2PINSTEXE\clients.config +2 0
|
|
||||||
File /a /r "I2P/config/clients.config"
|
|
||||||
IfFileExists $I2PINSTEXE\wrapper.config +2 0
|
|
||||||
File /a /r "I2P/config/wrapper.config"
|
|
||||||
IfFileExists $I2PINSTEXE\hosts.txt +2 0
|
|
||||||
File /a /r "I2P/config/hosts.txt"
|
|
||||||
IfFileExists $I2PINSTEXE\eepsite +2 0
|
|
||||||
File /a /r "I2P/config/eepsite"
|
|
||||||
IfFileExists $I2PINSTEXE\webapps +2 0
|
|
||||||
File /a /r "I2P/config/webapps"
|
|
||||||
File /a /r "I2P/config/certificates"
|
File /a /r "I2P/config/certificates"
|
||||||
File /a /r "I2P/config/geoip"
|
File /a /r "I2P/config/geoip"
|
||||||
File /a /r "I2P/config/i2ptunnel.config"
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
Function installerFunction
|
Function installerFunction
|
||||||
@ -178,62 +168,51 @@ Function installerFunction
|
|||||||
Sleep 500
|
Sleep 500
|
||||||
${LoopWhile} $0 <> 0
|
${LoopWhile} $0 <> 0
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
# delete the jpackaged file for safety. Remove this IMMEDIATELY after the next release.
|
||||||
|
# early-adopters and daily-build users may have to manually delete config files if they
|
||||||
|
# uninstall.
|
||||||
|
# RELATED: line 246
|
||||||
|
Delete "$INSTDIR\jpackaged"
|
||||||
|
|
||||||
# set the installation directory as the destination for the following actions
|
# set the installation directory as the destination for the following actions
|
||||||
createDirectory $INSTDIR
|
createDirectory $INSTDIR
|
||||||
SetOutPath $INSTDIR
|
SetOutPath $INSTDIR
|
||||||
File ui2pbrowser_icon.ico
|
File ui2pbrowser_icon.ico
|
||||||
|
|
||||||
# Update jpackaged I2P router, if it exists
|
# Update jpackaged I2P router
|
||||||
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
call routerDetect
|
||||||
createDirectory $I2PINSTEXE
|
|
||||||
SetOutPath $I2PINSTEXE
|
|
||||||
|
|
||||||
${If} ${Silent}
|
|
||||||
ReadEnvStr $0 OLD_I2P_VERSION
|
|
||||||
${If} $0 < ${I2P_VERSION}
|
|
||||||
call routerDetect
|
|
||||||
|
|
||||||
${EndIf}
|
|
||||||
${Else}
|
|
||||||
call routerDetect
|
|
||||||
|
|
||||||
${EndIf}
|
|
||||||
${EndIf}
|
|
||||||
|
|
||||||
# Install the launcher scripts
|
# Install the launcher scripts
|
||||||
createDirectory "$INSTDIR"
|
createDirectory "$INSTDIR"
|
||||||
#SetOutPath "$INSTDIR"
|
|
||||||
#File "win/*"
|
|
||||||
|
|
||||||
# Install the licenses
|
# Install the licenses
|
||||||
createDirectory "$INSTDIR\licenses"
|
createDirectory "$INSTDIR\licenses"
|
||||||
SetOutPath "$INSTDIR\licenses"
|
SetOutPath "$INSTDIR\licenses"
|
||||||
File /a /r "licenses/*"
|
File /a /r "licenses/*"
|
||||||
|
|
||||||
SetOutPath "$I2PINSTEXE"
|
SetOutPath "$INSTDIR"
|
||||||
createDirectory "$SMPROGRAMS\${APPNAME}"
|
createDirectory "$SMPROGRAMS\${APPNAME}"
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P.lnk" "$I2PINSTEXE\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" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$SMPROGRAMS\${APPNAME}\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
|
|
||||||
CreateShortCut "$DESKTOP\Browse I2P.lnk" "$I2PINSTEXE\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" "$I2PINSTEXE\I2P.exe -private" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
CreateShortCut "$DESKTOP\Browse I2P - Temporary Identity.lnk" "$INSTDIR\I2P.exe -private" "" "$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"
|
||||||
|
|
||||||
SetShellVarContext current
|
SetShellVarContext current
|
||||||
|
|
||||||
IfFileExists "$LOCALAPPDATA\I2P\eepsite\docroot" +2 0
|
IfFileExists "$INSTDIR\eepsite\docroot" +2 0
|
||||||
File /a /r "I2P\eepsite"
|
File /a /r "I2P\eepsite"
|
||||||
|
|
||||||
createDirectory "$I2PINSTEXE"
|
createDirectory "$INSTDIR"
|
||||||
SetOutPath "$I2PINSTEXE"
|
SetOutPath "$INSTDIR"
|
||||||
|
|
||||||
SetOutPath "$INSTDIR"
|
SetOutPath "$INSTDIR"
|
||||||
# create the uninstaller
|
# create the uninstaller
|
||||||
WriteUninstaller "$INSTDIR\uninstall-i2pbrowser.exe"
|
WriteUninstaller "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||||
|
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall I2P Easy-Install Bundle.lnk" "$INSTDIR\uninstall-i2pbrowser.exe" "" "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
|
|
||||||
# create a shortcut to the uninstaller
|
|
||||||
CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall-${APPNAME}.lnk" "$INSTDIR\uninstall-i2pbrowser.exe"
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
|
||||||
|
|
||||||
@ -244,14 +223,24 @@ SectionEnd
|
|||||||
|
|
||||||
# uninstaller section start
|
# uninstaller section start
|
||||||
Section "uninstall"
|
Section "uninstall"
|
||||||
# Uninstall the launcher scripts
|
# Don't try to uninstall until the router is fully shut down.
|
||||||
Delete $INSTDIR\*
|
${un.FindProcess} "I2P.exe" $0
|
||||||
rmDir /r "$INSTDIR\"
|
${If} $0 <> 0
|
||||||
${If} ${FileExists} "$I2PINSTEXE\jpackaged"
|
MessageBox MB_OK "I2P is still running, uninstaller is paused. Uninstaller will continue after I2P has shut down."
|
||||||
Delete $I2PINSTEXE\*
|
${Do}
|
||||||
rmDir /r "$I2PINSTEXE"
|
${un.FindProcess} "I2P.exe" $0
|
||||||
|
Sleep 500
|
||||||
|
${LoopWhile} $0 <> 0
|
||||||
${EndIf}
|
${EndIf}
|
||||||
|
|
||||||
|
# Uninstall the launcher scripts
|
||||||
|
rmDir /r "$INSTDIR\app"
|
||||||
|
rmDir /r "$INSTDIR\config"
|
||||||
|
rmDir /r "$INSTDIR\runtime"
|
||||||
|
Delete "$INSTDIR\ui2pbrowser_icon.ico"
|
||||||
|
Delete "$INSTDIR\windowsUItoopie2.png"
|
||||||
|
Delete "$INSTDIR\I2P.exe"
|
||||||
|
|
||||||
# Remove shortcuts and folders
|
# Remove shortcuts and folders
|
||||||
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
Delete "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk"
|
||||||
Delete "$SMPROGRAMS\${APPNAME}\Private Browsing-${APPNAME}.lnk"
|
Delete "$SMPROGRAMS\${APPNAME}\Private Browsing-${APPNAME}.lnk"
|
||||||
@ -262,16 +251,27 @@ Section "uninstall"
|
|||||||
Delete "$DESKTOP\${APPNAME}.lnk"
|
Delete "$DESKTOP\${APPNAME}.lnk"
|
||||||
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
|
Delete "$DESKTOP\Private Browsing-${APPNAME}.lnk"
|
||||||
rmDir /r "$SMPROGRAMS\${APPNAME}"
|
rmDir /r "$SMPROGRAMS\${APPNAME}"
|
||||||
rmDir /r "$INSTDIR\firefox.profile.i2p\extensions"
|
|
||||||
rmDir /r "$INSTDIR\firefox.profile.i2p"
|
|
||||||
rmDir /r "$LOCALAPPDATA\${APPNAME}"
|
|
||||||
rmDir /r "$INSTDIR"
|
|
||||||
|
|
||||||
|
#### SUPER SUPER EXTRA IMPORTANT!
|
||||||
|
### RELATED: line 169
|
||||||
|
## IF YOU DO THIS WRONG YOU WILL BREAK CONFIGS:
|
||||||
|
## The purpose of the `jpackaged` file has changed, as has the point
|
||||||
|
## where it is created.
|
||||||
|
# 1. The jpackaged file is now created only **after** the jpackage itself
|
||||||
|
# has migrated default configs into the $INSTDIR. IF THEY ALREADY EXIST,
|
||||||
|
# it WILL NOT BE CREATED, even if there is a jpackage present. This is
|
||||||
|
# intentional behavior.
|
||||||
|
# 2. The jpackaged file now indicates that the configurations were created
|
||||||
|
# by running the jpackage, and not by an un-bundled router. If it is not
|
||||||
|
# present, then we have already deleted everything we are responsible for
|
||||||
|
# and don't need to do the section below.
|
||||||
|
${If} ${FileExists} "$INSTDIR\jpackaged"
|
||||||
|
Delete $INSTDIR\*
|
||||||
|
rmDir /r "$INSTDIR"
|
||||||
|
${EndIf}
|
||||||
# delete the uninstaller
|
# delete the uninstaller
|
||||||
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
|
Delete "$INSTDIR\uninstall-i2pbrowser.exe"
|
||||||
|
|
||||||
# uninstaller section end
|
# uninstaller section end
|
||||||
|
|
||||||
SectionEnd
|
SectionEnd
|
||||||
|
|
||||||
!define MUI_FINISHPAGE_RUN
|
!define MUI_FINISHPAGE_RUN
|
||||||
@ -280,8 +280,8 @@ SectionEnd
|
|||||||
!insertmacro MUI_PAGE_FINISH
|
!insertmacro MUI_PAGE_FINISH
|
||||||
|
|
||||||
Function LaunchLink
|
Function LaunchLink
|
||||||
SetOutPath "$I2PINSTEXE"
|
SetOutPath "$INSTDIR"
|
||||||
StrCpy $OUTDIR $I2PINSTEXE
|
StrCpy $OUTDIR $INSTDIR
|
||||||
${If} ${Silent}
|
${If} ${Silent}
|
||||||
ReadEnvStr $0 RESTART_I2P
|
ReadEnvStr $0 RESTART_I2P
|
||||||
${If} $0 != ""
|
${If} $0 != ""
|
||||||
|
@ -1 +1 @@
|
|||||||
!define I2P_VERSION 1.9.7
|
!define I2P_VERSION
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
!define VERSIONMAJOR 1
|
!define VERSIONMAJOR 2
|
||||||
!define VERSIONMINOR 9
|
!define VERSIONMINOR 1
|
||||||
!define VERSIONBUILD 7
|
!define VERSIONBUILD 0
|
||||||
|
@ -1,19 +0,0 @@
|
|||||||
<!DOCTYPE NETSCAPE-Bookmark-file-1>
|
|
||||||
<!-- This is an automatically generated file.
|
|
||||||
It will be read and overwritten.
|
|
||||||
DO NOT EDIT! -->
|
|
||||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
|
|
||||||
<TITLE>Bookmarks</TITLE>
|
|
||||||
<H1>Bookmarks Menu</H1>
|
|
||||||
|
|
||||||
<DL><p>
|
|
||||||
<DT><A HREF="place:type=6&sort=14&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649424">Recent Tags</A>
|
|
||||||
<HR> <DT><A HREF="http://legwork.i2p/yacysearch.html?query=%s&verify=cacheonly&contentdom=text&nav=location%2Chosts%2Cauthors%2Cnamespace%2Ctopics%2Cfiletype%2Cprotocol%2Clanguage&startRecord=0&indexof=off&meanCount=5&resource=global&prefermaskfilter=&maximumRecords=10&timezoneOffset=0" ADD_DATE="1539652098" LAST_MODIFIED="1539652098" SHORTCUTURL="legwork.i2p">Search YaCy 'legwork': Search Page</A>
|
|
||||||
<DD>Software HTTP Freeware Home Page
|
|
||||||
<DT><H3 ADD_DATE="1539649419" LAST_MODIFIED="1539649423" PERSONAL_TOOLBAR_FOLDER="true">Bookmarks Toolbar</H3>
|
|
||||||
<DL><p>
|
|
||||||
<DT><A HREF="place:sort=8&maxResults=10" ADD_DATE="1539649423" LAST_MODIFIED="1539649423">Most Visited</A>
|
|
||||||
<DT><A HREF="http://i2p-projekt.i2p/" ADD_DATE="1538511080" LAST_MODIFIED="1538511080">I2P Anonymous Network</A>
|
|
||||||
<DD>Anonymous peer-to-peer distributed communication layer built with open source tools and designed to run any traditional Internet service such as email, IRC or web hosting.
|
|
||||||
</DL><p>
|
|
||||||
</DL>
|
|
@ -1,65 +0,0 @@
|
|||||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
|
||||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
|
||||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
|
||||||
|
|
||||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
|
||||||
|
|
||||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
|
||||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
|
||||||
//configurable in a similar way to the host:port configuration when that happens.
|
|
||||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
|
||||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
|
||||||
|
|
||||||
user_pref("extensions.torlauncher.start_tor", false);
|
|
||||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
|
||||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
|
||||||
|
|
||||||
// Resist-fingerprinting and first-party isolation enable
|
|
||||||
|
|
||||||
user_pref("privacy.resistFingerprinting", true);
|
|
||||||
user_pref("privacy.firstparty.isolate", true);
|
|
||||||
|
|
||||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
|
||||||
|
|
||||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
|
||||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
|
||||||
user_pref("network.proxy.type", 1);
|
|
||||||
user_pref("network.proxy.http", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.http_port", 4444);
|
|
||||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ssl_port", 4444);
|
|
||||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ftp_port", 4444);
|
|
||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
|
||||||
user_pref("browser.startup.homepage", "about:blank");
|
|
||||||
user_pref("dom.security.https_only_mode", false);
|
|
||||||
user_pref("keyword.enabled", false);
|
|
||||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
|
||||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
|
||||||
user_pref("extensions.pocket.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.topstories", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
|
||||||
user_pref("ui.use_standins_for_native_colors", true);
|
|
||||||
user_pref("webgl.disable-extensions", true);
|
|
||||||
user_pref("webgl.min_capability_mode", true);
|
|
||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|
||||||
user_pref("webgl.enable-webgl2", false);
|
|
||||||
user_pref("media.navigator.enabled", false);
|
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
|
||||||
user_pref("browser.privatebrowsing.autostart", false);
|
|
||||||
user_pref("browser.display.use_system_colors", false);
|
|
||||||
user_pref("dom.image-lazy-loading.enabled", false)
|
|
||||||
user_pref("extensions.autoDisableScopes", 0);
|
|
||||||
user_pref("extensions.enabledScopes", 1);
|
|
Binary file not shown.
@ -1,229 +0,0 @@
|
|||||||
/*
|
|
||||||
Overrides#
|
|
||||||
for Extension Preferences# Tor Browser Bundle# Do not edit this file.##This file is modified from a file included in the Tor Browser Bundle.##Copyright 2017 The Tor Project.See LICENSE.tor#
|
|
||||||
for licensing information.
|
|
||||||
|
|
||||||
HTTPS Everywhere Preferences:
|
|
||||||
*/
|
|
||||||
user_pref("extensions.https_everywhere._observatory.popup_shown", true);
|
|
||||||
user_pref("extensions.https_everywhere.toolbar_hint_shown", true);
|
|
||||||
|
|
||||||
/*
|
|
||||||
NoScript Preferences: #In order to disable all scripts by
|
|
||||||
default, uncomment the following line...#user_pref("capability.policy.maonoscript.javascript.enabled", "noAccess");#
|
|
||||||
and comment out the following line
|
|
||||||
*/
|
|
||||||
user_pref("capability.policy.maonoscript.javascript.enabled", "allAccess");
|
|
||||||
user_pref("capability.policy.maonoscript.sites", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.default", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.mandatory", "[System+Principal] about: about:tbupdate about:tor chrome: resource: blob: mediasource: moz-extension: moz-safe-about: about:neterror about:certerror about:feeds about:tabcrashed about:cache");
|
|
||||||
user_pref("noscript.ABE.enabled", false);
|
|
||||||
user_pref("noscript.ABE.notify", false);
|
|
||||||
user_pref("noscript.ABE.wanIpAsLocal", false);
|
|
||||||
user_pref("noscript.confirmUnblock", false);
|
|
||||||
user_pref("noscript.contentBlocker", true);
|
|
||||||
user_pref("noscript.firstRunRedirection", false);
|
|
||||||
user_pref("noscript.global", true);
|
|
||||||
user_pref("noscript.gtemp", "");
|
|
||||||
user_pref("noscript.opacizeObject", 3);
|
|
||||||
user_pref("noscript.forbidWebGL", true);
|
|
||||||
user_pref("noscript.forbidFonts", true);
|
|
||||||
user_pref("noscript.options.tabSelectedIndexes", "5,0,0");
|
|
||||||
user_pref("noscript.policynames", "");
|
|
||||||
user_pref("noscript.secureCookies", true);
|
|
||||||
user_pref("noscript.showAllowPage", false);
|
|
||||||
user_pref("noscript.showBaseDomain", false);
|
|
||||||
user_pref("noscript.showDistrust", false);
|
|
||||||
user_pref("noscript.showRecentlyBlocked", false);
|
|
||||||
user_pref("noscript.showTemp", false);
|
|
||||||
user_pref("noscript.showTempToPerm", false);
|
|
||||||
user_pref("noscript.showUntrusted", false);
|
|
||||||
user_pref("noscript.STS.enabled", false);
|
|
||||||
user_pref("noscript.subscription.lastCheck", -142148139);
|
|
||||||
user_pref("noscript.temp", "");
|
|
||||||
user_pref("noscript.untrusted", "");
|
|
||||||
user_pref("noscript.forbidMedia", true);
|
|
||||||
user_pref("noscript.allowWhitelistUpdates", false);
|
|
||||||
user_pref("noscript.fixLinks", false);
|
|
||||||
// Now handled by plugins.click_to_play // Not in this one.
|
|
||||||
user_pref("noscript.forbidFlash", true);
|
|
||||||
user_pref("noscript.forbidSilverlight", true);
|
|
||||||
user_pref("noscript.forbidJava", true);
|
|
||||||
user_pref("noscript.forbidPlugins", true);
|
|
||||||
// Usability tweaks
|
|
||||||
user_pref("noscript.showPermanent", false);
|
|
||||||
user_pref("noscript.showTempAllowPage", true);
|
|
||||||
user_pref("noscript.showRevokeTemp", true);
|
|
||||||
user_pref("noscript.notify", false);
|
|
||||||
user_pref("noscript.autoReload", true);
|
|
||||||
user_pref("noscript.autoReload.allTabs", false);
|
|
||||||
user_pref("noscript.cascadePermissions", true);
|
|
||||||
user_pref("noscript.restrictSubdocScripting", true);
|
|
||||||
user_pref("noscript.showVolatilePrivatePermissionsToggle", false);
|
|
||||||
user_pref("noscript.volatilePrivatePermissions", true);
|
|
||||||
user_pref("noscript.clearClick", 0);
|
|
||||||
|
|
||||||
user_pref("intl.locale.matchOS", false);
|
|
||||||
|
|
||||||
user_pref("extensions.https_everywhere._observatory.enabled", false);
|
|
||||||
user_pref("extensions.https_everywhere.options.autoUpdateRulesets", false);
|
|
||||||
user_pref("extensions.https_everywhere.globalEnabled", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_tor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.submit_during_nontor", false);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.use_custom_proxy", true);
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_host", "127.0.0.1");
|
|
||||||
user_pref("extensions.https_everywhere._observatory.proxy_port", 4444);
|
|
||||||
|
|
||||||
user_pref("extensions.torbutton.use_nontor_proxy", true);
|
|
||||||
|
|
||||||
//For socket conversion: in the future, I'll need to make TBB communicate with
|
|
||||||
//i2p over a unix socket. Fortunately, this is how you do that. It will be
|
|
||||||
//configurable in a similar way to the host:port configuration when that happens.
|
|
||||||
//user_pref("extensions.torlauncher.socks_port_use_ipc", );
|
|
||||||
//user_pref("extensions.torlauncher.socks_ipc_path", "");
|
|
||||||
|
|
||||||
// TODO: this is a Tor Browser specific setting which is ignored on Firefox. If
|
|
||||||
// I make it true, the SOCKS outproxy will have something to connect to. But I
|
|
||||||
// need to test more to find out if that's prudent.
|
|
||||||
user_pref("extensions.torlauncher.start_tor", false);
|
|
||||||
//user_pref("extensions.torlauncher.default_bridge_type", "");
|
|
||||||
user_pref("extensions.torlauncher.prompt_at_startup", false);
|
|
||||||
|
|
||||||
// Resist-fingerprinting and first-party isolation enable
|
|
||||||
|
|
||||||
user_pref("privacy.resistFingerprinting", true);
|
|
||||||
user_pref("privacy.firstparty.isolate", true);
|
|
||||||
|
|
||||||
// Use i2p http proxy for all connections and set homepage to safe local form.
|
|
||||||
|
|
||||||
// DON'T allow access to the admin panel from the profile we browse i2p with.
|
|
||||||
user_pref("network.proxy.no_proxies_on", "127.0.0.1:7657,localhost:7657,127.0.0.1:7662,localhost:7662,127.0.0.1:7669,localhost:7669");
|
|
||||||
user_pref("network.proxy.type", 1);
|
|
||||||
user_pref("network.proxy.http", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.http_port", 4444);
|
|
||||||
user_pref("network.proxy.ssl", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ssl_port", 4444);
|
|
||||||
user_pref("network.proxy.ftp", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.ftp_port", 4444);
|
|
||||||
user_pref("network.proxy.socks", "127.0.0.1");
|
|
||||||
user_pref("network.proxy.socks_port", 4444);
|
|
||||||
user_pref("network.proxy.share_proxy_settings", true);
|
|
||||||
user_pref("browser.startup.homepage", "http://127.0.0.1:7657/home");
|
|
||||||
|
|
||||||
// Privacy-harden and disable irrelevant features.
|
|
||||||
user_pref("app.normandy.api_url", "");
|
|
||||||
user_pref("app.normandy.enabled", false);
|
|
||||||
user_pref("app.update.auto", false);
|
|
||||||
user_pref("app.update.enabled", false);
|
|
||||||
user_pref("beacon.enabled", false);
|
|
||||||
user_pref("browser.aboutHomeSnippets.updateUrl", "");
|
|
||||||
user_pref("browser.cache.disk_cache_ssl", false);
|
|
||||||
user_pref("browser.cache.disk.enable", false);
|
|
||||||
user_pref("browser.cache.offline.enable", false);
|
|
||||||
user_pref("browser.disableResetPrompt", true);
|
|
||||||
user_pref("browser.display.use_document_fonts", 0);
|
|
||||||
user_pref("browser.fixup.alternate.enabled", false);
|
|
||||||
user_pref("browser.formfill.enable", false);
|
|
||||||
user_pref("browser.library.activity-stream.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.disableSnippets", true);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.enabled", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.section.highlights", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.snippets", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.prerender", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSearch", false);
|
|
||||||
user_pref("browser.newtabpage.enhanced", false);
|
|
||||||
user_pref("browser.newtabpage.introShown", true);
|
|
||||||
user_pref("browser.newtab.preload", false);
|
|
||||||
user_pref("browser.onboarding.enabled", false);
|
|
||||||
user_pref("browser.pagethumbnails.capturing_disabled", true);
|
|
||||||
user_pref("browser.safebrowsing.appRepURL", "");
|
|
||||||
user_pref("browser.safebrowsing.blockedURIs.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.remote.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.downloads.remote.url", "");
|
|
||||||
user_pref("browser.safebrowsing.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.malware.enabled", false);
|
|
||||||
user_pref("browser.safebrowsing.phishing.enabled", false);
|
|
||||||
user_pref("browser.search.geoip.timeout", 1);
|
|
||||||
user_pref("browser.search.suggest.enabled", false);
|
|
||||||
user_pref("browser.selfsupport.url", "");
|
|
||||||
user_pref("browser.send_pings", false);
|
|
||||||
user_pref("browser.shell.checkDefaultBrowser", false);
|
|
||||||
user_pref("browser.startup.homepage_override.mstone", "ignore");
|
|
||||||
user_pref("browser.startup.page", 0);
|
|
||||||
user_pref("browser.toolbarbuttons.introduced.pocket-button", true);
|
|
||||||
user_pref("browser.urlbar.speculativeConnect.enabled", false);
|
|
||||||
user_pref("browser.urlbar.trimURLs", false);
|
|
||||||
user_pref("datareporting.healthreport.uploadEnabled", false);
|
|
||||||
user_pref("datareporting.policy.dataSubmissionEnabled", false);
|
|
||||||
user_pref("dom.battery.enabled", false);
|
|
||||||
user_pref("dom.enable_performance", false);
|
|
||||||
user_pref("dom.enable_performance_navigation_timing", false);
|
|
||||||
user_pref("dom.enable_resource_timing", false);
|
|
||||||
user_pref("dom.event.clipboardevents.enabled", false);
|
|
||||||
user_pref("dom.gamepad.enabled", false);
|
|
||||||
user_pref("dom.indexedDB.enabled", false);
|
|
||||||
user_pref("dom.min_timeout_value", 400);
|
|
||||||
user_pref("dom.push.connection.enabled", false);
|
|
||||||
user_pref("dom.push.enabled", false);
|
|
||||||
user_pref("dom.serviceWorkers.enabled", false);
|
|
||||||
user_pref("dom.serviceWorkers.interception.enabled", false);
|
|
||||||
user_pref("dom.storage.enabled", false);
|
|
||||||
user_pref("dom.webaudio.enabled", false);
|
|
||||||
user_pref("extensions.autoDisableScopes", 0);
|
|
||||||
user_pref("extensions.enabledScopes", 1);
|
|
||||||
user_pref("extensions.getAddons.cache.enabled", false);
|
|
||||||
user_pref("extensions.getAddons.showPane", false);
|
|
||||||
user_pref("extensions.pocket.enabled", false);
|
|
||||||
user_pref("extensions.screenshots.disabled", true);
|
|
||||||
user_pref("extensions.webservice.discoverURL", "");
|
|
||||||
user_pref("geo.enabled", false);
|
|
||||||
user_pref("geo.wifi.uri", "");
|
|
||||||
user_pref("gfx.downloadable_fonts.disable_cache", true);
|
|
||||||
user_pref("javascript.options.shared_memory", false);
|
|
||||||
user_pref("layout.css.visited_links_enabled", false);
|
|
||||||
user_pref("media.autoplay.enabled", false);
|
|
||||||
user_pref("media.cache_size", 0);
|
|
||||||
user_pref("media.navigator.enabled", false);
|
|
||||||
user_pref("media.peerconnection.ice.no_host", true);
|
|
||||||
user_pref("media.video_stats.enabled", false);
|
|
||||||
user_pref("captivedetect.canonicalURL", "");
|
|
||||||
user_pref("network.captive-portal-service.enabled", false);
|
|
||||||
user_pref("network.cookie.cookieBehavior", 1);
|
|
||||||
user_pref("network.cookie.lifetimePolicy", 2);
|
|
||||||
user_pref("network.dns.disablePrefetch", true);
|
|
||||||
user_pref("network.http.referer.spoofSource", true);
|
|
||||||
user_pref("network.http.referer.trimmingPolicy", 2);
|
|
||||||
user_pref("network.http.referer.XOriginPolicy", 2);
|
|
||||||
user_pref("network.prefetch-next", false);
|
|
||||||
user_pref("privacy.donottrackheader.enabled", true);
|
|
||||||
user_pref("privacy.donottrackheader.value", 1);
|
|
||||||
user_pref("toolkit.telemetry.archive.enabled", false);
|
|
||||||
user_pref("toolkit.telemetry.coverage.opt-out", true);
|
|
||||||
user_pref("toolkit.telemetry.enabled", false);
|
|
||||||
user_pref("toolkit.telemetry.server", "");
|
|
||||||
user_pref("toolkit.telemetry.unified", false);
|
|
||||||
user_pref("webgl.disabled", true);
|
|
||||||
user_pref("browser.chrome.errorReporter.infoURL", "");
|
|
||||||
user_pref("breakpad.reportURL", "");
|
|
||||||
//user_pref("browser.newtabpage.activity-stream.default.sites", "");
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsoredTopSites", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("services.sync.prefs.sync.browser.newtabpage.activity-stream.showSponsored", false);
|
|
||||||
user_pref("browser.newtabpage.enabled", true);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.default.sites", "http://planet.i2p/,http://legwork.i2p/,http://i2pwiki.i2p/,http://i2pforums.i2p/,http://zzz.i2p/");
|
|
||||||
user_pref("dom.security.https_only_mode", false);
|
|
||||||
user_pref("keyword.enabled", false);
|
|
||||||
user_pref("extensions.allowPrivateBrowsingByDefault", true);
|
|
||||||
user_pref("extensions.PrivateBrowsing.notification", false);
|
|
||||||
user_pref("browser.newtabpage.activity-stream.feeds.topsites", true);
|
|
||||||
user_pref("ui.use_standins_for_native_colors", true);
|
|
||||||
user_pref("webgl.disable-extensions", true);
|
|
||||||
user_pref("webgl.min_capability_mode", true);
|
|
||||||
user_pref("webgl.disable-fail-if-major-performance-caveat", true);
|
|
||||||
user_pref("webgl.enable-webgl2", false);
|
|
||||||
user_pref("dom.w3c_touch_events.enabled", false);
|
|
||||||
user_pref("browser.privatebrowsing.autostart", false);
|
|
||||||
user_pref("browser.display.use_system_colors", false);
|
|
1353
src/profile/user.js
1353
src/profile/user.js
File diff suppressed because it is too large
Load Diff
@ -1 +0,0 @@
|
|||||||
1.9.7
|
|
@ -1,9 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Exec=/usr/bin/i2pbrowser.sh
|
|
||||||
Name=I2P Browser
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
|
@ -1,9 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Exec=/usr/local/bin/i2pbrowser
|
|
||||||
Name=I2P Browser
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
|
@ -1,9 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Exec=/usr/bin/i2pconfig.sh
|
|
||||||
Name=I2P Configuration
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
|
@ -1,9 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Encoding=UTF-8
|
|
||||||
Version=1.0
|
|
||||||
Type=Application
|
|
||||||
Terminal=false
|
|
||||||
Exec=/usr/local/bin/i2pconfig
|
|
||||||
Name=I2P Configuration
|
|
||||||
Categories=Network;WebBrowser;
|
|
||||||
Icon=/var/lib/i2pbrowser/icons/ui2pbrowser_icon.ico
|
|
@ -1,21 +0,0 @@
|
|||||||
#! /usr/bin/env sh
|
|
||||||
|
|
||||||
# Works for Debian service installs. Sets up minified, custom profile for configuring I2P console.
|
|
||||||
|
|
||||||
if grep '^i2psvc:' /etc/passwd; then
|
|
||||||
I2P_HOME=$(grep '^i2psvc:' /etc/passwd | sed 's|i2psvc:x:||g' | sed 's|:/usr/sbin/nologin||g' | tr -d ':1234567890' | sed 's|ip|i2p|g')
|
|
||||||
ROUTER_CONFIG=$(sudo -u i2psvc ls $I2P_HOME/i2p-config/router.config)
|
|
||||||
fi
|
|
||||||
|
|
||||||
installer(){
|
|
||||||
|
|
||||||
if [ $(sudo -u i2psvc ls $I2P_HOME/i2p-config/router.config) ]; then
|
|
||||||
echo $I2P_HOME $ROUTER_CONFIG $0
|
|
||||||
if ! sudo -u i2psvc grep -R 'routerconsole.browser' "$I2P_HOME/i2p-config/router.config" ; then
|
|
||||||
echo "routerconsole.browser=/usr/local/bin/i2pconfig" | sudo tee -a "$I2P_HOME/i2p-config/router.config"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
installer
|
|
@ -1,44 +0,0 @@
|
|||||||
#! /usr/bin/env sh
|
|
||||||
|
|
||||||
if [ -f "/etc/i2pbrowser/i2pbrowserrc" ]; then
|
|
||||||
. /etc/i2pbrowser/i2pbrowserrc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z $I2PROUTER ]; then
|
|
||||||
"$I2PROUTER" start
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $BROWSING_PROFILE ]; then
|
|
||||||
BROWSING_PROFILE="."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "$BROWSING_PROFILE" ]; then
|
|
||||||
mkdir -p "$BROWSING_PROFILE"
|
|
||||||
cp -vr /var/lib/i2pbrowser/profile/* "$BROWSING_PROFILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$BROWSING_PROFILE/user.js" ]; then
|
|
||||||
echo "user.js not present in $BROWSING_PROFILE, this is not a Firefox profile"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
if [ -f "firefox/firefox" ]; then
|
|
||||||
FIREFOX="./firefox/firefox"
|
|
||||||
fi
|
|
||||||
FIREFOX=$(which firefox-esr)
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
FIREFOX=$(which firefox)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
echo "Firefox does not appear to be in your \$PATH."
|
|
||||||
echo "Please install Firefox via a package manager, or"
|
|
||||||
echo "or set the FIREFOX variable in your shell to the"
|
|
||||||
echo "location of a Firefox executable."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo $FIREFOX --profile "$BROWSING_PROFILE" $@
|
|
||||||
$FIREFOX --profile "$BROWSING_PROFILE" $@
|
|
@ -1,17 +0,0 @@
|
|||||||
|
|
||||||
I2PROUTER=$(which i2prouter)
|
|
||||||
|
|
||||||
if [ -z $I2PROUTER ]; then
|
|
||||||
I2PROUTER=/usr/sbin/i2prouter
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $I2PROUTER ]; then
|
|
||||||
I2PROUTER="$HOME/i2p/i2prouter"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f $I2PROUTER ]; then
|
|
||||||
I2PROUTER=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
wget -q -O - "http://localhost:7657" >/dev/null && I2PROUTER=""
|
|
||||||
echo "$I2PROUTER"
|
|
@ -1,8 +0,0 @@
|
|||||||
|
|
||||||
if [ -f /etc/i2pbrowser/i2pbrowserdebianrc ]; then
|
|
||||||
. /etc/i2pbrowser/i2pbrowserdebianrc
|
|
||||||
fi
|
|
||||||
|
|
||||||
CONFIGURING_PROFILE=$HOME/i2p/firefox/webapps
|
|
||||||
BROWSING_PROFILE=$HOME/i2p/firefox/browsing
|
|
||||||
ROUTER_CONSOLE="127.0.0.1:7657"
|
|
@ -1,60 +0,0 @@
|
|||||||
#! /usr/bin/env sh
|
|
||||||
|
|
||||||
if [ -f "/etc/i2pbrowser/i2pbrowserrc" ]; then
|
|
||||||
. /etc/i2pbrowser/i2pbrowserrc
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -z $I2PROUTER ]; then
|
|
||||||
"$I2PROUTER" start
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f "$HOME/.i2p/router.config" ]; then
|
|
||||||
if [ "$0" = "/usr/local/bin/i2pconfig" ]; then
|
|
||||||
if ! grep -R 'routerconsole.browser' "$HOME/.i2p/router.config" ; then
|
|
||||||
echo "routerconsole.browser=$0" | tee -a "$HOME/.i2p/router.config"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $CONFIGURING_PROFILE ]; then
|
|
||||||
CONFIGURING_PROFILE="."
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $ROUTER_CONSOLE ]; then
|
|
||||||
ROUTER_CONSOLE="$1"
|
|
||||||
if [ -z $1 ]; then
|
|
||||||
ROUTER_CONSOLE="http://127.0.0.1:7657"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -d "$CONFIGURING_PROFILE" ]; then
|
|
||||||
mkdir -p "$CONFIGURING_PROFILE"
|
|
||||||
cp -vr /var/lib/i2pbrowser/app-profile/* "$CONFIGURING_PROFILE"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$CONFIGURING_PROFILE/user.js" ]; then
|
|
||||||
echo "user.js not present in $CONFIGURING_PROFILE, this is not a Firefox profile"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
if [ -f "firefox/firefox" ]; then
|
|
||||||
FIREFOX="./firefox/firefox"
|
|
||||||
fi
|
|
||||||
FIREFOX=$(which firefox-esr)
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
FIREFOX=$(which firefox)
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -z $FIREFOX ]; then
|
|
||||||
echo "Firefox does not appear to be in your \$PATH."
|
|
||||||
echo "Please install Firefox via a package manager, or"
|
|
||||||
echo "or set the FIREFOX variable in your shell to the"
|
|
||||||
echo "location of a Firefox executable."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo $FIREFOX --profile "$CONFIGURING_PROFILE" "$ROUTER_CONSOLE" $@
|
|
||||||
|
|
||||||
$FIREFOX --profile "$CONFIGURING_PROFILE" "$ROUTER_CONSOLE" $@
|
|
27
src/unix/torbrowser.sh
Executable file
27
src/unix/torbrowser.sh
Executable file
@ -0,0 +1,27 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TORSOCKS=$(which torsocks)
|
||||||
|
if [ -f "${TORSOCKS}" ]; then
|
||||||
|
. "${TORSOCKS}" on
|
||||||
|
fi
|
||||||
|
|
||||||
|
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||||
|
locale="en-US" # mention your locale. default = en-US
|
||||||
|
if [ -d /etc/default/locale ]; then
|
||||||
|
. /etc/default/locale
|
||||||
|
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ./tor.keyring ]; then
|
||||||
|
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
|
||||||
|
gpg --output ./tor.keyring --export torbrowser@torproject.org
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
|
||||||
|
gpgv --keyring ./tor.keyring "tor-browser-linux64-${version}_${locale}.tar.xz.asc" "tor-browser-linux64-${version}_${locale}.tar.xz"
|
||||||
|
|
||||||
|
tar xvJf "tor-browser-linux64-${version}_${locale}.tar.xz"
|
38
src/win/torbrowser-windows.sh
Executable file
38
src/win/torbrowser-windows.sh
Executable file
@ -0,0 +1,38 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
TORSOCKS=$(which torsocks)
|
||||||
|
#if [ -f "${TORSOCKS}" ]; then
|
||||||
|
# . "${TORSOCKS}" on
|
||||||
|
#fi
|
||||||
|
|
||||||
|
version="$(curl -s https://aus1.torproject.org/torbrowser/update_3/release/downloads.json | jq -r ".version")"
|
||||||
|
locale="en-US" # mention your locale. default = en-US
|
||||||
|
if [ -d /etc/default/locale ]; then
|
||||||
|
. /etc/default/locale
|
||||||
|
locale=$(echo "${LANG}" | cut -d . -f1)
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ./tor.keyring ]; then
|
||||||
|
gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org
|
||||||
|
gpg --output ./tor.keyring --export torbrowser@torproject.org
|
||||||
|
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"
|
||||||
|
fi
|
||||||
|
|
||||||
|
gpgv --keyring ./tor.keyring "torbrowser-install-win64-${version}_${locale}.exe.asc" "torbrowser-install-win64-${version}_${locale}.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
|
15
targz.sh
15
targz.sh
@ -1,15 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
|
||||||
|
|
||||||
. "$SCRIPT_DIR/config.sh"
|
|
||||||
|
|
||||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
|
||||||
. "$SCRIPT_DIR/config_override.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
./clean.sh
|
|
||||||
wsl make distclean
|
|
||||||
./build.sh
|
|
||||||
tar czvf I2P.tar.gz I2P
|
|
15
unsigned.sh
15
unsigned.sh
@ -1,15 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
|
|
||||||
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd -P)
|
|
||||||
cd "$SCRIPT_DIR" || exit 1
|
|
||||||
|
|
||||||
. "$SCRIPT_DIR/config.sh"
|
|
||||||
|
|
||||||
if [ -f "$SCRIPT_DIR/config_override.sh" ]; then
|
|
||||||
. "$SCRIPT_DIR/config_override.sh"
|
|
||||||
fi
|
|
||||||
|
|
||||||
./clean.sh
|
|
||||||
wsl make distclean
|
|
||||||
./build.sh
|
|
||||||
wsl make
|
|
Reference in New Issue
Block a user