1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2026-06-09 22:36:59 -05:00

Linux: add support for building against FUSE3

This commit is contained in:
Mounir IDRASSI
2026-04-13 09:43:22 +09:00
parent f7c9e62909
commit cdc00dc4aa
8 changed files with 327 additions and 72 deletions
+34 -17
View File
@@ -10,6 +10,8 @@ elseif ( NOT DEFINED NOGUI )
MESSAGE(FATAL_ERROR "NOGUI variable MUST BE set to TRUE if building 'Console' version, 'FALSE' otherwise") MESSAGE(FATAL_ERROR "NOGUI variable MUST BE set to TRUE if building 'Console' version, 'FALSE' otherwise")
endif() endif()
option(VC_WITH_FUSE3 "Link against FUSE3 instead of FUSE2 when packaging" OFF)
# - Set version of the package # - Set version of the package
set( FULL_VERSION "1.26.27" ) set( FULL_VERSION "1.26.27" )
set( VERSION "1.26.27" ) set( VERSION "1.26.27" )
@@ -268,46 +270,56 @@ if ( ( PLATFORM STREQUAL "Debian" ) OR ( PLATFORM STREQUAL "Ubuntu" ) )
set( CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} ) set( CPACK_DEBIAN_PACKAGE_RELEASE ${CPACK_PACKAGE_RELEASE} )
set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCHITECTURE} ) # mandatory set( CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCHITECTURE} ) # mandatory
if (NOGUI) # Determine the FUSE runtime package name that matches the selected FUSE version
# Link against statically built wxWidgets so that we don't depend on any GTK library set(VC_DEBIAN_USE_T64 FALSE)
# In case of Ubuntu 24.04/ Debian 13 or newer, libfuse2 package was renamed libfuse2t64
if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "13" ) ) if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "13" ) )
OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "24.04" ) ) ) OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "24.04" ) ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libfuse2t64, dmsetup, sudo" ) set(VC_DEBIAN_USE_T64 TRUE)
else ()
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libfuse2, dmsetup, sudo" )
endif () endif ()
if (VC_WITH_FUSE3)
set(VC_DEBIAN_FUSE_PACKAGE "libfuse3-3")
else ()
if (VC_DEBIAN_USE_T64)
set(VC_DEBIAN_FUSE_PACKAGE "libfuse2t64")
else ()
set(VC_DEBIAN_FUSE_PACKAGE "libfuse2")
endif ()
endif ()
if (NOGUI)
# Link against statically built wxWidgets so that we don't depend on any GTK library
set( CPACK_DEBIAN_PACKAGE_DEPENDS "${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
else () else ()
# Link against gtk3 version of wxWidgets if >= Debian 10 or >= Ubuntu 18.04 # Link against gtk3 version of wxWidgets if >= Debian 10 or >= Ubuntu 18.04
# Otherwise, link against gtk2 version of wxWidgets # Otherwise, link against gtk2 version of wxWidgets
if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "13" ) ) if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "13" ) )
OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "25.04" ) ) ) OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "25.04" ) ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.2-1t64, libayatana-appindicator3-1, libfuse2t64, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.2-1t64, libayatana-appindicator3-1, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
# In case of Ubuntu 24.04, we depend on libfuse2t64 instead of libfuse2 and we link statically against wxWidgets # In case of Ubuntu 24.04, we depend on the t64 variant of the FUSE package and we link statically against wxWidgets
# because there is a bug in wxWidgets that ships with Ubuntu 24.04 and which was fixed in wxWidgets 3.2.5 # because there is a bug in wxWidgets that ships with Ubuntu 24.04 and which was fixed in wxWidgets 3.2.5
elseif ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "24.04" ) ) elseif ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "24.04" ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libgtk-3-0t64, libayatana-appindicator3-1, libfuse2t64, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libgtk-3-0t64, libayatana-appindicator3-1, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
elseif ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "12" ) ) elseif ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "12" ) )
OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "23.04" ) ) ) OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "23.04" ) ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.2-1, libayatana-appindicator3-1, libfuse2, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.2-1, libayatana-appindicator3-1, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
elseif ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "10" ) ) elseif ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "10" ) )
OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "18.04" ) ) ) OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_GREATER_EQUAL "18.04" ) ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.0-gtk3-0v5, libayatana-appindicator3-1, libfuse2, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.0-gtk3-0v5, libayatana-appindicator3-1, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
else () else ()
# Link against statically built wxWidgets on Ubuntu 14.04 and older, and Debian 8 and older # Link against statically built wxWidgets on Ubuntu 14.04 and older, and Debian 8 and older
if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_LESS_EQUAL "8" ) ) if ( ( ( PLATFORM STREQUAL "Debian" ) AND ( PLATFORM_VERSION VERSION_LESS_EQUAL "8" ) )
OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_LESS_EQUAL "14.04" ) ) ) OR ( ( PLATFORM STREQUAL "Ubuntu" ) AND ( PLATFORM_VERSION VERSION_LESS_EQUAL "14.04" ) ) )
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libgtk2.0-0, libfuse2, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libgtk2.0-0, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
else () else ()
set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.0-0v5, libfuse2, dmsetup, sudo" ) set( CPACK_DEBIAN_PACKAGE_DEPENDS "libwxgtk3.0-0v5, ${VC_DEBIAN_FUSE_PACKAGE}, dmsetup, sudo" )
endif () endif ()
endif() endif()
@@ -330,7 +342,7 @@ elseif ( ( PLATFORM STREQUAL "CentOS" ) OR ( PLATFORM STREQUAL "openSUSE" ) OR (
set( RPM_PRERM ${CMAKE_CURRENT_BINARY_DIR}/Packaging/rpm-control/prerm.sh) set( RPM_PRERM ${CMAKE_CURRENT_BINARY_DIR}/Packaging/rpm-control/prerm.sh)
set( CPACK_GENERATOR "RPM" ) # mandatory set( CPACK_GENERATOR "RPM" ) # mandatory
set( CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_SUMMARY} ) # mandatory set( CPACK_RPM_PACKAGE_SUMMARY ${CPACK_PACKAGE_DESCRIPTION_SUMMARY} ) # mandatory
set( CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION} ) # mandatory set( CPACK_RPM_PACKAGE_DESCRIPTION ${CPACK_PACKAGE_DESCRIPTION} ) # mandatory
set( CPACK_RPM_PACKAGE_NAME ${CPACK_PACKAGE_NAME} ) # mandatory set( CPACK_RPM_PACKAGE_NAME ${CPACK_PACKAGE_NAME} ) # mandatory
set( CPACK_RPM_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}.rpm ) # mandatory set( CPACK_RPM_FILE_NAME ${CPACK_PACKAGE_FILE_NAME}.rpm ) # mandatory
@@ -341,17 +353,22 @@ elseif ( ( PLATFORM STREQUAL "CentOS" ) OR ( PLATFORM STREQUAL "openSUSE" ) OR (
set( CPACK_RPM_PACKAGE_GROUP "Applications/System" ) # mandatory, https://fedoraproject.org/wiki/RPMGroups set( CPACK_RPM_PACKAGE_GROUP "Applications/System" ) # mandatory, https://fedoraproject.org/wiki/RPMGroups
set( CPACK_RPM_PACKAGE_VENDOR ${CPACK_PACKAGE_VENDOR} ) # mandatory set( CPACK_RPM_PACKAGE_VENDOR ${CPACK_PACKAGE_VENDOR} ) # mandatory
set( CPACK_RPM_PACKAGE_AUTOREQ "no" ) # disable automatic shared libraries dependency detection (most of the time buggy) set( CPACK_RPM_PACKAGE_AUTOREQ "no" ) # disable automatic shared libraries dependency detection (most of the time buggy)
if (VC_WITH_FUSE3)
set(VC_RPM_FUSE_PACKAGE "fuse3")
else ()
set(VC_RPM_FUSE_PACKAGE "fuse")
endif ()
if (NOGUI) if (NOGUI)
set( CPACK_RPM_PACKAGE_REQUIRES "fuse, device-mapper, sudo" ) set( CPACK_RPM_PACKAGE_REQUIRES "${VC_RPM_FUSE_PACKAGE}, device-mapper, sudo" )
else () else ()
find_package(PkgConfig REQUIRED) find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK3 gtk+-3.0) pkg_check_modules(GTK3 gtk+-3.0)
if(GTK3_FOUND) if(GTK3_FOUND)
set( CPACK_RPM_PACKAGE_REQUIRES "fuse, device-mapper, gtk3, sudo" ) set( CPACK_RPM_PACKAGE_REQUIRES "${VC_RPM_FUSE_PACKAGE}, device-mapper, gtk3, sudo" )
else() else()
set( CPACK_RPM_PACKAGE_REQUIRES "fuse, device-mapper, gtk2, sudo" ) set( CPACK_RPM_PACKAGE_REQUIRES "${VC_RPM_FUSE_PACKAGE}, device-mapper, gtk2, sudo" )
endif() endif()
endif() endif()
+52 -6
View File
@@ -41,6 +41,52 @@ export WX_ROOT=$PARENTDIR/wxWidgets-3.2.5
cd $SOURCEPATH cd $SOURCEPATH
# Detect requested FUSE version (defaults to FUSE2). Can be set via WITHFUSE3=1 or by passing FUSE3/--with-fuse3.
build_with_fuse3=0
if [ -n "$WITHFUSE3" ] && [ "$WITHFUSE3" != "0" ]; then
build_with_fuse3=1
fi
preserved_args=""
while [ $# -gt 0 ]; do
case "$1" in
FUSE3|WITHFUSE3|--with-fuse3)
build_with_fuse3=1
;;
FUSE2|WITHFUSE2|--with-fuse2)
build_with_fuse3=0
;;
WXSTATIC|INDICATOR)
if [ -z "$preserved_args" ]; then
preserved_args="$1"
else
preserved_args="$preserved_args $1"
fi
;;
*)
echo "Warning: Unrecognized option '$1' (ignored)" >&2
;;
esac
shift
done
set --
if [ -n "$preserved_args" ]; then
for arg in $preserved_args; do
set -- "$@" "$arg"
done
fi
if [ "$build_with_fuse3" = "1" ]; then
FUSE3_MAKE_FLAG="WITHFUSE3=1"
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=TRUE"
echo "Building VeraCrypt packages against FUSE3"
else
FUSE3_MAKE_FLAG=""
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=FALSE"
echo "Building VeraCrypt packages against FUSE2"
fi
build_and_install() { build_and_install() {
target=$1 target=$1
wxstatic=$2 wxstatic=$2
@@ -63,7 +109,7 @@ build_and_install() {
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild." echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
else else
echo "Using wxWidgets sources in $WX_ROOT" echo "Using wxWidgets sources in $WX_ROOT"
make $wxstatic_value $nogui wxbuild || exit 1 make $wxstatic_value $nogui $FUSE3_MAKE_FLAG wxbuild || exit 1
fi fi
fi fi
@@ -73,9 +119,9 @@ build_and_install() {
fi fi
rm -rf "$PARENTDIR/VeraCrypt_Setup/$target" rm -rf "$PARENTDIR/VeraCrypt_Setup/$target"
make $wxstatic_value $indicator_value $nogui clean || exit 1 make $wxstatic_value $indicator_value $nogui $FUSE3_MAKE_FLAG clean || exit 1
make $wxstatic_value $indicator_value $nogui || exit 1 make $wxstatic_value $indicator_value $nogui $FUSE3_MAKE_FLAG || exit 1
make $wxstatic_value $indicator_value $nogui install DESTDIR="$PARENTDIR/VeraCrypt_Setup/$target" || exit 1 make $wxstatic_value $indicator_value $nogui $FUSE3_MAKE_FLAG install DESTDIR="$PARENTDIR/VeraCrypt_Setup/$target" || exit 1
} }
# Handle arguments # Handle arguments
@@ -112,8 +158,8 @@ rm -rf $PARENTDIR/VeraCrypt_Packaging
mkdir -p $PARENTDIR/VeraCrypt_Packaging/GUI mkdir -p $PARENTDIR/VeraCrypt_Packaging/GUI
mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake || exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake || exit 1
+42 -10
View File
@@ -41,6 +41,38 @@ export WX_ROOT=$PARENTDIR/wxWidgets-3.2.5
cd $SOURCEPATH cd $SOURCEPATH
# Detect requested FUSE version (defaults to FUSE2). Can be set via WITHFUSE3=1 or by passing FUSE3/--with-fuse3.
build_with_fuse3=0
if [ -n "$WITHFUSE3" ] && [ "$WITHFUSE3" != "0" ]; then
build_with_fuse3=1
fi
while [ $# -gt 0 ]; do
case "$1" in
FUSE3|WITHFUSE3|--with-fuse3)
build_with_fuse3=1
;;
FUSE2|WITHFUSE2|--with-fuse2)
build_with_fuse3=0
;;
*)
echo "Unknown option: $1" >&2
exit 1
;;
esac
shift
done
if [ "$build_with_fuse3" = "1" ]; then
FUSE3_MAKE_FLAG="WITHFUSE3=1"
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=TRUE"
echo "Building VeraCrypt packages against FUSE3"
else
FUSE3_MAKE_FLAG=""
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=FALSE"
echo "Building VeraCrypt packages against FUSE2"
fi
echo "Building GUI version of VeraCrypt for RPM using wxWidgets static libraries" echo "Building GUI version of VeraCrypt for RPM using wxWidgets static libraries"
# This will be the temporary wxWidgets directory # This will be the temporary wxWidgets directory
@@ -51,14 +83,14 @@ if [ -L "${WX_BUILD_DIR}/wx-config" ]; then
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild." echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
else else
echo "Using wxWidgets sources in $WX_ROOT" echo "Using wxWidgets sources in $WX_ROOT"
make WXSTATIC=1 wxbuild || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG wxbuild || exit 1
ln -s $WX_BUILD_DIR/lib $WX_BUILD_DIR/lib64 ln -s $WX_BUILD_DIR/lib $WX_BUILD_DIR/lib64
fi fi
rm -rf "$PARENTDIR/VeraCrypt_Setup/GUI" rm -rf "$PARENTDIR/VeraCrypt_Setup/GUI"
make WXSTATIC=1 clean || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG clean || exit 1
make WXSTATIC=1 || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG || exit 1
make WXSTATIC=1 install DESTDIR="$PARENTDIR/VeraCrypt_Setup/GUI" || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG install DESTDIR="$PARENTDIR/VeraCrypt_Setup/GUI" || exit 1
echo "Building console version of VeraCrypt for RPM using wxWidgets static libraries" echo "Building console version of VeraCrypt for RPM using wxWidgets static libraries"
@@ -74,14 +106,14 @@ if [ -L "${WX_BUILD_DIR}/wx-config" ]; then
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild." echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
else else
echo "Using wxWidgets sources in $WX_ROOT" echo "Using wxWidgets sources in $WX_ROOT"
make WXSTATIC=1 NOGUI=1 wxbuild || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG wxbuild || exit 1
ln -s $WX_BUILD_DIR/lib $WX_BUILD_DIR/lib64 ln -s $WX_BUILD_DIR/lib $WX_BUILD_DIR/lib64
fi fi
rm -rf "$PARENTDIR/VeraCrypt_Setup/Console" rm -rf "$PARENTDIR/VeraCrypt_Setup/Console"
make WXSTATIC=1 NOGUI=1 clean || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG clean || exit 1
make WXSTATIC=1 NOGUI=1 || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG || exit 1
make WXSTATIC=1 NOGUI=1 install DESTDIR="$PARENTDIR/VeraCrypt_Setup/Console" || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG install DESTDIR="$PARENTDIR/VeraCrypt_Setup/Console" || exit 1
echo "Creating VeraCrypt RPM packages " echo "Creating VeraCrypt RPM packages "
@@ -95,7 +127,7 @@ mkdir -p $PARENTDIR/VeraCrypt_Packaging/GUI
mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console
# wxWidgets was built using native GTK version # wxWidgets was built using native GTK version
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake|| exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake|| exit 1
+45 -10
View File
@@ -41,6 +41,38 @@ export WX_ROOT=$PARENTDIR/wxWidgets-3.2.5
cd $SOURCEPATH cd $SOURCEPATH
# Detect requested FUSE version (defaults to FUSE2). Can be set via WITHFUSE3=1 or by passing FUSE3/--with-fuse3.
build_with_fuse3=0
if [ -n "$WITHFUSE3" ] && [ "$WITHFUSE3" != "0" ]; then
build_with_fuse3=1
fi
while [ $# -gt 0 ]; do
case "$1" in
FUSE3|WITHFUSE3|--with-fuse3)
build_with_fuse3=1
;;
FUSE2|WITHFUSE2|--with-fuse2)
build_with_fuse3=0
;;
*)
echo "Unknown option: $1" >&2
exit 1
;;
esac
shift
done
if [ "$build_with_fuse3" = "1" ]; then
FUSE3_MAKE_FLAG="WITHFUSE3=1"
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=TRUE"
echo "Building VeraCrypt packages against FUSE3"
else
FUSE3_MAKE_FLAG=""
FUSE3_CMAKE_FLAG="-DVC_WITH_FUSE3=FALSE"
echo "Building VeraCrypt packages against FUSE2"
fi
echo "Building GUI version of VeraCrypt for RPM using wxWidgets static libraries" echo "Building GUI version of VeraCrypt for RPM using wxWidgets static libraries"
# This will be the temporary wxWidgets directory # This will be the temporary wxWidgets directory
@@ -51,13 +83,16 @@ if [ -L "${WX_BUILD_DIR}/wx-config" ]; then
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild." echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
else else
echo "Using wxWidgets sources in $WX_ROOT" echo "Using wxWidgets sources in $WX_ROOT"
make WXSTATIC=1 wxbuild || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG wxbuild || exit 1
if [ -d "$WX_BUILD_DIR/lib" ] && [ ! -e "$WX_BUILD_DIR/lib64" ]; then
ln -s "$WX_BUILD_DIR/lib" "$WX_BUILD_DIR/lib64"
fi
fi fi
rm -rf "$PARENTDIR/VeraCrypt_Setup/GUI" rm -rf "$PARENTDIR/VeraCrypt_Setup/GUI"
make WXSTATIC=1 clean || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG clean || exit 1
make WXSTATIC=1 || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG || exit 1
make WXSTATIC=1 install DESTDIR="$PARENTDIR/VeraCrypt_Setup/GUI" || exit 1 make WXSTATIC=1 $FUSE3_MAKE_FLAG install DESTDIR="$PARENTDIR/VeraCrypt_Setup/GUI" || exit 1
echo "Building console version of VeraCrypt for RPM using wxWidgets static libraries" echo "Building console version of VeraCrypt for RPM using wxWidgets static libraries"
@@ -73,13 +108,13 @@ if [ -L "${WX_BUILD_DIR}/wx-config" ]; then
echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild." echo "wx-config already exists in ${WX_BUILD_DIR}. Skipping wxbuild."
else else
echo "Using wxWidgets sources in $WX_ROOT" echo "Using wxWidgets sources in $WX_ROOT"
make WXSTATIC=1 NOGUI=1 wxbuild || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG wxbuild || exit 1
fi fi
rm -rf "$PARENTDIR/VeraCrypt_Setup/Console" rm -rf "$PARENTDIR/VeraCrypt_Setup/Console"
make WXSTATIC=1 NOGUI=1 clean || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG clean || exit 1
make WXSTATIC=1 NOGUI=1 || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG || exit 1
make WXSTATIC=1 NOGUI=1 install DESTDIR="$PARENTDIR/VeraCrypt_Setup/Console" || exit 1 make WXSTATIC=1 NOGUI=1 $FUSE3_MAKE_FLAG install DESTDIR="$PARENTDIR/VeraCrypt_Setup/Console" || exit 1
echo "Creating VeraCrypt RPM packages " echo "Creating VeraCrypt RPM packages "
@@ -93,7 +128,7 @@ mkdir -p $PARENTDIR/VeraCrypt_Packaging/GUI
mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console mkdir -p $PARENTDIR/VeraCrypt_Packaging/Console
# wxWidgets was built using native GTK version # wxWidgets was built using native GTK version
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/GUI -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/GUI" -DNOGUI=FALSE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/GUI/CPackConfig.cmake || exit 1
cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE || exit 1 cmake -H$SCRIPTPATH -B$PARENTDIR/VeraCrypt_Packaging/Console -DVERACRYPT_BUILD_DIR="$PARENTDIR/VeraCrypt_Setup/Console" -DNOGUI=TRUE $FUSE3_CMAKE_FLAG || exit 1
cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake || exit 1 cpack --config $PARENTDIR/VeraCrypt_Packaging/Console/CPackConfig.cmake || exit 1
+1
View File
@@ -16,5 +16,6 @@ OBJS :=
OBJS += FuseService.o OBJS += FuseService.o
CXXFLAGS += $(shell $(PKG_CONFIG) $(VC_FUSE_PACKAGE) --cflags) CXXFLAGS += $(shell $(PKG_CONFIG) $(VC_FUSE_PACKAGE) --cflags)
CXXFLAGS += -DVC_FUSE_VERSION=$(VC_FUSE_VERSION)
include $(BUILD_INC)/Makefile.inc include $(BUILD_INC)/Makefile.inc
+109 -14
View File
@@ -13,7 +13,22 @@
#ifdef TC_OPENBSD #ifdef TC_OPENBSD
# define FUSE_USE_VERSION 26 # define FUSE_USE_VERSION 26
#else #else
# ifndef VC_FUSE_VERSION
# define VC_FUSE_VERSION 2
# endif
# if VC_FUSE_VERSION < 3
# define FUSE_USE_VERSION 25 # define FUSE_USE_VERSION 25
# else
# define FUSE_USE_VERSION 301
# define VC_FUSE3 1
# endif
#endif
#ifdef VC_FUSE3
#define VC_FUSE_FILL_DIR(filler, buf, name, st, off) filler(buf, name, st, off, (enum fuse_fill_dir_flags)0)
#else
#define VC_FUSE_FILL_DIR(filler, buf, name, st, off) filler(buf, name, st, off)
#endif #endif
#include <errno.h> #include <errno.h>
@@ -41,6 +56,23 @@
namespace VeraCrypt namespace VeraCrypt
{ {
static const ino_t VC_FUSE_INODE_ROOT = 1;
static const ino_t VC_FUSE_INODE_VOLUME = 2;
static const ino_t VC_FUSE_INODE_CONTROL = 3;
static int fuse_service_fill_dir_entry (void *buf, fuse_fill_dir_t filler, const char *name, mode_t mode, ino_t ino, off_t nextOff)
{
struct stat st;
Memory::Zero (&st, sizeof (st));
st.st_mode = mode;
st.st_nlink = S_ISDIR (mode) ? 2 : 1;
st.st_uid = FuseService::GetUserId();
st.st_gid = FuseService::GetGroupId();
st.st_ino = ino;
return VC_FUSE_FILL_DIR (filler, buf, name, &st, nextOff);
}
static int fuse_service_access (const char *path, int mask) static int fuse_service_access (const char *path, int mask)
{ {
try try
@@ -56,11 +88,7 @@ namespace VeraCrypt
return 0; return 0;
} }
#ifdef TC_OPENBSD static void *fuse_service_init_common ()
static void *fuse_service_init (struct fuse_conn_info *)
#else
static void *fuse_service_init ()
#endif
{ {
try try
{ {
@@ -88,6 +116,32 @@ namespace VeraCrypt
return nullptr; return nullptr;
} }
#if defined(VC_FUSE3)
static void *fuse_service_init (struct fuse_conn_info *conn, struct fuse_config *cfg)
{
if (cfg)
{
cfg->set_uid = 1;
cfg->set_gid = 1;
cfg->uid = FuseService::GetUserId();
cfg->gid = FuseService::GetGroupId();
}
return fuse_service_init_common ();
}
#elif defined(TC_OPENBSD) || (FUSE_USE_VERSION >= 26)
static void *fuse_service_init (struct fuse_conn_info *conn)
{
(void) conn;
return fuse_service_init_common ();
}
#else
static void *fuse_service_init ()
{
return fuse_service_init_common ();
}
#endif
static void fuse_service_destroy (void *userdata) static void fuse_service_destroy (void *userdata)
{ {
try try
@@ -104,7 +158,7 @@ namespace VeraCrypt
} }
} }
static int fuse_service_getattr (const char *path, struct stat *statData) static int fuse_service_getattr_impl (const char *path, struct stat *statData)
{ {
try try
{ {
@@ -120,6 +174,7 @@ namespace VeraCrypt
{ {
statData->st_mode = S_IFDIR | 0500; statData->st_mode = S_IFDIR | 0500;
statData->st_nlink = 2; statData->st_nlink = 2;
statData->st_ino = VC_FUSE_INODE_ROOT;
} }
else else
{ {
@@ -131,12 +186,14 @@ namespace VeraCrypt
statData->st_mode = S_IFREG | 0600; statData->st_mode = S_IFREG | 0600;
statData->st_nlink = 1; statData->st_nlink = 1;
statData->st_size = FuseService::GetVolumeSize(); statData->st_size = FuseService::GetVolumeSize();
statData->st_ino = VC_FUSE_INODE_VOLUME;
} }
else if (strcmp (path, FuseService::GetControlPath()) == 0) else if (strcmp (path, FuseService::GetControlPath()) == 0)
{ {
statData->st_mode = S_IFREG | 0600; statData->st_mode = S_IFREG | 0600;
statData->st_nlink = 1; statData->st_nlink = 1;
statData->st_size = FuseService::GetVolumeInfo()->Size(); statData->st_size = FuseService::GetVolumeInfo()->Size();
statData->st_ino = VC_FUSE_INODE_CONTROL;
} }
else else
{ {
@@ -152,6 +209,19 @@ namespace VeraCrypt
return 0; return 0;
} }
#if defined(VC_FUSE3)
static int fuse_service_getattr (const char *path, struct stat *statData, struct fuse_file_info *fi)
{
(void) fi;
return fuse_service_getattr_impl (path, statData);
}
#else
static int fuse_service_getattr (const char *path, struct stat *statData)
{
return fuse_service_getattr_impl (path, statData);
}
#endif
static int fuse_service_opendir (const char *path, struct fuse_file_info *fi) static int fuse_service_opendir (const char *path, struct fuse_file_info *fi)
{ {
try try
@@ -261,8 +331,10 @@ namespace VeraCrypt
return -ENOENT; return -ENOENT;
} }
static int fuse_service_readdir (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi) static int fuse_service_readdir_impl (const char *path, void *buf, fuse_fill_dir_t filler, struct fuse_file_info *fi)
{ {
(void) fi;
try try
{ {
if (!FuseService::CheckAccessRights()) if (!FuseService::CheckAccessRights())
@@ -271,10 +343,14 @@ namespace VeraCrypt
if (strcmp (path, "/") != 0) if (strcmp (path, "/") != 0)
return -ENOENT; return -ENOENT;
filler (buf, ".", NULL, 0); if (fuse_service_fill_dir_entry (buf, filler, ".", S_IFDIR | 0500, VC_FUSE_INODE_ROOT, 0) != 0)
filler (buf, "..", NULL, 0); return 0;
filler (buf, FuseService::GetVolumeImagePath() + 1, NULL, 0); if (fuse_service_fill_dir_entry (buf, filler, "..", S_IFDIR | 0500, VC_FUSE_INODE_ROOT, 0) != 0)
filler (buf, FuseService::GetControlPath() + 1, NULL, 0); return 0;
if (fuse_service_fill_dir_entry (buf, filler, FuseService::GetVolumeImagePath() + 1, S_IFREG | 0600, VC_FUSE_INODE_VOLUME, 0) != 0)
return 0;
if (fuse_service_fill_dir_entry (buf, filler, FuseService::GetControlPath() + 1, S_IFREG | 0600, VC_FUSE_INODE_CONTROL, 0) != 0)
return 0;
} }
catch (...) catch (...)
{ {
@@ -284,6 +360,21 @@ namespace VeraCrypt
return 0; return 0;
} }
#if defined(VC_FUSE3)
static int fuse_service_readdir (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi, enum fuse_readdir_flags flags)
{
(void) offset;
(void) flags;
return fuse_service_readdir_impl (path, buf, filler, fi);
}
#else
static int fuse_service_readdir (const char *path, void *buf, fuse_fill_dir_t filler, off_t offset, struct fuse_file_info *fi)
{
(void) offset;
return fuse_service_readdir_impl (path, buf, filler, fi);
}
#endif
static int fuse_service_write (const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *fi) static int fuse_service_write (const char *path, const char *buf, size_t size, off_t offset, struct fuse_file_info *fi)
{ {
try try
@@ -461,13 +552,15 @@ namespace VeraCrypt
} }
catch (...) catch (...)
{ {
// Ignore exceptions since we will retry
}
if (t > 50) if (t > 50)
throw; throw TimeOut (SRC_POS);
Thread::Sleep (100); Thread::Sleep (100);
} }
} }
}
void FuseService::ReadVolumeSectors (const BufferPtr &buffer, uint64 byteOffset) void FuseService::ReadVolumeSectors (const BufferPtr &buffer, uint64 byteOffset)
{ {
@@ -592,7 +685,9 @@ namespace VeraCrypt
SignalHandlerPipe->GetWriteFD(); SignalHandlerPipe->GetWriteFD();
#ifdef TC_OPENBSD #ifdef VC_FUSE3
_exit (fuse_main (argc, argv, &fuse_service_oper, nullptr));
#elif defined(TC_OPENBSD)
_exit (fuse_main (argc, argv, &fuse_service_oper, NULL)); _exit (fuse_main (argc, argv, &fuse_service_oper, NULL));
#else #else
_exit (fuse_main (argc, argv, &fuse_service_oper)); _exit (fuse_main (argc, argv, &fuse_service_oper));
+1 -1
View File
@@ -48,7 +48,7 @@ namespace VeraCrypt
static const char *GetControlPath () { return "/control"; } static const char *GetControlPath () { return "/control"; }
static const char *GetVolumeImagePath (); static const char *GetVolumeImagePath ();
static string GetDeviceType () { return "veracrypt"; } static string GetDeviceType () { return "veracrypt"; }
static uid_t GetGroupId () { return GroupId; } static gid_t GetGroupId () { return GroupId; }
static uid_t GetUserId () { return UserId; } static uid_t GetUserId () { return UserId; }
static shared_ptr <Buffer> GetVolumeInfo (); static shared_ptr <Buffer> GetVolumeInfo ();
static uint64 GetVolumeSize (); static uint64 GetVolumeSize ();
+31 -2
View File
@@ -52,7 +52,7 @@ export LFLAGS :=
export PKG_CONFIG ?= pkg-config export PKG_CONFIG ?= pkg-config
export PKG_CONFIG_PATH ?= /usr/local/lib/pkgconfig export PKG_CONFIG_PATH ?= /usr/local/lib/pkgconfig
export VC_FUSE_PACKAGE := fuse
export VC_OSX_FUSET ?= 0 export VC_OSX_FUSET ?= 0
export WX_CONFIG ?= wx-config export WX_CONFIG ?= wx-config
@@ -342,7 +342,6 @@ $(error Specified SDK version was not found, ensure your active developer direct
ifneq "$(VC_OSX_FUSET)" "0" ifneq "$(VC_OSX_FUSET)" "0"
C_CXX_FLAGS += -DVC_MACOSX_FUSET C_CXX_FLAGS += -DVC_MACOSX_FUSET
VC_FUSE_PACKAGE := fuse-t
endif endif
export CFLAGS_ARM64 := $(CFLAGS) $(C_CXX_FLAGS) -arch arm64 -march=armv8-a+crypto export CFLAGS_ARM64 := $(CFLAGS) $(C_CXX_FLAGS) -arch arm64 -march=armv8-a+crypto
@@ -547,6 +546,36 @@ ifneq (,$(filter Linux FreeBSD OpenBSD,$(PLATFORM)))
endif endif
endif endif
#------ FUSE selection ------
# User must specify WITHFUSE3 (non-zero) to request fuse3. Otherwise fuse (FUSE2) is used.
# macOS FUSE-T builds select the fuse-t pkg-config package through WITHFUSET.
# In all cases, existence is validated and build stops if the selected package is not found.
ifeq "$(PLATFORM)" "MacOSX"
ifneq "$(VC_OSX_FUSET)" "0"
VC_FUSE_PACKAGE := fuse-t
else
VC_FUSE_PACKAGE := fuse
endif
else
ifeq ($(origin WITHFUSE3),command line)
ifneq ($(WITHFUSE3),0)
VC_FUSE_PACKAGE := fuse3
else
VC_FUSE_PACKAGE := fuse
endif
else
VC_FUSE_PACKAGE := fuse
endif
endif
FUSE_FOUND := $(shell $(PKG_CONFIG) --exists $(VC_FUSE_PACKAGE) >/dev/null 2>&1 && echo 1 || echo 0)
ifeq ($(FUSE_FOUND),0)
$(error Requested FUSE package '$(VC_FUSE_PACKAGE)' not found. Install it (or set WITHFUSE3/WITHFUSET appropriately).)
endif
export VC_FUSE_PACKAGE
export VC_FUSE_VERSION := $(shell $(PKG_CONFIG) --modversion $(VC_FUSE_PACKAGE) 2>/dev/null | cut -d. -f1)
#------ Common configuration ------ #------ Common configuration ------
CFLAGS := $(C_CXX_FLAGS) $(CFLAGS) $(TC_EXTRA_CFLAGS) CFLAGS := $(C_CXX_FLAGS) $(CFLAGS) $(TC_EXTRA_CFLAGS)