VPN over Shadowsocks, three providers added, still unstable (testing, not for production)

This commit is contained in:
Alex Kh 2021-12-31 10:57:58 +04:00
parent 7c46e42820
commit db527be97c
575 changed files with 991 additions and 40930 deletions

View file

@ -44,15 +44,6 @@ WORKINGDIR=`pwd`
PATCH="/usr/bin/patch"
export PATH=$GOPATH:$PATH
compile_openvpn_adapter() {
cd 3rd/OpenVPNAdapter
$XCODEBUILD -scheme OpenVPNAdapter -configuration Release -xcconfig Configuration/amnezia.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project OpenVPNAdapter.xcodeproj
cd ../../
}
prepare_to_build_vpn() {
cat $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/Project.xcconfig > $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig
cat << EOF >> $WORKINGDIR/3rd/OpenVPNAdapter/Configuration/amnezia.xcconfig
@ -62,8 +53,19 @@ prepare_to_build_vpn() {
EOF
}
compile_openvpn_adapter() {
cd 3rd/OpenVPNAdapter
$XCODEBUILD -scheme OpenVPNAdapter -configuration Release -xcconfig Configuration/amnezia.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project OpenVPNAdapter.xcodeproj
cd ../../
}
prepare_to_build_ss() {
cat $WORKINGDIR/scripts/ss_ios.xcconfig > $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig
cat << EOF >> $WORKINGDIR/3rd/ShadowSocks/ss_ios.xcconfig
PROJECT_TEMP_DIR = $WORKINGDIR/3rd/ShadowSocks/build/ShadowSocks.build
CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos
BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/ShadowSocks/build/Release-iphoneos
EOF
}
patch_ss() {
@ -82,25 +84,58 @@ patch_ss() {
compile_ss_frameworks() {
$XCODEBUILD -scheme ShadowSocks -configuration Release -xcconfig ss_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project ShadowSocks.xcodeproj
cd ../../
}
prepare_to_build_pp() {
cat $WORKINGDIR/scripts/pp_ios.xcconfig > $WORKINGDIR/3rd/PacketProcessor/pp_ios.xcconfig
#prepare_to_build_pp() {
# cat $WORKINGDIR/scripts/pp_ios.xcconfig > $WORKINGDIR/3rd/PacketProcessor/pp_ios.xcconfig
# cat << EOF >> $WORKINGDIR/3rd/PacketProcessor/pp_ios.xcconfig
#PROJECT_TEMP_DIR = $WORKINGDIR/3rd/PacketProcessor/build/OpenVPNAdapter.build
#CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/PacketProcessor/build/Release-iphoneos
#BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/PacketProcessor/build/Release-iphoneos
#EOF
#}
#
#compile_packet_processor() {
# cd 3rd/PacketProcessor
# $XCODEBUILD -scheme PacketProcessor -configuration Release -xcconfig pp_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project PacketProcessor.xcodeproj
# cd ../../
#}
prepare_to_build_cas() {
cat $WORKINGDIR/scripts/cas_ios.xcconfig > $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig
cat << EOF >> $WORKINGDIR/3rd/CocoaAsyncSocket/cas_ios.xcconfig
PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/CocoaAsyncSocket.build
CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos
BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaAsyncSocket/build/Release-iphoneos
EOF
}
compile_packet_processor() {
cd 3rd/PacketProcessor
$XCODEBUILD -scheme PacketProcessor -configuration Release -xcconfig pp_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project PacketProcessor.xcodeproj
compile_cocoa_async_socket() {
cd 3rd/CocoaAsyncSocket
$XCODEBUILD -scheme 'iOS Framework' -configuration Release -xcconfig cas_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project CocoaAsyncSocket.xcodeproj
cd ../../
}
compile_tun2socks() {
gomobile bind -a -ldflags="-w -s" -bundleid org.amnezia.tun2socks -target=ios/arm64 -tags ios -o ./build/ios/Tun2Socks.xcframework github.com/Jigsaw-Code/outline-go-tun2socks/outline/apple github.com/Jigsaw-Code/outline-go-tun2socks/outline/shadowsocks
cd 3rd/outline-go-tun2socks
GOOS=ios GOARCH=arm64 GOFLAGS="-tags=ios" CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_CXXFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_LDFLAGS="-isysroot iphoneos -miphoneos-version-min=12.0 -fembed-bitcode -arch arm64" CGO_ENABLED=1 DARWIN_SDK=iphoneos gomobile bind -a -ldflags="-w -s" -bundleid org.amnezia.tun2socks -target=ios/arm64 -tags ios -o ./build/ios/Tun2Socks.xcframework github.com/Jigsaw-Code/outline-go-tun2socks/outline/apple github.com/Jigsaw-Code/outline-go-tun2socks/outline/shadowsocks
cd ../../
}
prepare_to_build_cl() {
cat $WORKINGDIR/scripts/cl_ios.xcconfig > $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig
cat << EOF >> $WORKINGDIR/3rd/CocoaLumberjack/cl_ios.xcconfig
PROJECT_TEMP_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/CocoaLumberjack.build
CONFIGURATION_BUILD_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos
BUILT_PRODUCTS_DIR = $WORKINGDIR/3rd/CocoaLumberjack/build/Release-iphoneos
EOF
}
compile_cocoalamberjack() {
cd 3rd/CocoaLumberjack
$XCODEBUILD -scheme 'CocoaLumberjack' -configuration Release -xcconfig cl_ios.xcconfig -sdk iphoneos -destination 'generic/platform=iOS' -project Lumberjack.xcodeproj
cd ../../
}
die() {

View file

@ -232,13 +232,30 @@ else
print Y "No ShadowSocket Library will be built"
fi
if [ "$OS" = "ios" ]; then
print Y "Prepare to build CocoaAsyncSocket..."
prepare_to_build_cas
print Y "Building CocoaAsyncSocket Framework..."
compile_cocoa_async_socket
else
print Y "No CocoaAsyncSocket will be built"
fi
if [ "$OS" = "ios" ]; then
print Y "Prepare to build Tun2Socks..."
print Y "Building Tun2Socks Framework..."
compile_tun2socks
else
print Y "No Tun2Socks will be built"
fi
#if [ "$OS" = "ios" ]; then
# print Y "Prepare to build Packet Processor..."
# prepare_to_build_pp
# print Y "Building PacketProcessor Framework..."
# compile_packet_processor
# print Y "Prepare to build CocoaLamberjack..."
# prepare_to_build_cl
# print Y "Building CocoaLamberjack Framework..."
# compile_cocoalamberjack
#else
# print Y "No Packet Processor will be built"
# print Y "No CocoaLamberjack will be built"
#fi
print Y "Creating the xcode project via qmake..."

View file

@ -1,7 +1,7 @@
SUPPORTED_PLATFORMS = iphoneos
TARGETED_DEVICE_FAMILY = 1,2
HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/client/3rd/PacketProcessor/PacketProcessor
HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/PacketProcessor
//CLANG_CXX_LANGUAGE_STANDARD = gnu++14
//CLANG_CXX_LIBRARY = libc++
@ -16,7 +16,3 @@ SDKROOT[arch=armv7] = iphoneos
SDKROOT[arch=armv7s] = iphoneos
VALID_ARCHS[sdk=iphoneos*] = arm64
PROJECT_TEMP_DIR = $(SRCROOT)/client/3rd/PacketProcessor/build/PacketProcessor.build
CONFIGURATION_BUILD_DIR = $(SRCROOT)/client/3rd/PacketProcessor/build/Release-iphoneos
BUILT_PRODUCTS_DIR = $(SRCROOT)/client/3rd/PacketProcessor/build/Release-iphoneos

View file

@ -1,8 +1,8 @@
SUPPORTED_PLATFORMS = iphoneos
TARGETED_DEVICE_FAMILY = 1,2
HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks
//HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/libcares/include $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/libev/arm64/include $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/libsodium/include $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/mbedtls/include $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/pcre/arm64/include $(SRCROOT)/client/3rd/ShadowSocks/ShadowSocks/shadowsocks-libev/include
HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/ShadowSocks
//HEADER_SEARCH_PATHS = $(inherited) $(SRCROOT)/ShadowSocks $(SRCROOT)/ShadowSocks/libcares/include $(SRCROOT)/ShadowSocks/libev/arm64/include $(SRCROOT)/ShadowSocks/libsodium/include $(SRCROOT)/ShadowSocks/mbedtls/include $(SRCROOT)/ShadowSocks/pcre/arm64/include $(SRCROOT)/ShadowSocks/shadowsocks-libev/include
//CLANG_CXX_LANGUAGE_STANDARD = gnu++14
//CLANG_CXX_LIBRARY = libc++
@ -18,7 +18,3 @@ SDKROOT[arch=armv7] = iphoneos
SDKROOT[arch=armv7s] = iphoneos
VALID_ARCHS[sdk=iphoneos*] = arm64
PROJECT_TEMP_DIR = $(SRCROOT)/client/3rd/ShadowSocks/build/ShadowSocks.build
CONFIGURATION_BUILD_DIR = $(SRCROOT)/client/3rd/ShadowSocks/build/Release-iphoneos
BUILT_PRODUCTS_DIR = $(SRCROOT)/client/3rd/ShadowSocks/build/Release-iphoneos

View file

@ -11,8 +11,9 @@ class XCodeprojPatcher
def run(file, shortVersion, fullVersion, platform, networkExtension, configHash, adjust_sdk_token)
open_project file
setup_project
open_target_main
die 'IOS requires networkExtension mode' if not networkExtension and platform == 'ios'
group = @project.main_group.new_group('Configuration')
@ -43,6 +44,12 @@ class XCodeprojPatcher
@project = Xcodeproj::Project.open(file)
die 'Failed to open the project file: ' + file if @project.nil?
end
def setup_project
@project.build_configurations.each do |config|
config.build_settings['SYMROOT'] = 'build'
end
end
def open_target_main
@target_main = @project.targets.find { |target| target.to_s == 'AmneziaVPN' }
@ -50,6 +57,7 @@ class XCodeprojPatcher
die 'Unable to open AmneziaVPN target'
end
def setup_target_main(shortVersion, fullVersion, platform, networkExtension, configHash, adjust_sdk_token)
@target_main.build_configurations.each do |config|
@ -63,10 +71,11 @@ class XCodeprojPatcher
"$(inherited)",
"$(PROJECT_DIR)/3rd",
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
"$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
# "${PROJECT_DIR}/3rd/PacketProcessor/PacketProcessor/CocoaAsyncSocket",
"$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
"${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
]
# Versions and names
@ -265,15 +274,17 @@ class XCodeprojPatcher
config.build_settings['SWIFT_OBJC_BRIDGING_HEADER'] ||= 'macos/networkextension/WireGuardNetworkExtension-Bridging-Header.h'
config.build_settings['SWIFT_PRECOMPILE_BRIDGING_HEADER'] = 'NO'
config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'YES'
# config.build_settings['STRIP_BITCODE_FROM_COPIED_FILES'] = 'NO'
config.build_settings['STRIP_BITCODE_FROM_COPIED_FILES'] = 'NO'
config.build_settings['FRAMEWORK_SEARCH_PATHS'] ||= [
"$(inherited)",
"$(PROJECT_DIR)/3rd",
"$(PROJECT_DIR)/3rd/OpenVPNAdapter/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
"$(PROJECT_DIR)/3rd/libleaf/include",
"$(PROJECT_DIR)/3rd/ShadowSocks/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/PacketProcessor/build/Release-iphoneos",
# "$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
# "${PROJECT_DIR}/3rd/PacketProcessor/PacketProcessor/CocoaAsyncSocket",
"$(PROJECT_DIR)/3rd/outline-go-tun2socks/build/ios",
"${PROJECT_DIR}/3rd/CocoaAsyncSocket/build/Release-iphoneos",
# "${PROJECT_DIR}/3rd/CocoaLumberjack/build/Release-iphoneos",
]
# Versions and names
@ -357,13 +368,19 @@ class XCodeprojPatcher
[
'platforms/ios/iostunnel.swift',
'platforms/ios/iosglue.mm',
'platforms/ios/ioslogger.swift',
# 'platforms/ios/Shadowsocks.h',
# 'platforms/ios/Shadowsocks.m',
# 'platforms/ios/ShadowsocksConnectivity.h',
# 'platforms/ios/ShadowsocksConnectivity.m',
# 'platforms/ios/Subnet.swift',
'platforms/ios/iosinterface.swift',
'platforms/ios/ssprovider.swift',
'platforms/ios/iosglue.mm',
'platforms/ios/ssconnectivity.h',
'platforms/ios/ssconnectivity.m',
'platforms/ios/iosopenvpn2ssadapter.h',
'platforms/ios/iosopenvpn2ssadapter.m',
'platforms/ios/sspacket.h',
'platforms/ios/sspacket.m',
'platforms/ios/ssadapterpacketflow.h',
'platforms/ios/tun2ssprovider.swift',
'platforms/ios/tun2sockswriter.swift',
].each { |filename|
file = group.new_file(filename)
@target_extension.add_file_references([file])
@ -376,6 +393,9 @@ class XCodeprojPatcher
framework_ref = frameworks_group.new_file('libwg-go.a')
frameworks_build_phase.add_file_reference(framework_ref)
framework_ref = frameworks_group.new_file('3rd/libleaf/lib/libleaf.a')
frameworks_build_phase.add_file_reference(framework_ref)
framework_ref = frameworks_group.new_file('NetworkExtension.framework')
frameworks_build_phase.add_file_reference(framework_ref)
@ -392,15 +412,20 @@ class XCodeprojPatcher
framework_ref = frameworks_group.new_file('3rd/OpenVPNAdapter/build/Release-iphoneos/OpenVPNAdapter.framework')
frameworks_build_phase.add_file_reference(framework_ref)
# framework_ref = frameworks_group.new_file('3rd/ShadowSocks/build/Release-iphoneos/ShadowSocks.framework')
# frameworks_build_phase.add_file_reference(framework_ref)
#
# framework_ref = frameworks_group.new_file('3rd/PacketProcessor/PacketProcessor/CocoaAsyncSocket/CocoaAsyncSocket.framework')
# frameworks_build_phase.add_file_reference(framework_ref)
#
# framework_ref = frameworks_group.new_file('3rd/outline-go-tun2socks/build/ios/Tun2socks.framework')
framework_ref = frameworks_group.new_file('3rd/ShadowSocks/build/Release-iphoneos/ShadowSocks.framework')
frameworks_build_phase.add_file_reference(framework_ref)
framework_ref = frameworks_group.new_file('3rd/CocoaAsyncSocket/build/Release-iphoneos/CocoaAsyncSocket.framework')
frameworks_build_phase.add_file_reference(framework_ref)
framework_ref = frameworks_group.new_file('3rd/outline-go-tun2socks/build/ios/Tun2socks.xcframework')
frameworks_build_phase.add_file_reference(framework_ref)
# framework_ref = frameworks_group.new_file('3rd/CocoaLumberjack/build/Release-iphoneos/CocoaLumberjack.framework')
# frameworks_build_phase.add_file_reference(framework_ref)
# This fails: @target_main.add_dependency @target_extension
container_proxy = @project.new(Xcodeproj::Project::PBXContainerItemProxy)