From 30aaccc155555b8c6d7f7a02f2fb96adb1398854 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 27 May 2026 21:23:29 +0300 Subject: [PATCH 1/4] Fix build for Windows --- .github/workflows/build-watcom.yml | 13 ++++++++++++- .github/workflows/build-win32.yml | 13 ++++++++++++- .github/workflows/build-win64.yml | 14 ++++++++++++-- .github/workflows/build-winarm64.yml | 13 ++++++++++++- Makefile.Solaris | 2 ++ Makefile.msvc | 2 ++ Makefile.watcom | 2 ++ Makefile.win | 2 ++ 8 files changed, 56 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-watcom.yml b/.github/workflows/build-watcom.yml index 2db9af6..dd395f6 100644 --- a/.github/workflows/build-watcom.yml +++ b/.github/workflows/build-watcom.yml @@ -31,6 +31,17 @@ jobs: run: | echo "volatile char VerSion[]=^"3APA3A-3proxy-Internal-Build: 3proxy-%RELEASE%-%NOW%\r\nCode certificate: https://3proxy.org/3proxy.cer\r\n^";" >>src/3proxy.c nmake /F Makefile.watcom + - name: Decode Certificate + shell: pwsh + run: | + $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE }}") + [System.IO.File]::WriteAllBytes("${{ github.workspace }}\cert.pfx", $pfx_cert_byte) + - name: Sign + shell: pwsh + run: | + $signtool = (Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\signtool.exe" | Sort-Object { [version]$_.Directory.Parent.Name } -Descending | Select-Object -First 1).FullName + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy.exe" + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy_crypt.exe" - name: make dist dir shell: cmd run: | @@ -48,7 +59,7 @@ jobs: mkdir dist\3proxy\doc\devel copy bin\3proxy.exe dist\3proxy\bin\ copy bin\*.dll dist\3proxy\bin\ - copy bin\mycrypt.exe dist\3proxy\bin\ + copy bin\3proxy_crypt.exe dist\3proxy\bin\ copy cfg\*.* dist\3proxy\cfg\ copy cfg\sql\*.* dist\3proxy\cfg\sql\ copy doc\ru\*.* dist\3proxy\doc\ru\ diff --git a/.github/workflows/build-win32.yml b/.github/workflows/build-win32.yml index 5c4e176..3fe6a7f 100644 --- a/.github/workflows/build-win32.yml +++ b/.github/workflows/build-win32.yml @@ -37,6 +37,17 @@ jobs: set "INCLUDE=%INCLUDE%;c:/vcpkg/installed/x86-windows-static/include" echo "volatile char VerSion[]=^"3APA3A-3proxy-Internal-Build: 3proxy-%RELEASE%-%NOW%\r\nCode certificate: https://3proxy.org/3proxy.cer\r\n^";" >>src/3proxy.c nmake /F Makefile.msvc + - name: Decode Certificate + shell: pwsh + run: | + $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE }}") + [System.IO.File]::WriteAllBytes("${{ github.workspace }}\cert.pfx", $pfx_cert_byte) + - name: Sign + shell: pwsh + run: | + $signtool = (Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\signtool.exe" | Sort-Object { [version]$_.Directory.Parent.Name } -Descending | Select-Object -First 1).FullName + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy.exe" + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy_crypt.exe" - name: make dist dir shell: cmd run: | @@ -54,7 +65,7 @@ jobs: mkdir dist\3proxy\doc\devel copy bin\3proxy.exe dist\3proxy\bin\ copy bin\*.dll dist\3proxy\bin\ - copy bin\mycrypt.exe dist\3proxy\bin\ + copy bin\3proxy_crypt.exe dist\3proxy\bin\ copy cfg\*.* dist\3proxy\cfg\ copy cfg\sql\*.* dist\3proxy\cfg\sql\ copy doc\ru\*.* dist\3proxy\doc\ru\ diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index 2ba2669..d9aca65 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -28,7 +28,6 @@ jobs: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v3 - name: make Windows MSVC - if: ${{ startsWith(matrix.target, 'windows') }} shell: cmd run: | call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvars64.bat" @@ -39,6 +38,17 @@ jobs: echo "volatile char VerSion[]=^"3APA3A-3proxy-Internal-Build: 3proxy-%RELEASE%-%NOW%\r\nCode certificate: https://3proxy.org/3proxy.cer\r\n^";" >>src/3proxy.c echo %NOW% / %RELEASE% / %BUILDDATE% / %VERSION% nmake /F Makefile.msvc + - name: Decode Certificate + shell: pwsh + run: | + $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE }}") + [System.IO.File]::WriteAllBytes("${{ github.workspace }}\cert.pfx", $pfx_cert_byte) + - name: Sign + shell: pwsh + run: | + $signtool = (Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\signtool.exe" | Sort-Object { [version]$_.Directory.Parent.Name } -Descending | Select-Object -First 1).FullName + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy.exe" + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy_crypt.exe" - name: make dist dir shell: cmd run: | @@ -56,7 +66,7 @@ jobs: mkdir dist\3proxy\doc\devel copy bin\3proxy.exe dist\3proxy\bin64\ copy bin\*.dll dist\3proxy\bin64\ - copy bin\mycrypt.exe dist\3proxy\bin64\ + copy bin\3proxy_crypt.exe dist\3proxy\bin64\ copy cfg\*.* dist\3proxy\cfg\ copy cfg\sql\*.* dist\3proxy\cfg\sql\ copy doc\ru\*.* dist\3proxy\doc\ru\ diff --git a/.github/workflows/build-winarm64.yml b/.github/workflows/build-winarm64.yml index 3ebcb06..83680b5 100644 --- a/.github/workflows/build-winarm64.yml +++ b/.github/workflows/build-winarm64.yml @@ -37,6 +37,17 @@ jobs: set "INCLUDE=%INCLUDE%;c:/vcpkg/installed/arm64-windows-static/include" echo "volatile char VerSion[]=^"3APA3A-3proxy-Internal-Build: 3proxy-%RELEASE%-%NOW%\r\nCode certificate: https://3proxy.org/3proxy.cer\r\n^";" >>src/3proxy.c nmake /F Makefile.msvc + - name: Decode Certificate + shell: pwsh + run: | + $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.WINDOWS_CERTIFICATE }}") + [System.IO.File]::WriteAllBytes("${{ github.workspace }}\cert.pfx", $pfx_cert_byte) + - name: Sign + shell: pwsh + run: | + $signtool = (Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin\*\x64\signtool.exe" | Sort-Object { [version]$_.Directory.Parent.Name } -Descending | Select-Object -First 1).FullName + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy.exe" + & $signtool sign /f "${{ github.workspace }}\cert.pfx" /p "${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }}" /tr http://timestamp.digicert.com /td sha256 /fd sha256 "bin\3proxy_crypt.exe" - name: make dist dir shell: cmd run: | @@ -54,7 +65,7 @@ jobs: mkdir dist\3proxy\doc\devel copy bin\3proxy.exe dist\3proxy\bin64\ copy bin\*.dll dist\3proxy\bin64\ - copy bin\mycrypt.exe dist\3proxy\bin64\ + copy bin\3proxy_crypt.exe dist\3proxy\bin64\ copy cfg\*.* dist\3proxy\cfg\ copy cfg\sql\*.* dist\3proxy\cfg\sql\ copy doc\ru\*.* dist\3proxy\doc\ru\ diff --git a/Makefile.Solaris b/Makefile.Solaris index 1b73953..bbb611b 100644 --- a/Makefile.Solaris +++ b/Makefile.Solaris @@ -6,6 +6,8 @@ # library support. Add -DSAFESQL for poorely written ODBC library / drivers. BUILDDIR = ../bin/ +PREFIX ?= 3proxy_ +CRYPT_PREFIX ?= $(PREFIX) CC ?= cc CFLAGS = -xO3 -c -D_SOLARIS -D_THREAD_SAFE -DGETHOSTBYNAME_R -D_REENTRANT -DFD_SETSIZE=4096 -DWITH_POLL COUT = -o ./ diff --git a/Makefile.msvc b/Makefile.msvc index aad015b..f88d3e6 100644 --- a/Makefile.msvc +++ b/Makefile.msvc @@ -6,6 +6,8 @@ # Add /DSAFESQL to CFLAGS if you are using poorely written/tested ODBC driver BUILDDIR = ../bin/ +PREFIX = 3proxy_ +CRYPT_PREFIX = 3proxy_ CC = cl VERSION = $(VERSION) BUILDDATE = $(BUILDDATE) diff --git a/Makefile.watcom b/Makefile.watcom index f9b199c..1ea8141 100644 --- a/Makefile.watcom +++ b/Makefile.watcom @@ -5,6 +5,8 @@ # Add /DSAFESQL to CFLAGS if you are using poorely written/tested ODBC driver BUILDDIR = ../bin/ +PREFIX = 3proxy_ +CRYPT_PREFIX = 3proxy_ CC = cl CFLAGS = /nologo /Ox /MT /D "NOIPV6" /D "NODEBUG" /D "NORADIUS" /D"WATCOM" /D "MSVC" /D "WIN32" /D "_CONSOLE" /D "_MBCS" /D "_WIN32" /D "PRId64=\"I64d\"" /D "PRIu64=\"I64u\"" /D "SCNu64=\"I64u\"" /D "SCNx64=\"I64x\"" /D "SCNd64=\"I64d\"" /D "PRIx64=\"I64x\"" /c $(VERSION) $(BUILDDATE) COUT = /Fo diff --git a/Makefile.win b/Makefile.win index c2d4414..c603ac8 100644 --- a/Makefile.win +++ b/Makefile.win @@ -6,6 +6,8 @@ BUILDDIR = ../bin/ +PREFIX ?= 3proxy_ +CRYPT_PREFIX ?= $(PREFIX) CC ?= gcc CFLAGS ?= -O3 -flto CFLAGS += -fno-strict-aliasing -c -mthreads -DWITH_WSAPOLL -DWITH_ODBC From 01dad546b78dc696897aad934871bc3927cea494 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Wed, 27 May 2026 21:38:02 +0300 Subject: [PATCH 2/4] Fix filenames in builds --- .github/workflows/build-watcom.yml | 6 +++--- .github/workflows/build-win32.yml | 6 +++--- .github/workflows/build-win64.yml | 6 +++--- .github/workflows/build-winarm64.yml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-watcom.yml b/.github/workflows/build-watcom.yml index dd395f6..1e472a2 100644 --- a/.github/workflows/build-watcom.yml +++ b/.github/workflows/build-watcom.yml @@ -56,7 +56,7 @@ jobs: mkdir dist\3proxy\doc\html\plugins mkdir dist\3proxy\doc\html\man5 mkdir dist\3proxy\doc\html\man8 - mkdir dist\3proxy\doc\devel + mkdir dist\3proxy\doc\html\devel copy bin\3proxy.exe dist\3proxy\bin\ copy bin\*.dll dist\3proxy\bin\ copy bin\3proxy_crypt.exe dist\3proxy\bin\ @@ -67,10 +67,10 @@ jobs: copy doc\html\plugins\*.* dist\3proxy\doc\html\plugins\ copy doc\html\man8\*.* dist\3proxy\doc\html\man8\ copy doc\html\man5\*.* dist\3proxy\doc\html\man5\ - copy doc\devel\*.rtf dist\3proxy\doc\devel\ + copy doc\html\devel\*.* dist\3proxy\doc\html\devel\ copy copying dist\3proxy\ copy authors dist\3proxy\ - copy README dist\3proxy\ + copy README.md dist\3proxy\ copy rus.3ps dist\3proxy\ - name: Get artifact uses: actions/upload-artifact@v6 diff --git a/.github/workflows/build-win32.yml b/.github/workflows/build-win32.yml index 3fe6a7f..367595d 100644 --- a/.github/workflows/build-win32.yml +++ b/.github/workflows/build-win32.yml @@ -62,7 +62,7 @@ jobs: mkdir dist\3proxy\doc\html\plugins mkdir dist\3proxy\doc\html\man5 mkdir dist\3proxy\doc\html\man8 - mkdir dist\3proxy\doc\devel + mkdir dist\3proxy\doc\html\devel copy bin\3proxy.exe dist\3proxy\bin\ copy bin\*.dll dist\3proxy\bin\ copy bin\3proxy_crypt.exe dist\3proxy\bin\ @@ -73,10 +73,10 @@ jobs: copy doc\html\plugins\*.* dist\3proxy\doc\html\plugins\ copy doc\html\man8\*.* dist\3proxy\doc\html\man8\ copy doc\html\man5\*.* dist\3proxy\doc\html\man5\ - copy doc\devel\*.rtf dist\3proxy\doc\devel\ + copy doc\html\devel\*.* dist\3proxy\doc\html\devel\ copy copying dist\3proxy\ copy authors dist\3proxy\ - copy README dist\3proxy\ + copy README.md dist\3proxy\ copy rus.3ps dist\3proxy\ - name: Get artifact uses: actions/upload-artifact@v6 diff --git a/.github/workflows/build-win64.yml b/.github/workflows/build-win64.yml index d9aca65..055c57d 100644 --- a/.github/workflows/build-win64.yml +++ b/.github/workflows/build-win64.yml @@ -63,7 +63,7 @@ jobs: mkdir dist\3proxy\doc\html\plugins mkdir dist\3proxy\doc\html\man5 mkdir dist\3proxy\doc\html\man8 - mkdir dist\3proxy\doc\devel + mkdir dist\3proxy\doc\html\devel copy bin\3proxy.exe dist\3proxy\bin64\ copy bin\*.dll dist\3proxy\bin64\ copy bin\3proxy_crypt.exe dist\3proxy\bin64\ @@ -74,10 +74,10 @@ jobs: copy doc\html\plugins\*.* dist\3proxy\doc\html\plugins\ copy doc\html\man8\*.* dist\3proxy\doc\html\man8\ copy doc\html\man5\*.* dist\3proxy\doc\html\man5\ - copy doc\devel\*.rtf dist\3proxy\doc\devel\ + copy doc\html\devel\*.rtf dist\3proxy\doc\html\devel\ copy copying dist\3proxy\ copy authors dist\3proxy\ - copy README dist\3proxy\ + copy README.md dist\3proxy\ copy rus.3ps dist\3proxy\ - name: Get artifact uses: actions/upload-artifact@v6 diff --git a/.github/workflows/build-winarm64.yml b/.github/workflows/build-winarm64.yml index 83680b5..4c8dd7c 100644 --- a/.github/workflows/build-winarm64.yml +++ b/.github/workflows/build-winarm64.yml @@ -62,7 +62,7 @@ jobs: mkdir dist\3proxy\doc\html\plugins mkdir dist\3proxy\doc\html\man5 mkdir dist\3proxy\doc\html\man8 - mkdir dist\3proxy\doc\devel + mkdir dist\3proxy\doc\html\devel copy bin\3proxy.exe dist\3proxy\bin64\ copy bin\*.dll dist\3proxy\bin64\ copy bin\3proxy_crypt.exe dist\3proxy\bin64\ @@ -73,10 +73,10 @@ jobs: copy doc\html\plugins\*.* dist\3proxy\doc\html\plugins\ copy doc\html\man8\*.* dist\3proxy\doc\html\man8\ copy doc\html\man5\*.* dist\3proxy\doc\html\man5\ - copy doc\devel\*.rtf dist\3proxy\doc\devel\ + copy doc\html\devel\*.rtf dist\3proxy\doc\html\devel\ copy copying dist\3proxy\ copy authors dist\3proxy\ - copy README dist\3proxy\ + copy README.md dist\3proxy\ copy rus.3ps dist\3proxy\ - name: Get artifact uses: actions/upload-artifact@v6 From f0a672b16a675a7199fce6db56e52ed2bd0c4b99 Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Fri, 29 May 2026 20:29:25 +0300 Subject: [PATCH 3/4] Unify installation environment --- CMakeLists.txt | 47 +++++++++++++++++-------------- Makefile.FreeBSD | 46 ++++++++++++++++++------------ Makefile.Linux | 33 +++++++++------------- Makefile.unix | 46 ++++++++++++++++++------------ debian/postinst | 14 ++++++++++ scripts/3proxy.cfg | 4 --- scripts/3proxy.cfg.in | 31 ++++++++++++++++++++ scripts/3proxy.cfg.inchroot | 6 ++-- scripts/3proxy.service | 19 ------------- scripts/3proxy.service.in | 2 +- scripts/3proxy.tmpfiles.in | 3 -- scripts/add3proxyuser.sh | 15 ---------- scripts/add3proxyuser.sh.in | 14 ++++++++++ scripts/init.d/3proxy.in | 2 +- scripts/init.d/3proxy.sh | 56 ------------------------------------- scripts/postinstall.sh | 9 ++++-- scripts/rc.d/3proxy | 27 ------------------ scripts/rc.d/3proxy.in | 6 ++-- scripts/rh/3proxy.spec | 25 +++++++++++------ 19 files changed, 185 insertions(+), 220 deletions(-) delete mode 100644 scripts/3proxy.cfg create mode 100644 scripts/3proxy.cfg.in delete mode 100644 scripts/3proxy.service delete mode 100644 scripts/3proxy.tmpfiles.in delete mode 100644 scripts/add3proxyuser.sh create mode 100644 scripts/add3proxyuser.sh.in delete mode 100644 scripts/init.d/3proxy.sh delete mode 100644 scripts/rc.d/3proxy diff --git a/CMakeLists.txt b/CMakeLists.txt index 193f147..39cd177 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -676,8 +676,25 @@ endif() # Install configuration files if(NOT WIN32) - install(FILES scripts/3proxy.cfg DESTINATION /etc/3proxy) - install(FILES scripts/add3proxyuser.sh DESTINATION ${CMAKE_INSTALL_BINDIR}) + set(CRYPT_PREFIX "${3PROXY_BINARY_PREFIX}") + set(3PROXY_CONFDIR "${CMAKE_INSTALL_FULL_SYSCONFDIR}/3proxy/conf") + set(3PROXY_COUNTERDIR "/opt/3proxy") + install(DIRECTORY DESTINATION /opt/3proxy) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.cfg.in + ${CMAKE_CURRENT_BINARY_DIR}/3proxy.cfg + @ONLY + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.cfg DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/3proxy) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/scripts/add3proxyuser.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/add3proxyuser + @ONLY + ) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/add3proxyuser + DESTINATION ${CMAKE_INSTALL_BINDIR} + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE + ) endif() # Install service files (systemd, launchd, init.d, or rc.d) @@ -736,16 +753,6 @@ if(NOT WIN32) DESTINATION ${SYSTEMD_UNIT_DIR} ) - # Install tmpfiles.d configuration for runtime directory - configure_file( - ${CMAKE_CURRENT_SOURCE_DIR}/scripts/3proxy.tmpfiles.in - ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf - @ONLY - ) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/3proxy.conf - DESTINATION /usr/lib/tmpfiles.d - ) - message(STATUS " systemd: YES (${SYSTEMD_UNIT_DIR})") else() # No systemd - install init.d script @@ -778,16 +785,14 @@ if(NOT WIN32) message(STATUS " init.d: YES (/etc/init.d)") endif() - # Create proxy user and group during installation - install(FILES scripts/postinstall.sh - DESTINATION ${CMAKE_INSTALL_BINDIR} - PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE - ) + # Run postinstall only for direct installs (no DESTDIR) install(CODE " - execute_process( - COMMAND ${CMAKE_INSTALL_FULL_BINDIR}/postinstall.sh - RESULT_VARIABLE POSTINSTALL_RESULT - ) + if(\"\$ENV{DESTDIR}\" STREQUAL \"\") + execute_process( + COMMAND ${CMAKE_COMMAND} -E env sh ${CMAKE_CURRENT_SOURCE_DIR}/scripts/postinstall.sh ${CMAKE_INSTALL_PREFIX} + RESULT_VARIABLE POSTINSTALL_RESULT + ) + endif() ") endif() diff --git a/Makefile.FreeBSD b/Makefile.FreeBSD index e9c96cc..e37f28a 100644 --- a/Makefile.FreeBSD +++ b/Makefile.FreeBSD @@ -68,29 +68,39 @@ endif include Makefile.inc +DESTDIR ?= +prefix ?= /usr/local +BINPREFIX ?= $(prefix)/bin + install: all - if [ ! -d "/usr/local/3proxy/bin" ]; then mkdir -p /usr/local/3proxy/bin/; fi - install bin/3proxy /usr/local/3proxy/bin/3proxy - install bin/$(CRYPT_PREFIX)crypt /usr/local/3proxy/bin/$(CRYPT_PREFIX)crypt + if [ ! -d "$(DESTDIR)$(BINPREFIX)" ]; then mkdir -p $(DESTDIR)$(BINPREFIX)/; fi + install bin/3proxy $(DESTDIR)$(BINPREFIX)/3proxy + install bin/$(CRYPT_PREFIX)crypt $(DESTDIR)$(BINPREFIX)/$(CRYPT_PREFIX)crypt for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ - if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f /usr/local/3proxy/bin/$(PREFIX)$$f; fi; \ + if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f $(DESTDIR)$(BINPREFIX)/$(PREFIX)$$f; fi; \ done - install scripts/rc.d/3proxy /usr/local/etc/rc.d/3proxy - install scripts/add3proxyuser.sh /usr/local/3proxy/bin/ - if [ -s /usr/local/etc/3proxy/3proxy.cfg ]; then echo /usr/local/3proxy/3proxy.cfg already exists; else install scripts/3proxy.cfg /usr/local/etc/3proxy/; fi - if [ ! -d /var/log/3proxy/ ]; then mkdir /var/log/3proxy/; fi - touch /usr/local/3proxy/passwd - touch /usr/local/3proxy/counters - touch /usr/local/3proxy/bandlimiters - install -d $(MANDIR)/man8 - install -m 644 man/3proxy.8 $(MANDIR)/man8/3proxy.8 + install -d $(DESTDIR)$(prefix)/etc/rc.d/ + sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' scripts/rc.d/3proxy.in > $(DESTDIR)$(prefix)/etc/rc.d/3proxy + chmod 755 $(DESTDIR)$(prefix)/etc/rc.d/3proxy + sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|$(CRYPT_PREFIX)|g' scripts/add3proxyuser.sh.in > $(DESTDIR)$(BINPREFIX)/add3proxyuser + if [ -s $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg ]; then echo $(prefix)/etc/3proxy/3proxy.cfg already exists; else sed -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@3PROXY_COUNTERDIR@|/opt/3proxy|g' scripts/3proxy.cfg.in > $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; chmod 640 $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; fi + if [ ! -d $(DESTDIR)/var/log/3proxy/ ]; then mkdir -p $(DESTDIR)/var/log/3proxy/; fi + mkdir -p $(DESTDIR)/opt/3proxy + touch $(DESTDIR)$(prefix)/3proxy/passwd + touch $(DESTDIR)$(prefix)/3proxy/counters + touch $(DESTDIR)$(prefix)/3proxy/bandlimiters + install -d $(DESTDIR)$(MANDIR)/man8 + install -m 644 man/3proxy.8 $(DESTDIR)$(MANDIR)/man8/3proxy.8 for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ - if [ -f man/$$f.8 ]; then install -m 644 man/$$f.8 $(MANDIR)/man8/$(PREFIX)$$f.8; fi; \ + if [ -f man/$$f.8 ]; then install -m 644 man/$$f.8 $(DESTDIR)$(MANDIR)/man8/$(PREFIX)$$f.8; fi; \ done - install -m 644 man/3proxy_crypt.8 $(MANDIR)/man8 - install -d $(MANDIR)/man5 - install -m 644 man/3proxy.cfg.5 $(MANDIR)/man5/3proxy.cfg.5 - echo Run /usr/local/3proxy/bin/add3proxyuser.sh to add \'admin\' user + install -m 644 man/3proxy_crypt.8 $(DESTDIR)$(MANDIR)/man8/$(CRYPT_PREFIX)crypt.8 + install -d $(DESTDIR)$(MANDIR)/man5 + install -m 644 man/3proxy.cfg.5 $(DESTDIR)$(MANDIR)/man5/3proxy.cfg.5 + @if [ "$(DESTDIR)" = "" ]; then \ + sh scripts/postinstall.sh $(prefix); \ + fi + echo Run $(BINPREFIX)/add3proxyuser to add \'admin\' user allplugins: @list='$(PLUGINS)'; for p in $$list; do cp Makefile Makefile.var plugins/$$p; cd plugins/$$p ; make ; cd ../.. ; done diff --git a/Makefile.Linux b/Makefile.Linux index 857ccb1..50ba426 100644 --- a/Makefile.Linux +++ b/Makefile.Linux @@ -74,13 +74,13 @@ include Makefile.inc allplugins: @list='$(PLUGINS)'; for p in $$list; do cp Makefile Makefile.var plugins/$$p; cd plugins/$$p ; make ; cd ../.. ; done -DESTDIR = -prefix = -exec_prefix = $(prefix) -man_prefix = /usr/share -chroot_prefix = /usr/local +DESTDIR ?= +prefix ?= +exec_prefix ?= $(prefix) +man_prefix ?= /usr/share +chroot_prefix ?= /usr/local -INSTALL = /usr/bin/install +INSTALL ?= /usr/bin/install INSTALL_BIN = $(INSTALL) -m 755 INSTALL_DATA = $(INSTALL) -m 644 INSTALL_OBJS = bin/3proxy \ @@ -97,12 +97,11 @@ INSTALL_OBJS = bin/3proxy \ INSTALL_CFG = scripts/3proxy.cfg.chroot INSTALL_CFG_INCHROOT = scripts/3proxy.cfg.inchroot -INSTALL_CFG_OBJS = scripts/add3proxyuser.sh INSTALL_CFG_OBJS2 = counters bandlimiters -INSTALL_INITD_SCRIPT = scripts/init.d/3proxy.sh -INSTALL_SYSTEMD_SCRIPT = scripts/3proxy.service +INSTALL_INITD_SCRIPT = scripts/init.d/3proxy.in +INSTALL_SYSTEMD_SCRIPT = scripts/3proxy.service.in CHROOTDIR = $(DESTDIR)$(chroot_prefix)/3proxy CHROOTREL = ../..$(chroot_prefix)/3proxy @@ -111,8 +110,6 @@ MANDIR8 = $(DESTDIR)$(man_prefix)/man/man8 BINDIR = $(DESTDIR)$(exec_prefix)/bin ETCDIR = $(DESTDIR)/etc/3proxy INITDDIR = $(DESTDIR)/etc/init.d -RUNBASE = $(DESTDIR)/var/run -RUNDIR = $(RUNBASE)/3proxy LOGBASE = $(DESTDIR)/var/log LOGDIR = $(LOGBASE)/3proxy INSTALL_CFG_DEST = $(ETCDIR)/conf @@ -122,6 +119,7 @@ install-bin: $(INSTALL_BIN) -d $(BINDIR) $(INSTALL_BIN) -s $(INSTALL_OBJS) $(BINDIR) $(INSTALL_BIN) -s bin/*.ld.so $(CHROOTDIR)/libexec + $(INSTALL_BIN) scripts/add3proxyuser.sh.in $(BINDIR)/add3proxyuser install-etc-dir: $(INSTALL_BIN) -d $(ETCDIR) @@ -132,13 +130,11 @@ install-chroot-dir: $(INSTALL_BIN) -d $(CHROOTDIR)/logs $(INSTALL_BIN) -d $(CHROOTDIR)/count $(INSTALL_BIN) -d $(CHROOTDIR)/libexec - chmod -R o-rwx $(CHROOTDIR) install-etc-default-config: install-chroot-dir if [ ! -d $(INSTALL_CFG_DEST) ]; then \ ln -s $(CHROOTREL)/conf $(INSTALL_CFG_DEST); \ $(INSTALL_BIN) $(INSTALL_CFG) $(ETCDIR)/3proxy.cfg; \ - $(INSTALL_BIN) $(INSTALL_CFG_OBJS) $(INSTALL_CFG_DEST); \ $(INSTALL_BIN) $(INSTALL_CFG_INCHROOT) $(INSTALL_CFG_DEST)/3proxy.cfg; \ fi @@ -156,16 +152,13 @@ install-man: for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ if [ -f man/$$f.8 ]; then $(INSTALL_DATA) man/$$f.8 $(MANDIR8)/$(PREFIX)$$f.8; fi; \ done - $(INSTALL_DATA) man/3proxy_crypt.8 $(MANDIR8) + $(INSTALL_DATA) man/3proxy_crypt.8 $(MANDIR8)/$(CRYPT_PREFIX)crypt.8 install-init: + $(INSTALL_BIN) -d $(SYSTEMDDIR) + sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(exec_prefix)/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' $(INSTALL_SYSTEMD_SCRIPT) > $(SYSTEMDDIR)/3proxy.service $(INSTALL_BIN) -d $(INITDDIR) $(INSTALL_BIN) $(INSTALL_INITD_SCRIPT) $(INITDDIR)/3proxy - $(INSTALL_BIN) -d $(SYSTEMDDIR) - $(INSTALL_DATA) $(INSTALL_SYSTEMD_SCRIPT) $(SYSTEMDDIR) - -install-run: - $(INSTALL_BIN) -d $(RUNDIR) install-log: $(INSTALL_BIN) -d $(LOGBASE) @@ -173,7 +166,7 @@ install-log: ln -s $(CHROOTREL)/logs $(LOGDIR);\ fi -install: install-chroot-dir install-bin install-etc install-log install-man install-run install-init +install: install-chroot-dir install-bin install-etc install-log install-man install-init @if [ "$(DESTDIR)" = "" ]; then \ sh debian/preinst; \ sh debian/postinst; \ diff --git a/Makefile.unix b/Makefile.unix index 9fae45f..50e4050 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -70,29 +70,39 @@ endif include Makefile.inc +DESTDIR ?= +prefix ?= /usr/local +BINPREFIX ?= $(prefix)/bin + install: all - if [ ! -d "/usr/local/3proxy/bin" ]; then mkdir -p /usr/local/3proxy/bin/; fi - install bin/3proxy /usr/local/3proxy/bin/3proxy - install bin/$(CRYPT_PREFIX)crypt /usr/local/3proxy/bin/$(CRYPT_PREFIX)crypt + if [ ! -d "$(DESTDIR)$(BINPREFIX)" ]; then mkdir -p $(DESTDIR)$(BINPREFIX)/; fi + install bin/3proxy $(DESTDIR)$(BINPREFIX)/3proxy + install bin/$(CRYPT_PREFIX)crypt $(DESTDIR)$(BINPREFIX)/$(CRYPT_PREFIX)crypt for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ - if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f /usr/local/3proxy/bin/$(PREFIX)$$f; fi; \ + if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f $(DESTDIR)$(BINPREFIX)/$(PREFIX)$$f; fi; \ done - install scripts/rc.d/3proxy /usr/local/etc/rc.d/3proxy - install scripts/add3proxyuser.sh /usr/local/3proxy/bin/ - if [ -s /usr/local/etc/3proxy/3proxy.cfg ]; then echo /usr/local/3proxy/3proxy.cfg already exists; else install scripts/3proxy.cfg /usr/local/etc/3proxy/; fi - if [ ! -d /var/log/3proxy/ ]; then mkdir /var/log/3proxy/; fi - touch /usr/local/3proxy/passwd - touch /usr/local/3proxy/counters - touch /usr/local/3proxy/bandlimiters - install -d $(MANDIR)/man8 - install -m 644 man/3proxy.8 $(MANDIR)/man8/3proxy.8 + install -d $(DESTDIR)$(prefix)/etc/rc.d/ + sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' scripts/rc.d/3proxy.in > $(DESTDIR)$(prefix)/etc/rc.d/3proxy + chmod 755 $(DESTDIR)$(prefix)/etc/rc.d/3proxy + sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|$(CRYPT_PREFIX)|g' scripts/add3proxyuser.sh.in > $(DESTDIR)$(BINPREFIX)/add3proxyuser + if [ -s $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg ]; then echo $(prefix)/etc/3proxy/3proxy.cfg already exists; else sed -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@3PROXY_COUNTERDIR@|/opt/3proxy|g' scripts/3proxy.cfg.in > $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; chmod 640 $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; fi + if [ ! -d $(DESTDIR)/var/log/3proxy/ ]; then mkdir -p $(DESTDIR)/var/log/3proxy/; fi + mkdir -p $(DESTDIR)/opt/3proxy + touch $(DESTDIR)$(prefix)/3proxy/passwd + touch $(DESTDIR)$(prefix)/3proxy/counters + touch $(DESTDIR)$(prefix)/3proxy/bandlimiters + install -d $(DESTDIR)$(MANDIR)/man8 + install -m 644 man/3proxy.8 $(DESTDIR)$(MANDIR)/man8/3proxy.8 for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ - if [ -f man/$$f.8 ]; then install -m 644 man/$$f.8 $(MANDIR)/man8/$(PREFIX)$$f.8; fi; \ + if [ -f man/$$f.8 ]; then install -m 644 man/$$f.8 $(DESTDIR)$(MANDIR)/man8/$(PREFIX)$$f.8; fi; \ done - install -m 644 man/3proxy_crypt.8 $(MANDIR)/man8 - install -d $(MANDIR)/man5 - install -m 644 man/3proxy.cfg.5 $(MANDIR)/man5/3proxy.cfg.5 - echo Run /usr/local/3proxy/bin/add3proxyuser.sh to add \'admin\' user + install -m 644 man/3proxy_crypt.8 $(DESTDIR)$(MANDIR)/man8/$(CRYPT_PREFIX)crypt.8 + install -d $(DESTDIR)$(MANDIR)/man5 + install -m 644 man/3proxy.cfg.5 $(DESTDIR)$(MANDIR)/man5/3proxy.cfg.5 + @if [ "$(DESTDIR)" = "" ]; then \ + sh scripts/postinstall.sh $(prefix); \ + fi + echo Run $(BINPREFIX)/add3proxyuser to add \'admin\' user allplugins: @list='$(PLUGINS)'; for p in $$list; do cp Makefile Makefile.var plugins/$$p; cd plugins/$$p ; make ; cd ../.. ; done diff --git a/debian/postinst b/debian/postinst index f5a46a9..ee548aa 100644 --- a/debian/postinst +++ b/debian/postinst @@ -1,3 +1,17 @@ +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ + +if [ -d /etc/3proxy ]; then \ + chmod -R o-rwx /etc/3proxy; \ + chown -R proxy:proxy /etc/3proxy; \ +fi + +if [ -d /usr/local/3proxy ]; then \ + chmod -R o-rwx /usr/local/3proxy; \ + chown -R proxy:proxy /usr/local/3proxy; \ +fi + if /bin/systemctl >/dev/null 2>&1; then \ /usr/sbin/update-rc.d 3proxy disable || true; \ /usr/sbin/chkconfig 3proxy off || true; \ diff --git a/scripts/3proxy.cfg b/scripts/3proxy.cfg deleted file mode 100644 index 660467b..0000000 --- a/scripts/3proxy.cfg +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/local/bin/3proxy - -#use standard syslog logging -log @3proxy diff --git a/scripts/3proxy.cfg.in b/scripts/3proxy.cfg.in new file mode 100644 index 0000000..01bb9d0 --- /dev/null +++ b/scripts/3proxy.cfg.in @@ -0,0 +1,31 @@ + +# use standard syslog logging +log @3proxy +#log /logs/3proxy-%y%m%d.log D +#rotate 60 + + +#nscache 65536 +#nserver 8.8.8.8 +#nserver 8.8.4.4 + +#config @CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg +#monitor @CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg +#monitor @3PROXY_CONFDIR@/passwd + +#counter @3PROXY_COUNTERDIR@/3proxy.3cf + +#users $@3PROXY_CONFDIR@/passwd + +#include @3PROXY_CONFDIR@/counters +#include @3PROXY_CONFDIR@/bandlimiters + +#auth strong +#deny * * 127.0.0.0/8 +#allow * +#proxy -n +#socks +#flush +#allow admin + +#admin -p8080 diff --git a/scripts/3proxy.cfg.inchroot b/scripts/3proxy.cfg.inchroot index 30b4024..5509d90 100644 --- a/scripts/3proxy.cfg.inchroot +++ b/scripts/3proxy.cfg.inchroot @@ -5,8 +5,10 @@ nserver 8.8.4.4 config /conf/3proxy.cfg monitor /conf/3proxy.cfg -log /logs/3proxy-%y%m%d.log D -rotate 60 +log @3proxy +#log /logs/3proxy-%y%m%d.log D +#rotate 60 + counter /count/3proxy.3cf users $/conf/passwd diff --git a/scripts/3proxy.service b/scripts/3proxy.service deleted file mode 100644 index cdb3af2..0000000 --- a/scripts/3proxy.service +++ /dev/null @@ -1,19 +0,0 @@ -[Unit] -Description=3proxy tiny proxy server -Documentation=man:3proxy(1) -After=network.target - -[Service] -Environment=CONFIGFILE=/etc/3proxy/3proxy.cfg -ExecStart=/bin/3proxy ${CONFIGFILE} -ExecReload=/bin/kill -SIGUSR1 $MAINPID -KillMode=process -Restart=on-failure -RestartSec=60s -LimitNOFILE=65536 -LimitNPROC=32768 -RuntimeDirectory=3proxy - -[Install] -WantedBy=multi-user.target -Alias=3proxy.service \ No newline at end of file diff --git a/scripts/3proxy.service.in b/scripts/3proxy.service.in index 917e088..3c84a15 100644 --- a/scripts/3proxy.service.in +++ b/scripts/3proxy.service.in @@ -7,7 +7,7 @@ After=network.target Type=simple User=proxy Group=proxy -Environment=CONFIGFILE=/etc/3proxy/3proxy.cfg +Environment=CONFIGFILE=@CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/3proxy ${CONFIGFILE} ExecReload=/bin/kill -SIGUSR1 $MAINPID KillMode=process diff --git a/scripts/3proxy.tmpfiles.in b/scripts/3proxy.tmpfiles.in deleted file mode 100644 index a021fc3..0000000 --- a/scripts/3proxy.tmpfiles.in +++ /dev/null @@ -1,3 +0,0 @@ -# tmpfiles.d configuration for 3proxy -# This creates the runtime directory for 3proxy -d /run/3proxy 0755 proxy proxy - diff --git a/scripts/add3proxyuser.sh b/scripts/add3proxyuser.sh deleted file mode 100644 index 131873f..0000000 --- a/scripts/add3proxyuser.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -if [ $4 ]; then - echo bandlimin $4 $1 >> /etc/3proxy/conf/bandlimiters -fi -if [ $3 ]; then - echo countin \"`wc -l /etc/3proxy/conf/counters|awk '{print $1}'`/$1\" D $3 $1 >> /etc/3proxy/conf/counters -fi -if [ $2 ]; then - echo $1:`/bin/3proxy_crypt $$ $2` >> /etc/3proxy/conf/passwd -else - echo usage: $0 username password [day_limit] [bandwidth] - echo " "day_limit - traffic limit in MB per day - echo " "bandwidth - bandwidth in bits per second 1048576 = 1Mbps -fi - diff --git a/scripts/add3proxyuser.sh.in b/scripts/add3proxyuser.sh.in new file mode 100644 index 0000000..db73c05 --- /dev/null +++ b/scripts/add3proxyuser.sh.in @@ -0,0 +1,14 @@ +#!/bin/sh +if [ $4 ]; then + echo bandlimin $4 $1 >> @3PROXY_CONFDIR@/bandlimiters +fi +if [ $3 ]; then + echo countall \"`wc -l @3PROXY_CONFDIR@/counters|awk '{print $1}'`/$1\" D $3 $1 >> @3PROXY_CONFDIR@/counters +fi +if [ $2 ]; then + echo $1:`@CMAKE_INSTALL_FULL_BINDIR@/@CRYPT_PREFIX@crypt $$ $2` >> @3PROXY_CONFDIR@/passwd +else + echo usage: $0 username password [day_limit] [bandwidth] + echo " "day_limit - traffic limit in MB per day + echo " "bandwidth - bandwidth in bits per second 1048576 = 1Mbps +fi diff --git a/scripts/init.d/3proxy.in b/scripts/init.d/3proxy.in index 494ec08..efaa027 100644 --- a/scripts/init.d/3proxy.in +++ b/scripts/init.d/3proxy.in @@ -14,7 +14,7 @@ # description: 3proxy tiny proxy server DAEMON=@CMAKE_INSTALL_FULL_BINDIR@/3proxy -CONFIGFILE=/etc/3proxy/3proxy.cfg +CONFIGFILE=@CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg PIDFILE=/var/run/3proxy/3proxy.pid USER=proxy GROUP=proxy diff --git a/scripts/init.d/3proxy.sh b/scripts/init.d/3proxy.sh deleted file mode 100644 index e549cbd..0000000 --- a/scripts/init.d/3proxy.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -### BEGIN INIT INFO -# Provides: 3proxy -# Required-Start: -# Required-Stop: -# Should-Start: -# Should-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: Start/stop 3proxy -# Description: Start/stop 3proxy, tiny proxy server -### END INIT INFO -# chkconfig: 2345 20 80 -# description: 3proxy tiny proxy server - -case "$1" in - start) - echo Starting 3Proxy - - /bin/mkdir -p /var/run/3proxy - /bin/3proxy /etc/3proxy/3proxy.cfg & - - RETVAL=$? - echo - [ $RETVAL ] - ;; - - stop) - echo Stopping 3Proxy - if [ -f /var/run/3proxy/3proxy.pid ]; then - /bin/kill `cat /var/run/3proxy/3proxy.pid` - else - /usr/bin/killall 3proxy - fi - - RETVAL=$? - echo - [ $RETVAL ] - ;; - - restart|reload) - echo Reloading 3Proxy - if [ -f /var/run/3proxy/3proxy.pid ]; then - /bin/kill -s USR1 `cat /var/run/3proxy/3proxy.pid` - else - /usr/bin/killall -s USR1 3proxy - fi - ;; - - - *) - echo Usage: $0 "{start|stop|restart}" - exit 1 -esac -exit 0 - diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh index 3fbd223..b21f55b 100644 --- a/scripts/postinstall.sh +++ b/scripts/postinstall.sh @@ -4,11 +4,12 @@ set -e +PREFIX="${1-/usr/local}" + # Check if user already exists if id proxy >/dev/null 2>&1; then echo "User 'proxy' already exists" - exit 0 -fi +else echo "Creating proxy user and group..." @@ -33,7 +34,6 @@ elif command -v dscl >/dev/null 2>&1; then dscl . create /Users/proxy NFSHomeDirectory /var/run/3proxy 2>/dev/null || true else echo "Warning: Could not create proxy user - no suitable user management tool found" - exit 0 fi if id proxy >/dev/null 2>&1; then @@ -42,4 +42,7 @@ else echo "Warning: Failed to create user 'proxy'" fi +fi + +chown -R proxy:proxy ${PREFIX}/etc/3proxy/ exit 0 diff --git a/scripts/rc.d/3proxy b/scripts/rc.d/3proxy deleted file mode 100644 index f293671..0000000 --- a/scripts/rc.d/3proxy +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh - -# PROVIDE: 3proxy -# REQUIRE: LOGIN DAEMON -# KEYWORD: shutdown - -. /etc/rc.subr - -name="3proxy" -rcvar="3proxy_enable" - -command="/usr/local/3proxy/bin/3proxy" -pidfile="/var/run/3proxy/${name}.pid" -command_args="${3proxy_config:-/usr/local/etc/3proxy/3proxy.cfg}" -required_files="${3proxy_config:-/usr/local/etc/3proxy/3proxy.cfg}" - -start_precmd="3proxy_precmd" - -3proxy_precmd() -{ - if [ ! -d /var/run/3proxy ]; then - mkdir -p /var/run/3proxy - fi -} - -load_rc_config $name -run_rc_command "$1" diff --git a/scripts/rc.d/3proxy.in b/scripts/rc.d/3proxy.in index 7d77e0f..ab7c38e 100644 --- a/scripts/rc.d/3proxy.in +++ b/scripts/rc.d/3proxy.in @@ -1,7 +1,7 @@ #!/bin/sh # PROVIDE: 3proxy -# REQUIRE: LOGIN DAEMON +# REQUIRE: LOGIN DAEMON NETWORKING # KEYWORD: shutdown . /etc/rc.subr @@ -11,8 +11,8 @@ rcvar="3proxy_enable" command="@CMAKE_INSTALL_FULL_BINDIR@/3proxy" pidfile="/var/run/3proxy/${name}.pid" -command_args="${3proxy_config:-/etc/3proxy/3proxy.cfg}" -required_files="${3proxy_config:-/etc/3proxy/3proxy.cfg}" +command_args="${3proxy_config:-@CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg}" +required_files="${3proxy_config:-@CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg}" command_user="proxy:proxy" start_precmd="3proxy_precmd" diff --git a/scripts/rh/3proxy.spec b/scripts/rh/3proxy.spec index aacca79..7de3173 100644 --- a/scripts/rh/3proxy.spec +++ b/scripts/rh/3proxy.spec @@ -41,12 +41,12 @@ make clean /bin/3proxy_tcppm /bin/3proxy_tlspr /bin/3proxy_udppm +/bin/add3proxyuser %config(noreplace) /etc/3proxy/3proxy.cfg /etc/3proxy/conf /etc/init.d/3proxy /usr/lib/systemd/system/3proxy.service %config(noreplace) /usr/local/3proxy/conf/3proxy.cfg -%config(noreplace) /usr/local/3proxy/conf/add3proxyuser.sh %config(noreplace) /usr/local/3proxy/conf/bandlimiters %config(noreplace) /usr/local/3proxy/conf/counters /usr/local/3proxy/libexec/*.ld.so @@ -66,10 +66,17 @@ fi if [ ! -f /usr/local/3proxy/conf/passwd ]; then \ touch /usr/local/3proxy/conf/passwd;\ fi -chown -R proxy:proxy /usr/local/3proxy -chmod 550 /usr/local/3proxy/ -chmod 550 /usr/local/3proxy/conf/ -chmod 440 /usr/local/3proxy/conf/* +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ +sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ +if [ -d /etc/3proxy ]; then \ + chown -R proxy:proxy /etc/3proxy; \ + chmod -R o-rwx /etc/3proxy; \ +fi +if [ -d /usr/local/3proxy ]; then \ + chown -R proxy:proxy /usr/local/3proxy; \ + chmod -R o-rwx /usr/local/3proxy; \ +fi if /bin/systemctl >/dev/null 2>&1; then \ /usr/sbin/update-rc.d 3proxy disable || true; \ /usr/sbin/chkconfig 3proxy off || true; \ @@ -84,8 +91,8 @@ fi echo "" echo 3proxy installed. if /bin/systemctl >/dev/null 2>&1; then \ - /bin/systemctl stop 3proxy.service \ - /bin/systemctl start 3proxy.service \ + /bin/systemctl stop 3proxy.service ; \ + /bin/systemctl start 3proxy.service ; \ echo use ;\ echo " "systemctl start 3proxy.service ;\ echo to start proxy ;\ @@ -99,10 +106,10 @@ elif [ -x /usr/sbin/service ]; then \ echo " "service 3proxy stop ;\ echo to stop proxy ;\ fi -echo " "/usr/local/3proxy/conf/add3proxyuser.sh +echo " "/bin/add3proxyuser echo to add users echo "" echo Default config uses Google\'s DNS. echo It\'s recommended to use provider supplied DNS or install local recursor, e.g. pdns-recursor. echo Configure preferred DNS in /usr/local/3proxy/conf/3proxy.cfg. -echo run \'/usr/local/3proxy/conf/add3proxyuser.sh admin password\' to configure \'admin\' user +echo run \'/bin/add3proxyuser admin password\' to configure \'admin\' user From 1772295a362b3c24fbe6a19c52b224f5e42a779f Mon Sep 17 00:00:00 2001 From: Vladimir Dubrovin <3proxy@3proxy.ru> Date: Fri, 29 May 2026 21:11:32 +0300 Subject: [PATCH 4/4] Fix installation --- Makefile.FreeBSD | 8 +++++--- Makefile.unix | 8 +++++--- debian/postinst | 6 +++--- scripts/3proxy.cfg.in | 2 ++ scripts/org.3proxy.3proxy.plist.in | 2 +- scripts/postinstall.sh | 7 ++++++- scripts/rh/3proxy.spec | 6 +++--- 7 files changed, 25 insertions(+), 14 deletions(-) diff --git a/Makefile.FreeBSD b/Makefile.FreeBSD index e37f28a..6f61c9e 100644 --- a/Makefile.FreeBSD +++ b/Makefile.FreeBSD @@ -79,16 +79,18 @@ install: all for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f $(DESTDIR)$(BINPREFIX)/$(PREFIX)$$f; fi; \ done + install -d $(DESTDIR)$(prefix)/etc/3proxy/conf install -d $(DESTDIR)$(prefix)/etc/rc.d/ sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' scripts/rc.d/3proxy.in > $(DESTDIR)$(prefix)/etc/rc.d/3proxy chmod 755 $(DESTDIR)$(prefix)/etc/rc.d/3proxy sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|$(CRYPT_PREFIX)|g' scripts/add3proxyuser.sh.in > $(DESTDIR)$(BINPREFIX)/add3proxyuser + chmod 755 $(DESTDIR)$(BINPREFIX)/add3proxyuser if [ -s $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg ]; then echo $(prefix)/etc/3proxy/3proxy.cfg already exists; else sed -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@3PROXY_COUNTERDIR@|/opt/3proxy|g' scripts/3proxy.cfg.in > $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; chmod 640 $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; fi if [ ! -d $(DESTDIR)/var/log/3proxy/ ]; then mkdir -p $(DESTDIR)/var/log/3proxy/; fi mkdir -p $(DESTDIR)/opt/3proxy - touch $(DESTDIR)$(prefix)/3proxy/passwd - touch $(DESTDIR)$(prefix)/3proxy/counters - touch $(DESTDIR)$(prefix)/3proxy/bandlimiters + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/passwd + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/counters + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/bandlimiters install -d $(DESTDIR)$(MANDIR)/man8 install -m 644 man/3proxy.8 $(DESTDIR)$(MANDIR)/man8/3proxy.8 for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ diff --git a/Makefile.unix b/Makefile.unix index 50e4050..937c031 100644 --- a/Makefile.unix +++ b/Makefile.unix @@ -81,16 +81,18 @@ install: all for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ if [ -f bin/$(PREFIX)$$f ]; then install bin/$(PREFIX)$$f $(DESTDIR)$(BINPREFIX)/$(PREFIX)$$f; fi; \ done + install -d $(DESTDIR)$(prefix)/etc/3proxy/conf install -d $(DESTDIR)$(prefix)/etc/rc.d/ sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' scripts/rc.d/3proxy.in > $(DESTDIR)$(prefix)/etc/rc.d/3proxy chmod 755 $(DESTDIR)$(prefix)/etc/rc.d/3proxy sed -e 's|@CMAKE_INSTALL_FULL_BINDIR@|$(BINPREFIX)|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|$(CRYPT_PREFIX)|g' scripts/add3proxyuser.sh.in > $(DESTDIR)$(BINPREFIX)/add3proxyuser + chmod 755 $(DESTDIR)$(BINPREFIX)/add3proxyuser if [ -s $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg ]; then echo $(prefix)/etc/3proxy/3proxy.cfg already exists; else sed -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|$(prefix)/etc|g' -e 's|@3PROXY_CONFDIR@|$(prefix)/etc/3proxy/conf|g' -e 's|@3PROXY_COUNTERDIR@|/opt/3proxy|g' scripts/3proxy.cfg.in > $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; chmod 640 $(DESTDIR)$(prefix)/etc/3proxy/3proxy.cfg; fi if [ ! -d $(DESTDIR)/var/log/3proxy/ ]; then mkdir -p $(DESTDIR)/var/log/3proxy/; fi mkdir -p $(DESTDIR)/opt/3proxy - touch $(DESTDIR)$(prefix)/3proxy/passwd - touch $(DESTDIR)$(prefix)/3proxy/counters - touch $(DESTDIR)$(prefix)/3proxy/bandlimiters + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/passwd + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/counters + touch $(DESTDIR)$(prefix)/etc/3proxy/conf/bandlimiters install -d $(DESTDIR)$(MANDIR)/man8 install -m 644 man/3proxy.8 $(DESTDIR)$(MANDIR)/man8/3proxy.8 for f in proxy socks pop3p smtpp ftppr tcppm udppm tlspr; do \ diff --git a/debian/postinst b/debian/postinst index ee548aa..a2218c0 100644 --- a/debian/postinst +++ b/debian/postinst @@ -1,6 +1,6 @@ -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ +[ -f /bin/add3proxyuser ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ +[ -f /etc/init.d/3proxy ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ +[ -f /usr/lib/systemd/system/3proxy.service ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ if [ -d /etc/3proxy ]; then \ chmod -R o-rwx /etc/3proxy; \ diff --git a/scripts/3proxy.cfg.in b/scripts/3proxy.cfg.in index 01bb9d0..061a7b1 100644 --- a/scripts/3proxy.cfg.in +++ b/scripts/3proxy.cfg.in @@ -1,6 +1,8 @@ +#!@CMAKE_INSTALL_FULL_BINDIR@/3proxy # use standard syslog logging log @3proxy +pidfile /var/run/3proxy/3proxy.pid #log /logs/3proxy-%y%m%d.log D #rotate 60 diff --git a/scripts/org.3proxy.3proxy.plist.in b/scripts/org.3proxy.3proxy.plist.in index 1e53129..b96cc9f 100644 --- a/scripts/org.3proxy.3proxy.plist.in +++ b/scripts/org.3proxy.3proxy.plist.in @@ -7,7 +7,7 @@ ProgramArguments @CMAKE_INSTALL_FULL_BINDIR@/3proxy - /etc/3proxy/3proxy.cfg + @CMAKE_INSTALL_FULL_SYSCONFDIR@/3proxy/3proxy.cfg UserName proxy diff --git a/scripts/postinstall.sh b/scripts/postinstall.sh index b21f55b..f156af5 100644 --- a/scripts/postinstall.sh +++ b/scripts/postinstall.sh @@ -44,5 +44,10 @@ fi fi -chown -R proxy:proxy ${PREFIX}/etc/3proxy/ +if id proxy >/dev/null 2>&1 && [ -d "${PREFIX}/etc/3proxy" ]; then + chown -R proxy:proxy "${PREFIX}/etc/3proxy/" +fi +if id proxy >/dev/null 2>&1 && [ -d "/opt/3proxy" ]; then + chown -R proxy:proxy "/opt/3proxy/" +fi exit 0 diff --git a/scripts/rh/3proxy.spec b/scripts/rh/3proxy.spec index 7de3173..efbabde 100644 --- a/scripts/rh/3proxy.spec +++ b/scripts/rh/3proxy.spec @@ -66,9 +66,9 @@ fi if [ ! -f /usr/local/3proxy/conf/passwd ]; then \ touch /usr/local/3proxy/conf/passwd;\ fi -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ -sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ +[ -f /bin/add3proxyuser ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@3PROXY_CONFDIR@|/etc/3proxy/conf|g' -e 's|@CRYPT_PREFIX@|3proxy_|g' /bin/add3proxyuser; \ +[ -f /etc/init.d/3proxy ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /etc/init.d/3proxy; \ +[ -f /usr/lib/systemd/system/3proxy.service ] && sed -i -e 's|@CMAKE_INSTALL_FULL_BINDIR@|/bin|g' -e 's|@CMAKE_INSTALL_FULL_SYSCONFDIR@|/etc|g' /usr/lib/systemd/system/3proxy.service; \ if [ -d /etc/3proxy ]; then \ chown -R proxy:proxy /etc/3proxy; \ chmod -R o-rwx /etc/3proxy; \