diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 6149bc97..98aae752 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -19,7 +19,7 @@ permissions: on: push: branches: - - '*' + - 'master' pull_request: branches: - '*' @@ -97,6 +97,8 @@ jobs: with: repository: rapid7/metasploit-framework path: metasploit-framework + # If testing a custom branch is required + ref: 'update-bundler-version' - name: Run omnibus run: | @@ -126,6 +128,17 @@ jobs: docker rm -v $id docker rmi ${TEMP_DOCKER_IMAGE} + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: metasploit-${{ matrix.docker.name }}-installers + path: | + metasploit-omnibus/pkg/*.pkg + metasploit-omnibus/pkg/*.rpm + metasploit-omnibus/pkg/*.msi + metasploit-omnibus/pkg/*.deb + retention-days: 1 + docker_intel: runs-on: ${{ matrix.os }} timeout-minutes: 180 @@ -215,6 +228,17 @@ jobs: env: LINUX32: ${{ matrix.docker.linux32 }} + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: metasploit-${{ matrix.docker.name }}-installers + path: | + metasploit-omnibus/pkg/*.pkg + metasploit-omnibus/pkg/*.rpm + metasploit-omnibus/pkg/*.msi + metasploit-omnibus/pkg/*.deb + retention-days: 1 + osx: runs-on: ${{ matrix.os }} timeout-minutes: 180 @@ -255,6 +279,17 @@ jobs: cd metasploit-omnibus make + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: metasploit-osx-installers + path: | + metasploit-omnibus/pkg/*.pkg + metasploit-omnibus/pkg/*.rpm + metasploit-omnibus/pkg/*.msi + metasploit-omnibus/pkg/*.deb + retention-days: 1 + windows: runs-on: ${{ matrix.os }} timeout-minutes: 180 @@ -338,6 +373,17 @@ jobs: cd metasploit-omnibus make dependencies - rem Don't run the main build itslef under `make`, as the process will be spawned under msys2 + rem Don't run the main build itself under `make`, as the process will be spawned under msys2 rem and the ridk.cmd Ruby installer will forcibly kill the msys2 process before attempting to install ruby ruby bin/omnibus build metasploit-framework + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: metasploit-windows-installers + path: | + metasploit-omnibus/pkg/*.pkg + metasploit-omnibus/pkg/*.rpm + metasploit-omnibus/pkg/*.msi + metasploit-omnibus/pkg/*.deb + retention-days: 1 diff --git a/config/projects/metasploit-framework.rb b/config/projects/metasploit-framework.rb index 545cf576..b9396440 100644 --- a/config/projects/metasploit-framework.rb +++ b/config/projects/metasploit-framework.rb @@ -4,6 +4,7 @@ install_dir "#{default_root}/metasploit-framework" +# Version is extracted from the latest Git tag found in the local Git repository build_version Omnibus::BuildVersion.semver + "-1rapid7" build_iteration 1 diff --git a/config/software/metasploit-framework.rb b/config/software/metasploit-framework.rb index 438c2f55..8506f442 100644 --- a/config/software/metasploit-framework.rb +++ b/config/software/metasploit-framework.rb @@ -1,13 +1,22 @@ name "metasploit-framework" + +# Detect a local checkout of metasploit-framework at '../metasploit-framework' - i.e. for the scenario of: +# - c:/temp/metasploit-omnibus +# - c:/temp/metasploit-framework (A local checkout of framework to use during the build process) +# but try and use 'C:/metasploit-framework' - as that's the metasploit-omnibus artifacts output directory +def has_windows_metasploit_framework_repo? + windows? && File.exist?('../metasploit-framework') && File.expand_path(File.join(Dir.pwd, "..", "metasploit-framework")) != "c:/metasploit-framework" +end + if linux? && File.exist?("/metasploit-framework") # supply current version of metasploit-framework at root of filesystem source path: "/metasploit-framework" -elsif windows? && File.exist?('../metasploit-framework') +elsif has_windows_metasploit_framework_repo? # supply current version of metasploit-framework relative to the current directory source path: "../metasploit-framework" else source git: "https://github.com/rapid7/metasploit-framework.git" - default_version "master" + default_version "update-bundler-version" end dependency "cacerts" @@ -79,12 +88,25 @@ vars: { install_dir: install_dir } end + bundle "version", env: env bundle "config set force_ruby_platform true", env: env bundle_env = with_standard_compiler_flags(with_embedded_path) bundle_env['MAKE'] = 'make -j4' + bundle_env['BUNDLE_FORCE_RUBY_PLATFORM'] = 'true' bundle "install --jobs=4", env: bundle_env + block do + $stderr.puts File.binread("#{install_dir}/embedded/framework/Gemfile.lock") + end + if windows? + # Ensure we additionally copy out 'libssp-0.dll', which is required for multiple gems: + # > dumpbin /dependents C:/metasploit-framework/embedded/lib/ruby/gems/3.1.0/gems/msgpack-1.6.1/lib/msgpack/msgpack.so + # ... + # libssp-0.dll + # ... + copy "#{install_dir}/embedded/msys64/ucrt64/bin/libssp-0.dll", "#{install_dir}/embedded/bin/libssp-0.dll" + delete "#{install_dir}/embedded/msys64" end copy "#{project_dir}/Gemfile.lock", "#{install_dir}/embedded/framework/Gemfile.lock" @@ -154,4 +176,12 @@ end end end + + # Workaround for a Windows bug with chef r7_9.0.23_custom that allows the `.git` folders through + # into the final build result, leading to the .exe being an extra 1gb in size + block do + self.project.exclusions.each do |exclusion| + Pathname(install_dir).glob(exclusion).each(&:rmtree) + end + end end diff --git a/config/software/rubygems.rb b/config/software/rubygems.rb index 68f5acf6..86c7af27 100644 --- a/config/software/rubygems.rb +++ b/config/software/rubygems.rb @@ -28,7 +28,7 @@ dependency "ruby" end -default_version "3.2.22" +default_version "3.5.10" if version && !source # NOTE: 2.1.11 is the last version of rubygems before the 2.2.x change to native gem install location @@ -40,7 +40,9 @@ # we pin the previously known tarballs. known_tarballs = { "3.1.4" => "d117187a8f016cbe8f52011ae02e858b", - "3.2.22"=> "b128d5493da2ec7a1da49a7189c04b35", + "3.2.22" => "b128d5493da2ec7a1da49a7189c04b35", + "3.3.26" =>"ba171c52fd9beda6dac7194413601795", + "3.5.10" =>"70f46c096b4e11c42b0190cc3e3375e2" } known_tarballs.each do |vsn, md5| version vsn do diff --git a/local/cache b/local/cache index 984fcfb6..7f9a632b 160000 --- a/local/cache +++ b/local/cache @@ -1 +1 @@ -Subproject commit 984fcfb697151a942583ba831102c584d13773ad +Subproject commit 7f9a632b87580b39183cf472d54a5d56e05b36aa