mcsema icon indicating copy to clipboard operation
mcsema copied to clipboard

Building in WSLv1 hangs at CPackRPM:

Open xrkk opened this issue 3 years ago • 4 comments

WSLv1 with Ubuntu 20.04, building follow instructions, and hangs at command ./remill/scripts/build.sh --llvm-version 9 --download-dir ./. Last logs:

-- Installing: /home/xxx/mcsema/remill-build/install/usr/local/bin/remill-lift-9
-- Installing: /home/xxx/mcsema/remill-build/install/usr/local/lib/cmake/remill/remillTargets.cmake
-- Installing: /home/xxx/mcsema/remill-build/install/usr/local/lib/cmake/remill/remillTargets-relwithdebinfo.cmake
+ cpack -D REMILL_DATA_PATH=/home/xxx/mcsema/remill-build/install -R ec3dee7b42fabbd0c84d429f3d5f028b03dae56.eec3dee --config /home/xxx/mcsema/remill/packaging/main.cmake
CPack: Create package using TGZ
CPack: Install projects
CPack: - Install directory: /home/xxx/mcsema/remill-build/install
CPack: Create package
CPack: - package: /home/xxx/mcsema/remill-build/remill-ec3dee7b42fabbd0c84d429f3d5f028b03dae56.eec3dee-x86_64.tar.gz generated.
CPack: Create package using DEB
CPack: Install projects
CPack: - Install directory: /home/xxx/mcsema/remill-build/install
CPack: Create package
CMake Warning (dev) at /usr/share/cmake-3.16/Modules/Internal/CPack/CPackDeb.cmake:383 (message):
  CPackDeb: Debian package versioning ([<epoch>:]<version>[-<release>])
  should confirm to "^([0-9]+:)?[0-9][A-Za-z0-9.+~-]*$" regex in order to
  satisfy Debian packaging rules.
Call Stack (most recent call first):
  /usr/share/cmake-3.16/Modules/Internal/CPack/CPackDeb.cmake:763 (cpack_deb_prepare_package_vars)
This warning is for project developers.  Use -Wno-dev to suppress it.

-- CPACK_DEBIAN_PACKAGE_DEPENDS not set, the package will have no dependencies.
CPack: - package: /home/xxx/mcsema/remill-build/remill-ec3dee7b42fabbd0c84d429f3d5f028b03dae56.eec3dee-x86_64.deb generated.
CPack: Create package using RPM
CPack: Install projects
CPack: - Install directory: /home/xxx/mcsema/remill-build/install
CPack: Create package
CPackRPM: Will use GENERATED spec file: /home/xxx/mcsema/remill-build/_CPack_Packages/RPM/SPECS/remill.spec

Any suggestions?

xrkk avatar Mar 24 '21 04:03 xrkk

Hello @xrkk

thanks for the bug report! The packages are not really required to build mcsema, so as a quick workaround you could comment out the Package function in the remill build script.

It does seem like the packaging is causing the script to get stuck; in order to troubleshoot this, we could try to restart the packaging procedure manually so that we can increase verbosity of the CPack build step:

1 - Install remill

Here we create a temporary directory where we can install the library using the DESTDIR environment variable:

mkdir remill_install
export DESTDIR="$(realpath remill_install)"

cmake --build remill_build --target install

2 - Run CPack

The CPack project only needs the path where remill was installed and the library version. For this test, we will just pass a dummy version field

cpack --trace-expand \
      -D REMILL_DATA_PATH="${DESTDIR}" \
      -R 1.0.0 \
      --config remill_source_dir/packaging/main.cmake

The log should help us get more insight on what is happening. An additional flag that can come in useful, if the log does not seem to produce enough output, is --debug.

alessandrogario avatar Mar 24 '21 11:03 alessandrogario

Comment out Package function in remill build script does making building process pass. Thank you. When run cpack --trace-expand -D REMILL_DATA_PATH=remill_install -R 1.0.0 --config remill/packaging/main.cmake --debug, last output:

/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1756):  if(CPACK_RPM_GENERATE_USER_BINARY_SPECFILE_TEMPLATE )
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1763):  if(CPACK_RPM_USER_BINARY_SPECFILE )
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1768):  else()
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1770):  message(CPackRPM: Will use GENERATED spec file: /home/xxx/mcsema/_CPack_Packages/RPM/SPECS/remill.spec )
CPackRPM: Will use GENERATED spec file: /home/xxx/mcsema/_CPack_Packages/RPM/SPECS/remill.spec
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1772):  configure_file(/home/xxx/mcsema/_CPack_Packages/RPM/SPECS/remill.spec.in /home/xxx/mcsema/_CPack_Packages/RPM/SPECS/remill.spec @ONLY )
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1775):  if(NOT GENERATE_SPEC_PARTS )
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1776):  if(RPMBUILD_EXECUTABLE )
/usr/share/cmake-3.16/Modules/Internal/CPack/CPackRPM.cmake(1778):  execute_process(COMMAND /usr/bin/rpmbuild -bb --define _topdir /home/xxx/mcsema/_CPack_Packages/RPM --buildroot %_topdir/remill-1.0.0-x86_64 --target x86_64 /home/xxx/mcsema/_CPack_Packages/RPM/SPECS/remill.spec WORKING_DIRECTORY /home/xxx/mcsema/_CPack_Packages/RPM/remill-1.0.0-x86_64 RESULT_VARIABLE CPACK_RPMBUILD_EXEC_RESULT ERROR_FILE /home/xxx/mcsema/_CPack_Packages/RPM/rpmbuildremill.err OUTPUT_FILE /home/xxx/mcsema/_CPack_Packages/RPM/rpmbuildremill.out )

Still hangs. (I executed above command right after Step 2 provided in the Readme).

xrkk avatar Mar 24 '21 23:03 xrkk

Hello @xrkk

thanks for testing this! It does seem to be a problem related to the rpmbuild execution. Is there anything of value logged into the stderr and stdout files?

alessandrogario avatar Mar 25 '21 08:03 alessandrogario

Full stdout list: https://gist.github.com/xrkk/9703a4b9d309363cc13f1fba8dad461d

I searched stdout for keyword error and found last line: CPACK_RPMBUILD_EXEC_RESULT ERROR_FILE /home/xxx/mcsema/_CPack_Packages/RPM/rpmbuildremill.err OUTPUT_FILE /home/xxx/mcsema/_CPack_Packages/RPM/rpmbuildremill.out ), but both rpmbuildremill.err and rpmbuildremill.out are empty files with no content. And 56 Warning in the log.

BTW: the hanging process can't be terminated with Ctrl+C.

xrkk avatar Mar 25 '21 23:03 xrkk