mirror of
https://github.com/ohwgiles/laminar.git
synced 2024-10-27 20:34:20 +00:00
Compare commits
13 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
cfa995f8b9 | ||
|
0a340f9b0b | ||
|
d259dff604 | ||
|
44aea1fc06 | ||
|
27d2a760fd | ||
|
fc6343bd19 | ||
|
736c95ff57 | ||
|
5ea394c610 | ||
|
8c3d7f62a9 | ||
|
a1a95c8e7f | ||
|
277a59f1cb | ||
|
97b9f6b1ae | ||
|
d2c58f0bcd |
@ -1,5 +1,5 @@
|
|||||||
###
|
###
|
||||||
### Copyright 2015-2021 Oliver Giles
|
### Copyright 2015-2024 Oliver Giles
|
||||||
###
|
###
|
||||||
### This file is part of Laminar
|
### This file is part of Laminar
|
||||||
###
|
###
|
||||||
@ -16,8 +16,45 @@
|
|||||||
### You should have received a copy of the GNU General Public License
|
### You should have received a copy of the GNU General Public License
|
||||||
### along with Laminar. If not, see <http://www.gnu.org/licenses/>
|
### along with Laminar. If not, see <http://www.gnu.org/licenses/>
|
||||||
###
|
###
|
||||||
project(laminar)
|
|
||||||
cmake_minimum_required(VERSION 3.6)
|
cmake_minimum_required(VERSION 3.6)
|
||||||
|
project(laminar)
|
||||||
|
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
|
# ld.lld is a default option on FreeBSD
|
||||||
|
set(LLVM_LINKER_IS_LLD ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# ld.lld specific options. There is no sane way in cmake
|
||||||
|
# to detect if toolchain is actually using ld.lld
|
||||||
|
if (LLVM_LINKER_IS_LLD)
|
||||||
|
if (NOT DEFINED LINKER_EMULATION_FLAGS)
|
||||||
|
if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "amd64")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-melf_x86_64")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-melf_x86_64")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "aarch64")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-maarch64elf")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc64le")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-melf64lppc")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "powerpc64")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-melf64ppc")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "riscv64")
|
||||||
|
# llvm17 & riscv64 requires extra step, it is necessary to
|
||||||
|
# patch 'Elf64.e_flags' (48-th byte) in binary-blob object files
|
||||||
|
# with value 0x5 - to change soft_float ABI to hard_float ABI
|
||||||
|
# so they can link with rest of the object files.
|
||||||
|
set(LINKER_EMULATION_FLAGS "-melf64lriscv")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "arm")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-marmelf")
|
||||||
|
elseif (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "armv7")
|
||||||
|
set(LINKER_EMULATION_FLAGS "-marmelf")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR
|
||||||
|
"Unsupported '${CMAKE_SYSTEM_PROCESSOR}' translation to emulation flag. "
|
||||||
|
"Please set it explicitly 'cmake -DLINKER_EMULATION_FLAGS=\"-melf_your_arch\" ...'")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
set(CMAKE_INCLUDE_CURRENT_DIR ON)
|
||||||
set(CMAKE_CXX_STANDARD 17)
|
set(CMAKE_CXX_STANDARD 17)
|
||||||
@ -56,7 +93,7 @@ macro(generate_compressed_bins BASEDIR)
|
|||||||
DEPENDS ${BASEDIR}/${FILE}
|
DEPENDS ${BASEDIR}/${FILE}
|
||||||
)
|
)
|
||||||
add_custom_command(OUTPUT ${OUTPUT_FILE}
|
add_custom_command(OUTPUT ${OUTPUT_FILE}
|
||||||
COMMAND ${CMAKE_LINKER} -r -b binary -o ${OUTPUT_FILE} ${COMPRESSED_FILE}
|
COMMAND ${CMAKE_LINKER} ${LINKER_EMULATION_FLAGS} -r -b binary -o ${OUTPUT_FILE} ${COMPRESSED_FILE}
|
||||||
COMMAND ${CMAKE_OBJCOPY}
|
COMMAND ${CMAKE_OBJCOPY}
|
||||||
--rename-section .data=.rodata.alloc,load,readonly,data,contents
|
--rename-section .data=.rodata.alloc,load,readonly,data,contents
|
||||||
--add-section .note.GNU-stack=/dev/null
|
--add-section .note.GNU-stack=/dev/null
|
||||||
@ -84,11 +121,11 @@ add_custom_command(OUTPUT index_html_size.h
|
|||||||
|
|
||||||
# Download 3rd-party frontend JS libs...
|
# Download 3rd-party frontend JS libs...
|
||||||
file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
|
file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.12/vue.min.js
|
||||||
js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e)
|
${CMAKE_BINARY_DIR}/js/vue.min.js EXPECTED_MD5 fb192338844efe86ec759a40152fcb8e)
|
||||||
file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
|
file(DOWNLOAD https://raw.githubusercontent.com/drudru/ansi_up/v4.0.4/ansi_up.js
|
||||||
js/ansi_up.js EXPECTED_MD5 b31968e1a8fed0fa82305e978161f7f5)
|
${CMAKE_BINARY_DIR}/js/ansi_up.js EXPECTED_MD5 b31968e1a8fed0fa82305e978161f7f5)
|
||||||
file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
|
file(DOWNLOAD https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js
|
||||||
js/Chart.min.js EXPECTED_MD5 7dd5ea7d2cf22a1c42b43c40093d2669)
|
${CMAKE_BINARY_DIR}/js/Chart.min.js EXPECTED_MD5 7dd5ea7d2cf22a1c42b43c40093d2669)
|
||||||
# ...and compile them
|
# ...and compile them
|
||||||
generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue.min.js
|
generate_compressed_bins(${CMAKE_BINARY_DIR} js/vue.min.js
|
||||||
js/ansi_up.js js/Chart.min.js)
|
js/ansi_up.js js/Chart.min.js)
|
||||||
@ -109,13 +146,31 @@ set(LAMINARD_CORE_SOURCES
|
|||||||
index_html_size.h
|
index_html_size.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
find_package(CapnProto REQUIRED)
|
||||||
|
include_directories(${CAPNP_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
find_package(SQLite3 REQUIRED)
|
||||||
|
include_directories(${SQLite3_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
include_directories(${Threads_INCLUDE_DIRS})
|
||||||
|
|
||||||
## Server
|
## Server
|
||||||
add_executable(laminard ${LAMINARD_CORE_SOURCES} src/main.cpp ${COMPRESSED_BINS})
|
add_executable(laminard ${LAMINARD_CORE_SOURCES} src/main.cpp ${COMPRESSED_BINS})
|
||||||
target_link_libraries(laminard capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
|
target_link_libraries(laminard CapnProto::capnp-rpc CapnProto::capnp CapnProto::kj-http CapnProto::kj-async
|
||||||
|
CapnProto::kj Threads::Threads SQLite::SQLite3 ZLIB::ZLIB)
|
||||||
|
|
||||||
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "FreeBSD")
|
||||||
|
pkg_check_modules(INOTIFY REQUIRED libinotify)
|
||||||
|
target_link_libraries(laminard ${INOTIFY_LINK_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
## Client
|
## Client
|
||||||
add_executable(laminarc src/client.cpp src/version.cpp laminar.capnp.c++)
|
add_executable(laminarc src/client.cpp src/version.cpp laminar.capnp.c++)
|
||||||
target_link_libraries(laminarc capnp-rpc capnp kj-async kj pthread)
|
target_link_libraries(laminarc CapnProto::capnp-rpc CapnProto::capnp CapnProto::kj-async CapnProto::kj Threads::Threads)
|
||||||
|
|
||||||
## Manpages
|
## Manpages
|
||||||
macro(gzip SOURCE)
|
macro(gzip SOURCE)
|
||||||
@ -139,7 +194,6 @@ if(BUILD_TESTS)
|
|||||||
target_link_libraries(laminar-tests ${GTEST_LIBRARIES} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
|
target_link_libraries(laminar-tests ${GTEST_LIBRARIES} capnp-rpc capnp kj-http kj-async kj pthread sqlite3 z)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files")
|
|
||||||
set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
|
set(BASH_COMPLETIONS_DIR /usr/share/bash-completion/completions CACHE PATH "Path to bash completions directory")
|
||||||
set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
|
set(ZSH_COMPLETIONS_DIR /usr/share/zsh/site-functions CACHE PATH "Path to zsh completions directory")
|
||||||
install(TARGETS laminard RUNTIME DESTINATION sbin)
|
install(TARGETS laminard RUNTIME DESTINATION sbin)
|
||||||
@ -148,5 +202,8 @@ install(FILES etc/laminar.conf DESTINATION /etc)
|
|||||||
install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc)
|
install(FILES etc/laminarc-completion.bash DESTINATION ${BASH_COMPLETIONS_DIR} RENAME laminarc)
|
||||||
install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc)
|
install(FILES etc/laminarc-completion.zsh DESTINATION ${ZSH_COMPLETIONS_DIR} RENAME _laminarc)
|
||||||
|
|
||||||
configure_file(etc/laminar.service.in laminar.service @ONLY)
|
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
|
||||||
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/laminar.service DESTINATION ${SYSTEMD_UNITDIR})
|
set(SYSTEMD_UNITDIR /lib/systemd/system CACHE PATH "Path to systemd unit files")
|
||||||
|
configure_file(etc/laminar.service.in laminar.service @ONLY)
|
||||||
|
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/laminar.service DESTINATION ${SYSTEMD_UNITDIR})
|
||||||
|
endif()
|
||||||
|
@ -12,11 +12,11 @@ See [the website](https://laminar.ohwg.net) and the [documentation](https://lami
|
|||||||
|
|
||||||
First install development packages for `capnproto (version 0.7.0 or newer)`, `rapidjson`, `sqlite` and `boost` (for the header-only `multi_index_container` library) from your distribution's repository or other source.
|
First install development packages for `capnproto (version 0.7.0 or newer)`, `rapidjson`, `sqlite` and `boost` (for the header-only `multi_index_container` library) from your distribution's repository or other source.
|
||||||
|
|
||||||
On Debian Bullseye, this can be done with:
|
On Debian Bookworm, this can be done with:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt install \
|
sudo apt install capnproto cmake g++ libboost-dev libcapnp-dev libsqlite3-dev \
|
||||||
capnproto cmake g++ libboost-dev libcapnp-dev libsqlite3-dev rapidjson-dev zlib1g-dev
|
make rapidjson-dev zlib1g-dev pkg-config
|
||||||
```
|
```
|
||||||
|
|
||||||
Then compile and install laminar with:
|
Then compile and install laminar with:
|
||||||
|
@ -9,7 +9,7 @@ set -x
|
|||||||
|
|
||||||
# Simple way of getting the docker build tag:
|
# Simple way of getting the docker build tag:
|
||||||
tag=$(docker build -q - <<\EOF
|
tag=$(docker build -q - <<\EOF
|
||||||
FROM debian:bullseye
|
FROM debian:bookworm
|
||||||
RUN apt-get update && apt-get install -y build-essential
|
RUN apt-get update && apt-get install -y build-essential
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
@ -19,7 +19,7 @@ EOF
|
|||||||
|
|
||||||
exec {pfd}<><(:) # get a new pipe
|
exec {pfd}<><(:) # get a new pipe
|
||||||
docker build - <<\EOF |
|
docker build - <<\EOF |
|
||||||
FROM debian:bullseye
|
FROM debian:bookworm
|
||||||
RUN apt-get update && apt-get install -y build-essential
|
RUN apt-get update && apt-get install -y build-essential
|
||||||
EOF
|
EOF
|
||||||
tee >(awk '/Successfully built/{print $3}' >&$pfd) # parse output to pipe
|
tee >(awk '/Successfully built/{print $3}' >&$pfd) # parse output to pipe
|
||||||
|
50
pkg/debian12-amd64.sh
Executable file
50
pkg/debian12-amd64.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
OUTPUT_DIR=$PWD
|
||||||
|
|
||||||
|
SOURCE_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})/..)
|
||||||
|
|
||||||
|
VERSION=$(cd "$SOURCE_DIR" && git describe --tags --abbrev=8 --dirty)-1~upstream-debian12
|
||||||
|
|
||||||
|
DOCKER_TAG=$(docker build -q - <<EOS
|
||||||
|
FROM debian:bookworm-slim
|
||||||
|
RUN apt-get update && apt-get install -y wget cmake g++ capnproto libcapnp-dev rapidjson-dev libsqlite3-dev libboost-dev zlib1g-dev pkg-config
|
||||||
|
EOS
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run --rm -i -v $SOURCE_DIR:/laminar:ro -v $OUTPUT_DIR:/output $DOCKER_TAG bash -xe <<EOS
|
||||||
|
|
||||||
|
mkdir /build
|
||||||
|
cd /build
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLAMINAR_VERSION=$VERSION -DZSH_COMPLETIONS_DIR=/usr/share/zsh/functions/Completion/Unix /laminar
|
||||||
|
make -j4
|
||||||
|
mkdir laminar
|
||||||
|
make DESTDIR=laminar install/strip
|
||||||
|
|
||||||
|
mkdir laminar/DEBIAN
|
||||||
|
cat <<EOF > laminar/DEBIAN/control
|
||||||
|
Package: laminar
|
||||||
|
Version: $VERSION
|
||||||
|
Section:
|
||||||
|
Priority: optional
|
||||||
|
Architecture: amd64
|
||||||
|
Maintainer: Oliver Giles <web ohwg net>
|
||||||
|
Depends: libcapnp-1.0.1, libsqlite3-0, zlib1g
|
||||||
|
Description: Lightweight Continuous Integration Service
|
||||||
|
EOF
|
||||||
|
echo /etc/laminar.conf > laminar/DEBIAN/conffiles
|
||||||
|
cat <<EOF > laminar/DEBIAN/postinst
|
||||||
|
#!/bin/bash
|
||||||
|
echo Creating laminar user with home in /var/lib/laminar
|
||||||
|
useradd -r -d /var/lib/laminar -s /usr/sbin/nologin laminar
|
||||||
|
mkdir -p /var/lib/laminar/cfg/{jobs,contexts,scripts}
|
||||||
|
chown -R laminar: /var/lib/laminar
|
||||||
|
EOF
|
||||||
|
chmod +x laminar/DEBIAN/postinst
|
||||||
|
|
||||||
|
dpkg-deb --build laminar
|
||||||
|
mv laminar.deb /output/laminar_${VERSION}_amd64.deb
|
||||||
|
EOS
|
50
pkg/debian13-amd64.sh
Executable file
50
pkg/debian13-amd64.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
OUTPUT_DIR=$PWD
|
||||||
|
|
||||||
|
SOURCE_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})/..)
|
||||||
|
|
||||||
|
VERSION=$(cd "$SOURCE_DIR" && git describe --tags --abbrev=8 --dirty)-1~upstream-debian13
|
||||||
|
|
||||||
|
DOCKER_TAG=$(docker build -q - <<EOS
|
||||||
|
FROM debian:trixie-slim
|
||||||
|
RUN apt-get update && apt-get install -y wget cmake g++ capnproto libcapnp-dev rapidjson-dev libsqlite3-dev libboost-dev zlib1g-dev pkg-config
|
||||||
|
EOS
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run --rm -i -v $SOURCE_DIR:/laminar:ro -v $OUTPUT_DIR:/output $DOCKER_TAG bash -xe <<EOS
|
||||||
|
|
||||||
|
mkdir /build
|
||||||
|
cd /build
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLAMINAR_VERSION=$VERSION -DZSH_COMPLETIONS_DIR=/usr/share/zsh/functions/Completion/Unix /laminar
|
||||||
|
make -j4
|
||||||
|
mkdir laminar
|
||||||
|
make DESTDIR=laminar install/strip
|
||||||
|
|
||||||
|
mkdir laminar/DEBIAN
|
||||||
|
cat <<EOF > laminar/DEBIAN/control
|
||||||
|
Package: laminar
|
||||||
|
Version: $VERSION
|
||||||
|
Section:
|
||||||
|
Priority: optional
|
||||||
|
Architecture: amd64
|
||||||
|
Maintainer: Oliver Giles <web ohwg net>
|
||||||
|
Depends: libcapnp-1.0.1, libsqlite3-0, zlib1g
|
||||||
|
Description: Lightweight Continuous Integration Service
|
||||||
|
EOF
|
||||||
|
echo /etc/laminar.conf > laminar/DEBIAN/conffiles
|
||||||
|
cat <<EOF > laminar/DEBIAN/postinst
|
||||||
|
#!/bin/bash
|
||||||
|
echo Creating laminar user with home in /var/lib/laminar
|
||||||
|
useradd -r -d /var/lib/laminar -s /usr/sbin/nologin laminar
|
||||||
|
mkdir -p /var/lib/laminar/cfg/{jobs,contexts,scripts}
|
||||||
|
chown -R laminar: /var/lib/laminar
|
||||||
|
EOF
|
||||||
|
chmod +x laminar/DEBIAN/postinst
|
||||||
|
|
||||||
|
dpkg-deb --build laminar
|
||||||
|
mv laminar.deb /output/laminar_${VERSION}_amd64.deb
|
||||||
|
EOS
|
49
pkg/ubuntu2204-amd64.sh
Executable file
49
pkg/ubuntu2204-amd64.sh
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
OUTPUT_DIR=$PWD
|
||||||
|
|
||||||
|
SOURCE_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})/..)
|
||||||
|
|
||||||
|
VERSION=$(cd "$SOURCE_DIR" && git describe --tags --abbrev=8 --dirty)-1~upstream-ubuntu2204
|
||||||
|
|
||||||
|
DOCKER_TAG=$(docker build -q - <<EOS
|
||||||
|
FROM ubuntu:22.04
|
||||||
|
RUN apt-get update && apt-get install -y wget cmake g++ capnproto libcapnp-dev rapidjson-dev libsqlite3-dev libboost-dev zlib1g-dev pkg-config
|
||||||
|
EOS
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run --rm -i -v $SOURCE_DIR:/laminar:ro -v $OUTPUT_DIR:/output $DOCKER_TAG bash -xe <<EOS
|
||||||
|
|
||||||
|
mkdir /build
|
||||||
|
cd /build
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLAMINAR_VERSION=$VERSION -DZSH_COMPLETIONS_DIR=/usr/share/zsh/functions/Completion/Unix /laminar
|
||||||
|
make -j4
|
||||||
|
mkdir laminar
|
||||||
|
make DESTDIR=laminar install/strip
|
||||||
|
|
||||||
|
mkdir laminar/DEBIAN
|
||||||
|
cat <<EOF > laminar/DEBIAN/control
|
||||||
|
Package: laminar
|
||||||
|
Version: $VERSION
|
||||||
|
Section:
|
||||||
|
Priority: optional
|
||||||
|
Architecture: amd64
|
||||||
|
Maintainer: Oliver Giles <web ohwg net>
|
||||||
|
Depends: libcapnp-0.8.0, libsqlite3-0, zlib1g
|
||||||
|
Description: Lightweight Continuous Integration Service
|
||||||
|
EOF
|
||||||
|
echo /etc/laminar.conf > laminar/DEBIAN/conffiles
|
||||||
|
cat <<EOF > laminar/DEBIAN/postinst
|
||||||
|
#!/bin/bash
|
||||||
|
echo Creating laminar user with home in /var/lib/laminar
|
||||||
|
useradd -r -d /var/lib/laminar -s /usr/sbin/nologin laminar
|
||||||
|
mkdir -p /var/lib/laminar/cfg/{jobs,contexts,scripts}
|
||||||
|
chown -R laminar: /var/lib/laminar
|
||||||
|
EOF
|
||||||
|
chmod +x laminar/DEBIAN/postinst
|
||||||
|
|
||||||
|
dpkg-deb --build laminar
|
||||||
|
mv laminar.deb /output/laminar_${VERSION}_amd64.deb
|
||||||
|
EOS
|
||||||
|
|
49
pkg/ubuntu2404-amd64.sh
Executable file
49
pkg/ubuntu2404-amd64.sh
Executable file
@ -0,0 +1,49 @@
|
|||||||
|
#!/bin/bash -e
|
||||||
|
|
||||||
|
OUTPUT_DIR=$PWD
|
||||||
|
|
||||||
|
SOURCE_DIR=$(readlink -f $(dirname ${BASH_SOURCE[0]})/..)
|
||||||
|
|
||||||
|
VERSION=$(cd "$SOURCE_DIR" && git describe --tags --abbrev=8 --dirty)-1~upstream-ubuntu2404
|
||||||
|
|
||||||
|
DOCKER_TAG=$(docker build -q - <<EOS
|
||||||
|
FROM ubuntu:24.04
|
||||||
|
RUN apt-get update && apt-get install -y wget cmake g++ capnproto libcapnp-dev rapidjson-dev libsqlite3-dev libboost-dev zlib1g-dev pkg-config
|
||||||
|
EOS
|
||||||
|
)
|
||||||
|
|
||||||
|
docker run --rm -i -v $SOURCE_DIR:/laminar:ro -v $OUTPUT_DIR:/output $DOCKER_TAG bash -xe <<EOS
|
||||||
|
|
||||||
|
mkdir /build
|
||||||
|
cd /build
|
||||||
|
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr -DLAMINAR_VERSION=$VERSION -DZSH_COMPLETIONS_DIR=/usr/share/zsh/functions/Completion/Unix /laminar
|
||||||
|
make -j4
|
||||||
|
mkdir laminar
|
||||||
|
make DESTDIR=laminar install/strip
|
||||||
|
|
||||||
|
mkdir laminar/DEBIAN
|
||||||
|
cat <<EOF > laminar/DEBIAN/control
|
||||||
|
Package: laminar
|
||||||
|
Version: $VERSION
|
||||||
|
Section:
|
||||||
|
Priority: optional
|
||||||
|
Architecture: amd64
|
||||||
|
Maintainer: Oliver Giles <web ohwg net>
|
||||||
|
Depends: libcapnp-1.0.1, libsqlite3-0, zlib1g
|
||||||
|
Description: Lightweight Continuous Integration Service
|
||||||
|
EOF
|
||||||
|
echo /etc/laminar.conf > laminar/DEBIAN/conffiles
|
||||||
|
cat <<EOF > laminar/DEBIAN/postinst
|
||||||
|
#!/bin/bash
|
||||||
|
echo Creating laminar user with home in /var/lib/laminar
|
||||||
|
useradd -r -d /var/lib/laminar -s /usr/sbin/nologin laminar
|
||||||
|
mkdir -p /var/lib/laminar/cfg/{jobs,contexts,scripts}
|
||||||
|
chown -R laminar: /var/lib/laminar
|
||||||
|
EOF
|
||||||
|
chmod +x laminar/DEBIAN/postinst
|
||||||
|
|
||||||
|
dpkg-deb --build laminar
|
||||||
|
mv laminar.deb /output/laminar_${VERSION}_amd64.deb
|
||||||
|
EOS
|
||||||
|
|
@ -21,6 +21,7 @@
|
|||||||
#include <sqlite3.h>
|
#include <sqlite3.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
struct StdevCtx {
|
struct StdevCtx {
|
||||||
double mean;
|
double mean;
|
||||||
|
@ -21,7 +21,11 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <queue>
|
#include <queue>
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <sys/procctl.h>
|
||||||
|
#else
|
||||||
#include <sys/prctl.h>
|
#include <sys/prctl.h>
|
||||||
|
#endif
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/wait.h>
|
#include <sys/wait.h>
|
||||||
#include <kj/async-io.h>
|
#include <kj/async-io.h>
|
||||||
@ -317,7 +321,11 @@ int leader_main(void) {
|
|||||||
// will be reparented to this one instead of init (or higher layer subreaper).
|
// will be reparented to this one instead of init (or higher layer subreaper).
|
||||||
// We do this so that the run will wait until all descedents exit before executing
|
// We do this so that the run will wait until all descedents exit before executing
|
||||||
// the next step.
|
// the next step.
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
procctl(P_PID, 0, PROC_REAP_ACQUIRE, NULL);
|
||||||
|
#else
|
||||||
prctl(PR_SET_CHILD_SUBREAPER, 1, NULL, NULL, NULL);
|
prctl(PR_SET_CHILD_SUBREAPER, 1, NULL, NULL, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
// Become the leader of a new process group. This is so that all child processes
|
// Become the leader of a new process group. This is so that all child processes
|
||||||
// will also get a kill signal when the run is aborted
|
// will also get a kill signal when the run is aborted
|
||||||
|
@ -122,7 +122,7 @@ a.active:hover { text-decoration: none; }
|
|||||||
/* run console ansi colors (based on base16-default-dark and base16-bright) */
|
/* run console ansi colors (based on base16-default-dark and base16-bright) */
|
||||||
:root {
|
:root {
|
||||||
--ansi-black: #181818;
|
--ansi-black: #181818;
|
||||||
--ansi-red: #f8f8f8;
|
--ansi-red: #ab4642;
|
||||||
--ansi-green: #a1b56c;
|
--ansi-green: #a1b56c;
|
||||||
--ansi-yellow: #f7ca88;
|
--ansi-yellow: #f7ca88;
|
||||||
--ansi-blue: #7cafc2;
|
--ansi-blue: #7cafc2;
|
||||||
|
19
src/run.cpp
19
src/run.cpp
@ -21,10 +21,16 @@
|
|||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
|
|
||||||
|
#include <sys/wait.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
#include <sys/limits.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// short syntax helper for kj::Path
|
// short syntax helper for kj::Path
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline kj::Path operator/(const kj::Path& p, const T& ext) {
|
inline kj::Path operator/(const kj::Path& p, const T& ext) {
|
||||||
@ -153,7 +159,20 @@ kj::Promise<RunState> Run::start(RunState lastResult, std::shared_ptr<Context> c
|
|||||||
// main() by calling leader_main()
|
// main() by calling leader_main()
|
||||||
char* procName;
|
char* procName;
|
||||||
if(asprintf(&procName, "{laminar} %s:%d", name.data(), build) > 0)
|
if(asprintf(&procName, "{laminar} %s:%d", name.data(), build) > 0)
|
||||||
|
#if defined(__FreeBSD__)
|
||||||
|
{
|
||||||
|
int sysctl_rq[] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, -1};
|
||||||
|
size_t self_exe_len = PATH_MAX;
|
||||||
|
char self_exe[PATH_MAX];
|
||||||
|
|
||||||
|
if (sysctl(sysctl_rq, 4, self_exe, &self_exe_len, NULL, 0))
|
||||||
|
_exit(EXIT_FAILURE);
|
||||||
|
|
||||||
|
execl(self_exe, procName, NULL); // does not return
|
||||||
|
}
|
||||||
|
#else
|
||||||
execl("/proc/self/exe", procName, NULL); // does not return
|
execl("/proc/self/exe", procName, NULL); // does not return
|
||||||
|
#endif
|
||||||
_exit(EXIT_FAILURE);
|
_exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,9 +28,8 @@
|
|||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <sys/eventfd.h>
|
#include <sys/eventfd.h>
|
||||||
#include <sys/inotify.h>
|
|
||||||
#include <sys/signalfd.h>
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <sys/inotify.h>
|
||||||
|
|
||||||
// Size of buffer used to read from file descriptors. Should be
|
// Size of buffer used to read from file descriptors. Should be
|
||||||
// a multiple of sizeof(struct signalfd_siginfo) == 128
|
// a multiple of sizeof(struct signalfd_siginfo) == 128
|
||||||
|
Loading…
Reference in New Issue
Block a user