diff --git a/community/garage/APKBUILD b/community/garage/APKBUILD index 506a19d7cc35c4dade3105b2dd051065be36474a..a4b03749950db9f446b7e6c399f1e6cb8fc21964 100644 --- a/community/garage/APKBUILD +++ b/community/garage/APKBUILD @@ -19,7 +19,7 @@ makedepends=" checkdepends="openssl-dev" pkgusers="garage" pkggroups="garage" -install="$pkgname.pre-install" +install="$pkgname.pre-install $pkgname.post-upgrade" subpackages=" $pkgname-convert-db:_convertdb $pkgname-openrc @@ -28,6 +28,7 @@ source="https://github.com/deuxfleurs-org/garage/archive/v$pkgver/garage-$pkgver fix-website-test-k2v.patch syslog-support.patch garage.toml + garage-migrate-to-lmdb $pkgname.initd $pkgname.confd " @@ -67,6 +68,8 @@ package() { install -D -m644 "$srcdir"/$pkgname.confd "$pkgdir"/etc/conf.d/$pkgname install -D -m640 -o garage -g garage "$srcdir"/garage.toml -t "$pkgdir"/etc/ + install -D -m755 "$srcdir"/garage-migrate-to-lmdb -t "$pkgdir"/usr/sbin/ + install -d -m700 -o garage -g garage "$pkgdir"/var/lib/$pkgname } @@ -80,7 +83,8 @@ sha512sums=" b2279fb55d4c694d4dff155c123c3c3e7fda8d04676a10ef9b572b199c873bdb79397fb686c3236f90be92f2bc1aef36f845ec40b38def9593f86d0fac687c21 garage-0.8.2.tar.gz d5ab54a95e1376988e72dc7c9c2565a381de5ae771de72e8f60e3b331f8e8ab951a2778199215b55b90f93e00634addbf19c843882def51b0a0e07ac5d7e6779 fix-website-test-k2v.patch e59399ab8a16b591498be0d6510054adf14ff5c4ec15ddfdf69b046119fa036c8abef10173aa29f832ff64d1b0c46b51d17051a450d85b61bd99eb91b8c64ed5 syslog-support.patch -e67907619bd29397cd20520dd165ffafd56656adb48d123221aae78fd5eae6c273bd0fcfede873f888e2e342a2beb22b59bf0a087ce880df714e9b85eb3109db garage.toml +21892e8b574d36d62f7e720b4cb2a2013765e60e392a40c4d52ebf04541c77fde6d70dce2d5f2014fb1487a64813b9409d9553262f897fbdb602ca05e196d21d garage.toml +86676ad0c1059b3e431261542ea3ed56f12b7957e082685b0dbd80cbc3cc6bbf810c540fe4726b3809010f41c0976b65434fb5990c26f092feb900e86aec251c garage-migrate-to-lmdb a2130fa81ed2c8af266ed1e86d0c72e3aae6995599347e4488c6cd4cc83217fbb65ea9121415985f8cdcd15aaee9b28886b1ccf24755571b3ddf2fc5d8dd5b3a garage.initd f31bb5bde3ff41dc5fa6832c8ff24e1f1027b34513ab5e5c008df13495b53a569d3cb5adefed93cf780f5e488ff760603097785d85e1a884538e802e415205bd garage.confd " diff --git a/community/garage/garage-migrate-to-lmdb b/community/garage/garage-migrate-to-lmdb new file mode 100644 index 0000000000000000000000000000000000000000..d80bd1c03703aeef0fb76c6046c8369daf35e8d2 --- /dev/null +++ b/community/garage/garage-migrate-to-lmdb @@ -0,0 +1,58 @@ +#!/bin/sh +set -eu + +: ${GARAGE_CONFIG_FILE:="/etc/garage.toml"} + +case "${1-}" in -h | --help) + cat <<-EOF + Usage: $0 + + Migrate Garage metadata database from Sled to LMDB. + EOF +esac + +if [ "$(id -u)" -ne 0 ]; then + echo 'ERROR: Must be run as root!' >&2 + exit 1 +fi + +if pgrep /usr/bin/garage >/dev/null; then + echo 'ERROR: Garage is running; you must stop it before running this command!' >&2 + exit 1 +fi + +metadata_dir=$(sed -En 's/^metadata_dir\s*=\s*"([^"]+)".*/\1/p' "$GARAGE_CONFIG_FILE") +: ${metadata_dir:-"/var/lib/garage/meta"} + +if ! [ -d "$metadata_dir" ]; then + echo "ERROR: metadata_dir '$metadata_dir' does not exist!" >&2 + exit 1 +fi + +uninstall=false +if ! command -v garage-convert-db >/dev/null; then + apk add cmd:garage-convert-db + uninstall=true +fi + +if command -v rc-service >/dev/null; then + echo 'Stopping garage...' + rc-service garage --ifstarted stop +fi + +echo "Converting metadata database in $metadata_dir to LMDB" >&2 +su garage -s /bin/sh -c "garage-convert-db -a sled -i '$metadata_dir/db' -b lmdb -o '$metadata_dir/db.lmdb'" + +if $uninstall; then + apk del cmd:garage-convert-db +fi + +echo "Changing db_engine to 'lmdb' in $GARAGE_CONFIG_FILE" >&2 +if grep -q '^[# ]*db_engine\s*=' "$GARAGE_CONFIG_FILE"; then + sed -Ei 's/^[# ]*(db_engine\s*=\s*).*/\1"lmdb"/' "$GARAGE_CONFIG_FILE" +else + printf '\n\n%s\n' 'db_engine = "lmdb"' >> "$GARAGE_CONFIG_FILE" +fi +sed -i "/^# NOTE: Run 'garage-migrate-to-lmdb' to migrate from sled to lmdb./d" "$GARAGE_CONFIG_FILE" + +echo 'Finished, now you can start Garage.' >&2 diff --git a/community/garage/garage.post-upgrade b/community/garage/garage.post-upgrade new file mode 100644 index 0000000000000000000000000000000000000000..72f8ad190b5bbbcd898f688e19c188495fdb202c --- /dev/null +++ b/community/garage/garage.post-upgrade @@ -0,0 +1,20 @@ +#!/bin/sh + +_64bit() { + case "$(uname -m)" in + armhf | armv7 | x86) return 1;; + *) return 0;; + esac +} + +if [ "$(apk version -t "$2" '0.8.2-r0')" = '<' ] && _64bit; then + cat >&2 <<-EOF + * + * It's recommended to migrate Garage metadata directory from Sled to LMDB + * by running 'garage-migrate-to-lmdb' command. Sled may be removed from 64-bit + * packages in the future. + * + EOF +fi + +exit 0 diff --git a/community/garage/garage.toml b/community/garage/garage.toml index 2ee9a34255cef09315ce56a69790134c914ffc03..fe1972cb88ca8d52a8513076c3e927d15a106f07 100644 --- a/community/garage/garage.toml +++ b/community/garage/garage.toml @@ -14,8 +14,9 @@ metadata_dir = "/var/lib/garage/meta" # The directory in which Garage will store the data blocks of objects. data_dir = "/var/lib/garage/data" -# The database engine to store metadata on-disk. -# Options: "sled" (default), "lmdb" (recommended) +# The database engine to store metadata on-disk: "sled" (default) +# or "lmdb" (recommended). +# NOTE: Run 'garage-migrate-to-lmdb' to migrate from sled to lmdb. #db_engine = "sled" # The block size for stored objects.