diff options
126 files changed, 3960 insertions, 1778 deletions
diff --git a/linhes/calamares/PKGBUILD b/linhes/calamares/PKGBUILD index c749ce5..4acad0c 100644 --- a/linhes/calamares/PKGBUILD +++ b/linhes/calamares/PKGBUILD @@ -1,38 +1,23 @@ -# Maintainer: Cecil Watson <knoppmyth@gmail.com> +# Ezarcher Calamares Installer pkgbuild pkgname=calamares -pkgver=3.2.62 -_pkgver=3.2.62 -pkgrel=1 +pkgver=3.3.12 +_pkgver=3.3.12 +pkgrel=2 pkgdesc='Distribution-independent installer framework' -arch=('i686' 'x86_64') +arch=('x86_64') license=(GPL) url="https://github.com/calamares/calamares" license=('LGPL') -depends=('kconfig' 'kcoreaddons' 'kiconthemes' 'ki18n' 'kio' 'solid' 'yaml-cpp' 'kpmcore>=4.1.0' 'mkinitcpio-openswap' - 'boost-libs' 'ckbcomp' 'hwinfo' 'qt5-svg' 'polkit-qt5' 'gtk-update-icon-cache' 'plasma-framework' - 'qt5-xmlpatterns' 'squashfs-tools' 'libpwquality' 'appstream-qt') -makedepends=('extra-cmake-modules' 'qt5-tools' 'qt5-translations' 'git' 'boost' 'python-yaml' - 'python-jsonschema') - -source=("https://github.com/calamares/calamares/releases/download/v$pkgver/calamares-$pkgver.tar.gz") - -#pkgver() { -# cd ${srcdir}/calamares-${pkgver} -# sed -i -e "s|\${CALAMARES_VERSION_MAJOR}.\${CALAMARES_VERSION_MINOR}.\${CALAMARES_VERSION_PATCH}|${_ver}-${pkgrel}|g" CMakeLists.txt -# sed -i -e "s|CALAMARES_VERSION_RC 1|CALAMARES_VERSION_RC 0|g" CMakeLists.txt -#} - -prepare() { - cd ${srcdir}/calamares-${pkgver} - sed -i -e 's/"Install configuration files" OFF/"Install configuration files" ON/' CMakeLists.txt - sed -i -e 's|$pkgver|$_pkgver|g' CMakeLists.txt - printf 'Version: %s-%s' "${_ver}" "${pkgrel}" - - sed -i -e "s|\${CALAMARES_VERSION_MAJOR}.\${CALAMARES_VERSION_MINOR}.\${CALAMARES_VERSION_PATCH}|${_ver}-${pkgrel}|g" CMakeLists.txt - sed -i -e "s|CALAMARES_VERSION_RC 1|CALAMARES_VERSION_RC 0|g" CMakeLists.txt -} +depends=('cryptsetup' 'dmidecode' 'doxygen' 'gptfdisk' 'hwinfo' 'kconfig' 'kcoreaddons' 'ki18n' 'kparts' + 'kpmcore' 'kservice' 'kwidgetsaddons' 'libatasmart' 'libplasma' 'libpwquality' 'polkit-qt6' + 'pybind11' 'python' 'qt6-declarative' 'qt6-svg' 'qt6-tools' 'qt6-virtualkeyboard' 'qt6-webengine' + 'rsync' 'solid' 'squashfs-tools' 'udisks2' 'upower' 'yaml-cpp') +makedepends=('cmake' 'extra-cmake-modules' 'gawk' 'git' 'kpmcore' 'python-jsonschema' 'python-pyaml' + 'python-unidecode') +source=("$pkgname-$pkgver.tar.gz::https://github.com/calamares/calamares/releases/download/v$pkgver/calamares-$pkgver.tar.gz") +sha256sums=('f44110a91a4394f34728042136af4b906541babc37e72b3b33664888b3220f2d') build() { cd ${srcdir}/calamares-${pkgver} @@ -42,24 +27,20 @@ build() { cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=/usr \ - -DCMAKE_INSTALL_LIBDIR=lib \ - -DWITH_PYTHONQT:BOOL=ON \ - -DBoost_NO_BOOST_CMAKE=ON \ - -DSKIP_MODULES="webview interactiveterminal initramfs \ - initramfscfg dracut dracutlukscfg \ - dummyprocess dummypython dummycpp \ - dummypythonqt services-openrc" + -DCMAKE_INSTALL_LIBDIR=/usr/lib \ + -DINSTALL_CONFIG=OFF \ + -DWITH_QT6=ON \ + -DWITH_PYBIND11=ON \ + -DSKIP_MODULES="tracking webview interactiveterminal initramfs netinstall \ + initramfscfg dracut dracutlukscfg finishedq summaryq \ + dummyprocess dummypython dummycpp usersq oemid packagechooser \ + dummypythonqt services-openrc keyboardq zfs zfshostid \ + localeq plasmalnf welcomeq notesqml packagechooserq" make } package() { cd ${srcdir}/calamares-${pkgver}/build make DESTDIR="$pkgdir" install - - # rename services-systemd back to services - mv "$pkgdir/usr/lib/calamares/modules/services-systemd" "$pkgdir/usr/lib/calamares/modules/services" - mv "$pkgdir/usr/share/calamares/modules/services-systemd.conf" "$pkgdir/usr/share/calamares/modules/services.conf" - sed -i -e 's/-systemd//' "$pkgdir/usr/lib/calamares/modules/services/module.desc" - sed -i -e 's/-systemd//' "$pkgdir/usr/share/calamares/settings.conf" + install -Dm644 "../calamares.desktop" "$pkgdir/usr/share/applications/calamares.desktop" } -sha256sums=('a0fbcec2a438693753fc174220356119ad7adb8a2b19c317518aa1cb025d6dd0') diff --git a/linhes/certbot-dns-duckdns/PKGBUILD b/linhes/certbot-dns-duckdns/PKGBUILD index ef03a03..cb1f3dd 100644 --- a/linhes/certbot-dns-duckdns/PKGBUILD +++ b/linhes/certbot-dns-duckdns/PKGBUILD @@ -4,17 +4,17 @@ # Maintainer: eomanis at web dot de pkgname='certbot-dns-duckdns' -_pkgverUpstream="1.5" -pkgver="1.5.0" -pkgrel=2 +_pkgverUpstream="1.7.0" +pkgver="$_pkgverUpstream" +pkgrel=1 pkgdesc="Plugin for certbot for a DNS-01 challenge with a DuckDNS domain" arch=('any') url='https://github.com/infinityofspace/certbot_dns_duckdns' license=('MIT') depends=('certbot' 'python-dnspython' 'python-requests') -makedepends=( 'python-build' 'python-installer' 'python-wheel' ) +makedepends=( 'python-build' 'python-installer' 'python-wheel' 'python-setuptools') source=("https://github.com/infinityofspace/certbot_dns_duckdns/archive/refs/tags/v${_pkgverUpstream}.tar.gz") -sha256sums=('76ffe14b0bff703be3c5a6ebc0c390cb7941c26d14cca0da742d6ef3534e22b9') +sha384sums=('df71e7014252716790a058d375729926fd18db1b9d2066dc611ff3e869f5a49d626f03ca24af641f12614127da687602') build() { local srcRootDir="${srcdir}/certbot_dns_duckdns-${_pkgverUpstream}" diff --git a/linhes/certbot-dns-duckdns/__changelog b/linhes/certbot-dns-duckdns/__changelog new file mode 100644 index 0000000..d9862a1 --- /dev/null +++ b/linhes/certbot-dns-duckdns/__changelog @@ -0,0 +1 @@ +PKGBUILD: add to makedepends python-setuptools diff --git a/linhes/ckbcomp/.SRCINFO b/linhes/ckbcomp/.SRCINFO new file mode 100755 index 0000000..d41c3d6 --- /dev/null +++ b/linhes/ckbcomp/.SRCINFO @@ -0,0 +1,13 @@ +pkgbase = ckbcomp + pkgdesc = Compile a XKB keyboard description to a keymap suitable for loadkeys or kbdcontrol + pkgver = 1.244 + pkgrel = 1 + url = https://salsa.debian.org/installer-team/console-setup + arch = any + license = GPL-2.0-or-later + makedepends = git + source = console-setup-1.244.tar.gz::https://salsa.debian.org/installer-team/console-setup/-/archive/1.244/console-setup-1.244.tar.gz + sha256sums = f20bde550c8080140a062538d4157011152e57dcca3b9945fcdc6f1a8e5db383 + +pkgname = ckbcomp + depends = perl diff --git a/linhes/ckbcomp/.gitignore b/linhes/ckbcomp/.gitignore new file mode 100644 index 0000000..018a3de --- /dev/null +++ b/linhes/ckbcomp/.gitignore @@ -0,0 +1,4 @@ +* +!PKGBUILD +!.SRCINFO +!.gitignore diff --git a/linhes/ckbcomp/PKGBUILD b/linhes/ckbcomp/PKGBUILD index 9a37cf8..bcd46ce 100755..100644 --- a/linhes/ckbcomp/PKGBUILD +++ b/linhes/ckbcomp/PKGBUILD @@ -1,39 +1,26 @@ -# Maintainer: Nissar Chababy <funilrys at outlook dot com> -# Ex-Maintainer: Jeroen Bollen <jbinero at gmail dot comau> +# Maintainer: +# Contributor: Nissar Chababy <funilrys at outlook dot com> +# Contributor: Jeroen Bollen <jbinero at gmail dot comau> -pkgname=ckbcomp -pkgver=1.230 +_pkgname="ckbcomp" +pkgname="$_pkgname" +pkgver=1.244 pkgrel=1 pkgdesc="Compile a XKB keyboard description to a keymap suitable for loadkeys or kbdcontrol" -arch=(any) -url="http://anonscm.debian.org/cgit/d-i/console-setup.git/" -license=('GPL2') -depends=('perl') -source=("http://ftp.debian.org/debian/pool/main/c/console-setup/console-setup_${pkgver}.tar.xz") -sha512sums=('5c756f5d8101aa844efc11ad071efb69658234c349036b259c6fe1d6fda331aede333358269c483efad6613b81dff7da8e9224ef5224fce40e6a745331b56a7d') -conflicts=(ckbcomp-bin) +url="https://salsa.debian.org/installer-team/console-setup" +license=('GPL-2.0-or-later') +arch=('any') -package() { - if [[ -d "${srcdir}/console-setup" ]] - then - cd console-setup - elif [[ -d "${srcdir}/console-setup-${pkgver}" ]] - then - cd console-setup-${pkgver} - elif [[ -d "${srcdir}/work" ]] - then - cd work - else - echo "Source directory not found.". - exit 1 - fi +makedepends=('git') +_pkgsrc="console-setup-$pkgver" +_pkgext="tar.gz" +source=("$_pkgsrc.$_pkgext"::"$url/-/archive/$pkgver/$_pkgsrc.$_pkgext") +sha256sums=('f20bde550c8080140a062538d4157011152e57dcca3b9945fcdc6f1a8e5db383') - if [[ ${?} != 0 ]] - then - cd console-setup-${pkgver} - fi +package() { + depends+=('perl') - install -d ${pkgdir}/usr/bin/ - install -m755 Keyboard/ckbcomp ${pkgdir}/usr/bin/ + cd "$_pkgsrc" + install -Dm755 Keyboard/ckbcomp -t "$pkgdir/usr/bin/" } diff --git a/linhes/clean-chroot-manager/PKGBUILD b/linhes/clean-chroot-manager/PKGBUILD index e696da1..56dccdb 100644 --- a/linhes/clean-chroot-manager/PKGBUILD +++ b/linhes/clean-chroot-manager/PKGBUILD @@ -1,17 +1,15 @@ # Maintainer: graysky <therealgraysky AT protonmail DOT com> pkgname=clean-chroot-manager -pkgver=2.232 +pkgver=2.240 pkgrel=1 pkgdesc='Wrapper for managing clean chroot builds with local repo therein.' -arch=('any') +arch=(any) url='https://github.com/graysky2/clean-chroot-manager' -license=('MIT') -depends=('devtools>=1:1.0.0-1' 'rsync' 'libarchive>=3.3.3' 'pacman>=7.0.0-1') -conflicts=('clean_chroot_manager') -replaces=('clean_chroot_manager') +license=(MIT) +depends=('devtools>=1:1.0.0-1' rsync 'libarchive>=3.3.3' 'pacman>=7.0.0-1' bc) source=("$pkgname-$pkgver.tar.gz::https://github.com/graysky2/clean-chroot-manager/archive/v$pkgver.tar.gz") -b2sums=('533f38a80dae5777683f09ed5ea159a473dd36bba74d5758a1b3432d1705570e9e163dfe9def6570d51e8699385ac9d691489734d2a7f627e9af51e02659f07a') +b2sums=('94f25860f727ec1a34d7c64b0422ed582b356f8fb886adc3b68ac9810179faade028dd473e3297d849680552beb6a312fd90306c317dbbd3ae1a95c0630cfb2f') install=ccm.install build() { diff --git a/linhes/clean-chroot-manager/ccm.install b/linhes/clean-chroot-manager/ccm.install index e2cfd39..d84033d 100644 --- a/linhes/clean-chroot-manager/ccm.install +++ b/linhes/clean-chroot-manager/ccm.install @@ -3,7 +3,7 @@ post_upgrade() { # define the versions for which a change is needed - for test in 2.101-1 2.201-1 2.202-1 2.208-1 2.212-1 2.213-1 2.221-1 2.224-1; do + for test in 2.101-1 2.201-1 2.202-1 2.208-1 2.212-1 2.213-1 2.221-1 2.224-1 2.237-1 2.239-1; do if [ "$(vercmp $2 $test)" -lt 0 ]; then cat <<END diff --git a/linhes/dmg2img/0001-openssl-1.1-compatibility.patch b/linhes/dmg2img/0001-openssl-1.1-compatibility.patch new file mode 100644 index 0000000..b5ed45d --- /dev/null +++ b/linhes/dmg2img/0001-openssl-1.1-compatibility.patch @@ -0,0 +1,219 @@ +From f16f247d30f868e84f31e24792b4464488f1c009 Mon Sep 17 00:00:00 2001 +From: Peter Wu <peter@lekensteyn.nl> +Date: Tue, 2 May 2017 15:53:38 +0200 +Subject: [PATCH] vfdecrypt: OpenSSL 1.1 compatibility + +Allocate contexts from the heap on all OpenSSL versions, this is needed +since OpenSSL 1.1.0. No attempt is done at addressing issues like global +variables and fixing potential memleaks on error paths. + +Compile-tested only with OpenSSL 1.1.0e (Arch Linux) and OpenSSL 1.0.2g +(Ubuntu 16.04), I have no test file. + +Fixes https://github.com/Lekensteyn/dmg2img/issues/4 +--- + vfdecrypt.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++-------------- + 1 file changed, 80 insertions(+), 23 deletions(-) + +diff --git a/vfdecrypt.c b/vfdecrypt.c +index 56d3530..b1a36d3 100644 +--- a/vfdecrypt.c ++++ b/vfdecrypt.c +@@ -183,7 +183,7 @@ void adjust_v2_header_byteorder(cencrypted_v2_pwheader *pwhdr) { + pwhdr->encrypted_keyblob_size = htonl(pwhdr->encrypted_keyblob_size); + } + +-HMAC_CTX hmacsha1_ctx; ++HMAC_CTX *hmacsha1_ctx; + AES_KEY aes_decrypt_key; + int CHUNK_SIZE=4096; // default + +@@ -196,9 +196,9 @@ void compute_iv(uint32_t chunk_no, uint8_t *iv) { + unsigned int mdLen; + + chunk_no = OSSwapHostToBigInt32(chunk_no); +- HMAC_Init_ex(&hmacsha1_ctx, NULL, 0, NULL, NULL); +- HMAC_Update(&hmacsha1_ctx, (void *) &chunk_no, sizeof(uint32_t)); +- HMAC_Final(&hmacsha1_ctx, mdResult, &mdLen); ++ HMAC_Init_ex(hmacsha1_ctx, NULL, 0, NULL, NULL); ++ HMAC_Update(hmacsha1_ctx, (void *) &chunk_no, sizeof(uint32_t)); ++ HMAC_Final(hmacsha1_ctx, mdResult, &mdLen); + memcpy(iv, mdResult, CIPHER_BLOCKSIZE); + } + +@@ -212,52 +212,75 @@ void decrypt_chunk(uint8_t *ctext, uint8_t *ptext, uint32_t chunk_no) { + /* DES3-EDE unwrap operation loosely based on to RFC 2630, section 12.6 + * wrapped_key has to be 40 bytes in length. */ + int apple_des3_ede_unwrap_key(uint8_t *wrapped_key, int wrapped_key_len, uint8_t *decryptKey, uint8_t *unwrapped_key) { +- EVP_CIPHER_CTX ctx; ++ EVP_CIPHER_CTX *ctx; + uint8_t *TEMP1, *TEMP2, *CEKICV; + uint8_t IV[8] = { 0x4a, 0xdd, 0xa2, 0x2c, 0x79, 0xe8, 0x21, 0x05 }; + int outlen, tmplen, i; + +- EVP_CIPHER_CTX_init(&ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ ctx = EVP_CIPHER_CTX_new(); ++#else ++ ctx = malloc(sizeof(*ctx)); ++#endif ++ if (!ctx) { ++ fprintf(stderr, "Out of memory: EVP_CIPHER_CTX!\n"); ++ return(-1); ++ } ++ ++ EVP_CIPHER_CTX_init(ctx); + /* result of the decryption operation shouldn't be bigger than ciphertext */ + TEMP1 = malloc(wrapped_key_len); + TEMP2 = malloc(wrapped_key_len); + CEKICV = malloc(wrapped_key_len); + /* uses PKCS#7 padding for symmetric key operations by default */ +- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, decryptKey, IV); ++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, decryptKey, IV); + +- if(!EVP_DecryptUpdate(&ctx, TEMP1, &outlen, wrapped_key, wrapped_key_len)) { ++ if(!EVP_DecryptUpdate(ctx, TEMP1, &outlen, wrapped_key, wrapped_key_len)) { + fprintf(stderr, "internal error (1) during key unwrap operation!\n"); + return(-1); + } +- if(!EVP_DecryptFinal_ex(&ctx, TEMP1 + outlen, &tmplen)) { ++ if(!EVP_DecryptFinal_ex(ctx, TEMP1 + outlen, &tmplen)) { + fprintf(stderr, "internal error (2) during key unwrap operation!\n"); + return(-1); + } + outlen += tmplen; +- EVP_CIPHER_CTX_cleanup(&ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ EVP_CIPHER_CTX_reset(ctx); ++#else ++ EVP_CIPHER_CTX_cleanup(ctx); ++#endif + + /* reverse order of TEMP3 */ + for(i = 0; i < outlen; i++) TEMP2[i] = TEMP1[outlen - i - 1]; + +- EVP_CIPHER_CTX_init(&ctx); ++ EVP_CIPHER_CTX_init(ctx); + /* uses PKCS#7 padding for symmetric key operations by default */ +- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, decryptKey, TEMP2); +- if(!EVP_DecryptUpdate(&ctx, CEKICV, &outlen, TEMP2+8, outlen-8)) { ++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, decryptKey, TEMP2); ++ if(!EVP_DecryptUpdate(ctx, CEKICV, &outlen, TEMP2+8, outlen-8)) { + fprintf(stderr, "internal error (3) during key unwrap operation!\n"); + return(-1); + } +- if(!EVP_DecryptFinal_ex(&ctx, CEKICV + outlen, &tmplen)) { ++ if(!EVP_DecryptFinal_ex(ctx, CEKICV + outlen, &tmplen)) { + fprintf(stderr, "internal error (4) during key unwrap operation!\n"); + return(-1); + } + + outlen += tmplen; +- EVP_CIPHER_CTX_cleanup(&ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ EVP_CIPHER_CTX_reset(ctx); ++#else ++ EVP_CIPHER_CTX_cleanup(ctx); ++#endif + + memcpy(unwrapped_key, CEKICV+4, outlen-4); + free(TEMP1); + free(TEMP2); + free(CEKICV); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ EVP_CIPHER_CTX_free(ctx); ++#else ++ free(ctx); ++#endif + return(0); + } + +@@ -279,31 +302,46 @@ int unwrap_v1_header(char *passphrase, cencrypted_v1_header *header, uint8_t *ae + int unwrap_v2_header(char *passphrase, cencrypted_v2_pwheader *header, uint8_t *aes_key, uint8_t *hmacsha1_key) { + /* derived key is a 3DES-EDE key */ + uint8_t derived_key[192/8]; +- EVP_CIPHER_CTX ctx; ++ EVP_CIPHER_CTX *ctx; + uint8_t *TEMP1; + int outlen, tmplen; + ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ ctx = EVP_CIPHER_CTX_new(); ++#else ++ ctx = malloc(sizeof(*ctx)); ++#endif ++ if (!ctx) { ++ fprintf(stderr, "Out of memory: EVP_CIPHER_CTX!\n"); ++ return(-1); ++ } ++ + PKCS5_PBKDF2_HMAC_SHA1(passphrase, strlen(passphrase), (unsigned char*)header->kdf_salt, 20, + PBKDF2_ITERATION_COUNT, sizeof(derived_key), derived_key); + + print_hex(derived_key, 192/8); + +- EVP_CIPHER_CTX_init(&ctx); ++ EVP_CIPHER_CTX_init(ctx); + /* result of the decryption operation shouldn't be bigger than ciphertext */ + TEMP1 = malloc(header->encrypted_keyblob_size); + /* uses PKCS#7 padding for symmetric key operations by default */ +- EVP_DecryptInit_ex(&ctx, EVP_des_ede3_cbc(), NULL, derived_key, header->blob_enc_iv); ++ EVP_DecryptInit_ex(ctx, EVP_des_ede3_cbc(), NULL, derived_key, header->blob_enc_iv); + +- if(!EVP_DecryptUpdate(&ctx, TEMP1, &outlen, header->encrypted_keyblob, header->encrypted_keyblob_size)) { ++ if(!EVP_DecryptUpdate(ctx, TEMP1, &outlen, header->encrypted_keyblob, header->encrypted_keyblob_size)) { + fprintf(stderr, "internal error (1) during key unwrap operation!\n"); + return(-1); + } +- if(!EVP_DecryptFinal_ex(&ctx, TEMP1 + outlen, &tmplen)) { ++ if(!EVP_DecryptFinal_ex(ctx, TEMP1 + outlen, &tmplen)) { + fprintf(stderr, "internal error (2) during key unwrap operation!\n"); + return(-1); + } + outlen += tmplen; +- EVP_CIPHER_CTX_cleanup(&ctx); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ EVP_CIPHER_CTX_free(ctx); ++#else ++ EVP_CIPHER_CTX_cleanup(ctx); ++ free(ctx); ++#endif + memcpy(aes_key, TEMP1, 16); + memcpy(hmacsha1_key, TEMP1, 20); + +@@ -446,8 +484,21 @@ int main(int argc, char *argv[]) { + CHUNK_SIZE = v2header.blocksize; + } + +- HMAC_CTX_init(&hmacsha1_ctx); +- HMAC_Init_ex(&hmacsha1_ctx, hmacsha1_key, sizeof(hmacsha1_key), EVP_sha1(), NULL); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ hmacsha1_ctx = HMAC_CTX_new(); ++#else ++ hmacsha1_ctx = malloc(sizeof(*hmacsha1_ctx)); ++#endif ++ if (!hmacsha1_ctx) { ++ fprintf(stderr, "Out of memory: HMAC CTX!\n"); ++ exit(1); ++ } ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ HMAC_CTX_reset(hmacsha1_ctx); ++#else ++ HMAC_CTX_init(hmacsha1_ctx); ++#endif ++ HMAC_Init_ex(hmacsha1_ctx, hmacsha1_key, sizeof(hmacsha1_key), EVP_sha1(), NULL); + AES_set_decrypt_key(aes_key, CIPHER_KEY_LENGTH * 8, &aes_decrypt_key); + + if (verbose >= 1) { +@@ -472,5 +523,11 @@ int main(int argc, char *argv[]) { + } + + if (verbose) fprintf(stderr, "%"PRIX32" chunks written\n", chunk_no); ++#if OPENSSL_VERSION_NUMBER >= 0x10100000L ++ HMAC_CTX_free(hmacsha1_ctx); ++#else ++ HMAC_CTX_cleanup(hmacsha1_ctx); ++ free(hmacsha1_ctx); ++#endif + return(0); + } diff --git a/linhes/dmg2img/PKGBUILD b/linhes/dmg2img/PKGBUILD new file mode 100644 index 0000000..aaed16b --- /dev/null +++ b/linhes/dmg2img/PKGBUILD @@ -0,0 +1,31 @@ +# Maintainer: Jerome Leclanche <jerome@leclan.ch> + +pkgname=dmg2img +pkgver=1.6.7 +pkgrel=5 +pkgdesc="A CLI tool to uncompress Apple's compressed DMG files to the HFS+ IMG format" +arch=("i686" "x86_64") +url="http://vu1tur.eu.org/tools/" +license=("GPL2") +depends=("openssl" "bzip2") +source=( + "http://vu1tur.eu.org/tools/$pkgname-$pkgver.tar.gz" + "0001-openssl-1.1-compatibility.patch" +) +sha256sums=('02aea6d05c5b810074913b954296ddffaa43497ed720ac0a671da4791ec4d018' + '021f14fc5f3b8dc058b604c6e3be6401124e4cc715df4c7f08a1175ef7e5183b') + +prepare() { + cd "$srcdir/$pkgname-$pkgver" + patch -Np1 --ignore-whitespace -i "$srcdir/0001-openssl-1.1-compatibility.patch" +} + +build() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX="/usr" +} + +package() { + cd "$srcdir/$pkgname-$pkgver" + make PREFIX="/usr" DESTDIR="$pkgdir" install +} diff --git a/linhes/libhdhomerun/PKGBUILD b/linhes/libhdhomerun/PKGBUILD index 1ab1674..74944ce 100644 --- a/linhes/libhdhomerun/PKGBUILD +++ b/linhes/libhdhomerun/PKGBUILD @@ -2,7 +2,7 @@ # Contributor: Grey Christoforo <first name [at] last name [dot] net> pkgname=libhdhomerun -pkgver=20230719 +pkgver=20250506 pkgrel=1 pkgdesc="Library and command line utility for interfacing with HDHomeRun device" arch=('i686' 'x86_64' 'arm' 'armv6h' 'armv7h' 'aarch64') @@ -12,7 +12,7 @@ optdepends=('hdhomerun-firmware-bin: firmware for hdhomerun devices' 'hdhomerun_config_gui: hdhomerun configuration gui') source=("https://download.silicondust.com/hdhomerun/${pkgname}_${pkgver}.tgz") -sha512sums=('da7e8a2a93f60b74103556d1326770243d403844a45fc0583603d8a611946346d4da90cfa6ca239f4f903ac853635b9dd884b5f56af7dff3e4bf230ce700e524') +sha512sums=('6216076924f2b265c03353460cbd23f914b217ac5b8de2ea153be7bdfb2b7ea93926c6f4d956103493274410240905d754d17a7bad209fbc183fa3cf51271478') build() { cd "$srcdir/$pkgname" diff --git a/linhes/libsignal-client/PKGBUILD b/linhes/libsignal-client/PKGBUILD index bcdeaa2..3002ea6 100644 --- a/linhes/libsignal-client/PKGBUILD +++ b/linhes/libsignal-client/PKGBUILD @@ -3,13 +3,14 @@ pkgname=libsignal-client _pkgname=libsignal _libname=libsignal_jni -pkgver=0.62.0 +_java_version=17 +pkgver=0.86.1 pkgrel=1 pkgdesc='Library for the Signal Protocol.' url="https://github.com/signalapp/${_pkgname}" -depends=('gcc-libs') +depends=('gcc-libs' 'java-runtime') checkdepends=('cargo') -makedepends=('cargo' 'gradle' 'git' 'zip' 'protobuf' 'cmake' 'clang' 'jdk21-openjdk') +makedepends=('cargo' 'gradle' 'git' 'zip' 'protobuf' 'cmake' 'clang' "java-environment=${_java_version}" 'python') options=(!lto) arch=('i686' 'x86_64' 'armv6h' 'armv7h' 'aarch64') license=('AGPL-3.0-only') @@ -17,7 +18,7 @@ source=( "${_pkgname}-${pkgver}.tar.gz::https://github.com/signalapp/${_pkgname}/archive/refs/tags/v$pkgver.tar.gz" ) -sha512sums=('2a1d171a6bf9f1dfea9fc1fbc4f200c8b9e2ccb30d9d63f29007f252ff79ae7d149ab5707a8e430010da90ad1e3112475bd0eba8efb5cc011d5e3098aa1e26de') +sha512sums=('dcc66b97cdee3439add283935fd72d7ec5d30958d022094775ec508618e863f5da8a0f9cc74200c5e41f723c0a84a9667b23e84b9b27f6b0ef037bc94bc380e3') prepare() { tar xf "${_pkgname}-$pkgver.tar.gz" @@ -38,8 +39,10 @@ build() { export RUSTUP_TOOLCHAIN=stable export CARGO_TARGET_DIR=target + export CARGO_NET_GIT_FETCH_WITH_CLI=true + export JAVA_HOME="$(ls -d /usr/lib/jvm/java-${_java_version}-* | head -n1)" ./build_jni.sh desktop - GRADLE_USER_HOME="${srcdir}/.gradle" gradle --no-daemon :client:assemble -PskipAndroid=true + GRADLE_USER_HOME="${srcdir}/.gradle" ./gradlew --no-daemon :client:assemble -PskipAndroid=true zip -d "client/build/libs/libsignal-client-${pkgver}.jar" "${_libname}*.so" } diff --git a/linhes/linhes-dev/LinHES9_iso/build_iso.sh b/linhes/linhes-dev/LinHES9_iso/build_iso.sh index 51aba98..8399fb4 100755 --- a/linhes/linhes-dev/LinHES9_iso/build_iso.sh +++ b/linhes/linhes-dev/LinHES9_iso/build_iso.sh @@ -55,9 +55,9 @@ trap 's=$?; echo "$0: Error on line "$LINENO": $BASH_COMMAND"; exit $s' ERR # Clean up working directories cleanup () { -[[ -d ./arch_skel ]] && rm -r ./arch_skel -[[ -d ./work ]] && rm -r ./work -sleep 2 + [[ -d ./arch_skel ]] && rm -r ./arch_skel + [[ -d ./work ]] && rm -r ./work + sleep 2 } # Requirements and preparation @@ -102,38 +102,37 @@ prereqs() { # Copy Arch profile to working directory cp_releng () { -cp -r /usr/share/archiso/configs/releng/ ./arch_skel -rm -r ./arch_skel/efiboot -rm -r ./arch_skel/syslinux + cp -r /usr/share/archiso/configs/releng/ ./arch_skel + rm -r ./arch_skel/efiboot + rm -r ./arch_skel/syslinux } # Copy cust_repo to opt cp_repo () { -if [ -d "./cust_repo" ] -then + if [ -d "./cust_repo" ] + then cp -r ./cust_repo /opt/repo -fi + fi } # Remove ezrepo from opt rm_repo () { -if [ -d "/opt/repo" ] -then + if [ -d "/opt/repo" ] + then rm -r /opt/repo -fi + fi } # Delete automatic login nalogin () { -rm -r ./arch_skel/airootfs/etc/systemd/system/getty@tty1.service.d + rm -r ./arch_skel/airootfs/etc/systemd/system/getty@tty1.service.d } -# Remove cloud-init, hyper-v, qemu-guest, vmtoolsd, sshd, systemd-networkd & iwd services +# Remove cloud-init, hyper-v, vmtoolsd, sshd, systemd-networkd & iwd services rmunitsd () { rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service -rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/qemu-guest-agent.service rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service rm ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service @@ -163,7 +162,8 @@ ln -sf /usr/lib/systemd/system/cups.service ./arch_skel/airootfs/etc/systemd/sys ln -sf /usr/lib/systemd/system/cups.socket ./arch_skel/airootfs/etc/systemd/system/sockets.target.wants/cups.socket ln -sf /usr/lib/systemd/system/cups.path ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/cups.path ln -sf /usr/lib/systemd/system/bluetooth.service ./arch_skel/airootfs/etc/systemd/system/dbus-org.bluez.service -ln -sf /usr/lib/systemd/system/lightdm.service ./arch_skel/airootfs/etc/systemd/system/display-manager.service +ln -sf /usr/lib/systemd/system/sddm.service ./arch_skel/airootfs/etc/systemd/system/display-manager.service +ln -sf /usr/lib/systemd/system/locale-gen.service ./arch_skel/airootfs/etc/systemd/system/multi-user.target.wants/locale-gen.service } # Copy files to customize the ISO @@ -179,7 +179,7 @@ cp -r ./cust_skel/airootfs ./arch_skel/ # Set hostname sethostname () { -echo "${MYHOSTNM}" > ./arch_skel/airootfs/etc/hostname + echo "${MYHOSTNM}" > ./arch_skel/airootfs/etc/hostname } # Create passwd file @@ -201,14 +201,16 @@ network:x:90:"${MYUSERNM}" floppy:x:94:"${MYUSERNM}" scanner:x:96:"${MYUSERNM}" power:x:98:"${MYUSERNM}" -rfkill:x:850:"${MYUSERNM}" -users:x:985:"${MYUSERNM}" -video:x:860:"${MYUSERNM}" -storage:x:870:"${MYUSERNM}" -optical:x:880:"${MYUSERNM}" -lp:x:840:"${MYUSERNM}" -audio:x:890:"${MYUSERNM}" +uucp:x:810:"${MYUSERNM}" +audio:x:820:"${MYUSERNM}" +lp:x:830:"${MYUSERNM}" +rfkill:x:840:"${MYUSERNM}" +video:x:850:"${MYUSERNM}" +storage:x:860:"${MYUSERNM}" +optical:x:870:"${MYUSERNM}" +sambashare:x:880:"${MYUSERNM}" autologin:x:965:"${MYUSERNM}" +users:x:985:"${MYUSERNM}" "${MYUSERNM}":x:1000:" > ./arch_skel/airootfs/etc/group } @@ -223,6 +225,22 @@ echo "root:"${root_hash}":14871:::::: # create gshadow file crtgshadow () { echo "root:!*::root +sys:!*::"${MYUSERNM}" +adm:!*::"${MYUSERNM}" +wheel:!*::"${MYUSERNM}" +log:!*::"${MYUSERNM}" +network:!*::"${MYUSERNM}" +floppy:!*::"${MYUSERNM}" +scanner:!*::"${MYUSERNM}" +power:!*::"${MYUSERNM}" +uucp:!*::"${MYUSERNM}" +audio:!*::"${MYUSERNM}" +lp:!*::"${MYUSERNM}" +rfkill:!*::"${MYUSERNM}" +video:!*::"${MYUSERNM}" +storage:!*::"${MYUSERNM}" +optical:!*::"${MYUSERNM}" +sambashare:!*::"${MYUSERNM}" "${MYUSERNM}":!*::" > ./arch_skel/airootfs/etc/gshadow } @@ -244,8 +262,9 @@ EndSection" > ./arch_skel/airootfs/etc/X11/xorg.conf.d/00-keyboard.conf # Fix 40-locale-gen.hook and create locale.conf crtlocalec () { -sed -i "s/en_US/"${LCLST}"/g" ./arch_skel/airootfs/etc/pacman.d/hooks/40-locale-gen.hook +#sed -i "s/en_US/"${LCLST}"/g" ./arch_skel/airootfs/etc/pacman.d/hooks/40-locale-gen.hook echo "LANG="${LCLST}".UTF-8" > ./arch_skel/airootfs/etc/locale.conf +echo ""${LCLST}".UTF-8 UTF-8" > ./arch_skel/airootfs/etc/locale.gen } # Start mkarchiso diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/branding.desc b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/branding.desc index 1f566e1..632e696 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/branding.desc +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/branding.desc @@ -123,10 +123,10 @@ navigation: widget strings: productName: LinHES shortProductName: LinHES - version: 9alpha1 - shortVersion: 9alpha1 - versionedName: LinHES - shortVersionedName: LinHES + version: R9.0.0 + shortVersion: 9.0.0 + versionedName: LinHES R9.0.0 (Been a minute...) + shortVersionedName: LinHES R9.0.0 bootloaderEntryName: LinHES9 # These images are loaded from the branding module directory. @@ -163,24 +163,6 @@ images: # productWallpaper: "wallpaper.png" # productWelcome: "" -# Colors for text and background components. -# -# - sidebarBackground is the background of the sidebar -# - sidebarText is the (foreground) text color -# - sidebarTextHighlight sets the background of the selected (current) step. -# Optional, and defaults to the application palette. -# - sidebarSelect is the text color of the selected step. -# -# These colors can **also** be set through the stylesheet, if the -# branding component also ships a stylesheet.qss. Then they are -# the corresponding CSS attributes of #sidebarApp. -style: - sidebarBackground: "#292F34" - sidebarText: "#FFFFFF" -# sidebarTextSelect: "#292F34" - sidebarTextSelect: "#EBB81C" - sidebarTextHighlight: "#0072BC" - ### SLIDESHOW # # The slideshow is displayed during execution steps (e.g. when the @@ -215,14 +197,19 @@ slideshow: "show.qml" slideshowAPI: 2 -# These options are to customize online uploading of logs to pastebins: -# - type : Defines the kind of pastebin service to be used. Currently -# it accepts two values: -# - none : disables the pastebin functionality -# - fiche : use fiche pastebin server -# - url : Defines the address of pastebin service to be used. -# Takes string as input. Important bits are the host and port, -# the scheme is not used. -uploadServer : - type : "fiche" - url : "http://termbin.com:9999" +# Colors for text and background components. +# +# - sidebarBackground is the background of the sidebar +# - sidebarText is the (foreground) text color +# - sidebarTextHighlight sets the background of the selected (current) step. +# Optional, and defaults to the application palette. +# - sidebarSelect is the text color of the selected step. +# +# These colors can **also** be set through the stylesheet, if the +# branding component also ships a stylesheet.qss. Then they are +# the corresponding CSS attributes of #sidebarApp. +style: + SidebarBackground: "#292F34" + SidebarText: "#808080" + SidebarTextCurrent: "#EBB81C" + SidebarBackgroundCurrent: "#0072BC" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/show.qml b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/show.qml index b0632dc..26f9981 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/show.qml +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/show.qml @@ -1,13 +1,5 @@ -/* === This file is part of Calamares - <https://calamares.io> === - * - * SPDX-FileCopyrightText: 2015 Teo Mrnjavac <teo@kde.org> - * SPDX-FileCopyrightText: 2018 Adriaan de Groot <groot@kde.org> - * SPDX-License-Identifier: GPL-3.0-or-later - * - * Calamares is Free Software: see the License-Identifier above. - * - */ - +/* SPDX-FileCopyrightText: 2020 Oliver Smith <ollieparanoid@postmarketos.org> + * SPDX-License-Identifier: GPL-3.0-or-later */ import QtQuick 2.0; import calamares.slideshow 1.0; @@ -15,83 +7,24 @@ Presentation { id: presentation - function nextSlide() { - console.log("QML Component (default slideshow) Next slide"); - presentation.goToNextSlide(); - } - - Timer { - id: advanceTimer - interval: 5000 - running: presentation.activatedInCalamares - repeat: true - onTriggered: nextSlide() - } - - Slide { - - anchors.fill: parent - anchors.verticalCenterOffset: 0 - - Image { - id: background1 - source: "" - width: parent.width; height: parent.height - horizontalAlignment: Image.AlignCenter - verticalAlignment: Image.AlignTop - fillMode: Image.Stretch - anchors.fill: parent - } - - Text { - anchors.horizontalCenter: background.horizontalCenter - anchors.top: background.bottom - text: "Welcome to" - wrapMode: Text.WordWrap - width: presentation.width - horizontalAlignment: Text.Center - } - } - Slide { - - anchors.fill: parent - anchors.verticalCenterOffset: 0 - - Image { - id: background2 - source: "" - width: parent.width; height: parent.height - horizontalAlignment: Image.AlignCenter - verticalAlignment: Image.AlignTop - fillMode: Image.Stretch - anchors.fill: parent - } - - Text { - anchors.horizontalCenter: background.horizontalCenter - anchors.top: background.bottom - text: "LinHES: The Linux Entertainment System" - wrapMode: Text.WordWrap - width: presentation.width - horizontalAlignment: Text.Center - } - } - - - // When this slideshow is loaded as a V1 slideshow, only - // activatedInCalamares is set, which starts the timer (see above). - // - // In V2, also the onActivate() and onLeave() methods are called. - // These example functions log a message (and re-start the slides - // from the first). - function onActivate() { - console.log("QML Component (default slideshow) activated"); - presentation.currentSlide = 0; + Image { + id: background + source: "squid.png" + width: parent.width; height: parent.height + horizontalAlignment: Image.AlignCenter + verticalAlignment: Image.AlignTop + fillMode: Image.PreserveAspectFit + anchors.centerIn: parent + } + + Text { + anchors.horizontalCenter: background.horizontalCenter + anchors.top: background.bottom + text: "Installing LinHES R9.0.0" + wrapMode: Text.WordWrap + width: presentation.width + horizontalAlignment: Text.Center + } } - - function onLeave() { - console.log("QML Component (default slideshow) deactivated"); - } - } diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/stylesheet.qss b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/stylesheet.qss index d3d0c2d..8f938ab 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/stylesheet.qss +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/branding/LinHES/stylesheet.qss @@ -59,6 +59,7 @@ QAbstractSpinBox { QListWidget::item:alternate { } +QPushButton#aboutButton { qproperty-icon: url(:/data/images/release.svg); color: #FFFFFF; } #debugButton { font: bold 8px; diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/bootloader.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/bootloader.conf new file mode 100644 index 0000000..80e0458 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/bootloader.conf @@ -0,0 +1,23 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the bootloader module. +# +--- + +efiBootLoader: "grub" + +kernel: "/vmlinuz-linux" +img: "/initramfs-linux.img" +fallback: "/initramfs-linux-fallback.img" +timeout: "5" + +efiBootloaderId: "linhes" + +grubInstall: "grub-install" +grubMkconfig: "grub-mkconfig" +grubCfg: "/boot/grub/grub.cfg" +grubProbe: "grub-probe" +efiBootMgr: "efibootmgr" + +installEFIFallback: true diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/displaymanager.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/displaymanager.conf new file mode 100644 index 0000000..d786b81 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/displaymanager.conf @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the displaymanager module. +# +--- + +displaymanagers: + - sddm + +basicSetup: false + +sysconfigSetup: false + +sddm: + configuration_file: "/etc/sddm.conf" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/fstab.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/fstab.conf new file mode 100644 index 0000000..f8d625a --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/fstab.conf @@ -0,0 +1,17 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the fstab module. +# +--- + +crypttabOptions: luks + +tmpOptions: + default: + tmpfs: false + options: "" + ssd: + tmpfs: true + options: "defaults,noatime,mode=1777" + diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/grubcfg.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/grubcfg.conf new file mode 100644 index 0000000..6b297f3 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/grubcfg.conf @@ -0,0 +1,21 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the grugcfg module. +# +--- + +overwrite: false + +prefer_grub_d: false + +keepDistributor: false + +defaults: + GRUB_TIMEOUT: 5 + GRUB_DEFAULT: "saved" + GRUB_DISABLE_SUBMENU: true + GRUB_TERMINAL_OUTPUT: "console" + GRUB_DISABLE_RECOVERY: true + +always_use_defaults: false diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/initcpiocfg.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/initcpiocfg.conf new file mode 100644 index 0000000..f02898f --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/initcpiocfg.conf @@ -0,0 +1,11 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# The initcpiocfg module is responsible for the configuration of mkinitcpio.conf. Typically this +# module is used in conjunction with the initcpio module to generate the boot image when using mkinitcpio +# +--- + +useSystemdHook: false + +source: "/etc/mkinitcpio.conf" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/keyboard.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/keyboard.conf new file mode 100644 index 0000000..e51debc --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/keyboard.conf @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the keyboard module. +# +--- + +xOrgConfFileName: "/etc/X11/xorg.conf.d/00-keyboard.conf" + +convertedKeymapPath: "/lib/kbd/keymaps/xkb" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/locale.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/locale.conf new file mode 100644 index 0000000..cfeca78 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/locale.conf @@ -0,0 +1,14 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the locale module. +# +--- + +region: "" +zone: "" + +geoip: + style: "json" + url: "https://geoip.kde.org/v1/calamares" + selector: "" # leave blank for the default diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/luksopenswaphookcfg.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/luksopenswaphookcfg.conf new file mode 100644 index 0000000..1ec7e5b --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/luksopenswaphookcfg.conf @@ -0,0 +1,8 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Writes an openswap configuration with LUKS settings to the given path +# +--- + +configFilePath: /etc/openswap.conf diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/machineid.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/machineid.conf new file mode 100644 index 0000000..a9719a3 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/machineid.conf @@ -0,0 +1,20 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Machine-ID and other random data on the target system. +# +--- + +systemd: true + +systemd-style: uuid + +dbus: true + +dbus-symlink: true + +entropy-copy: false + +entropy-files: + - /var/lib/urandom/random-seed + - /var/lib/systemd/random-seed diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/mount.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/mount.conf new file mode 100644 index 0000000..c60aed5 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/mount.conf @@ -0,0 +1,52 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Configuration for the mount module. +# +--- + +extraMounts: + - device: proc + fs: proc + mountPoint: /proc + - device: sys + fs: sysfs + mountPoint: /sys + - device: /dev + mountPoint: /dev + options: [ bind ] + - device: tmpfs + fs: tmpfs + mountPoint: /run + - device: /run/udev + mountPoint: /run/udev + options: [ bind ] + - device: efivarfs + fs: efivarfs + mountPoint: /sys/firmware/efi/efivars + efi: true + +btrfsSubvolumes: + - mountPoint: / + subvolume: /@ + - mountPoint: /home + subvolume: /@home + - mountPoint: /var/cache + subvolume: /@cache + - mountPoint: /var/log + subvolume: /@log + +btrfsSwapSubvol: /@swap + +mountOptions: + - filesystem: default + options: [ defaults ] + - filesystem: efi + options: [ defaults, umask=0077 ] + - filesystem: ext4 + options: [ defaults, noatime, nodiscard ] + - filesystem: btrfs + options: [ defaults, noatime, nodiscard, noautodefrag ] + ssdOptions: [ ssd ] + - filesystem: btrfs_swap + options: [ defaults, noatime ] diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/partition.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/partition.conf index e9425ad..262f8ee 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/partition.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/partition.conf @@ -1,255 +1,43 @@ # SPDX-FileCopyrightText: no # SPDX-License-Identifier: CC0-1.0 # -# This setting specifies the mount point of the EFI system partition. Some -# distributions (Fedora, Debian, Manjaro, etc.) use /boot/efi, others (KaOS, -# etc.) use just /boot. +# Configuration for the partition module. # -# Defaults to "/boot/efi", may be empty (but weird effects ensue) -efiSystemPartition: "/boot/efi" +--- -# This optional setting specifies the size of the EFI system partition. -# If nothing is specified, the default size of 300MiB will be used. -# -# This size applies both to automatic partitioning and the checks -# during manual partitioning. A minimum of 32MiB is enforced, -# 300MiB is the default, M is treated as MiB, and if you really want -# one-million (10^6) bytes, use MB. -# -# efiSystemPartitionSize: 300M - -# This optional setting specifies the name of the EFI system partition (see -# PARTLABEL; gpt only; requires KPMCore >= 4.2.0). -# If nothing is specified, the partition name is left unset. -# efiSystemPartitionName: EFI +efi: + mountPoint: "/efi" + recommendedSize: 1024MiB + minimumSize: 1024MiB + label: "EFI" -# In autogenerated partitioning, allow the user to select a swap size? -# If there is exactly one choice, no UI is presented, and the user -# cannot make a choice -- this setting is used. If there is more than -# one choice, a UI is presented. -# -# Legacy settings *neverCreateSwap* and *ensureSuspendToDisk* correspond -# to values of *userSwapChoices* as follows: -# - *neverCreateSwap* is true, means [none] -# - *neverCreateSwap* is false, *ensureSuspendToDisk* is false, [small] -# - *neverCreateSwap* is false, *ensureSuspendToDisk* is true, [suspend] -# -# Autogenerated swap sizes are as follows: -# - *suspend*: Swap is always at least total memory size, -# and up to 4GiB RAM follows the rule-of-thumb 2 * memory; -# from 4GiB to 8 GiB it stays steady at 8GiB, and over 8 GiB memory -# swap is the size of main memory. -# - *small*: Follows the rules above, but Swap is at -# most 8GiB, and no more than 10% of available disk. -# In both cases, a fudge factor (usually 10% extra) is applied so that there -# is some space for administrative overhead (e.g. 8 GiB swap will allocate -# 8.8GiB on disk in the end). -# -# If *file* is enabled here, make sure to have the *fstab* module -# as well (later in the exec phase) so that the swap file is -# actually created. userSwapChoices: - none # Create no swap, use no swap - small # Up to 4GB - suspend # At least main memory size - # - reuse # Re-use existing swap, but don't create any (unsupported right now) - file # To swap file instead of partition -# This optional setting specifies the name of the swap partition (see -# PARTLABEL; gpt only; requires KPMCore >= 4.2.0). -# If nothing is specified, the partition name is left unset. -# swapPartitionName: swap +swapPartitionName: SWAP -# LEGACY SETTINGS (these will generate a warning) -# ensureSuspendToDisk: true -# neverCreateSwap: false +luksGeneration: luks1 -# Correctly draw nested (e.g. logical) partitions as such. drawNestedPartitions: false -# Show/hide partition labels on manual partitioning page. alwaysShowPartitionLabels: true -# Allow manual partitioning. -# -# When set to false, this option hides the "Manual partitioning" button, -# limiting the user's choice to "Erase", "Replace" or "Alongside". -# This can be useful when using a custom partition layout we don't want -# the user to modify. -# -# If nothing is specified, manual partitioning is enabled. -#allowManualPartitioning: true +allowManualPartitioning: true + +showNotEncryptedBootMessage: true -# Initial selection on the Choice page -# -# There are four radio buttons (in principle: erase, replace, alongside, manual), -# and you can pick which of them, if any, is initially selected. For most -# installers, "none" is the right choice: it makes the user pick something specific, -# rather than accidentally being able to click past an important choice (in particular, -# "erase" is a dangerous choice). -# -# The default is "none" -# initialPartitioningChoice: none -# -# Similarly, some of the installation choices may offer a choice of swap; -# the available choices depend on *userSwapChoices*, above, and this -# setting can be used to pick a specific one. -# -# The default is "none" (no swap) if that is one of the enabled options, otherwise -# one of the items from the options. -initialSwapChoice: none -# Default partition table type, used when a "erase" disk is made. -# -# When erasing a disk, a new partition table is created on disk. -# In other cases, e.g. Replace and Alongside, as well as when using -# manual partitioning, this partition table exists already on disk -# and it is left unmodified. -# -# Suggested values: gpt, msdos -# If nothing is specified, Calamares defaults to "gpt" if system is -# efi or "msdos". -# -# Names are case-sensitive and defined by KPMCore. -# defaultPartitionTableType: msdos +initialSwapChoice: file -# Requirement for partition table type -# -# Restrict the installation on disks that match the type of partition -# tables that are specified. -# -# Possible values: msdos, gpt. Names are case-sensitive and defined by KPMCore. +# If nothing is specified, Calamares defaults to "gpt" if +# system is efi or "msdos" otherwise # -# If nothing is specified, Calamares defaults to both "msdos" and "gpt". -# -# requiredPartitionTableType: gpt -# requiredPartitionTableType: -# - msdos -# - gpt +# defaultPartitionTableType: msdos -# Default filesystem type, used when a "new" partition is made. -# -# When replacing a partition, the existing filesystem inside the -# partition is retained. In other cases, e.g. Erase and Alongside, -# as well as when using manual partitioning and creating a new -# partition, this filesystem type is pre-selected. Note that -# editing a partition in manual-creation mode will not automatically -# change the filesystem type to this default value -- it is not -# creating a new partition. -# -# Suggested values: ext2, ext3, ext4, reiser, xfs, jfs, btrfs -# If nothing is specified, Calamares defaults to "ext4". -# -# Names are case-sensitive and defined by KPMCore. defaultFileSystemType: "ext4" -# Selectable filesystem type, used when "erase" is done. -# -# When erasing the disk, the *defaultFileSystemType* is used (see -# above), but it is also possible to give users a choice: -# list suitable filesystems here. A drop-down is provided -# to pick which is the filesystems will be used. -# -# The value *defaultFileSystemType* is added to this list (with a warning) -# if not present; the default pick is the *defaultFileSystemType*. -# -# If not specified at all, uses *defaultFileSystemType* without a -# warning (this matches traditional no-choice-available behavior best). -availableFileSystemTypes: ["ext4","ext3","btrfs","f2fs","jfs","reiser","xfs"] - -# Show/hide LUKS related functionality in automated partitioning modes. -# Disable this if you choose not to deploy early unlocking support in GRUB2 -# and/or your distribution's initramfs solution. -# -# BIG FAT WARNING: -# -# This option is unsupported, as it cuts out a crucial security feature. -# Disabling LUKS and shipping Calamares without a correctly configured GRUB2 -# and initramfs is considered suboptimal use of the Calamares software. The -# Calamares team will not provide user support for any potential issue that -# may arise as a consequence of setting this option to false. -# It is strongly recommended that system integrators put in the work to support -# LUKS unlocking support in GRUB2 and initramfs/dracut/mkinitcpio/etc. -# For more information on setting up GRUB2 for Calamares with LUKS, see -# https://github.com/calamares/calamares/wiki/Deploy-LUKS -# -# If nothing is specified, LUKS is enabled in automated modes. -#enableLuksAutomatedPartitioning: true - -# Partition layout. -# -# This optional setting specifies a custom partition layout. -# -# If nothing is specified, the default partition layout is a single partition -# for root that uses 100% of the space and uses the filesystem defined by -# defaultFileSystemType. -# -# Note: the EFI system partition is prepend automatically to the layout if -# needed; the swap partition is appended to the layout if enabled (small of -# suspend). -# -# Otherwise, the partition layout is defined as follow: -# -# partitionLayout: -# - name: "rootfs" -# type: "4f68bce3-e8cd-4db1-96e7-fbcaf984b709" -# filesystem: "ext4" -# mountPoint: "/" -# size: 20% -# minSize: 500M -# maxSize: 10G -# attributes: 0xffff000000000003 -# - name: "home" -# type: "933ac7e1-2eb4-4f13-b844-0e14e2aef915" -# filesystem: "ext4" -# mountPoint: "/home" -# size: 3G -# minSize: 1.5G -# features: -# 64bit: false -# casefold: true -# - name: "data" -# filesystem: "fat32" -# mountPoint: "/data" -# features: -# sector-size: 4096 -# sectors-per-cluster: 128 -# size: 100% -# -# There can be any number of partitions, each entry having the following attributes: -# - name: filesystem label -# and -# partition name (gpt only; since KPMCore 4.2.0) -# - uuid: partition uuid (optional parameter; gpt only; requires KPMCore >= 4.2.0) -# - type: partition type (optional parameter; gpt only; requires KPMCore >= 4.2.0) -# - attributes: partition attributes (optional parameter; gpt only; requires KPMCore >= 4.2.0) -# - filesystem: filesystem type (optional parameter) -# - if not set at all, treat as "unformatted" -# - if "unformatted", no filesystem will be created -# - if "unknown" (or an unknown FS name, like "elephant") then the -# default filesystem type, or the user's choice, will be applied instead -# of "unknown" (e.g. the user might pick ext4, or xfs). -# - mountPoint: partition mount point (optional parameter; not mounted if unset) -# - size: partition size in bytes (append 'K', 'M' or 'G' for KiB, MiB or GiB) -# or -# % of the available drive space if a '%' is appended to the value -# - minSize: minimum partition size (optional parameter) -# - maxSize: maximum partition size (optional parameter) -# - features: filesystem features (optional parameter; requires KPMCore >= 4.2.0) -# name: boolean or integer or string - -# Checking for available storage -# -# This overlaps with the setting of the same name in the welcome module's -# requirements section. If nothing is set by the welcome module, this -# value is used instead. It is still a problem if there is no required -# size set at all, and the replace and resize options will not be offered -# if no required size is set. -# -# The value is in Gibibytes (GiB). -# -# BIG FAT WARNING: except for OEM-phase-0 use, you should be using -# the welcome module, **and** configure this value in -# `welcome.conf`, not here. -# requiredStorage: 3.5 +availableFileSystemTypes: ["ext4","btrfs","xfs"] diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/services-systemd.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/services-systemd.conf new file mode 100644 index 0000000..be9ad91 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/services-systemd.conf @@ -0,0 +1,16 @@ +# SPDX-FileCopyrightText: no +# SPDX-License-Identifier: CC0-1.0 +# +# Systemd services manipulation. +# +--- + +units: + - name: "systemd-networkd.service" + action: "disable" + - name: "avahi-daemon.service" + action: "enable" + - name: "fstrim.timer" + action: "enable" + - name: "plocate-updatedb.timer" + action: "enable" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-before.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-before.conf index aaf0243..c3fd7ab 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-before.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-before.conf @@ -75,4 +75,6 @@ timeout: 999 # other commands in the list): script: - "-/usr/bin/pacman-key --init" - - "-/usr/bin/pacman-key --populate"
\ No newline at end of file + - "-/usr/bin/pacman-key --populate" + - "-rm ${ROOT}/etc/skel/Desktop/calamares.desktop" + - "-rm ${ROOT}/etc/skel/.config/autostart/calamares.desktop" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-final.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-final.conf index 65be5e1..7884d95 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-final.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/shellprocess-final.conf @@ -51,6 +51,10 @@ # # To change the description of the job, set the *name* entries in *i18n*. --- + +i18n: + name: "Cleanup new install files." + # Set to true to run in host, rather than target system dontChroot: false # Tune this for the commands you're actually running @@ -74,12 +78,15 @@ timeout: 999 # ignored; the slowloris command has a different timeout from the # other commands in the list): script: - - "-rm @@ROOT@@/etc/sudoers.d/g_wheel" - - "-rm -r @@ROOT@@/etc/systemd/system/getty@tty1.service.d" - - "-rm -r @@ROOT@@/etc/systemd/system/multi-user.target.wants/pacman-init.service" - - "-rm -r @@ROOT@@/etc/systemd/system/pacman-init.service" - - "-rm @@ROOT@@/etc/systemd/system/etc-pacman.d-gnupg.mount" - - "-rm @@ROOT@@/root/.automated_script.sh" - - "-rm @@ROOT@@/root/.zlogin" - - "-rm @@ROOT@@/etc/polkit-1/rules.d/49-nopasswd_global.rules" -# - "-rm @@ROOT@@/etc/systemd/system/display-manager.service" + - "-rm ${ROOT}etc/sudoers.d/g_wheel" + - "-rm -r ${ROOT}etc/systemd/system/getty@tty1.service.d" + - "-rm -r ${ROOT}etc/systemd/system/multi-user.target.wants/pacman-init.service" + - "-rm -r ${ROOT}etc/systemd/system/pacman-init.service" + - "-rm ${ROOT}etc/systemd/system/etc-pacman.d-gnupg.mount" + - "-rm ${ROOT}root/.automated_script.sh" + - "-rm ${ROOT}root/.zlogin" + - "-rm -r ${ROOT}etc/calamares/" + - "-rm -r ${ROOT}etc/systemd/system/locale-gen.service" + - "-rm ${ROOT}etc/polkit-1/rules.d/49-nopasswd_global.rules" + - "-rm ${ROOT}etc/sddm.conf" + - "sed -i 's/User=km/User=${USER}/g' ${ROOT}etc/sddm.conf.d/autologin.conf" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/users.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/users.conf index 19531a8..09b83a8 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/users.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/modules/users.conf @@ -32,7 +32,9 @@ defaultGroups: - name: users must_exist: true system: true + - adm - lp + - power - video - network - storage @@ -40,6 +42,12 @@ defaultGroups: must_exist: false system: true - audio + - sys + - optical + - scanner + - rfkill + - uucp + - sambashare # Some Distributions require a 'autologin' group for the user. # Autologin causes a user to become automatically logged in to @@ -161,6 +169,7 @@ allowWeakPasswordsDefault: true user: shell: /bin/bash forbidden_names: [ root ] + home_permissions: "0700" # Hostname settings # @@ -205,7 +214,7 @@ user: hostname: location: EtcFile writeHostsFile: true - #template: "alci-${cpu}" + template: "${first}-${product}" forbidden_names: [ localhost ] presets: diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/settings.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/settings.conf index e7cba3e..60f34f2 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/settings.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/calamares/settings.conf @@ -3,115 +3,9 @@ # # Configuration file for Calamares # -# This is the top-level configuration file for Calamares. -# It specifies what modules will be used, as well as some -# overall characteristics -- is this a setup program, or -# an installer. More specific configuration is devolved -# to the branding file (for the UI) and the individual -# module configuration files (for functionality). --- -# Modules can be job modules (with different interfaces) and QtWidgets view -# modules. They could all be placed in a number of different paths. -# "modules-search" is a list of strings, each of these can either be a full -# path to a directory or the keyword "local". -# -# "local" means: -# - modules in $LIBDIR/calamares/modules, with -# - settings in SHARE/calamares/modules or /etc/calamares/modules. -# In debug-mode (e.g. calamares -d) "local" also adds some paths -# that make sense from inside the build-directory, so that you -# can build-and-run with the latest modules immediately. -# -# Strings other than "local" are taken as paths and interpreted -# relative to wherever Calamares is started. It is therefore **strongly** -# recommended to use only absolute paths here. This is mostly useful -# if your distro has forks of standard Calamares modules, but also -# uses some form of upstream packaging which might overwrite those -# forked modules -- then you can keep modules somewhere outside of -# the "regular" module tree. -# -# -# YAML: list of strings. -modules-search: [ local ] -# Instances section. This section is optional, and it defines custom instances -# for modules of any kind. An instance entry has these keys: -# - *module* name, which matches the module name from the module descriptor -# (usually the name of the directory under `src/modules/`, but third- -# party modules may diverge. -# - *id* (optional) an identifier to distinguish this instance from -# all the others. If none is given, the name of the module is used. -# Together, the module and id form an instance key (see below). -# - *config* (optional) a filename for the configuration. If none is -# given, *module*`.conf` is used (e.g. `welcome.conf` for the welcome -# module) -# - *weight* (optional) In the *exec* phase of the sequence, progress -# is reported as jobs are completed. The jobs from a single module -# together contribute the full weight of that module. The overall -# progress (0 .. 100%) is divided up according to the weight of each -# module. Give modules that take a lot of time to complete, a larger -# weight to keep the overall progress moving along steadily. This -# weight overrides a weight given in the module descriptor. If no weight -# is given, uses the value from the module descriptor, or 1 if there -# isn't one there either. -# -# The primary goal of this mechanism is to allow loading multiple instances -# of the same module, with different configuration. If you don't need this, -# the instances section can safely be left empty. -# -# Module name plus instance name makes an instance key, e.g. -# "webview@owncloud", where "webview" is the module name (for the webview -# viewmodule) and "owncloud" is the instance name. In the *sequence* -# section below, use instance-keys to name instances (instead of just -# a module name, for modules which have only a single instance). -# -# Every module implicitly has an instance with the instance name equal -# to its module name, e.g. "welcome@welcome". In the *sequence* section, -# mentioning a module without a full instance key (e.g. "welcome") -# means that implicit module. -# -# An instance may specify its configuration file (e.g. `webview-home.conf`). -# The implicit instances all have configuration files named `<module>.conf`. -# This (implict) way matches the source examples, where the welcome -# module contains an example `welcome.conf`. Specify a *config* for -# any module (also implicit instances) to change which file is used. -# -# For more information on running module instances, run Calamares in debug -# mode and check the Modules page in the Debug information interface. -# -# A module that is often used with instances is shellprocess, which will -# run shell commands specified in the configuration file. By configuring -# more than one instance of the module, multiple shell sessions can be run -# during install. -# -# YAML: list of maps of string:string key-value pairs. -#instances: -#- id: owncloud -# module: webview -# config: owncloud.conf - -# Sequence section. This section describes the sequence of modules, both -# viewmodules and jobmodules, as they should appear and/or run. -# -# A jobmodule instance key (or name) can only appear in an exec phase, whereas -# a viewmodule instance key (or name) can appear in both exec and show phases. -# There is no limit to the number of show or exec phases. However, the same -# module instance key should not appear more than once per phase, and -# deployers should take notice that the global storage structure is persistent -# throughout the application lifetime, possibly influencing behavior across -# phases. A show phase defines a sequence of viewmodules (and therefore -# pages). These viewmodules can offer up jobs for the execution queue. -# -# An exec phase displays a progress page (with brandable slideshow). This -# progress page iterates over the modules listed in the *immediately -# preceding* show phase, and enqueues their jobs, as well as any other jobs -# from jobmodules, in the order defined in the current exec phase. -# -# It then executes the job queue and clears it. If a viewmodule offers up a -# job for execution, but the module name (or instance key) isn't listed in the -# immediately following exec phase, this job will not be executed. -# -# YAML: list of lists of strings. +modules-search: [ local ] instances: - id: before @@ -125,119 +19,52 @@ instances: sequence: - show: - welcome -# - notesqml - locale - keyboard - partition - users -# - tracking - summary - exec: - partition -# - zfs - mount - unpackfs - machineid - - fstab - locale - keyboard - localecfg - luksbootkeyfile - luksopenswaphookcfg + - fstab - initcpiocfg - initcpio - removeuser + - shellprocess@before - users - - displaymanager - networkcfg - - hwclock -# - services-systemd - - shellprocess@before + - displaymanager - packages + - hwclock + - services-systemd - grubcfg - bootloader - shellprocess@final - preservefiles - umount - show: -# - webview@owncloud - finished -# A branding component is a directory, either in SHARE/calamares/branding or -# in /etc/calamares/branding (the latter takes precedence). The directory must -# contain a YAML file branding.desc which may reference additional resources -# (such as images) as paths relative to the current directory. -# -# A branding component can also ship a QML slideshow for execution pages, -# along with translation files. -# -# Only the name of the branding component (directory) should be specified -# here, Calamares then takes care of finding it and loading the contents. -# -# YAML: string. branding: LinHES -# If this is set to true, Calamares will show an "Are you sure?" prompt right -# before each execution phase, i.e. at points of no return. If this is set to -# false, no prompt is shown. Default is false, but Calamares will complain if -# this is not explicitly set. -# -# YAML: boolean. prompt-install: false -# If this is set to true, Calamares will execute all target environment -# commands in the current environment, without chroot. This setting should -# only be used when setting up Calamares as a post-install configuration tool, -# as opposed to a full operating system installer. -# -# Some official Calamares modules are not expected to function with this -# setting. (e.g. partitioning seems like a bad idea, since that is expected to -# have been done already) -# -# Default is false (for a normal installer), but Calamares will complain if -# this is not explicitly set. -# -# YAML: boolean. dont-chroot: false -# If this is set to true, Calamares refers to itself as a "setup program" -# rather than an "installer". Defaults to the value of dont-chroot, but -# Calamares will complain if this is not explicitly set. oem-setup: false -# If this is set to true, the "Cancel" button will be disabled entirely. -# The button is also hidden from view. -# -# This can be useful if when e.g. Calamares is used as a post-install -# configuration tool and you require the user to go through all the -# configuration steps. -# -# Default is false, but Calamares will complain if this is not explicitly set. -# -# YAML: boolean. disable-cancel: false -# If this is set to true, the "Cancel" button will be disabled once -# you start the 'Installation', meaning there won't be a way to cancel -# the Installation until it has finished or installation has failed. -# -# Default is false, but Calamares will complain if this is not explicitly set. -# -# YAML: boolean. disable-cancel-during-exec: false -# If this is set to true, the "Next" and "Back" button will be hidden once -# you start the 'Installation'. -# -# Default is false, but Calamares will complain if this is not explicitly set. -# -# YAML: boolean. hide-back-and-next-during-exec: false -# If this is set to true, then once the end of the sequence has -# been reached, the quit (done) button is clicked automatically -# and Calamares will close. Default is false: the user will see -# that the end of installation has been reached, and that things are ok. -# -# quit-at-end: false diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/dkms/framework.conf.d/signkeyfile.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/dkms/framework.conf.d/signkeyfile.conf new file mode 100644 index 0000000..8e19713 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/dkms/framework.conf.d/signkeyfile.conf @@ -0,0 +1,2 @@ +# Location of the sign-file kernel binary (default: depends on distributioin): +sign_file='/usr/lib/modules/${kernelver}/build/scripts/sign-file' diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/lightdm/lightdm.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/lightdm/lightdm.conf deleted file mode 100644 index f43b26c..0000000 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/lightdm/lightdm.conf +++ /dev/null @@ -1,164 +0,0 @@ -[Seat:*] -# -# General configuration -# -# start-default-seat = True to always start one seat if none are defined in the configuration -# greeter-user = User to run greeter as -# minimum-display-number = Minimum display number to use for X servers -# minimum-vt = First VT to run displays on -# lock-memory = True to prevent memory from being paged to disk -# user-authority-in-system-dir = True if session authority should be in the system location -# guest-account-script = Script to be run to setup guest account -# logind-check-graphical = True to on start seats that are marked as graphical by logind -# log-directory = Directory to log information to -# run-directory = Directory to put running state in -# cache-directory = Directory to cache to -# sessions-directory = Directory to find sessions -# remote-sessions-directory = Directory to find remote sessions -# greeters-directory = Directory to find greeters -# backup-logs = True to move add a .old suffix to old log files when opening new ones -# dbus-service = True if LightDM provides a D-Bus service to control it -# -[LightDM] -#start-default-seat=true -#greeter-user=lightdm -#minimum-display-number=0 -#minimum-vt=7 # Setting this to a value < 7 implies security issues, see FS#46799 -#lock-memory=true -#user-authority-in-system-dir=false -#guest-account-script=guest-account -#logind-check-graphical=false -#log-directory=/var/log/lightdm -run-directory=/run/lightdm -#cache-directory=/var/cache/lightdm -#sessions-directory=/usr/share/lightdm/sessions:/usr/share/xsessions:/usr/share/wayland-sessions -#remote-sessions-directory=/usr/share/lightdm/remote-sessions -#greeters-directory=$XDG_DATA_DIRS/lightdm/greeters:$XDG_DATA_DIRS/xgreeters -#backup-logs=true -#dbus-service=true - -# -# Seat configuration -# -# Seat configuration is matched against the seat name glob in the section, for example: -# [Seat:*] matches all seats and is applied first. -# [Seat:seat0] matches the seat named "seat0". -# [Seat:seat-thin-client*] matches all seats that have names that start with "seat-thin-client". -# -# type = Seat type (local, xremote) -# pam-service = PAM service to use for login -# pam-autologin-service = PAM service to use for autologin -# pam-greeter-service = PAM service to use for greeters -# xserver-command = X server command to run (can also contain arguments e.g. X -special-option) -# xmir-command = Xmir server command to run (can also contain arguments e.g. Xmir -special-option) -# xserver-config = Config file to pass to X server -# xserver-layout = Layout to pass to X server -# xserver-allow-tcp = True if TCP/IP connections are allowed to this X server -# xserver-share = True if the X server is shared for both greeter and session -# xserver-hostname = Hostname of X server (only for type=xremote) -# xserver-display-number = Display number of X server (only for type=xremote) -# xdmcp-manager = XDMCP manager to connect to (implies xserver-allow-tcp=true) -# xdmcp-port = XDMCP UDP/IP port to communicate on -# xdmcp-key = Authentication key to use for XDM-AUTHENTICATION-1 (stored in keys.conf) -# greeter-session = Session to load for greeter -# greeter-hide-users = True to hide the user list -# greeter-allow-guest = True if the greeter should show a guest login option -# greeter-show-manual-login = True if the greeter should offer a manual login option -# greeter-show-remote-login = True if the greeter should offer a remote login option -# user-session = Session to load for users -# allow-user-switching = True if allowed to switch users -# allow-guest = True if guest login is allowed -# guest-session = Session to load for guests (overrides user-session) -# session-wrapper = Wrapper script to run session with -# greeter-wrapper = Wrapper script to run greeter with -# guest-wrapper = Wrapper script to run guest sessions with -# display-setup-script = Script to run when starting a greeter session (runs as root) -# display-stopped-script = Script to run after stopping the display server (runs as root) -# greeter-setup-script = Script to run when starting a greeter (runs as root) -# session-setup-script = Script to run when starting a user session (runs as root) -# session-cleanup-script = Script to run when quitting a user session (runs as root) -# autologin-guest = True to log in as guest by default -# autologin-user = User to log in with by default (overrides autologin-guest) -# autologin-user-timeout = Number of seconds to wait before loading default user -# autologin-session = Session to load for automatic login (overrides user-session) -# autologin-in-background = True if autologin session should not be immediately activated -# exit-on-failure = True if the daemon should exit if this seat fails -# -[Seat:*] -#type=local -#pam-service=lightdm -#pam-autologin-service=lightdm-autologin -#pam-greeter-service=lightdm-greeter -#xserver-command=X -#xmir-command=Xmir -#xserver-config= -#xserver-layout= -#xserver-allow-tcp=false -#xserver-share=true -#xserver-hostname= -#xserver-display-number= -#xdmcp-manager= -#xdmcp-port=177 -#xdmcp-key= -greeter-session=lightdm-gtk-greeter -#greeter-hide-users=false -#greeter-allow-guest=true -#greeter-show-manual-login=false -#greeter-show-remote-login=true -user-session=xfce -#allow-user-switching=true -#allow-guest=true -#guest-session= -session-wrapper=/etc/lightdm/Xsession -#greeter-wrapper= -#guest-wrapper= -#display-setup-script= -#display-stopped-script= -#greeter-setup-script= -#session-setup-script= -#session-cleanup-script= -#autologin-guest=false -autologin-user=km -#autologin-user-timeout=0 -#autologin-in-background=false -autologin-session=xfce -#exit-on-failure=false - -# -# XDMCP Server configuration -# -# enabled = True if XDMCP connections should be allowed -# port = UDP/IP port to listen for connections on -# listen-address = Host/address to listen for XDMCP connections (use all addresses if not present) -# key = Authentication key to use for XDM-AUTHENTICATION-1 or blank to not use authentication (stored in keys.conf) -# hostname = Hostname to report to XDMCP clients (defaults to system hostname if unset) -# -# The authentication key is a 56 bit DES key specified in hex as 0xnnnnnnnnnnnnnn. Alternatively -# it can be a word and the first 7 characters are used as the key. -# -[XDMCPServer] -#enabled=false -#port=177 -#listen-address= -#key= -#hostname= - -# -# VNC Server configuration -# -# enabled = True if VNC connections should be allowed -# command = Command to run Xvnc server with -# port = TCP/IP port to listen for connections on -# listen-address = Host/address to listen for VNC connections (use all addresses if not present) -# width = Width of display to use -# height = Height of display to use -# depth = Color depth of display to use -# -[VNCServer] -#enabled=false -#command=Xvnc -#port=5900 -#listen-address= -#width=1024 -#height=768 -#depth=8 diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/pacman.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/pacman.conf index cb24f8c..03c2137 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/pacman.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/pacman.conf @@ -32,10 +32,11 @@ Architecture = auto #UseSyslog #Color #NoProgressBar -# We cannot check disk space from within a chroot environment -#CheckSpace +CheckSpace #VerbosePkgLists ParallelDownloads = 5 +DownloadUser = alpm +#DisableSandbox # By default, pacman accepts packages signed by keys that its local keyring # trusts (see pacman-key and its man page), as well as unsigned packages. @@ -70,19 +71,24 @@ LocalFileSigLevel = Optional # repo name header and Include lines. You can add preferred servers immediately # after the header, and they will be used before the default mirrors. -#[testing] +[linhes-testing] +SigLevel = Optional TrustAll +Server = http://linhes.org/repo/$arch/$repo/ + +#[linhes] +#SigLevel = Optional TrustAll +#Server = http://linhes.org/repo/$arch/$repo/ + +#[core-testing] #Include = /etc/pacman.d/mirrorlist [core] Include = /etc/pacman.d/mirrorlist -[extra] -Include = /etc/pacman.d/mirrorlist - -#[community-testing] +#[extra-testing] #Include = /etc/pacman.d/mirrorlist -[community] +[extra] Include = /etc/pacman.d/mirrorlist # If you want to run 32 bit applications on your x86_64 system, @@ -99,7 +105,3 @@ Include = /etc/pacman.d/mirrorlist #[custom] #SigLevel = Optional TrustAll #Server = file:///home/custompkgs - -[linhes-testing] -SigLevel = Optional TrustAll -Server = http://linhes.org/repo/$arch/$repo/ diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/autologin.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/autologin.conf index 6ed2275..5330a6b 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/autologin.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/autologin.conf @@ -1,3 +1,3 @@ [Autologin] User=km -Session=plasma +Session=plasmax11 diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/theme.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/theme.conf new file mode 100644 index 0000000..d1fea99 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sddm.conf.d/theme.conf @@ -0,0 +1,6 @@ +[General] +Numlock=on +[Theme] +Current=breeze +CursorTheme=breeze_cursors +Font=Noto Sans,10,-1,0,400,0,0,0,0,0,0,0,0,0,0,1 diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/autostart/calamares.desktop b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/autostart/calamares.desktop index 5d3405c..2a5b55f 100755..120000 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/autostart/calamares.desktop +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/autostart/calamares.desktop @@ -1,252 +1 @@ -[Desktop Entry] -Categories=Qt;System; -Comment[en_US]=Calamares — System Installer -Comment=Calamares — System Installer -Comment[ar]=كالامارس - مثبت النظام -Comment[as]=কেলামাৰেচ — চিছটেম ইনস্তলাৰ -Comment[ast]=Calamares — Instalador del sistema -Comment[az]=Calamares Sistem Quraşdırıcısı -Comment[az_AZ]=Calamares — Sistem Quraşdırıcısı -Comment[be]=Calamares — усталёўшчык сістэмы -Comment[bg]=„Calamares“ – Системен инсталатор -Comment[bn]=ক্যালামারেস - সিস্টেম ইনস্টলার -Comment[ca]=Calamares — Instal·lador de sistema -Comment[cs_CZ]=Calamares – instalátor operačních systémů -Comment[da]=Calamares — Systeminstallationsprogram -Comment[de]=Calamares - Installation des Betriebssystems -Comment[el]=Calamares — Εγκατάσταση συστήματος -Comment[en_GB]=Calamares — System Installer -Comment[eo]=Calamares — Sistema Instalilo -Comment[es]=Calamares — Instalador del sistema -Comment[es_MX]=Calamares - Instalador del sistema -Comment[et]=Calamares — süsteemipaigaldaja -Comment[eu]=Calamares - sistema instalatzailea -Comment[fa]=کالامارس — نصبکننده سامانه -Comment[fi_FI]=Calamares — Järjestelmän asentaja -Comment[fr]=Calamares - Installateur système -Comment[fur]=Calamares — Program di instalazion dal sisteme -Comment[gl]=Calamares — Instalador de sistemas -Comment[he]=Calamares - אשף התקנה -Comment[hi]=Calamares — सिस्टम इंस्टॉलर -Comment[hr]=Calamares — Instalacija sustava -Comment[hu]=Calamares – Rendszertelepítő -Comment[id]=Calamares — Pemasang Sistem -Comment[ie]=Calamares — Installator del sistema -Comment[is]=Calamares — Kerfis uppsetning -Comment[it_IT]=Calamares — Programma d'installazione del sistema -Comment[ja]=Calamares — システムインストーラー -Comment[ko]=깔라마레스 — 시스템 설치 관리자 -Comment[lt]=Calamares — Sistemos diegimo programa -Comment[mk]=Calamares - Системен Инсталер -Comment[ml]=കലാമാരേസ് - സിസ്റ്റം ഇൻസ്റ്റാളർ -Comment[nb]=Calamares-systeminstallatør -Comment[ne_NP]=Calamares - सिस्टम इन्स्टलर -Comment[nl]=Calamares — Installatieprogramma -Comment[pl]=Calamares — Instalator systemu -Comment[pt_BR]=Calamares — Instalador de Sistema -Comment[pt_PT]=Instalador de Sistema - Calamares -Comment[ro]=Calamares — Instalator de sistem -Comment[ru]=Calamares - Установщик системы -Comment[si]=Calamares - පද්ධති ස්ථාපකය -Comment[sk]=Calamares — Inštalátor systému -Comment[sq]=Calamares — Instalues Sistemi -Comment[sr]=Каламарес — инсталатер система -Comment[sv]=Calamares — Systeminstallerare -Comment[tg]=Calamares — Насбкунандаи низомӣ -Comment[tr_TR]=Calamares — Sistem Yükleyici -Comment[uk]=Calamares - Встановлювач системи -Comment[vi]=Calamares — Bộ cài đặt hệ thống -Comment[zh_CN]=Calamares — 系统安装程序 -Comment[zh_TW]=Calamares ── 系統安裝程式 -Exec=sh /usr/bin/calamares_polkit %f -GenericName[en_US]=System Installer -GenericName=System Installer -GenericName[ar]=مثبت النظام -GenericName[as]=চিছটেম ইনস্তলাৰ -GenericName[ast]=Instalador del sistema -GenericName[az]=Sistem Quraşdırıcısı -GenericName[az_AZ]=Sistem quraşdırcısı -GenericName[be]=Усталёўшчык сістэмы -GenericName[bg]=Системен инсталатор -GenericName[bn]=সিস্টেম ইনস্টলার -GenericName[ca]=Instal·lador de sistema -GenericName[cs_CZ]=Instalátor systému -GenericName[da]=Systeminstallationsprogram -GenericName[de]=Installation des Betriebssystems -GenericName[el]=Εγκατάσταση συστήματος -GenericName[en_GB]=System Installer -GenericName[eo]=Sistema Instalilo -GenericName[es]=Instalador del sistema -GenericName[es_MX]=Instalador del sistema -GenericName[et]=Süsteemipaigaldaja -GenericName[eu]=Sistema instalatzailea -GenericName[fa]=نصبکننده سامانه -GenericName[fi_FI]=Järjestelmän asennusohjelma -GenericName[fr]=Installateur système -GenericName[fur]=Program di instalazion dal sisteme -GenericName[gl]=Instalador de sistemas -GenericName[he]=אשף התקנה -GenericName[hi]=सिस्टम इंस्टॉलर -GenericName[hr]=Instalacija sustava -GenericName[hu]=Rendszertelepítő -GenericName[id]=Pemasang -GenericName[ie]=Installator del sistema -GenericName[is]=Kerfis uppsetning -GenericName[it_IT]=Programma d'installazione del sistema -GenericName[ja]=システムインストーラー -GenericName[ko]=시스템 설치 관리자 -GenericName[lt]=Sistemos diegimas į kompiuterį -GenericName[mk]=Системен Инсталер -GenericName[ml]=സിസ്റ്റം ഇൻസ്റ്റാളർ -GenericName[nb]=Systeminstallatør -GenericName[ne_NP]=सिस्टम इन्स्टलर -GenericName[nl]=Installatieprogramma -GenericName[pl]=Instalator systemu -GenericName[pt_BR]=Instalador de Sistema -GenericName[pt_PT]=Instalador de Sistema -GenericName[ro]=Instalator de sistem -GenericName[ru]=Установщик системы -GenericName[si]=පද්ධති ස්ථාපකය -GenericName[sk]=Inštalátor systému -GenericName[sq]=Instalues Sistemi -GenericName[sr]=Инсталатер система -GenericName[sv]=Systeminstallerare -GenericName[tg]=Насбкунандаи низомӣ -GenericName[tr_TR]=Sistem Yükleyici -GenericName[uk]=Встановлювач системи -GenericName[vi]=Bộ cài đặt hệ thống -GenericName[zh_CN]=系统安装程序 -GenericName[zh_TW]=系統安裝程式 -Icon=qvidcap -Icon[ar]=كالامارس -Icon[as]=কেলামাৰেচ -Icon[ast]=calamares -Icon[az]=calamares -Icon[az_AZ]=calamares -Icon[be]=calamares -Icon[bg]=calamares -Icon[bn]=ক্যালামারেস -Icon[ca]=calamares -Icon[cs_CZ]=calamares -Icon[da]=calamares -Icon[de]=calamares -Icon[el]=calamares -Icon[en_GB]=calamares -Icon[eo]=calamares -Icon[es]=calamares -Icon[es_MX]=calamares -Icon[et]=calamares -Icon[eu]=calamares -Icon[fa]=کالامارس -Icon[fi_FI]=calamares -Icon[fr]=calamares -Icon[fur]=calamares -Icon[gl]=calamares -Icon[he]=calamares -Icon[hi]=calamares -Icon[hr]=calamares -Icon[hu]=calamares -Icon[id]=calamares -Icon[ie]=calamares -Icon[is]=calamares -Icon[it_IT]=calamares -Icon[ja]=calamares -Icon[ko]=깔라마레스 -Icon[lt]=calamares -Icon[mk]=calamares -Icon[ml]=കലാമാരേസ് -Icon[nb]=calamares -Icon[ne_NP]=Calamares -Icon[nl]=calamares -Icon[pl]=calamares -Icon[pt_BR]=calamares -Icon[pt_PT]=calamares -Icon[ro]=calamares -Icon[ru]=calamares -Icon[si]=කැලමරේස් -Icon[sk]=calamares -Icon[sq]=calamares -Icon[sr]=calamares -Icon[sv]=calamares -Icon[tg]=calamares -Icon[tr_TR]=calamares -Icon[uk]=calamares -Icon[vi]=calamares -Icon[zh_CN]=calamares -Icon[zh_TW]=calamares -Keywords=calamares;system;installer; -MimeType= -Name[en_US]=Install LinHES -Name=Install LinHES -Name[ar]=تثبيت النظام -Name[as]=চিছটেম ইনস্তল কৰক -Name[ast]=Instalar el sistema -Name[az]=Sistemi Quraşdırmaq -Name[az_AZ]=Sistemi quraşdırmaq -Name[be]=Усталяваць сістэму -Name[bg]=Инсталирай системата -Name[bn]=সিস্টেম ইনস্টল করুন -Name[ca]=Instal·la el sistema -Name[cs_CZ]=Nainstalovat systém -Name[da]=Installér system -Name[de]=System installieren -Name[el]=Εγκατάσταση συστήματος -Name[en_GB]=Install System -Name[eo]=Instali Sistemo -Name[es]=Instalar el sistema -Name[es_MX]=Instalar el Sistema -Name[es_PR]=Instalar el sistema -Name[et]=Paigalda süsteem -Name[eu]=Sistema instalatu -Name[fa]=نصب سامانه -Name[fi_FI]=Asenna järjestelmä -Name[fr]=Installer le système -Name[fur]=Instale il sisteme -Name[gl]=Instalación do Sistema -Name[he]=התקנת מערכת -Name[hi]=सिस्टम इंस्टॉल करें -Name[hr]=Instaliraj sustav -Name[hu]=Rendszer telepítése -Name[id]=Instal Sistem -Name[ie]=Installar li sistema -Name[is]=Setja upp kerfið -Name[it_IT]=Installa il sistema -Name[ja]=システムをインストール -Name[ko]=시스템 설치 -Name[lt]=Įdiegti Sistemą -Name[mk]=Инсталирај го системот -Name[ml]=സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്യുക -Name[nb]=Installer System -Name[ne_NP]=सिस्टम इन्स्टल गर्नुहोस् -Name[nl]=Installeer systeem -Name[pl]=Zainstaluj system -Name[pt_BR]=Sistema de Instalação -Name[pt_PT]=Instalar Sistema -Name[ro]=Instalează sistemul -Name[ru]=Установить систему -Name[si]=පද්ධතිය ස්ථාපනය කරන්න -Name[sk]=Inštalovať systém -Name[sl]=Namesti sistem -Name[sq]=Instalo Sistemin -Name[sr@latin]=Instaliraj sistem -Name[sr]=Инсталирај систем -Name[sv]=Installera system -Name[tg]=Насбкунии низом -Name[th]=ติดตั้งระบบ -Name[tr_TR]=Sistemi Yükle -Name[uk]=Встановити Систему -Name[vi]=Cài đặt hệ thống -Name[zh_CN]=安装系统 -Name[zh_TW]=安裝系統 -Path= -StartupNotify=true -Terminal=false -TerminalOptions= -TryExec=calamares -Type=Application -Version=1.0 -X-AppStream-Ignore=true -X-DBUS-ServiceName= -X-DBUS-StartupType= -X-KDE-SubstituteUID=false -X-KDE-Username= +/usr/share/applications/calamares.desktop
\ No newline at end of file diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/powermanagementprofilesrc b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/powermanagementprofilesrc new file mode 100644 index 0000000..658d9ec --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/.config/powermanagementprofilesrc @@ -0,0 +1,5 @@ +[AC] +icon=battery-charging + +[AC][DPMSControl] +lockBeforeTurnOff=0 diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/Desktop/calamares.desktop b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/Desktop/calamares.desktop new file mode 120000 index 0000000..2a5b55f --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/skel/Desktop/calamares.desktop @@ -0,0 +1 @@ +/usr/share/applications/calamares.desktop
\ No newline at end of file diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sudoers.d/g_wheel b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sudoers.d/g_wheel new file mode 100644 index 0000000..bbad988 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/sudoers.d/g_wheel @@ -0,0 +1 @@ +%wheel ALL=(ALL:ALL) NOPASSWD: ALL diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/systemd/system/locale-gen.service b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/systemd/system/locale-gen.service new file mode 100644 index 0000000..c5920c9 --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/etc/systemd/system/locale-gen.service @@ -0,0 +1,10 @@ +[Unit] +Description=Runs local-gen + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/locale-gen + +[Install] +WantedBy=multi-user.target diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/root/customize_airootfs.sh b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/root/customize_airootfs.sh deleted file mode 100755 index 521f3d8..0000000 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/root/customize_airootfs.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -set -e -u - -mkdir /home/km/Desktop -cp /usr/share/LinHES/calamares.desktop /home/km/Desktop -chmod +x /home/km/Desktop/calamares.desktop -chown km:users /home/km/Desktop diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/bin/calamares_polkit b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/bin/calamares_polkit deleted file mode 100755 index 9bce0f8..0000000 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/bin/calamares_polkit +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash -if [ $(which pkexec) ]; then - pkexec --disable-internal-agent "/usr/bin/calamares" "$@" -else - /usr/bin/calamares "$@" -fi diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/share/LinHES/calamares.desktop b/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/share/LinHES/calamares.desktop deleted file mode 100755 index 5d3405c..0000000 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/airootfs/usr/share/LinHES/calamares.desktop +++ /dev/null @@ -1,252 +0,0 @@ -[Desktop Entry] -Categories=Qt;System; -Comment[en_US]=Calamares — System Installer -Comment=Calamares — System Installer -Comment[ar]=كالامارس - مثبت النظام -Comment[as]=কেলামাৰেচ — চিছটেম ইনস্তলাৰ -Comment[ast]=Calamares — Instalador del sistema -Comment[az]=Calamares Sistem Quraşdırıcısı -Comment[az_AZ]=Calamares — Sistem Quraşdırıcısı -Comment[be]=Calamares — усталёўшчык сістэмы -Comment[bg]=„Calamares“ – Системен инсталатор -Comment[bn]=ক্যালামারেস - সিস্টেম ইনস্টলার -Comment[ca]=Calamares — Instal·lador de sistema -Comment[cs_CZ]=Calamares – instalátor operačních systémů -Comment[da]=Calamares — Systeminstallationsprogram -Comment[de]=Calamares - Installation des Betriebssystems -Comment[el]=Calamares — Εγκατάσταση συστήματος -Comment[en_GB]=Calamares — System Installer -Comment[eo]=Calamares — Sistema Instalilo -Comment[es]=Calamares — Instalador del sistema -Comment[es_MX]=Calamares - Instalador del sistema -Comment[et]=Calamares — süsteemipaigaldaja -Comment[eu]=Calamares - sistema instalatzailea -Comment[fa]=کالامارس — نصبکننده سامانه -Comment[fi_FI]=Calamares — Järjestelmän asentaja -Comment[fr]=Calamares - Installateur système -Comment[fur]=Calamares — Program di instalazion dal sisteme -Comment[gl]=Calamares — Instalador de sistemas -Comment[he]=Calamares - אשף התקנה -Comment[hi]=Calamares — सिस्टम इंस्टॉलर -Comment[hr]=Calamares — Instalacija sustava -Comment[hu]=Calamares – Rendszertelepítő -Comment[id]=Calamares — Pemasang Sistem -Comment[ie]=Calamares — Installator del sistema -Comment[is]=Calamares — Kerfis uppsetning -Comment[it_IT]=Calamares — Programma d'installazione del sistema -Comment[ja]=Calamares — システムインストーラー -Comment[ko]=깔라마레스 — 시스템 설치 관리자 -Comment[lt]=Calamares — Sistemos diegimo programa -Comment[mk]=Calamares - Системен Инсталер -Comment[ml]=കലാമാരേസ് - സിസ്റ്റം ഇൻസ്റ്റാളർ -Comment[nb]=Calamares-systeminstallatør -Comment[ne_NP]=Calamares - सिस्टम इन्स्टलर -Comment[nl]=Calamares — Installatieprogramma -Comment[pl]=Calamares — Instalator systemu -Comment[pt_BR]=Calamares — Instalador de Sistema -Comment[pt_PT]=Instalador de Sistema - Calamares -Comment[ro]=Calamares — Instalator de sistem -Comment[ru]=Calamares - Установщик системы -Comment[si]=Calamares - පද්ධති ස්ථාපකය -Comment[sk]=Calamares — Inštalátor systému -Comment[sq]=Calamares — Instalues Sistemi -Comment[sr]=Каламарес — инсталатер система -Comment[sv]=Calamares — Systeminstallerare -Comment[tg]=Calamares — Насбкунандаи низомӣ -Comment[tr_TR]=Calamares — Sistem Yükleyici -Comment[uk]=Calamares - Встановлювач системи -Comment[vi]=Calamares — Bộ cài đặt hệ thống -Comment[zh_CN]=Calamares — 系统安装程序 -Comment[zh_TW]=Calamares ── 系統安裝程式 -Exec=sh /usr/bin/calamares_polkit %f -GenericName[en_US]=System Installer -GenericName=System Installer -GenericName[ar]=مثبت النظام -GenericName[as]=চিছটেম ইনস্তলাৰ -GenericName[ast]=Instalador del sistema -GenericName[az]=Sistem Quraşdırıcısı -GenericName[az_AZ]=Sistem quraşdırcısı -GenericName[be]=Усталёўшчык сістэмы -GenericName[bg]=Системен инсталатор -GenericName[bn]=সিস্টেম ইনস্টলার -GenericName[ca]=Instal·lador de sistema -GenericName[cs_CZ]=Instalátor systému -GenericName[da]=Systeminstallationsprogram -GenericName[de]=Installation des Betriebssystems -GenericName[el]=Εγκατάσταση συστήματος -GenericName[en_GB]=System Installer -GenericName[eo]=Sistema Instalilo -GenericName[es]=Instalador del sistema -GenericName[es_MX]=Instalador del sistema -GenericName[et]=Süsteemipaigaldaja -GenericName[eu]=Sistema instalatzailea -GenericName[fa]=نصبکننده سامانه -GenericName[fi_FI]=Järjestelmän asennusohjelma -GenericName[fr]=Installateur système -GenericName[fur]=Program di instalazion dal sisteme -GenericName[gl]=Instalador de sistemas -GenericName[he]=אשף התקנה -GenericName[hi]=सिस्टम इंस्टॉलर -GenericName[hr]=Instalacija sustava -GenericName[hu]=Rendszertelepítő -GenericName[id]=Pemasang -GenericName[ie]=Installator del sistema -GenericName[is]=Kerfis uppsetning -GenericName[it_IT]=Programma d'installazione del sistema -GenericName[ja]=システムインストーラー -GenericName[ko]=시스템 설치 관리자 -GenericName[lt]=Sistemos diegimas į kompiuterį -GenericName[mk]=Системен Инсталер -GenericName[ml]=സിസ്റ്റം ഇൻസ്റ്റാളർ -GenericName[nb]=Systeminstallatør -GenericName[ne_NP]=सिस्टम इन्स्टलर -GenericName[nl]=Installatieprogramma -GenericName[pl]=Instalator systemu -GenericName[pt_BR]=Instalador de Sistema -GenericName[pt_PT]=Instalador de Sistema -GenericName[ro]=Instalator de sistem -GenericName[ru]=Установщик системы -GenericName[si]=පද්ධති ස්ථාපකය -GenericName[sk]=Inštalátor systému -GenericName[sq]=Instalues Sistemi -GenericName[sr]=Инсталатер система -GenericName[sv]=Systeminstallerare -GenericName[tg]=Насбкунандаи низомӣ -GenericName[tr_TR]=Sistem Yükleyici -GenericName[uk]=Встановлювач системи -GenericName[vi]=Bộ cài đặt hệ thống -GenericName[zh_CN]=系统安装程序 -GenericName[zh_TW]=系統安裝程式 -Icon=qvidcap -Icon[ar]=كالامارس -Icon[as]=কেলামাৰেচ -Icon[ast]=calamares -Icon[az]=calamares -Icon[az_AZ]=calamares -Icon[be]=calamares -Icon[bg]=calamares -Icon[bn]=ক্যালামারেস -Icon[ca]=calamares -Icon[cs_CZ]=calamares -Icon[da]=calamares -Icon[de]=calamares -Icon[el]=calamares -Icon[en_GB]=calamares -Icon[eo]=calamares -Icon[es]=calamares -Icon[es_MX]=calamares -Icon[et]=calamares -Icon[eu]=calamares -Icon[fa]=کالامارس -Icon[fi_FI]=calamares -Icon[fr]=calamares -Icon[fur]=calamares -Icon[gl]=calamares -Icon[he]=calamares -Icon[hi]=calamares -Icon[hr]=calamares -Icon[hu]=calamares -Icon[id]=calamares -Icon[ie]=calamares -Icon[is]=calamares -Icon[it_IT]=calamares -Icon[ja]=calamares -Icon[ko]=깔라마레스 -Icon[lt]=calamares -Icon[mk]=calamares -Icon[ml]=കലാമാരേസ് -Icon[nb]=calamares -Icon[ne_NP]=Calamares -Icon[nl]=calamares -Icon[pl]=calamares -Icon[pt_BR]=calamares -Icon[pt_PT]=calamares -Icon[ro]=calamares -Icon[ru]=calamares -Icon[si]=කැලමරේස් -Icon[sk]=calamares -Icon[sq]=calamares -Icon[sr]=calamares -Icon[sv]=calamares -Icon[tg]=calamares -Icon[tr_TR]=calamares -Icon[uk]=calamares -Icon[vi]=calamares -Icon[zh_CN]=calamares -Icon[zh_TW]=calamares -Keywords=calamares;system;installer; -MimeType= -Name[en_US]=Install LinHES -Name=Install LinHES -Name[ar]=تثبيت النظام -Name[as]=চিছটেম ইনস্তল কৰক -Name[ast]=Instalar el sistema -Name[az]=Sistemi Quraşdırmaq -Name[az_AZ]=Sistemi quraşdırmaq -Name[be]=Усталяваць сістэму -Name[bg]=Инсталирай системата -Name[bn]=সিস্টেম ইনস্টল করুন -Name[ca]=Instal·la el sistema -Name[cs_CZ]=Nainstalovat systém -Name[da]=Installér system -Name[de]=System installieren -Name[el]=Εγκατάσταση συστήματος -Name[en_GB]=Install System -Name[eo]=Instali Sistemo -Name[es]=Instalar el sistema -Name[es_MX]=Instalar el Sistema -Name[es_PR]=Instalar el sistema -Name[et]=Paigalda süsteem -Name[eu]=Sistema instalatu -Name[fa]=نصب سامانه -Name[fi_FI]=Asenna järjestelmä -Name[fr]=Installer le système -Name[fur]=Instale il sisteme -Name[gl]=Instalación do Sistema -Name[he]=התקנת מערכת -Name[hi]=सिस्टम इंस्टॉल करें -Name[hr]=Instaliraj sustav -Name[hu]=Rendszer telepítése -Name[id]=Instal Sistem -Name[ie]=Installar li sistema -Name[is]=Setja upp kerfið -Name[it_IT]=Installa il sistema -Name[ja]=システムをインストール -Name[ko]=시스템 설치 -Name[lt]=Įdiegti Sistemą -Name[mk]=Инсталирај го системот -Name[ml]=സിസ്റ്റം ഇൻസ്റ്റാൾ ചെയ്യുക -Name[nb]=Installer System -Name[ne_NP]=सिस्टम इन्स्टल गर्नुहोस् -Name[nl]=Installeer systeem -Name[pl]=Zainstaluj system -Name[pt_BR]=Sistema de Instalação -Name[pt_PT]=Instalar Sistema -Name[ro]=Instalează sistemul -Name[ru]=Установить систему -Name[si]=පද්ධතිය ස්ථාපනය කරන්න -Name[sk]=Inštalovať systém -Name[sl]=Namesti sistem -Name[sq]=Instalo Sistemin -Name[sr@latin]=Instaliraj sistem -Name[sr]=Инсталирај систем -Name[sv]=Installera system -Name[tg]=Насбкунии низом -Name[th]=ติดตั้งระบบ -Name[tr_TR]=Sistemi Yükle -Name[uk]=Встановити Систему -Name[vi]=Cài đặt hệ thống -Name[zh_CN]=安装系统 -Name[zh_TW]=安裝系統 -Path= -StartupNotify=true -Terminal=false -TerminalOptions= -TryExec=calamares -Type=Application -Version=1.0 -X-AppStream-Ignore=true -X-DBUS-ServiceName= -X-DBUS-StartupType= -X-KDE-SubstituteUID=false -X-KDE-Username= diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/01-archiso-x86_64-linux.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/01-archiso-x86_64-linux.conf index 6d50cc8..433e0b2 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/01-archiso-x86_64-linux.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/01-archiso-x86_64-linux.conf @@ -1,7 +1,5 @@ title LinHES (x86_64, UEFI) sort-key 01 linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -initrd /%INSTALL_DIR%/boot/intel-ucode.img -initrd /%INSTALL_DIR%/boot/amd-ucode.img initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% cow_spacesize=4G copytoram=no diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf index a021e66..53a3a44 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf @@ -1,7 +1,5 @@ title LinHES (x86_64, UEFI) with speech sort-key 02 linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -initrd /%INSTALL_DIR%/boot/intel-ucode.img -initrd /%INSTALL_DIR%/boot/amd-ucode.img initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img options archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on cow_spacesize=4G copytoram=no diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf new file mode 100644 index 0000000..75c257a --- /dev/null +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf @@ -0,0 +1,3 @@ +title Memory Tester (memtest86+) +sort-key 03 +efi /boot/memtest86+/memtest.efi diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/grub/grub.cfg b/linhes/linhes-dev/LinHES9_iso/cust_skel/grub/grub.cfg index 0a0b11c..7e3719a 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/grub/grub.cfg +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/grub/grub.cfg @@ -29,14 +29,14 @@ menuentry "LinHES install medium (x86_64, UEFI)" { set gfxpayload=keep search --no-floppy --set=root --label %ARCHISO_LABEL% linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% - initrd /%INSTALL_DIR%/boot/intel-ucode.img /%INSTALL_DIR%/boot/amd-ucode.img /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img + initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img } menuentry "LinHES install medium with speakup screen reader (x86_64, UEFI)" --hotkey=s { set gfxpayload=keep search --no-floppy --set=root --label %ARCHISO_LABEL% linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on - initrd /%INSTALL_DIR%/boot/intel-ucode.img /%INSTALL_DIR%/boot/amd-ucode.img /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img + initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img } menuentry "UEFI Shell" { diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/packages.x86_64 b/linhes/linhes-dev/LinHES9_iso/cust_skel/packages.x86_64 index a2a9b4a..b29f66d 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/packages.x86_64 +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/packages.x86_64 @@ -62,6 +62,7 @@ man-pages #mc mdadm memtest86+ +memtest86+-efi mkinitcpio mkinitcpio-archiso mkinitcpio-nfs-utils @@ -133,7 +134,9 @@ network-manager-applet os-prober pipewire pipewire-alsa +pipewire-audio pipewire-pulse +pipewire-jack wireplumber xdg-user-dirs xf86-video-fbdev diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/pacman.conf b/linhes/linhes-dev/LinHES9_iso/cust_skel/pacman.conf index 89af0f2..03c2137 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/pacman.conf +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/pacman.conf @@ -32,10 +32,11 @@ Architecture = auto #UseSyslog #Color #NoProgressBar -# We cannot check disk space from within a chroot environment -#CheckSpace +CheckSpace #VerbosePkgLists ParallelDownloads = 5 +DownloadUser = alpm +#DisableSandbox # By default, pacman accepts packages signed by keys that its local keyring # trusts (see pacman-key and its man page), as well as unsigned packages. @@ -70,24 +71,24 @@ LocalFileSigLevel = Optional # repo name header and Include lines. You can add preferred servers immediately # after the header, and they will be used before the default mirrors. -#[linhes] [linhes-testing] SigLevel = Optional TrustAll Server = http://linhes.org/repo/$arch/$repo/ -#[testing] +#[linhes] +#SigLevel = Optional TrustAll +#Server = http://linhes.org/repo/$arch/$repo/ + +#[core-testing] #Include = /etc/pacman.d/mirrorlist [core] Include = /etc/pacman.d/mirrorlist -[extra] -Include = /etc/pacman.d/mirrorlist - -#[community-testing] +#[extra-testing] #Include = /etc/pacman.d/mirrorlist -[community] +[extra] Include = /etc/pacman.d/mirrorlist # If you want to run 32 bit applications on your x86_64 system, diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/profiledef.sh b/linhes/linhes-dev/LinHES9_iso/cust_skel/profiledef.sh index 4d0ec24..bb61d4b 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/profiledef.sh +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/profiledef.sh @@ -2,7 +2,7 @@ # shellcheck disable=SC2034 iso_name="LinHES" -iso_label="LinHES_$(date +%Y%m)" +iso_label="LinHES_$(date +%Y%m%d)" iso_publisher="LinHES <https://linhes.org>" iso_application="LinHES Live/Installation CD" iso_version="R9_$(date +%Y.%m.%d)" @@ -14,9 +14,12 @@ bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito' arch="x86_64" pacman_conf="pacman.conf" airootfs_image_type="squashfs" -airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M') +airootfs_image_tool_options=('-comp' 'zstd' '-b' '1M') +bootstrap_tarball_compression=(zstd) file_permissions=( ["/etc/shadow"]="0:0:400" + ["/etc/gshadow"]="0:0:0400" + ["/etc/sudoers"]="0:0:0440" ["/root"]="0:0:750" ["/root/.automated_script.sh"]="0:0:755" ["/usr/local/bin/choose-mirror"]="0:0:755" diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_pxe-linux.cfg b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_pxe-linux.cfg index 61d116c..1c00156 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_pxe-linux.cfg +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_pxe-linux.cfg @@ -5,7 +5,7 @@ It allows you to install Ezarcher Linux or perform system maintenance. ENDTEXT MENU LABEL LinHES (x86_64, NBD) LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -INITRD /%INSTALL_DIR%/boot/intel-ucode.img,/%INSTALL_DIR%/boot/amd-ucode.img,/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% archiso_nbd_srv=${pxeserver} checksum verify cow_spacesize=4G copytoram=no SYSAPPEND 3 @@ -16,7 +16,7 @@ It allows you to install LinHES or perform system maintenance. ENDTEXT MENU LABEL LinHES (x86_64, NFS) LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -INITRD /%INSTALL_DIR%/boot/intel-ucode.img,/%INSTALL_DIR%/boot/amd-ucode.img,/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt checksum verify cow_spacesize=4G SYSAPPEND 3 @@ -27,6 +27,6 @@ It allows you to install LinHES or perform system maintenance. ENDTEXT MENU LABEL LinHES (x86_64, HTTP) LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -INITRD /%INSTALL_DIR%/boot/intel-ucode.img,/%INSTALL_DIR%/boot/amd-ucode.img,/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ checksum verify cow_spacesize=4G copytoram=no SYSAPPEND 3 diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_sys-linux.cfg b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_sys-linux.cfg index e0887f2..8846c22 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_sys-linux.cfg +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_sys-linux.cfg @@ -5,7 +5,7 @@ It allows you to install LinHES or perform system maintenance. ENDTEXT MENU LABEL LinHES (x86_64, BIOS) LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -INITRD /%INSTALL_DIR%/boot/intel-ucode.img,/%INSTALL_DIR%/boot/amd-ucode.img,/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% cow_spacesize=4G copytoram=no # Accessibility boot option @@ -16,5 +16,5 @@ It allows you to install LinHES or perform system maintenance with speech feedba ENDTEXT MENU LABEL LinHES (x86_64, BIOS) with ^speech LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux -INITRD /%INSTALL_DIR%/boot/intel-ucode.img,/%INSTALL_DIR%/boot/amd-ucode.img,/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img APPEND archisobasedir=%INSTALL_DIR% archisolabel=%ARCHISO_LABEL% accessibility=on cow_spacesize=4G copytoram=no diff --git a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_tail.cfg b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_tail.cfg index e5339a2..c22c2f0 100644 --- a/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_tail.cfg +++ b/linhes/linhes-dev/LinHES9_iso/cust_skel/syslinux/archiso_tail.cfg @@ -10,7 +10,7 @@ APPEND hd0 0 # http://www.memtest.org/ LABEL memtest MENU LABEL Run Memtest86+ (RAM test) -LINUX /%INSTALL_DIR%/boot/memtest +LINUX /boot/memtest86+/memtest # http://hdt-project.org/ LABEL hdt diff --git a/linhes/linhes-dev/PKGBUILD b/linhes/linhes-dev/PKGBUILD index 3466fdf..5033678 100644 --- a/linhes/linhes-dev/PKGBUILD +++ b/linhes/linhes-dev/PKGBUILD @@ -1,6 +1,6 @@ pkgname=linhes-dev pkgver=9.0.0 -pkgrel=16 +pkgrel=17 pkgdesc="Scripts to develop LinHES" arch=('x86_64') license=('GPL2') @@ -11,7 +11,7 @@ source=('lh_sync.sh' 'chk_aur_pkg.py' 'mp.py' 'lh_setup_dev.sh' 'lh_update_db_re sha256sums=('3a64b4125b56c6f95cc9dc85ce58ebd1c0612b22fb27c3e76d4d9a5570f2d61e' 'a097438b19725fb1b02c7b2587e06450ab4c757cf60b25b5f0256ff0c38146ee' '025776558632dc60da5a97cc66a4fb52b31882eff7aeaf5476a8e40107e39a87' - '0b9d0bb16700a06f201bfc701ba94ec65045bac50c77a389dbbdf7543def5896' + '00dd52ee2ea0663b874b00488742ecb0fb1830c270cb2134d00ef9a32a71d7a1' '86c9ebe77228f7e3cc07cb05f480e5584e0e3cad1b889b63a50821f7323bf449') package() { diff --git a/linhes/linhes-dev/lh_setup_dev.sh b/linhes/linhes-dev/lh_setup_dev.sh index f0cc94c..a6aedc2 100755 --- a/linhes/linhes-dev/lh_setup_dev.sh +++ b/linhes/linhes-dev/lh_setup_dev.sh @@ -13,6 +13,7 @@ mkdir -p /data/dev/pkg_repo/src_packages/linhes-testing echo -e "\n\nChanging setting in /etc/makepkg.conf..." #sudo sed -i 's/#PKGDEST=.*/PKGDEST=\/data\/dev\/pkg_repo\/packages/' /etc/makepkg.conf +sudo sed -i 's/OPTIONS=.*/OPTIONS=(strip docs !libtool !staticlibs emptydirs zipman purge !debug lto)/' /etc/makepkg.conf sudo sed -i 's/#SRCDEST=.*/SRCDEST=\/data\/dev\/pkg_repo\/sources/' /etc/makepkg.conf sudo sed -i 's/#SRCPKGDEST=.*/SRCPKGDEST=\/data\/dev\/pkg_repo\/src_packages/' /etc/makepkg.conf sudo sed -i 's/#PACKAGER=.*/PACKAGER=\"LinHESDev <LinHESDev\@linhes.org>\"/' /etc/makepkg.conf @@ -73,5 +74,5 @@ fi # linhes.org. This involves creating a public ssh key and supplying it to # one of the linhes.org admins. The key is created using ssh-keygen. The # resulting public key will be stored in .ssh/id_rsa.pub. -echo -e "\n\nCheckout the repo manually. You will need to be given a dev account on linhes.org. This involves creating a public ssh key and supplying it toone of the linhes.org admins. The key is created using ssh-keygen. The resulting public key will be stored in .ssh/id_rsa.pub." -echo -e "EXAMPLE: \ncd /data/dev\ngit clone git@linhes.org:linhes_pkgbuild\ngit checkout testing\n\n" +echo -e "\n\nCheckout the repo manually. You will need to be given a dev account on linhes.org. This involves creating a public ssh key and supplying it to one of the linhes.org admins. The key is created using ssh-keygen. The resulting public key will be stored in .ssh/id_rsa.pub." +echo -e "EXAMPLE: \ncd /data/dev\ngit clone git@linhes.org:linhes_pkgbuild\ncd ./linhes_pkgbuild\ngit checkout testing\n\n" diff --git a/linhes/linhes-system/69-hdparm.rules b/linhes/linhes-system/69-hdparm.rules new file mode 100644 index 0000000..414698e --- /dev/null +++ b/linhes/linhes-system/69-hdparm.rules @@ -0,0 +1 @@ +ACTION=="add|change", SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="sd*", ATTRS{queue/rotational}=="1", RUN+="/usr/bin/hdparm -B 254 -S 0 $env{DEVNAME}" diff --git a/linhes/linhes-system/PKGBUILD b/linhes/linhes-system/PKGBUILD index a425654..91abbd9 100755 --- a/linhes/linhes-system/PKGBUILD +++ b/linhes/linhes-system/PKGBUILD @@ -1,14 +1,15 @@ pkgname=linhes-system pkgver=9.0.0 -pkgrel=80 +pkgrel=100 arch=('x86_64') #install=$pkgname.install pkgdesc="Everything that makes LinHES a system" license=('GPL2') depends=('cronie' 'dbus-python' 'dvb-firmware' 'expect' 'flatpak' 'firefox' 'glances' 'inetutils' - 'kdialog' 'libnotify' - 'logrotate' 'linhes-templates' 'linhes-theme' 'mlocate' 'ncdu' 'python-dateutil' 'python-pytz' - 'python-tzlocal' 'openssh' 'pacman-contrib' 'rsyslog' 'ttf-overlock' 'wget' 'x11vnc' + 'kdialog' 'kwalletmanager' 'libnotify' + 'logrotate' 'linhes-templates' 'linhes-theme' 'mlocate' 'moreutils' 'ncdu' 'pacman-contrib' + 'plasma-x11-session' 'python-dateutil' 'python-pytz' 'python-tzlocal' 'openssh' + 'rsyslog' 'ttf-overlock' 'wget' 'x11vnc' 'intel-media-driver' 'libva-intel-driver' 'pigz') binfiles="add_storage.py balance_storage_groups.py empty_storage_groups.py remove_storage.py checkXFSfrag.sh enableIRWake.sh idle.py lh_system_start.sh lh_notify-send @@ -20,25 +21,25 @@ binfiles="add_storage.py balance_storage_groups.py empty_storage_groups.py remov create_media_dirs.sh be_check.py myth2mkv myth2mp3 myth2videos udev_link.sh" source=($binfiles - 'lh_mtc.cron' 'paccache.cron' 'flatpak_update.cron' 'xfs_defrag.cron' + 'lh_mtc.cron' 'paccache.cron' 'flatpak_update.cron' 'xfs_defrag.cron' 'pacman_orphans.cron' 'readme_is_xml' 'add_storage.readme' 'LinHES-release' 'lh_log_care.cron' '79-cronie.hook' 'fstrim.hook' 'openssh.hook' 'plex_lib.conf' 'rsyslog.hook' - '10-monitor.conf' '81-wol.rules' 'x11vnc.override.conf' 'lh_lighttpd.conf' 'lh_php.ini' + '10-monitor.conf' '81-wol.rules' '69-hdparm.rules' 'x11vnc.override.conf' 'lh_lighttpd.conf' 'lh_php.ini' 'system-sudo.rules' 'linhes-profile.sh' 'lh_sqlserver.cnf' 'lh_restart_needed.hook' 'lh_system_start.sh.desktop' 'rc6_mce.toml' 'recordings.cron' 'rsyslog.mythtv.conf') -sha256sums=('e6eaa2fb4819fa60cb05b4d2e7328d2914af3a73028a735ec4d56e7ece33ecc0' - '1115809a2d80c1ead7cfc5df05e1d6427255912a8303594574b3be23d3d3e4f1' - '97fe9e851c782fa9f85c5b69b110ccff2817dd4fa2a6d9ff6ee225dc558677e4' +sha256sums=('1fb11c7f472df9e3066866301962c2678b80c2fbd988dc34db022d51e1101a42' + '8ae6de3d0ff8e777aeea56f74f38676080142148ac3a32f828462d85c39e7cf7' + '79a3fe8622dbc5351316c0e36c26f8443334fcf8eea324cf0a0efe0e4c2c1a93' 'ff261f41efec8a9963f9f59100cbe75f015028a2ed3a863ce0cb473f2ebb7b76' '8b54c31b8efde3917f603c5307bebb0a2a00239ad9a983c2f5d8120003256449' 'ae34515e144830f424d3bd3f6b1b446892d62beed20bca6f0fb19b0bbb779f27' - '9e52a21e9d0f3f993b819587256a1cd57dca04451d5f2d0fd76667b1d3f860f1' - '3db3620b3430d1e8031596efa9eb50dea7f4c1b837c37929c3743c1eb65ac666' - '6d4fb0ed1a5ed961b3a3884dce093118e50c2981a9cd5837d20abc5a6d4fd8aa' + 'a79edfeb88b90a8f5538a159b39ba235caba8c6d6b2a39a20faa3ae0301b770b' + '050d7d44b1636a298ae020807e64637b40d39b4c52eb2f9661fe30090e66cee3' + '1c36e4fdf41c1063e0a127ce4a90fbdef19879c381a87f622d7399ca931560cc' '87875d9e5f5ce18208f419698ce69b6bcbcd08955a57a4a13940e715af58b787' - '93d664f4a46fda05d0f754d19df40cbda120e325b80c07092345b14763993833' + '192bfff1b8d46e0ebb969618847d9993aba3b1b578053c8d701dad9f9e758f86' 'a523388ffdc6f30f2dd2ef4803b21bded8a35bfded499dc66b786adec71840a3' - '6ea7f807a29631e33629da14e7ca6481310f0416c5d6f8fb415a76fa90fb9b76' + 'eec03b722449a55e589eb79aade87e9b2a964e82b8fe23723016b640a079de2a' '91bdec992bb2c933e15625c181f2195c402060b879168ebf35944cb064c904b9' '5cacfdd02833e5a3130d765573e772e6bd5030336ba86239c5e4db5ffa36fc69' 'd51253c207d3315997d7122cb774c6d0fc38975c33e66bf416f0b1b95cf86e5b' @@ -47,7 +48,7 @@ sha256sums=('e6eaa2fb4819fa60cb05b4d2e7328d2914af3a73028a735ec4d56e7ece33ecc0' 'cd3306991c8b63f5402c0e52405cc1a6581cb3c42af74b7c2f879c8192f95610' 'e371c6a289c68fe200d7da856c20a8c579efa23178f4d62235f7359d7f6e49a1' 'ee9a4df83e463e0c8a2e862680a83cff07a36cf3606faf60f57bc11190ffb1c9' - 'be52026eee470d70dcbf3ab364ef8ec92155b7990f589526928d46873cc72cdf' + 'f051f5111238f6f391108e68071ab02f200cfc6c4d2e34ae98f7a29057dbdf75' 'd2d69b2bf6315bd37ff5f5b2f0cde8ab2fb89bae18f8796dc5208ffc1a9d743e' 'a745356952470a5d718bef1961309ea30e4fa6a2860961cd52e09d6ec11e708e' '1819085bd2c9106482c5f243b95fddf3dae69212330ab76cb493add5c26a45a4' @@ -60,10 +61,11 @@ sha256sums=('e6eaa2fb4819fa60cb05b4d2e7328d2914af3a73028a735ec4d56e7ece33ecc0' 'a961cfdc6f02b12fb445777dd2c144fed96306ca2f430cc8853ae307c759c1ad' 'd8574104b75c6d41284488612ec5583c50a8dab438492fa42c47231add4cfc54' '6bdbf593d3e1348d1a8f7c4c17cb2e893f7e18ae355daf978173e669cfe3be80' - 'b3f02ec3f8cedc98c74b3169049b7b6aa78bd79d558a8bc98d00e064b983965c' + 'bc6b23e799f22fa16cfc37a91a5f06503beb80db3eeb420c766f7b3d41ba8356' '186203d3c0520bb3d611da99d33a7713e9c1563814285f1f101097234f214b2f' 'd8d36a501928d0cc505957d392291fad317b1e895ff99847d90643cf5f622a89' 'cdfc0c836b8194f631f4a9e022c232ff75a13ff1a161a1a011858578bea5f930' + '14c9e1e84a3f9ca182f3d848bd011c57d5332f9106eafcad74fc8cf8f97ef3d3' '5f502b1bc8815d69c802320790745e4526d5817fd8ecc7b00cf8b16078f8d440' '12e424432bdf2d50afe3e632c018fef847e860a35a53525eccbe656b9c4118aa' 'ee745056d018f860572f8363ed5e730ba501394c23cdd6f316719d7141c10050' @@ -75,12 +77,13 @@ sha256sums=('e6eaa2fb4819fa60cb05b4d2e7328d2914af3a73028a735ec4d56e7ece33ecc0' '6c42b2920c6a37bf3dd05755b9e3fdd80137708cc55a7d1bef2234c17dff0349' '09b9c1b2ee6a5bbe48c5f3755ad64628487b60a4eb6734efb292cefdb74fb657' 'efc2a04b67ea76661157e154228d4b58ae2e1b652f8ce41bc001a5a863d13573' + '7571e230ab4cf2a1285fdb9762d87d350ea350ce820e5806143b402aa1ea37e0' '67d0cb111d47609de4c60b84dc617fc817fdf092763fbd0cef270b5ee650d702' '023cba18580819018413608ec055d5ff8166b69525c32aa728ad1ecd7cf00aca' 'dae799f09a076e0f573ea516bc357f56f2fd3aa8e35ec0cf54b6b62282960ee0' 'aa1d831f25317a9cb8d7e9a7d7b6d51c8d03bd5b69f3bec27bea7644ca38fe9a' - 'cf884bad5caab9d5901b88b0ef41e3a39ea0b7a4614b8d14707d79941c899cbf' - '3ed91fb5a7894f82fb4895e06d2e3f1df3ac4f82e46c970d4a85aaa4edc24cf1' + '2553c3a877b6b18eed8269d5d78bd5676cd52fa5ead5b99a02f42bd134f12040' + '01416dadeb34ca8b18bb7326113672b3888b16a60133d501d48610d23b74d1eb' '197ff4bb3c1cafcb197268cac335f1f75ae26873aca5833d62cc51fade85176c' '0b9868a563036c81f8fdb8ab8bbad51934aca2a07e9d7634e24214791afda8e2' '1b965b5e7eeafdf3815c8f2722587a560693dd780327cca9910dc47fba0f1aef' @@ -88,12 +91,12 @@ sha256sums=('e6eaa2fb4819fa60cb05b4d2e7328d2914af3a73028a735ec4d56e7ece33ecc0' '2b91f6eb8c010a0dce1f41149c0549d067915fba93251c7af7e5328a05977f0c') package() { - cd $srcdir + cd ${srcdir} - install -m755 -D linhes-profile.sh $pkgdir/etc/profile.d/linhes-profile.sh + install -m755 -D linhes-profile.sh ${pkgdir}/etc/profile.d/linhes-profile.sh #bin files - BINDIR=$pkgdir/usr/bin + BINDIR=${pkgdir}/usr/bin for i in $binfiles do item=$i @@ -102,60 +105,62 @@ package() { done #release files - install -Dm644 "$srcdir/LinHES-release" "$pkgdir/etc/LinHES-release" + install -Dm644 "${srcdir}/LinHES-release" "${pkgdir}/etc/LinHES-release" #startup files - install -Dm644 "$srcdir/lh_system_start.sh.desktop" "$pkgdir/etc/skel/.config/autostart/lh_system_start.sh.desktop" + install -Dm644 "${srcdir}/lh_system_start.sh.desktop" "${pkgdir}/etc/skel/.config/autostart/lh_system_start.sh.desktop" #systemd files - install -Dm644 $srcdir/x11vnc.override.conf $pkgdir/etc/systemd/system/x11vnc.service.d/override.conf + install -Dm644 ${srcdir}/x11vnc.override.conf ${pkgdir}/etc/systemd/system/x11vnc.service.d/override.conf #sql files - install -Dm644 $srcdir/lh_sqlserver.cnf $pkgdir/etc/my.cnf.d/lh_sqlserver.cnf + install -Dm644 ${srcdir}/lh_sqlserver.cnf ${pkgdir}/etc/my.cnf.d/lh_sqlserver.cnf #php files - install -Dm644 $srcdir/lh_php.ini $pkgdir/etc/php/conf.d/lh_php.ini + install -Dm644 ${srcdir}/lh_php.ini ${pkgdir}/etc/php/conf.d/lh_php.ini #lighttpd files - install -Dm644 $srcdir/lh_lighttpd.conf $pkgdir/etc/lighttpd/conf.d/lh_lighttpd.conf + install -Dm644 ${srcdir}/lh_lighttpd.conf ${pkgdir}/etc/lighttpd/conf.d/lh_lighttpd.conf #gen_lib_xml.py files install -Dm644 ${srcdir}/plex_lib.conf ${pkgdir}/etc/gen_lib_xml.d/plex_lib.conf #rsyslog files - install -Dm644 $srcdir/rsyslog.mythtv.conf $pkgdir/etc/rsyslog.d/mythtv.conf + install -Dm644 ${srcdir}/rsyslog.mythtv.conf ${pkgdir}/etc/rsyslog.d/mythtv.conf #remote files - install -Dm644 $srcdir/rc6_mce.toml $pkgdir/etc/rc_keymaps/rc6_mce.toml + install -Dm644 ${srcdir}/rc6_mce.toml ${pkgdir}/etc/rc_keymaps/rc6_mce.toml #readme files - install -Dm644 $srcdir/readme_is_xml $pkgdir/etc/gen_is_xml.d/readme_is_xml - install -Dm644 $srcdir/readme_is_xml $pkgdir/etc/gen_lib_xml.d/readme_gen_xml - install -Dm644 $srcdir/readme_is_xml $pkgdir/etc/gen_game_xml.d/readme_gen_xml - install -Dm644 $srcdir/add_storage.readme $pkgdir/etc/storage.d/readme + install -Dm644 ${srcdir}/readme_is_xml ${pkgdir}/etc/gen_is_xml.d/readme_is_xml + install -Dm644 ${srcdir}/readme_is_xml ${pkgdir}/etc/gen_lib_xml.d/readme_gen_xml + install -Dm644 ${srcdir}/readme_is_xml ${pkgdir}/etc/gen_game_xml.d/readme_gen_xml + install -Dm644 ${srcdir}/add_storage.readme ${pkgdir}/etc/storage.d/readme #cron files - install -Dm755 $srcdir/paccache.cron $pkgdir/etc/cron.weekly/paccache - install -Dm755 $srcdir/xfs_defrag.cron $pkgdir/etc/cron.weekly/xfs_defrag - install -Dm755 $srcdir/lh_mtc.cron $pkgdir/etc/cron.hourly/lh_mtc - install -Dm755 $srcdir/flatpak_update.cron $pkgdir/etc/cron.daily/flatpak_update - install -Dm755 $srcdir/lh_log_care.cron $pkgdir/etc/cron.daily/lh_log_care - install -Dm755 $srcdir/recordings.cron $pkgdir/etc/cron.hourly/recordings + install -Dm755 ${srcdir}/paccache.cron ${pkgdir}/etc/cron.weekly/paccache + install -Dm755 ${srcdir}/pacman_orphans.cron ${pkgdir}/etc/cron.weekly/pacman_orphans + install -Dm755 ${srcdir}/xfs_defrag.cron ${pkgdir}/etc/cron.weekly/xfs_defrag + install -Dm755 ${srcdir}/lh_mtc.cron ${pkgdir}/etc/cron.hourly/lh_mtc + install -Dm755 ${srcdir}/flatpak_update.cron ${pkgdir}/etc/cron.daily/flatpak_update + install -Dm755 ${srcdir}/lh_log_care.cron ${pkgdir}/etc/cron.daily/lh_log_care + install -Dm755 ${srcdir}/recordings.cron ${pkgdir}/etc/cron.hourly/recordings #hooks - install -Dm0644 $srcdir/79-cronie.hook "${pkgdir}"/usr/share/libalpm/hooks/79-cronie.hook - install -Dm0644 $srcdir/fstrim.hook "${pkgdir}"/usr/share/libalpm/hooks/fstrim.hook - install -Dm0644 $srcdir/openssh.hook "${pkgdir}"/usr/share/libalpm/hooks/openssh.hook - install -Dm0644 $srcdir/lh_restart_needed.hook "${pkgdir}"/usr/share/libalpm/hooks/lh_restart_needed.hook - install -Dm0644 $srcdir/rsyslog.hook "${pkgdir}"/usr/share/libalpm/hooks/rsyslog.hook + install -Dm0644 ${srcdir}/79-cronie.hook "${pkgdir}"/usr/share/libalpm/hooks/79-cronie.hook + install -Dm0644 ${srcdir}/fstrim.hook "${pkgdir}"/usr/share/libalpm/hooks/fstrim.hook + install -Dm0644 ${srcdir}/openssh.hook "${pkgdir}"/usr/share/libalpm/hooks/openssh.hook + install -Dm0644 ${srcdir}/lh_restart_needed.hook "${pkgdir}"/usr/share/libalpm/hooks/lh_restart_needed.hook + install -Dm0644 ${srcdir}/rsyslog.hook "${pkgdir}"/usr/share/libalpm/hooks/rsyslog.hook #sudo rules - install -Dm0750 "$srcdir/system-sudo.rules" "$pkgdir/etc/sudoers.d/system_sudo" - chmod 750 $pkgdir/etc/sudoers.d/ + install -Dm0440 "${srcdir}/system-sudo.rules" "${pkgdir}/etc/sudoers.d/system_sudo" + chmod 750 ${pkgdir}/etc/sudoers.d/ #udev rules - install -Dm0644 "$srcdir/81-wol.rules" "$pkgdir/etc/udev/rules.d/81-wol.rules" + install -Dm0644 "${srcdir}/69-hdparm.rules" "${pkgdir}/etc/udev/rules.d/69-hdparm.rules" + install -Dm0644 "${srcdir}/81-wol.rules" "${pkgdir}/etc/udev/rules.d/81-wol.rules" #disable dpms - install -Dm0644 "$srcdir/10-monitor.conf" "$pkgdir/etc/X11/xorg.conf.d/10-monitor.conf" + install -Dm0644 "${srcdir}/10-monitor.conf" "${pkgdir}/etc/X11/xorg.conf.d/10-monitor.conf" } diff --git a/linhes/linhes-system/add_storage.py b/linhes/linhes-system/add_storage.py index cc6feb5..318e77b 100755 --- a/linhes/linhes-system/add_storage.py +++ b/linhes/linhes-system/add_storage.py @@ -5,7 +5,7 @@ #Disks that are mounted, in fstab, size < 5000 bytes, optical or #have already been seen will not be presented as an option. # -# Version 2.0.2 +# Version 2.1.0 import dbus import pickle @@ -147,7 +147,8 @@ class disk_device: return True def get_is_device(self): - match = re.search(r'part\d+$', self.device_file_path) + #match = re.search(r'part\d+$', self.device_file_path) + match = re.search(r'part\d+$', self.device_id) if match is None: return True else: @@ -214,6 +215,20 @@ class disk_device: if i[1] in mp: fstype = i[2] break + + loop = True + prompt = ''' + Format disk with what filesystem (xfs/ext4)?:''' + + while loop: + str1 = input(prompt) + + if str1 in ['xfs','ext4']: + loop = False + fstype=str1 + break + print("\n") + return fstype def lookup_format(self): diff --git a/linhes/linhes-system/balance_storage_groups.py b/linhes/linhes-system/balance_storage_groups.py index d91da60..8776428 100755 --- a/linhes/linhes-system/balance_storage_groups.py +++ b/linhes/linhes-system/balance_storage_groups.py @@ -89,7 +89,7 @@ if __name__ == '__main__': for dir in SGDIRSdata: mostFull = SGDIRSdata[i] i=i+1 - if len(glob.glob1(mostFull[0],"*.ts")) or len(glob.glob1(mostFull[0],"*.mpg")) or len(glob.glob1(mostFull[0],"*.nuv")): + if len(glob.glob(mostFull[0] + "*.ts")) or len(glob.glob(mostFull[0] + "*.mpg")) or len(glob.glob(mostFull[0] + "*.nuv")): break else: if i == 1: diff --git a/linhes/linhes-system/empty_storage_groups.py b/linhes/linhes-system/empty_storage_groups.py index 708c118..c36437e 100755 --- a/linhes/linhes-system/empty_storage_groups.py +++ b/linhes/linhes-system/empty_storage_groups.py @@ -1,6 +1,6 @@ #!/usr/bin/python -import argparse, glob, operator, os, random, shutil, subprocess, sys, signal +import argparse, glob, operator, os, random, shutil, subprocess, sys, signal, time shouldQuit = False def getFreeSpaceForDir(dir): @@ -24,6 +24,8 @@ def sizeof_fmt(num, suffix='B'): return "%.1f %s%s" % (num, 'Yi', suffix) def signal_handler(signal, frame): + if isBusy: + sys.exit(0) print("\nWill quit when file has been moved.\nMoving File...") global shouldQuit shouldQuit = True @@ -101,7 +103,7 @@ if __name__ == '__main__': print(" " + directory + " - Not Mounted") continue # Check if SG has data files to move - if len(glob.glob1(directory,"*.ts")) or len(glob.glob1(directory,"*.mpg")) or len(glob.glob1(directory,"*.nuv")) or len(glob.glob1(directory,"*.jpg")): + if len(glob.glob(directory + "*.ts")) or len(glob.glob(directory + "*.mpg")) or len(glob.glob(directory + "*.nuv")) or len(glob.glob(directory + "*.jpg")): freePcent = getFreePercentForDir(directory) freeSize = getFreeSpaceForDir(directory) SGDIRSdata.append([directory, freePcent, freeSize]) @@ -114,7 +116,7 @@ if __name__ == '__main__': sys.exit(0) # Exit if no SGs with data found - if SGcnt is 0: + if SGcnt == 0: print("\n'" + SGgrp + "' Storage Group directories have no files to move. Exiting.") sys.exit(0) @@ -163,11 +165,19 @@ if __name__ == '__main__': print("Check Only option was used. No files were moved.") shouldQuit = True else: - print("------------------------------------------------") - print("Checking System Status...") - if subprocess.call(["/usr/bin/python", "/usr/bin/idle.py", "-s"]): - print(" System is busy. The file will not be moved.") - sys.exit() + global isBusy + isBusy = True + while isBusy: + if shouldQuit: + sys.exit(0) + print("------------------------------------------------") + print("Checking System Status...") + if subprocess.call(["/usr/bin/python", "/usr/bin/idle.py", "-s"]): + print(" System is busy. The file will not be moved.") + print(" Waiting 5 minutes before trying again.") + time.sleep(300) + else: + isBusy = False print("Moving File...") try: shutil.move(filePathToMove, leastFull[0]) diff --git a/linhes/linhes-system/idle.py b/linhes/linhes-system/idle.py index 3f4b3bc..4b2db1e 100755 --- a/linhes/linhes-system/idle.py +++ b/linhes/linhes-system/idle.py @@ -1,7 +1,8 @@ #!/usr/bin/python -import argparse, os, re, subprocess, sys, time +import argparse, os, re, requests, subprocess, sys, time from datetime import datetime, date, timedelta +import xml.etree.ElementTree as ET def msg(cmdargs,msg): if cmdargs.silent is False: @@ -237,24 +238,31 @@ def mythfe_check(cmdargs,cursor,mythDB): for i in frontends: try: + URL = f"http://{i[0]}:6547/Frontend/GetStatus" msg(cmdargs," Checking %s's mythfrontend status..." %i) - frontend = mythDB.getFrontend(''.join(i)) + response = requests.get(URL, timeout=3) + root = ET.fromstring(response.text) + # Find the current location and state in the State element + state_element = root.find('State') + if state_element is not None: + location = state_element.find(".//String[Key='currentlocation']/Value") + state = state_element.find(".//String[Key='state']/Value") + if ( cmdargs.runningfe ): msg(cmdargs," %s's mythfrontend is RUNNING." %i) return False - location = frontend.sendQuery('Location') - if location == "standbymode": + if location is not None and location.text == "standbymode": msg(cmdargs," %s's mythfrontend is in Standby Mode." %i) continue - if ( location.startswith('Playback ') ): + if state is not None and state.text.startswith('Watching'): msg(cmdargs," %s's mythfrontend is PLAYING." %i) return False else: msg(cmdargs," %s's mythfrontend is NOT playing." %i) - if '.xml' in location or 'mainmenu' in location: + if location is not None and '.xml' in location.text or 'mainmenu' in location.text: msg(cmdargs," %s's mythfrontend is in MENUS." %i) else: #FE is not in menus, so it must be active in a plugin diff --git a/linhes/linhes-system/lh_apply_UI_settings.sh b/linhes/linhes-system/lh_apply_UI_settings.sh index 2cf98a1..442a15f 100755 --- a/linhes/linhes-system/lh_apply_UI_settings.sh +++ b/linhes/linhes-system/lh_apply_UI_settings.sh @@ -1,18 +1,21 @@ #!/bin/bash -cp /usr/share/linhes/templates/plasma-org.kde.plasma.desktop-appletsrc ~/.config/ -plasma-apply-colorscheme BreezeDark -kwriteconfig5 --group KDE --key SingleClick false -kwriteconfig5 --file ~/.config/kscreenlockerrc --group Daemon --key Autolock false -kwriteconfig5 --file ~/.config/kscreenlockerrc --group Daemon --key LockOnResume false -kwriteconfig5 --file ~/.config/ksmserverrc --group General --key loginMode emptySession -kwriteconfig5 --file ~/.config/powermanagementprofilesrc --group AC --group DPMSControl --key idleTime --delete +if [ ! -f ~/.config/lh_configured ]; then + #cp /usr/share/linhes/templates/plasma-org.kde.plasma.desktop-appletsrc ~/.config/ + sed -i 's/launchers=.*/launchers=applications:systemsettings.desktop,preferred:\/\/filemanager,applications:org.kde.konsole.desktop,preferred:\/\/browser,applications:mythfrontend.desktop/' ~/.config/plasma-org.kde.plasma.desktop-appletsrc + plasma-apply-wallpaperimage /usr/share/linhes/templates/lights-bud-abstract-4k-cq.jpg + plasma-apply-colorscheme BreezeDark +fi + +kwriteconfig6 --group KDE --key SingleClick false +kwriteconfig6 --file ~/.config/kscreenlockerrc --group Daemon --key Autolock false +kwriteconfig6 --file ~/.config/kscreenlockerrc --group Daemon --key LockOnResume false +kwriteconfig6 --file ~/.config/ksmserverrc --group General --key loginMode emptySession +kwriteconfig6 --file ~/.config/powermanagementprofilesrc --group AC --group DPMSControl --key idleTime --delete kwriteconfig6 --file ~/.powerdevilrc --group AC --group Display --key DimDisplayWhenIdle false kwriteconfig6 --file ~/.powerdevilrc --group AC --group Display --key TurnOffDisplayWhenIdle false kwriteconfig6 --file ~/.powerdevilrc --group AC --group SuspendAndShutdown --key AutoSuspendAction 0 -plasma-apply-wallpaperimage /usr/share/linhes/templates/lights-bud-abstract-4k-cq.jpg - #sddm settings if grep -Fxq "User=km" /etc/sddm.conf.d/autologin.conf; then echo "Updating /etc/sddm.conf.d/autologin.conf" @@ -25,11 +28,10 @@ if [ -f "/etc/sddm.conf" ]; then sudo rm /etc/sddm.conf fi -if [ ! -f "/etc/sddm.conf.d/theme.conf" ]; then +if ! grep -Fxq "[General]" /etc/sddm.conf.d/theme.conf; then echo "[General]" | sudo tee /etc/sddm.conf.d/theme.conf echo "Numlock=on" | sudo tee -a /etc/sddm.conf.d/theme.conf - - echo "[Theme]" | sudo tee /etc/sddm.conf.d/theme.conf + echo "[Theme]" | sudo tee -a /etc/sddm.conf.d/theme.conf echo "Current=breeze" | sudo tee -a /etc/sddm.conf.d/theme.conf echo "CursorTheme=breeze_cursors" | sudo tee -a /etc/sddm.conf.d/theme.conf echo "Font=Noto Sans,10,-1,0,400,0,0,0,0,0,0,0,0,0,0,1" | sudo tee -a /etc/sddm.conf.d/theme.conf diff --git a/linhes/linhes-system/lh_mtc.cron b/linhes/linhes-system/lh_mtc.cron index b556d60..75610b5 100644 --- a/linhes/linhes-system/lh_mtc.cron +++ b/linhes/linhes-system/lh_mtc.cron @@ -32,11 +32,8 @@ then if ! grep -q "Finished Optimize" $logFile then - if [ $SystemType = FrontendOnly ] + if [ $SystemType = MasterBackend ] then - echo "Will not run Optimize on Frontend Only systems." | $log - echo "Finished Optimize" | $log - else sudo -u mythtv bash -c "MYTHCONFDIR=/usr/share/mythtv unbuffer lh_mtc.py --optimize | $log" if [ $? = 0 ] then @@ -45,18 +42,27 @@ then echo "Time Exceeded" | $log exit fi + else + echo "Will not run Optimize on Frontend or Desktop Only systems." | $log + echo "Finished Optimize" | $log fi fi if ! grep -q "Finished Backup" $logFile && grep -q "Finished Optimize" $logFile then - sudo -u mythtv bash -c "MYTHCONFDIR=/usr/share/mythtv unbuffer lh_mtc.py --backup | $log" - if [ $? = 0 ] + if [ $SystemType != DesktopOnly ] then - echo "" | $log + sudo -u mythtv bash -c "MYTHCONFDIR=/usr/share/mythtv unbuffer lh_mtc.py --backup | $log" + if [ $? = 0 ] + then + echo "" | $log + else + echo "Time Exceeded" | $log + exit + fi else - echo "Time Exceeded" | $log - exit + echo "Will not run Backup on Desktop Only systems." | $log + echo "Finished Backup" | $log fi fi diff --git a/linhes/linhes-system/lh_myth_status.py b/linhes/linhes-system/lh_myth_status.py index c682d1c..2ed3d42 100755 --- a/linhes/linhes-system/lh_myth_status.py +++ b/linhes/linhes-system/lh_myth_status.py @@ -1,12 +1,9 @@ #!/usr/bin/python #This program is called on login to display the status of mythtv tuners & recording status -#Also will display alerts generated by xymon. If the location of xymon changes, this script needs to be updated. from MythTV import MythBE,MythDB,MythLog import datetime,pytz,re,socket,subprocess,sys,time from dateutil.parser import parse -from tzlocal import get_localzone - import os,glob from socket import gethostname; @@ -41,69 +38,6 @@ def formatTD(td): return_string = '%s%s%s%s' % (day_string, hour_string, minute_string, second_string) return return_string -def print_alerts(): - dir_name = "/home/xymon/var/login_alerts" - out_alert="" - try: - os.chdir(dir_name) - except: - pass - #print " myth_status: Couldn't change dir to %s" %dir_name - - file_list=glob.glob("*") - - if len(file_list) == 0: - #print " myth_status: no alert files found" - pass - else: - for alert_file in file_list: - out_line='' - datahost = '' - dataservice = '' - datacolor = '' - datadown = '' - try: - #print " myth_staus: reading in %s" %alert_file - f=open(alert_file,'r') - lines=f.readlines() - f.close() - except: - #print " myth_status: Couldn't open %s for reading" %alert_file - continue - - for line in lines: - try: - data,value=line.split(":") - except: - continue #exception occured try the next line - - if data == 'HOST': - datahost = value.strip() - elif data == 'SERVICE': - dataservice = value.strip() - elif data == 'COLOR': - datacolor = value.strip() - elif data == 'DOWN': - datadown = value.strip() - sec=int(datadown) - td_sec = datetime.timedelta(seconds=sec) - td_sec_formated = formatTD(td_sec) - - out_line =" %s on %s %s for %s \n" %(dataservice, - datahost,datacolor.upper(), - td_sec_formated) - out_alert += out_line - - print("System Alerts:") - print("--------------") - if len(out_alert) > 0: - print(out_alert) - print(" Go to http://%s and click Health & Maintenance for more information." %gethostname()) - else: - print(" All systems OK") - - return - #------------------------------------------- @@ -112,7 +46,6 @@ class tuner_recording_status: def __init__ (self,num_upcoming): self.now = datetime.datetime.now(pytz.utc) - self.currTZ = get_localzone() self.farout=99999999 self.next_start_diff=datetime.timedelta(self.farout) self.num_upcoming=num_upcoming @@ -186,7 +119,7 @@ class tuner_recording_status: title_chan="%s (%s)" %(i.title, i.channame) # convert timezone to local timezone start_time=parse(str(i.starttime)) - start_time=start_time.astimezone(self.currTZ) + start_time=start_time.astimezone() start_time_out=start_time.strftime("%a %b %d %I:%M%p") self.upcoming_list.append([start_time_out,i.hostname, title_chan]) @@ -234,7 +167,7 @@ class tuner_recording_status: title_chan="%s (%s)" %(i.title, i.channame) # convert timezone to local timezone start_time=parse(str(i.starttime)) - start_time=start_time.astimezone(self.currTZ) + start_time=start_time.astimezone() start_time_out=start_time.strftime("%a %b %d %I:%M%p") out_line=(start_time_out,i.hostname,title_chan) self.conflict_list.append(out_line) @@ -264,7 +197,6 @@ def go(): tuner.print_upcoming_recordings() tuner.print_conflict_list() tuner.print_next_start_time() - #print_alerts() if __name__ == "__main__": diff --git a/linhes/linhes-system/lh_notify-send b/linhes/linhes-system/lh_notify-send index dd98ede..0a11de8 100755 --- a/linhes/linhes-system/lh_notify-send +++ b/linhes/linhes-system/lh_notify-send @@ -1,12 +1,19 @@ #!/bin/bash -#Detect the name of the display in use -display=":$(ls /tmp/.X11-unix/* | sed 's#/tmp/.X11-unix/X##' | head -n 1)" - -#Detect the user using such display -user=$(who | grep '('$display')' | awk '{print $1}' | head -n 1) +#Detect the name of the display in use from 0 to 10 +for i in {0..10}; +do + #Detect the user using such display + user=$(who | grep "(:${i})" | awk '{print $1}' | head -n 1) + if [[ ! -z "$user" ]]; + then + display="DISPLAY=:${i}" + break + fi +done #Detect the id of the user uid=$(id -u $user) -sudo -u $user DISPLAY=$display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@" + +sudo -u $user $display DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$uid/bus notify-send "$@" diff --git a/linhes/linhes-system/lh_sqlserver.cnf b/linhes/linhes-system/lh_sqlserver.cnf index be2d5bd..6475ea2 100644 --- a/linhes/linhes-system/lh_sqlserver.cnf +++ b/linhes/linhes-system/lh_sqlserver.cnf @@ -41,9 +41,10 @@ datadir=/data/srv/mysql skip-external-locking +skip-name-resolve=ON net_buffer_length = 8K -key_buffer_size = 768M +key_buffer_size = 512M max_allowed_packet = 1M tmp_table_size = 256M max_heap_table_size = 256M @@ -55,9 +56,10 @@ thread_cache_size = 8 query_cache_type = 0 query_cache_size = 0 query_cache_limit = 2M -join_buffer_size = 1M -ignore-db-dir = lost+found +join_buffer_size = 2M +ignore_db_dirs = lost+found table_open_cache = 5000 +table_definition_cache = 800 open_files_limit = 10000 # Uncomment the following if you are using InnoDB tables @@ -66,14 +68,13 @@ open_files_limit = 10000 #innodb_log_group_home_dir = /var/lib/mysql # You can set .._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high -#innodb_buffer_pool_size = 16M +innodb_buffer_pool_size = 1500M #innodb_additional_mem_pool_size = 2M # Set .._log_file_size to 25 % of buffer pool size -innodb_log_file_size = 16M -#innodb_log_buffer_size = 8M +innodb_log_file_size = 375M +innodb_log_buffer_size = 32M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 -innodb_buffer_pool_instances = 1 # This group is only read by MariaDB-10.8 servers. # If you use the same .cnf file for MariaDB of different versions, diff --git a/linhes/linhes-system/lh_system_backup_job b/linhes/linhes-system/lh_system_backup_job index 6d16596..e45d6ea 100755 --- a/linhes/linhes-system/lh_system_backup_job +++ b/linhes/linhes-system/lh_system_backup_job @@ -27,7 +27,7 @@ do fi done -if [ `mountpoint -q $BACKUPDISK 2> /dev/null` ]; then +if ! mountpoint -q "$BACKUPDISK"; then echo " The system doesn't have a second drive. Backup skipped." exit $backup_status fi diff --git a/linhes/linhes-system/lh_system_start.sh b/linhes/linhes-system/lh_system_start.sh index 3cbf5dc..b783535 100755 --- a/linhes/linhes-system/lh_system_start.sh +++ b/linhes/linhes-system/lh_system_start.sh @@ -40,7 +40,7 @@ function bashrc_setup(){ function nanorc_setup(){ sudo sed -i 's/# set tabsize.*/set tabsize 4/' /etc/nanorc sudo sed -i 's/# set tabstospaces.*/set tabstospaces/' /etc/nanorc - sudo sed -i 's/# include "\/usr\/share\/nano\/\*.nanorc"/include "\/usr\/share\/nano\/\*.nanorc"/' /etc/nanorc + sudo sed -i 's/.*\/usr\/share\/nano\/\*.nanorc.*/include \/usr\/share\/nano\/\*.nanorc/' /etc/nanorc } function storage_scan(){ @@ -55,15 +55,15 @@ function install_lh_apps(){ #check network connection netwait=0 while ! timeout 1 nc -zw1 1.1.1.1 443; do - [ $netwait -gt 12 ] && msg "Could not install apps. Check internet connection. Cancelling Setup." && exit 1 - msg "Waiting for internet connectivity..." + 1 [ $netwait -gt 60 ] && msg "Cancelling Setup" "Could not connect to the internet to complete setup. Check the internet connection and from Konsole run lh_system_start.sh." && exit 1 + msg "Waiting for internet connectivity..." "Connect to the internet to complete setup." ((netwait++)) sleep 5 done msg "Installing apps." konsole -e /bin/bash -i -c "sudo pacman -Syyy --noconfirm archlinux-keyring && sudo pacman -Syyy --noconfirm mythtv mythplugins-mytharchive mythplugins-mythmusic mythplugins-mythweb && flatpak install tv.plex.PlexHTPC --noninteractive --assumeyes && sudo flatpak override tv.plex.PlexHTPC --filesystem=/run/lirc/lircd" status=$? - [ $status -eq 1 ] && msg "Could not install apps. Check internet connection. Cancelling Setup." && exit 1 + [ $status -eq 1 ] && msg "Cancelling Setup" "Could not connect to the internet to complete setup. Check the internet connection and from Konsole run lh_system_start.sh." && exit 1 gen_lib_xml.py } @@ -88,16 +88,16 @@ function localweb_setup(){ function first_configure(){ if [ ! -f ~/.config/lh_configured ]; then msg "New install of LinHES. Starting setup." - install_lh_apps - nanorc_setup - bashrc_setup - x11vnc_setup if [ -f /etc/systemconfig ]; then SystemType=$(grep SystemType= /etc/systemconfig | cut -d '"' -f 2) else SystemType=$(kdialog --title "LinHES System Type" --combobox "Select the LinHES System Type: " "MasterBackend" "FrontendOnly" "DesktopOnly" --default "MasterBackend") echo "SystemType=\"$SystemType\"" | sudo tee /etc/systemconfig fi + install_lh_apps + nanorc_setup + bashrc_setup + x11vnc_setup #apply settings for specific system types msg "Setup as $SystemType" if [ $SystemType = "MasterBackend" ]; then diff --git a/linhes/linhes-system/linhes-profile.sh b/linhes/linhes-system/linhes-profile.sh index df98315..f558673 100644 --- a/linhes/linhes-system/linhes-profile.sh +++ b/linhes/linhes-system/linhes-profile.sh @@ -5,7 +5,7 @@ export MYTHTV_AIRPLAY="1" if [ -f /etc/systemconfig ]; then SystemType=$(grep SystemType= /etc/systemconfig | cut -d '"' -f 2) fi -if [ ! $SystemType = "FrontendOnly" ]; then +if [[ ! $SystemType == *"Only" ]]; then if [ x$MYTH_RUN_STATUS = x ]; then MYTHCONFDIR=/usr/share/mythtv /usr/bin/lh_myth_status.py fi diff --git a/linhes/linhes-system/pacman_orphans.cron b/linhes/linhes-system/pacman_orphans.cron new file mode 100755 index 0000000..6ef9d4c --- /dev/null +++ b/linhes/linhes-system/pacman_orphans.cron @@ -0,0 +1 @@ +pacman -Qdtq | ifne pacman -Rns --noconfirm - diff --git a/linhes/mkinitcpio-openswap/PKGBUILD b/linhes/mkinitcpio-openswap/PKGBUILD index a6bad29..ac3bb14 100644 --- a/linhes/mkinitcpio-openswap/PKGBUILD +++ b/linhes/mkinitcpio-openswap/PKGBUILD @@ -1,8 +1,9 @@ # Maintainer: Jenya Sovetkin <e.sovetkin@gmail.com> +# Maintainer: Adam Bambuch <adam.bambuch2@gmail.com> # Contributors: https://aur.archlinux.org/account/f4bio pkgname=mkinitcpio-openswap -pkgver=0.1.0 -pkgrel=3 +pkgver=0.1.1 +pkgrel=1 pkgdesc="mkinitcpio hook to open swap at boot time" arch=(any) license=('unknown') @@ -13,10 +14,9 @@ install="usage.install" source=('openswap.hook' 'openswap.install' 'openswap.conf') -sha256sums=('84ef428386b7f4353af036ccfbd4c60901a76e2d0c7a38dd3be2000219ea9d23' - '94dd98a953bab2244215a2b20767cdc9500fc438bed9ec27cae72a73766c6b86' - '3308f2679bb7c962d98adf2684d25390025d025e3d30bc1e773e3522311ad325') - +sha256sums=('9e836a588098f2811e651e60dae98096aa59db8a402bc9cb94c42000a5052e3a' + '2d60c98d4bd54134a5a4543848ecc7bce598e6faa7bd96a2df0a4767f6e9f3dd' + '71516c53543d7deca0fa25efcbf91ca0df869ec0a9fac1ec94e587b18e064c16') package() { install -Dm 644 openswap.hook \ diff --git a/linhes/mkinitcpio-openswap/openswap.conf b/linhes/mkinitcpio-openswap/openswap.conf index b7e92e0..6ca341a 100644 --- a/linhes/mkinitcpio-openswap/openswap.conf +++ b/linhes/mkinitcpio-openswap/openswap.conf @@ -3,15 +3,60 @@ swap_device=/dev/disk/by-uuid/2788eb78-074d-4424-9f1d-ebffc9c37262 crypt_swap_name=cryptswap -## one can optionally provide a keyfile device and path on this device -## to the keyfile -keyfile_device=/dev/mapper/cryptroot -keyfile_filename=etc/keyfile-cryptswap +## unlock_method can be either password, keyfile or keyfile_raw +## keyfile will use the keyfile_device and keyfile_filename to unlock the swap +## keyfile_raw will use the keyfile_device and keyfile_block_number to unlock the swap +## password will prompt for the password to unlock the swap +## if unlock_method is not set, then method is keyfile if keyfile_device and keyfile_filename are set +## otherwise it is password +unlock_method="password" +####### WARNING: There is a risk of data loss when using unlock_method="keyfile" +## You should double-check keyfile_device_mount_options, +## and note that this method is potentially dangerous regardless. +## https://docs.kernel.org/power/swsusp.html +## https://wiki.archlinux.org/title/Dm-crypt/Swap_encryption#busybox-based_initramfs + + +## keyfile_device is the device that contains the keyfile +## set it to the device that contains the keyfile +## e.g. /dev/mapper/root-device +####### THIS OPTION IS MANDATORY IF unlock_method IS keyfile OR keyfile_raw +keyfile_device= + +## keyfile_filename is the path to the keyfile on the keyfile_device +## e.g. /etc/swap.key +####### THIS OPTION IS MANDATORY IF unlock_method IS keyfile +keyfile_filename= + +## keyfile_block_number is the block number of the keyfile on the keyfile_device +## e.g. 12345 +## on the ext4 filesystem, you can get the block number using +## debugfs $keyfile_device +## extents $keyfile_filename +## the relevant block number will appear under the Physical column in the output +####### THIS OPTION IS MANDATORY IF unlock_method IS keyfile_raw +keyfile_block_number= + +## key_size is the size of the key in bytes +## e.g., 4096 +## This is the size of the keyfile and should match the actual size of the keyfile. +## You can get the size of the keyfile using: wc -c <keyfile_filename> +## The openswap script will fail if the keyfile is fragmented, +## so keyfile_length should not exceed the filesystem block size. +## For ext4 filesystems, keyfile_length should not exceed 4096 bytes, +## and it SHOULD be greater than ~200 bytes to avoid inode inlining. +####### THIS OPTION IS MANDATORY IF unlock_method IS keyfile_raw +keyfile_length=4096 ## additional arguments are given to mount for keyfile_device -## has to start with --options (if so desired) +## has to start with --options +## it is important to use the correct options for your filesystem +## to prevent any writes to the keyfile device and thus +## minimize the risk of data loss #keyfile_device_mount_options="--options=subvol=__active/__" +keyfile_device_mount_options="--options=ro,noload" ## additional arguments are given to cryptsetup ## --allow-discards options is desired in case swap is on SSD partition cryptsetup_options="--type luks" + diff --git a/linhes/mkinitcpio-openswap/openswap.hook b/linhes/mkinitcpio-openswap/openswap.hook index 9a96ad4..3a237c0 100644 --- a/linhes/mkinitcpio-openswap/openswap.hook +++ b/linhes/mkinitcpio-openswap/openswap.hook @@ -11,15 +11,14 @@ run_hook () done ## End of optional - if [ -z "$keyfile_device" ] || [ -z "$keyfile_filename" ] - then - ## case when no keyfile provided in configurations + if [ "$unlock_method" = "password" ]; then cryptsetup open $cryptsetup_options "$swap_device" "$crypt_swap_name" - else - ## case when keyfile is provided in configurations + elif [ "$unlock_method" = "keyfile" ]; then mkdir openswap_keymount mount $keyfile_device_mount_options "$keyfile_device" openswap_keymount cryptsetup open $cryptsetup_options --key-file "openswap_keymount/$keyfile_filename" "$swap_device" "$crypt_swap_name" umount openswap_keymount + elif [ "$unlock_method" = "keyfile_raw" ]; then + dd "if=$keyfile_device" "bs=$keyfile_length" "skip=$keyfile_block_number" count=1 | cryptsetup open --key-file=- "$swap_device" "$crypt_swap_name" fi } diff --git a/linhes/mkinitcpio-openswap/openswap.install b/linhes/mkinitcpio-openswap/openswap.install index 95d59a3..65dab09 100644 --- a/linhes/mkinitcpio-openswap/openswap.install +++ b/linhes/mkinitcpio-openswap/openswap.install @@ -6,9 +6,23 @@ build () grep "keyfile_filename=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" grep "keyfile_device_mount_options=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" grep "cryptsetup_options=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" + grep "keyfile_block_number=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" + grep "unlock_method=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" + grep "keyfile_length=" /etc/openswap.conf >> "$BUILDROOT/openswap.conf" source "$BUILDROOT/openswap.conf" + if [ -z "$unlock_method" ]; then + # unlock_method is not set, determine it based on keyfile_device and keyfile_filename + # for backward compatibility. + if [ -z "$keyfile_device" ] || [ -z "$keyfile_filename" ]; then + unlock_method="password" + else + unlock_method="keyfile" + fi + fi + echo "unlock_method=$unlock_method" >> "$BUILDROOT/openswap.conf" + if [ -z "$swap_device" ]; then warning "swap_device variable is not set" fi @@ -17,6 +31,41 @@ build () warning "crypt_swap_name variable is not set" fi + if [ "$unlock_method" = "keyfile" ]; then + warning "you are using potentially dangerous unlock_method keyfile, please make sure you know what you are doing" + warning "https://docs.kernel.org/power/swsusp.html" + warning "https://wiki.archlinux.org/title/Dm-crypt/Swap_encryption#busybox-based_initramfs" + if [ -z "$keyfile_device" ]; then + warning "keyfile_device variable is not set and unlock_method is set to keyfile" + fi + if [ -z "$keyfile_filename" ]; then + warning "keyfile_filename variable is not set and unlock_method is set to keyfile" + fi + + if [ -z "$keyfile_device_mount_options" ]; then + warning "keyfile_device_mount_options variable is not set and unlock_method is set to keyfile" + fi + fi + + if [ "$unlock_method" = "keyfile_raw" ]; then + if [ -z "$keyfile_device" ]; then + warning "keyfile_device variable is not set and unlock_method is set to keyfile_raw" + fi + if [ -z "$keyfile_block_number" ]; then + warning "keyfile_block_number variable is not set and unlock_method is set to keyfile_raw" + fi + if [ -z "$keyfile_length" ]; then + warning "keyfile_length variable is not set and unlock_method is set to keyfile_raw" + fi + fi + + # check if unlock_method is valid + if [ "$unlock_method" != "password" ] && [ "$unlock_method" != "keyfile" ] && [ "$unlock_method" != "keyfile_raw" ]; then + error "unlock_method is set to $unlock_method, but it can only be password, keyfile or keyfile_raw" + error "please change the unlock_method variable in /etc/openswap.conf" + exit 1 + fi + add_runscript } help () diff --git a/linhes/mythplugins/PKGBUILD b/linhes/mythplugins/PKGBUILD index b829436..f07e8cf 100644 --- a/linhes/mythplugins/PKGBUILD +++ b/linhes/mythplugins/PKGBUILD @@ -12,9 +12,9 @@ pkgname=('mythplugins-mytharchive' 'mythplugins-mythweather' 'mythplugins-mythweb' 'mythplugins-mythzoneminder') -br=fixes/34 +br=fixes/35 t="${br#*/}+${br%/[0-9][0-9]}" -pkgver=34+fixes.20241102.c3764375 +pkgver=35+fixes.20251104.7e93f0d3 pkgrel=1 epoch=0 arch=('any') @@ -26,7 +26,7 @@ makedepends=('dvdauthor' 'dvd+rw-tools' 'mesa-libgl' "mythtv>=$pkgver" 'git' 'python-pillow' 'python-pycurl' 'python-oauthlib' 'gdb' 'mariadb-libs' 'minizip' 'python-lxml' 'perl-xml-xpath' 'python-urllib3' 'libcdio-paranoia' 'libdiscid' 'libmusicbrainz5' 'libcoverart') -source=("git+https://github.com/MythTV/mythweb#branch=$br" +source=("git+https://github.com/MythTV/mythweb#branch=master" "git+https://github.com/MythTV/mythtv#branch=$br" ) sha256sums=('SKIP' diff --git a/linhes/mythtv/PKGBUILD b/linhes/mythtv/PKGBUILD index b53eeff..705403b 100644 --- a/linhes/mythtv/PKGBUILD +++ b/linhes/mythtv/PKGBUILD @@ -7,13 +7,15 @@ # Contributor: dorphell <dorphell@archlinux.org> pkgname=mythtv -pkgver=34+fixes.20241225.95d013c9 +pkgver=35+fixes.20251104.7e93f0d3 pkgrel=1 pkgdesc="A Homebrew PVR project" arch=('x86_64') url="https://www.mythtv.org/" license=('GPL') depends=( + 'aom' + 'dav1d' 'exiv2' 'fftw' 'lame' @@ -48,14 +50,13 @@ depends=( 'perl-net-upnp' 'perl-xml-simple' 'perl-xml-xpath' - 'python-future' 'python-lxml' 'python-mysqlclient' 'python-pyqt5-webengine' 'python-requests' 'python-requests-cache' - 'python-simplejson' 'xmltv' + 'xvidcore' ) makedepends=( 'git' @@ -71,13 +72,11 @@ makedepends=( 'perl-net-upnp' 'perl-xml-simple' 'perl-xml-xpath' - 'python-future' 'python-lxml' 'python-mysqlclient' 'python-pip' 'python-requests' 'python-setuptools' - 'python-simplejson' 'python-wheel' 'qt5-tools' 'yasm' @@ -88,14 +87,12 @@ conflicts=('myththemes' 'mythplugins-mythvideo' 'mythtv-git') replaces=('myththemes' 'mythplugins-mythvideo' 'mythtv-git') patches="0031-UPnP-Reduce-startup-latency-by-moving-blocking-code-to-own-thread.patch - 0059-portchecker-speedup.patch 0227-OSD-Add-interlaced-status-to-OSD-debug-screen.patch autoskip_reduce_commskip_jumpback.patch - libx265_build_210.patch defaultThemeLinHES.patch" source=( - "git+https://github.com/MythTV/mythtv#branch=fixes/34" + "git+https://github.com/MythTV/mythtv#branch=fixes/35" 'mythbackend.service' 'mythfrontend.desktop' 'mythtv-setup.desktop' @@ -113,16 +110,14 @@ sha256sums=('SKIP' 'ecfd02bbbef5de9773f4de2c52e9b2b382ce8137735f249d7900270d304fd333' '470de0a4050c16c7af11a0e5cfe2810b7daae42df4acf5456c7eae274dc7c5ae' '276f87058edc6197ab3a53faf6b4c485ef0d2b8447b9caa02ca7234f09ab473f' - '1ed4be912cd1ebd73553306958b7a2bc98e466b947dfb5d90ad7c0590a5a3747' '630c80c588a9b278c4421d356c5cbaa0debf149524bc896656b580b89d8fae88' '8a81e724d902976056dc824e7304df343c230ce67ec6ce1d18e110c5ef818ef6' - '5a3cc5fef32f7a530fb546ce57b82a7b5f87c76944e5c35ed9616776b0b25ee3' '3ff9f48ead83a8dd7a87cc08df066c00813b48b9171cc7bf74ba0e3cb2570d00') prepare() { msg2 "PKGBUILD pkgver: $pkgver" cd "${srcdir}/mythtv/mythtv" - gitsrcver=`echo "34+fixes.$(git show -s --format=%cd --date=short | tr -d -).$(git rev-parse --short=8 HEAD)"` + gitsrcver=`echo "35+fixes.$(git show -s --format=%cd --date=short | tr -d -).$(git rev-parse --short=8 HEAD)"` msg2 "GIT SOURCE pkgver: $gitsrcver" if [ $pkgver = $gitsrcver ]; then warning "pkgver did NOT change. Consider increasing pkgrel ($pkgrel)." @@ -143,7 +138,7 @@ prepare() { pkgver() { cd "${srcdir}/mythtv/mythtv" - echo -n "34+fixes.$(git show -s --format=%cd --date=short | tr -d -).$(git rev-parse --short=8 HEAD)" + echo -n "35+fixes.$(git show -s --format=%cd --date=short | tr -d -).$(git rev-parse --short=8 HEAD)" } build() { @@ -162,11 +157,13 @@ build() { --disable-altivec \ --disable-audio-jack \ --disable-distcc \ + --enable-libaom \ --enable-libdav1d \ --enable-libmp3lame \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ + --enable-libxvid \ --enable-vaapi \ --with-bindings=python \ --with-bindings=perl \ diff --git a/linhes/mythtv/libx265_build_210.patch b/linhes/mythtv/libx265_build_210.patch deleted file mode 100644 index f0d3e32..0000000 --- a/linhes/mythtv/libx265_build_210.patch +++ /dev/null @@ -1,79 +0,0 @@ ---- ./mythtv/external/FFmpeg/libavcodec/libx265.c.orig 2024-11-09 12:34:49.704170780 -0500 -+++ ./mythtv/external/FFmpeg/libavcodec/libx265.c 2024-11-09 12:32:09.941082796 -0500 -@@ -504,7 +504,13 @@ - { - libx265Context *ctx = avctx->priv_data; - x265_picture x265pic; -- x265_picture x265pic_out = { 0 }; -+#if X265_BUILD >= 210 -+ x265_picture x265pic_layers_out[MAX_SCALABLE_LAYERS]; -+ x265_picture* x265pic_lyrptr_out[MAX_SCALABLE_LAYERS]; -+#else -+ x265_picture x265pic_solo_out = { 0 }; -+#endif -+ x265_picture* x265pic_out; - x265_nal *nal; - uint8_t *dst; - int pict_type; -@@ -575,8 +581,16 @@ - } - } - -+#if X265_BUILD >= 210 -+ for (i = 0; i < MAX_SCALABLE_LAYERS; i++) -+ x265pic_lyrptr_out[i] = &x265pic_layers_out[i]; -+ -+ ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal, -+ pic ? &x265pic : NULL, x265pic_lyrptr_out); -+#else - ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal, -- pic ? &x265pic : NULL, &x265pic_out); -+ pic ? &x265pic : NULL, &x265pic_solo_out); -+#endif - - av_freep(&x265pic.quantOffsets); - -@@ -604,10 +618,16 @@ - pkt->flags |= AV_PKT_FLAG_KEY; - } - -- pkt->pts = x265pic_out.pts; -- pkt->dts = x265pic_out.dts; -+#if X265_BUILD >= 210 -+ x265pic_out = x265pic_lyrptr_out[0]; -+#else -+ x265pic_out = &x265pic_solo_out; -+#endif -+ -+ pkt->pts = x265pic_out->pts; -+ pkt->dts = x265pic_out->dts; - -- switch (x265pic_out.sliceType) { -+ switch (x265pic_out->sliceType) { - case X265_TYPE_IDR: - case X265_TYPE_I: - pict_type = AV_PICTURE_TYPE_I; -@@ -625,17 +645,17 @@ - } - - #if X265_BUILD >= 130 -- if (x265pic_out.sliceType == X265_TYPE_B) -+ if (x265pic_out->sliceType == X265_TYPE_B) - #else -- if (x265pic_out.frameData.sliceType == 'b') -+ if (x265pic_out->frameData.sliceType == 'b') - #endif - pkt->flags |= AV_PKT_FLAG_DISPOSABLE; - -- ff_side_data_set_encoder_stats(pkt, x265pic_out.frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type); -+ ff_side_data_set_encoder_stats(pkt, x265pic_out->frameData.qp * FF_QP2LAMBDA, NULL, 0, pict_type); - -- if (x265pic_out.userData) { -- memcpy(&avctx->reordered_opaque, x265pic_out.userData, sizeof(avctx->reordered_opaque)); -- av_freep(&x265pic_out.userData); -+ if (x265pic_out->userData) { -+ memcpy(&avctx->reordered_opaque, x265pic_out->userData, sizeof(avctx->reordered_opaque)); -+ av_freep(&x265pic_out->userData); - } else - avctx->reordered_opaque = 0; - diff --git a/linhes/paho-mqtt-c/PKGBUILD b/linhes/paho-mqtt-c/PKGBUILD index 28b07de..b434f81 100644 --- a/linhes/paho-mqtt-c/PKGBUILD +++ b/linhes/paho-mqtt-c/PKGBUILD @@ -1,21 +1,22 @@ # Maintainer: László Várady <laszlo.varady93@gmail.com> pkgname=paho-mqtt-c -pkgver=1.3.13 -pkgrel=1 +pkgver=1.3.14 +pkgrel=2 pkgdesc="Eclipse Paho C Client Library for the MQTT Protocol" -arch=('x86_64') +arch=('x86_64' 'aarch64' 'armv7h') url="https://www.eclipse.org/paho/" -license=('custom:EPL2' 'custom:EDL') +license=('EPL-2.0') depends=('openssl') makedepends=('cmake') source=("$pkgname-$pkgver.tar.gz::https://github.com/eclipse/paho.mqtt.c/archive/refs/tags/v${pkgver}.tar.gz") -sha256sums=('47c77e95609812da82feee30db435c3b7c720d4fd3147d466ead126e657b6d9c') +sha256sums=('7af7d906e60a696a80f1b7c2bd7d6eb164aaad908ff4c40c3332ac2006d07346') build() { cd "${pkgname//-/.}-${pkgver}" cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=/usr \ -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_SAMPLES=TRUE \ + -DCMAKE_C_STANDARD=11 \ -S . -B build cmake --build build } @@ -28,8 +29,4 @@ check() { package() { cd "${pkgname//-/.}-${pkgver}" DESTDIR="$pkgdir/" cmake --install build - - install -Dm644 LICENSE "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" - install -Dm644 edl-v10 "${pkgdir}/usr/share/licenses/${pkgname}/edl-v10" - install -Dm644 epl-v20 "${pkgdir}/usr/share/licenses/${pkgname}/epl-v20" } diff --git a/linhes/parsec-bin/PKGBUILD b/linhes/parsec-bin/PKGBUILD index 1398df2..44c2155 100644 --- a/linhes/parsec-bin/PKGBUILD +++ b/linhes/parsec-bin/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer : tadly <me@tadly.de> pkgname=parsec-bin -pkgver=150_95 +pkgver=150_97c pkgrel=1 pkgdesc='Remotely connect to a gaming pc for a low latency remote computing experience' url='http://parsec.app' @@ -12,7 +12,7 @@ depends=('gcc-libs' 'libglvnd' 'libxext' 'libxcb' 'ffmpeg4.4' 'openssl-1.1' 'lib optdepends=('libva: For hardware accelerated decoding') source=("$pkgname-$pkgver.deb::https://builds.parsecgaming.com/package/parsec-linux.deb") -sha256sums=('f45e7abbe8d88f60829616e71a52e2eb91714b556ad34728c70bbb9a3553635c') +sha256sums=('f1691ba3a97534604f5f640c26cceafaef672ccf7ab6eed66114d0abafc2cccf') #source_arm=("$pkgname-$pkgver.deb::https://builds.parsecgaming.com/package/parsec-rpi.deb") #sha256sums_arm=('a98e840dc44f4762018895bd0da704c88887815de0e74e0f39aa7737f5b0e802') diff --git a/linhes/perl-datetime-format-sqlite/PKGBUILD b/linhes/perl-datetime-format-sqlite/PKGBUILD index 9ef18b6..6897c8f 100644 --- a/linhes/perl-datetime-format-sqlite/PKGBUILD +++ b/linhes/perl-datetime-format-sqlite/PKGBUILD @@ -3,7 +3,7 @@ pkgname='perl-datetime-format-sqlite' pkgver='0.11' -pkgrel='3' +pkgrel='4' pkgdesc="Parse and format SQLite dates and times" arch=('any') license=('PerlArtistic' 'GPL') diff --git a/linhes/perl-lwp-useragent-determined/PKGBUILD b/linhes/perl-lwp-useragent-determined/PKGBUILD index 43d9912..f17ad89 100644 --- a/linhes/perl-lwp-useragent-determined/PKGBUILD +++ b/linhes/perl-lwp-useragent-determined/PKGBUILD @@ -4,7 +4,7 @@ pkgname='perl-lwp-useragent-determined' pkgver='1.07' -pkgrel='5' +pkgrel='6' pkgdesc="a virtual browser that retries errors" arch=('any') license=('PerlArtistic' 'GPL') diff --git a/linhes/perl-net-upnp/PKGBUILD b/linhes/perl-net-upnp/PKGBUILD index 3d52651..af94278 100644 --- a/linhes/perl-net-upnp/PKGBUILD +++ b/linhes/perl-net-upnp/PKGBUILD @@ -5,7 +5,7 @@ pkgname=perl-net-upnp pkgver=1.4.6 -pkgrel=3 +pkgrel=4 pkgdesc="Perl Module UPnP" arch=('x86_64') url="https://metacpan.org/release/Net-UPnP" diff --git a/linhes/perl-xml-dom/PKGBUILD b/linhes/perl-xml-dom/PKGBUILD index f2e4a8c..a104b6a 100644 --- a/linhes/perl-xml-dom/PKGBUILD +++ b/linhes/perl-xml-dom/PKGBUILD @@ -4,7 +4,7 @@ pkgname=perl-xml-dom pkgver=1.46 -pkgrel=1 +pkgrel=2 pkgdesc="Implements Level 1 of W3's DOM" arch=('any') url="http://search.cpan.org/dist/XML-DOM" diff --git a/linhes/perl-xml-treepp/PKGBUILD b/linhes/perl-xml-treepp/PKGBUILD index 4d2a664..b24896a 100644 --- a/linhes/perl-xml-treepp/PKGBUILD +++ b/linhes/perl-xml-treepp/PKGBUILD @@ -4,7 +4,7 @@ pkgname='perl-xml-treepp' pkgver='0.43' -pkgrel='3' +pkgrel='4' pkgdesc="Perl/CPAN Module XML::TreePP: Pure Perl implementation for parsing/writing XML documents" arch=('any') license=('PerlArtistic' 'GPL') diff --git a/linhes/plex-media-server/PKGBUILD b/linhes/plex-media-server/PKGBUILD index 1d742fa..42ff87f 100644 --- a/linhes/plex-media-server/PKGBUILD +++ b/linhes/plex-media-server/PKGBUILD @@ -10,8 +10,8 @@ # Contributor: Praekon <praekon@googlemail.com> pkgname=plex-media-server -pkgver=1.41.3.9314 -_pkgsum=a0bfb8370 +pkgver=1.42.2.10156 +_pkgsum=f737b826c pkgrel=1 pkgdesc='The back-end media server component of Plex.' arch=('x86_64' 'i686' 'armv7h' 'aarch64') @@ -39,10 +39,10 @@ sha256sums=('398ba7958598609453f5289b3d5f2389d2756158b340cf28e83c39d9ed60280b' 'c597bee0bcbb59ed791651555a904e5f7e9d2e82f6c6986b6352e5fc38e5b557' 'b7ff6525a3c7a8be885edc85bb523095f8e25ddb38873127e2a4e97b28f2c7ad' 'dbfb5a9a7146a975863c0932f1a68c4b040ec5d7e693361f39ddfbf60885e631') -sha256sums_x86_64=('8dd787f9a40a42c7d30061ae13e91a1d442e84f112f917438d161d00d339ed8a') -sha256sums_i686=('93a301b73c2a5e8ac6a0a148fe8cdf7c71126adc9e46fe1ccf7594085d70ba12') -sha256sums_armv7h=('efeeefb1c45f49af903de0f3c77ccd050931327d9c8a593b37658bc73544c1b9') -sha256sums_aarch64=('3150cc327558916e64eac42be0044fbf37f3af1bea37bd104be2172b7a4ea337') +sha256sums_x86_64=('5092d8ade2a2f0a1dfb1406d0d4f89d05758da8ca706c6faea8b0125836e8542') +sha256sums_i686=('9475c0f27061cf97057b8dd5e79f2ffe78baecb128e2e6939e3fbd05be6f6b0c') +sha256sums_armv7h=('051d072275814384560d700aae07f404f7c2a269be44dbbd57045765b86df25b') +sha256sums_aarch64=('566dfca0efb3845c87072e9f0ee32984395aa8ce3704874b9e243b5490cc0105') prepare() { if [[ $CARCH = armv7h ]] || [[ $CARCH = aarch64 ]]; then diff --git a/linhes/pyqt5-webengine/.nvchecker.toml b/linhes/pyqt5-webengine/.nvchecker.toml new file mode 100644 index 0000000..2eec446 --- /dev/null +++ b/linhes/pyqt5-webengine/.nvchecker.toml @@ -0,0 +1,3 @@ +[pyqt5-webengine] +source = 'pypi' +pypi = 'PyQtWebEngine' diff --git a/linhes/pyqt5-webengine/LICENSE b/linhes/pyqt5-webengine/LICENSE new file mode 100644 index 0000000..b87c5e4 --- /dev/null +++ b/linhes/pyqt5-webengine/LICENSE @@ -0,0 +1,12 @@ +Copyright Arch Linux Contributors + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/linhes/pyqt5-webengine/LICENSES/0BSD.txt b/linhes/pyqt5-webengine/LICENSES/0BSD.txt new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/linhes/pyqt5-webengine/LICENSES/0BSD.txt @@ -0,0 +1 @@ +../LICENSE
\ No newline at end of file diff --git a/linhes/pyqt5-webengine/PKGBUILD b/linhes/pyqt5-webengine/PKGBUILD new file mode 100644 index 0000000..e23fc1b --- /dev/null +++ b/linhes/pyqt5-webengine/PKGBUILD @@ -0,0 +1,33 @@ +# Maintainer: Antonio Rojas <arojas@archlinux.org> +# Maintainer: Felix Yan <felixonmars@archlinux.org> + +pkgbase=pyqt5-webengine +pkgname=(python-pyqt5-webengine) +pkgdesc="Python bindings for QtWebEngine" +pkgver=5.15.7 +pkgrel=2 +arch=(x86_64) +url="https://www.riverbankcomputing.com/software/pyqtwebengine/intro" +license=(GPL) +groups=(pyqt5) +depends=(python-pyqt5 qt5-webengine) +makedepends=(sip pyqt-builder) +conflicts=(pyqtwebengine-common python-pyqtwebwengine) +provides=(python-pyqtwebengine) +replaces=(python-pyqtwebengine) +source=("https://pypi.python.org/packages/source/P/PyQtWebEngine/PyQtWebEngine-$pkgver.tar.gz") +sha256sums=('f121ac6e4a2f96ac289619bcfc37f64e68362f24a346553f5d6c42efa4228a4d') + +build() { + cd PyQtWebEngine-$pkgver + sip-build \ + --no-make \ + --api-dir /usr/share/qt/qsci/api/python + cd build + make +} + +package_python-pyqt5-webengine() { + cd PyQtWebEngine-$pkgver/build + make INSTALL_ROOT="$pkgdir" install +} diff --git a/linhes/pyqt5-webengine/REUSE.toml b/linhes/pyqt5-webengine/REUSE.toml new file mode 100644 index 0000000..8501755 --- /dev/null +++ b/linhes/pyqt5-webengine/REUSE.toml @@ -0,0 +1,22 @@ +version = 1 + +[[annotations]] +path = [ + "PKGBUILD", + "README.md", + "keys/**", + ".SRCINFO", + ".nvchecker.toml", + "*.install", + "*.sysusers", + "*.tmpfiles", + "*.logrotate", + "*.pam", + "*.service", + "*.socket", + "*.timer", + "*.desktop", + "*.hook", +] +SPDX-FileCopyrightText = "Arch Linux contributors" +SPDX-License-Identifier = "0BSD" diff --git a/linhes/python-future/.nvchecker.toml b/linhes/python-future/.nvchecker.toml deleted file mode 100644 index 399c8bd..0000000 --- a/linhes/python-future/.nvchecker.toml +++ /dev/null @@ -1,3 +0,0 @@ -[python-future] -source = "pypi" -pypi = "future" diff --git a/linhes/python-future/PKGBUILD b/linhes/python-future/PKGBUILD deleted file mode 100644 index 8e6a2a2..0000000 --- a/linhes/python-future/PKGBUILD +++ /dev/null @@ -1,41 +0,0 @@ -# Contributor: Felix Yan <felixonmars@archlinux.org> -# Contributor: Christopher Arndt <aur -at- chrisarndt -dot- de> -# Contributor: Gaute Hope <eg@gaute.vetsj.com> -# Contributor: Melissa Padilla <mpadilla2 at hotmail dot com> - -pkgname=python-future -pkgver=1.0.0 -pkgrel=2 -pkgdesc="Clean single-source support for Python 3 and 2" -url="https://python-future.org/" -arch=('any') -license=('MIT') -depends=('python') -provides=('futurize' 'pasteurize') -#checkdepends=('python-requests' 'python-pytest') -makedepends=('python-build' 'python-installer' 'python-setuptools' 'python-wheel') -optdepends=('python-setuptools: futurize and pasteurize scripts') -options=('!emptydirs') -source=("https://pypi.io/packages/source/f/future/future-$pkgver.tar.gz") -sha512sums=('8e28d53172e3ae7b3b27c424a48fb698a6e86bf1c648cdf74e7fd57d34901a9bda18429fe4e176d70be67fc6c80b7f961b3021356594e38b5f294406af40bc61') - -build() { - cd "$srcdir"/future-$pkgver - python -m build --wheel -} -# https://github.com/PythonCharmers/python-future/issues/640 -# https://python-future.org/overview.html#status -#check() { -# cd "$srcdir"/future-$pkgver -# # test_future needs python2 so it is disabled here -# #PYTHONPATH="$PWD/build/lib:$PYTHONPATH" pytest -v tests/test_future -# PYTHONPATH="$PWD/build/lib:$PYTHONPATH" pytest -v tests/test_past -#} - -package() { - cd future-$pkgver - - python -m installer --destdir="$pkgdir" dist/*.whl - install -D -m644 LICENSE.txt \ - "$pkgdir"/usr/share/licenses/$pkgname/LICENSE.txt -} diff --git a/linhes/python-requests-cache/PKGBUILD b/linhes/python-requests-cache/PKGBUILD index 0ac11f8..e5ddc89 100644 --- a/linhes/python-requests-cache/PKGBUILD +++ b/linhes/python-requests-cache/PKGBUILD @@ -9,7 +9,7 @@ _base=requests-cache pkgname=python-${_base} pkgdesc="A persistent cache for python requests" pkgver=1.2.1 -pkgrel=1 +pkgrel=2 arch=(any) url="https://github.com/${_base}/${_base}" license=('custom:BSD-2-clause') @@ -39,7 +39,8 @@ build() { check() { cd ${_base}-${pkgver} - python -m pytest --ignore=tests/integration + #https://github.com/requests-cache/requests-cache/issues/1033 + python -m pytest --ignore=tests/integration --ignore=tests/unit/test_base_cache.py --ignore=tests/unit/test_session.py } package() { diff --git a/linhes/python-time-machine/PKGBUILD b/linhes/python-time-machine/PKGBUILD index a5b8230..b67e532 100644 --- a/linhes/python-time-machine/PKGBUILD +++ b/linhes/python-time-machine/PKGBUILD @@ -1,7 +1,7 @@ pkgname=python-time-machine _pkgname=time_machine pkgver=2.11.0 -pkgrel=3 +pkgrel=4 pkgdesc="Travel through time in your tests." arch=(any) url="https://github.com/adamchainz/time-machine" diff --git a/linhes/python-url-normalize/PKGBUILD b/linhes/python-url-normalize/PKGBUILD index 895753d..f25ef29 100644 --- a/linhes/python-url-normalize/PKGBUILD +++ b/linhes/python-url-normalize/PKGBUILD @@ -5,33 +5,31 @@ _base=url-normalize pkgname=python-${_base} pkgdesc="URL normalization for Python" -pkgver=1.4.3 -pkgrel=19 -arch=('any') +pkgver=2.2.1 +pkgrel=1 +arch=(any) url="https://github.com/niksite/${_base}" license=(MIT) -depends=(python-six) -makedepends=(python-build python-installer python-poetry) -checkdepends=(python-pytest-socket) -source=(${_base}-${pkgver}.tar.gz::${url}/archive/${pkgver}.tar.gz) -sha512sums=('46eaa1753b37e89d56cb19818144a7cf5b38653811720eb506732c35bb3732ef0c556420b22a9ee2c08e70e5b408aab7f44cea5e15d1ebe3d717c0c77706bfb8') +depends=(python-idna) +makedepends=(python-build python-installer python-setuptools python-wheel) +# checkdepends=(python-pytest) +source=(${_base}-${pkgver}.tar.gz::${url}/archive/v${pkgver}.tar.gz) +sha512sums=('51f57bf6d94863662789321b8965c0ca833d34d0c8095f2a39303a410f61c24f04a56e83258dafaa8a4250b0d1b44ad3c3a63430da2b04f4d906d84a71208f46') build() { cd ${_base}-${pkgver} - # Note: set `GIT_CEILING_DIRECTORIES` to prevent poetry - # from incorrectly using a parent git checkout info. - # https://github.com/pypa/build/issues/384#issuecomment-947675975 - GIT_CEILING_DIRECTORIES="${PWD}/.." python -m build --wheel --skip-dependency-check --no-isolation + python -m build --wheel --skip-dependency-check --no-isolation } -check() { - cd ${_base}-${pkgver} - # https://github.com/niksite/url-normalize/blob/master/tox.ini#L17 - pytest -o addopts=--disable-socket tests -} +# check() { +# cd ${_base}-${pkgver} +# python -m venv --system-site-packages test-env +# test-env/bin/python -m installer dist/*.whl +# test-env/bin/python -m pytest tests +# } package() { cd ${_base}-${pkgver} - python -m installer --destdir="${pkgdir}" dist/*.whl + PYTHONPYCACHEPREFIX="${PWD}/.cache/cpython/" python -m installer --destdir="${pkgdir}" dist/*.whl install -Dm 644 LICENSE -t "${pkgdir}/usr/share/licenses/${pkgname}" } diff --git a/linhes/qbittorrent-vuetorrent-bin/.SRCINFO b/linhes/qbittorrent-vuetorrent-bin/.SRCINFO index ccd5b17..002908c 100644 --- a/linhes/qbittorrent-vuetorrent-bin/.SRCINFO +++ b/linhes/qbittorrent-vuetorrent-bin/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = qbittorrent-vuetorrent-bin pkgdesc = The sleekest looking WebUI for qBittorrent made with Vue.js! - pkgver = 2.18.0 + pkgver = 2.28.2 pkgrel = 1 url = https://github.com/WDaan/VueTorrent install = qbittorrent-vuetorrent.install @@ -10,7 +10,7 @@ pkgbase = qbittorrent-vuetorrent-bin optdepends = qbittorrent-nox: for use with qbittorrent-nox provides = qbittorrent-vuetorrent conflicts = qbittorrent-vuetorrent - source = vuetorrent-2.18.0.zip::https://github.com/WDaan/VueTorrent/releases/download/v2.18.0/vuetorrent.zip - sha512sums = b89ae8bb0f1234c03cbdc78db2795c0fb4659d8f308e2cae5cef211d6a5eab67e6091e0cf0441789a3054a9f15270fb80a64e8ce30619c5da9bf95f02b1f54cd + source = vuetorrent-2.28.2.zip::https://github.com/WDaan/VueTorrent/releases/download/v2.28.2/vuetorrent.zip + sha512sums = c8c4b9a57e2b7e7fa9482204230e78d92a7a400a8baabe929ba983ef418eb34f43b8618cf18d72bae7807c672e28171e7d8aaac22b19d162a77842b3dbf1da67 pkgname = qbittorrent-vuetorrent-bin diff --git a/linhes/qbittorrent-vuetorrent-bin/PKGBUILD b/linhes/qbittorrent-vuetorrent-bin/PKGBUILD index 2f47dbb..f6ec27d 100644 --- a/linhes/qbittorrent-vuetorrent-bin/PKGBUILD +++ b/linhes/qbittorrent-vuetorrent-bin/PKGBUILD @@ -4,7 +4,7 @@ pkgname=qbittorrent-vuetorrent-bin _pkgname=vuetorrent -pkgver=2.18.0 +pkgver=2.28.2 pkgrel=1 pkgdesc='The sleekest looking WebUI for qBittorrent made with Vue.js!' @@ -21,7 +21,7 @@ optdepends=( install=qbittorrent-vuetorrent.install source=("${_pkgname}-$pkgver.zip::${url}/releases/download/v$pkgver/${_pkgname}.zip") -sha512sums=('b89ae8bb0f1234c03cbdc78db2795c0fb4659d8f308e2cae5cef211d6a5eab67e6091e0cf0441789a3054a9f15270fb80a64e8ce30619c5da9bf95f02b1f54cd') +sha512sums=('c8c4b9a57e2b7e7fa9482204230e78d92a7a400a8baabe929ba983ef418eb34f43b8618cf18d72bae7807c672e28171e7d8aaac22b19d162a77842b3dbf1da67') package() { cd "$srcdir/vuetorrent" diff --git a/linhes/qt5-webchannel/.nvchecker.toml b/linhes/qt5-webchannel/.nvchecker.toml new file mode 100644 index 0000000..685c4a1 --- /dev/null +++ b/linhes/qt5-webchannel/.nvchecker.toml @@ -0,0 +1,2 @@ +[qt5-webchannel] +source = "manual" diff --git a/linhes/qt5-webchannel/LICENSE b/linhes/qt5-webchannel/LICENSE new file mode 100644 index 0000000..b87c5e4 --- /dev/null +++ b/linhes/qt5-webchannel/LICENSE @@ -0,0 +1,12 @@ +Copyright Arch Linux Contributors + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/linhes/qt5-webchannel/LICENSES/0BSD.txt b/linhes/qt5-webchannel/LICENSES/0BSD.txt new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/linhes/qt5-webchannel/LICENSES/0BSD.txt @@ -0,0 +1 @@ +../LICENSE
\ No newline at end of file diff --git a/linhes/qt5-webchannel/PKGBUILD b/linhes/qt5-webchannel/PKGBUILD new file mode 100644 index 0000000..970c072 --- /dev/null +++ b/linhes/qt5-webchannel/PKGBUILD @@ -0,0 +1,46 @@ +# Maintainer: Felix Yan <felixonmars@archlinux.org> +# Contributor: Andrea Scarpino <andrea@archlinux.org> + +pkgname=qt5-webchannel +_basever=5.15.18 +pkgver=5.15.18+kde+r3 +pkgrel=1 +_commit=2a157921861e651f43456cb7941b250c89feb736 +arch=('x86_64') +url='https://www.qt.io' +license=('GPL3' 'LGPL3' 'FDL' 'custom') +pkgdesc='Provides access to QObject or QML objects from HTML clients for seamless integration of Qt applications with HTML/JavaScript clients' +depends=('qt5-declarative') +makedepends=('git') +groups=('qt5') +_pkgfqn=${pkgname/5-/} +source=(kde-$_pkgfqn::git+https://invent.kde.org/qt/qt/$_pkgfqn#commit=$_commit) +sha256sums=('fdff50abd1a3c5de03657f229caba43e68522911ade28ad0f6d6e53bc7517dde') + +pkgver() { + cd kde-$_pkgfqn + echo "$_basever+kde+r"`git rev-list --count v$_basever-lts-lgpl..$_commit` | sed -e 's|+kde+r0||' +} + +prepare() { + mkdir -p build +} + +build() { + cd build + + qmake ../kde-$_pkgfqn + make +} + +package() { + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + install -d "$pkgdir"/usr/share/licenses + ln -s /usr/share/licenses/qt5-base "$pkgdir"/usr/share/licenses/${pkgname} +} diff --git a/linhes/qt5-webchannel/README.md b/linhes/qt5-webchannel/README.md new file mode 100644 index 0000000..9c4dc74 --- /dev/null +++ b/linhes/qt5-webchannel/README.md @@ -0,0 +1,3 @@ +This package is part of the `qt5` suite, and is managed by the scripts at https://gitlab.archlinux.org/archlinux/kde-build. + +Do not upgrade this package individually, or make any format changes to the PKGBUILD without checking with the Qt package maintainers first. diff --git a/linhes/qt5-webchannel/REUSE.toml b/linhes/qt5-webchannel/REUSE.toml new file mode 100644 index 0000000..8501755 --- /dev/null +++ b/linhes/qt5-webchannel/REUSE.toml @@ -0,0 +1,22 @@ +version = 1 + +[[annotations]] +path = [ + "PKGBUILD", + "README.md", + "keys/**", + ".SRCINFO", + ".nvchecker.toml", + "*.install", + "*.sysusers", + "*.tmpfiles", + "*.logrotate", + "*.pam", + "*.service", + "*.socket", + "*.timer", + "*.desktop", + "*.hook", +] +SPDX-FileCopyrightText = "Arch Linux contributors" +SPDX-License-Identifier = "0BSD" diff --git a/linhes/qt5-webengine/.nvchecker.toml b/linhes/qt5-webengine/.nvchecker.toml new file mode 100644 index 0000000..4960664 --- /dev/null +++ b/linhes/qt5-webengine/.nvchecker.toml @@ -0,0 +1,6 @@ +[qt5-webengine] +source = 'git' +git = 'git://code.qt.io/qt/qtwebengine.git' +include_regex = 'v(\d.+)-lts' +from_pattern = 'v(\d.+)-lts' +to_pattern = '\1' diff --git a/linhes/qt5-webengine/LICENSE b/linhes/qt5-webengine/LICENSE new file mode 100644 index 0000000..b87c5e4 --- /dev/null +++ b/linhes/qt5-webengine/LICENSE @@ -0,0 +1,12 @@ +Copyright Arch Linux Contributors + +Permission to use, copy, modify, and/or distribute this software for +any purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL +WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE +FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY +DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/linhes/qt5-webengine/LICENSES/0BSD.txt b/linhes/qt5-webengine/LICENSES/0BSD.txt new file mode 120000 index 0000000..ea5b606 --- /dev/null +++ b/linhes/qt5-webengine/LICENSES/0BSD.txt @@ -0,0 +1 @@ +../LICENSE
\ No newline at end of file diff --git a/linhes/qt5-webengine/LICENSES/BSD-3-Clause.txt b/linhes/qt5-webengine/LICENSES/BSD-3-Clause.txt new file mode 100644 index 0000000..ea890af --- /dev/null +++ b/linhes/qt5-webengine/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,11 @@ +Copyright (c) <year> <owner>. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/linhes/qt5-webengine/PKGBUILD b/linhes/qt5-webengine/PKGBUILD new file mode 100644 index 0000000..eca0c9a --- /dev/null +++ b/linhes/qt5-webengine/PKGBUILD @@ -0,0 +1,87 @@ +# Maintainer: Felix Yan <felixonmars@archlinux.org> +# Contributor: Andrea Scarpino <andrea@archlinux.org> + +pkgname=qt5-webengine +_basever=5.15.18 +pkgver=5.15.19 +pkgrel=4 +arch=('x86_64') +url='https://www.qt.io' +license=('LGPL3' 'LGPL2.1' 'BSD') +pkgdesc='Provides support for web applications using the Chromium browser project' +depends=('qt5-webchannel' 'qt5-location' 'libxcomposite' 'libxrandr' 'pciutils' 'libxss' 'libxkbfile' 'libxdamage' + 'libevent' 'snappy' 'nss' 'libxslt' 'minizip' 'ffmpeg' 'libvpx' 'libxtst' 'ttf-font') +makedepends=('git' 'python' 'gperf' 'jsoncpp' 'ninja' 'qt5-tools' 'poppler' 'pipewire' 'nodejs' 'python-html5lib') +optdepends=('pipewire: WebRTC desktop sharing under Wayland') +groups=('qt5') +_pkgfqn=${pkgname/5-/} +source=(kde-$_pkgfqn::git+https://code.qt.io/qt/qtwebengine.git#tag=v${pkgver}-lts + git+https://code.qt.io/qt/qtwebengine-chromium.git + qt5-webengine-pipewire-0.3.patch + qt5-webengine-icu-75.patch + qt5-webengine-ninja-1.12.patch + qt5-webengine-gcc-15.patch + python3.12-six.patch + qt5-webengine-icu-78.patch) +sha256sums=('10ae73fd623eff84af2921ea2c83c723d9a847e23abbc8d862d0dc346382ef9b' + 'SKIP' + '5e3a3c4711d964d5152a04059a2b5c1d14bb13dd29bce370120f60e85b476b6f' + '7cac28ba784d24b4abf6414079548ada165343af507ecd8e23cbe7e4f63ae52f' + '6672741b64d896dc555c8ee42ca2329c4f20d5f406095a69fe72da44b3a142f4' + '813851a1c7de9947afab28b7f3cb26ca739254521f12c21f76a6a3ec164def24' + 'ac87ec55ee5cbcf2d520e1ea433d041c0bf754271a17f859edbb9976f192ce3f' + 'f5cf66e4006ca81def2625088e7dd2fc925a0a617b4b88d1a19f030b60b9ad96') + +prepare() { + mkdir -p build + + cd kde-$_pkgfqn + git submodule init + git submodule set-url src/3rdparty "$srcdir"/qtwebengine-chromium + git submodule set-branch --branch 87-based src/3rdparty + git -c protocol.file.allow=always submodule update + + patch -p1 -d src/3rdparty -i "$srcdir"/qt5-webengine-pipewire-0.3.patch # Port to pipewire 0.3 + patch -p2 -d src/3rdparty/chromium -i "$srcdir"/qt5-webengine-icu-75.patch # Fix build with ICU 75 + patch -p2 -d src/3rdparty/chromium -i "$srcdir"/qt5-webengine-ninja-1.12.patch # Fix build with ninja 1.12 + patch -p1 -d src/3rdparty/chromium -i "$srcdir"/python3.12-six.patch # Fix build with python 3.12 - patch from Debian + patch -p1 -i "$srcdir"/qt5-webengine-gcc-15.patch # Fix build with GCC 15 (Fedora) + patch -Np1 -i "$srcdir"/qt5-webengine-icu-78.patch # Fix build with ICU78 +# Fix build with python 3.13 + sed -e '/import pipes/d' -i src/3rdparty/chromium/build/android/gyp/util/build_utils.py +} + +build() { + # this uses malloc_usable_size, which is incompatible with fortification level 3 + export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" + export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" + + cd build + qmake ../kde-$_pkgfqn CONFIG+=force_debug_info -- \ + -proprietary-codecs \ + -webp \ + -webengine-icu \ + -spellchecker \ + -webengine-kerberos \ + -webengine-webrtc-pipewire \ + -webengine-python-version python3 + make +} + +package() { + # this uses malloc_usable_size, which is incompatible with fortification level 3 + export CFLAGS="${CFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" + export CXXFLAGS="${CXXFLAGS/_FORTIFY_SOURCE=3/_FORTIFY_SOURCE=2}" + + cd build + make INSTALL_ROOT="$pkgdir" install + + # Drop QMAKE_PRL_BUILD_DIR because reference the build dir + find "$pkgdir/usr/lib" -type f -name '*.prl' \ + -exec sed -i -e '/^QMAKE_PRL_BUILD_DIR/d' {} \; + + install -Dm644 "$srcdir"/kde-$_pkgfqn/src/3rdparty/chromium/LICENSE "$pkgdir"/usr/share/licenses/${pkgname}/LICENSE.chromium + + # Fix cmake dependency versions + sed -e "s|$pkgver\ |$_basever |" -i "$pkgdir"/usr/lib/cmake/*/*Config.cmake +} diff --git a/linhes/qt5-webengine/README.md b/linhes/qt5-webengine/README.md new file mode 100644 index 0000000..9c4dc74 --- /dev/null +++ b/linhes/qt5-webengine/README.md @@ -0,0 +1,3 @@ +This package is part of the `qt5` suite, and is managed by the scripts at https://gitlab.archlinux.org/archlinux/kde-build. + +Do not upgrade this package individually, or make any format changes to the PKGBUILD without checking with the Qt package maintainers first. diff --git a/linhes/qt5-webengine/REUSE.toml b/linhes/qt5-webengine/REUSE.toml new file mode 100644 index 0000000..956ef39 --- /dev/null +++ b/linhes/qt5-webengine/REUSE.toml @@ -0,0 +1,36 @@ +version = 1 + +[[annotations]] +path = [ + "PKGBUILD", + "README.md", + "keys/**", + ".SRCINFO", + ".nvchecker.toml", + "*.install", + "*.sysusers", + "*.tmpfiles", + "*.logrotate", + "*.pam", + "*.service", + "*.socket", + "*.timer", + "*.desktop", + "*.hook", +] +SPDX-FileCopyrightText = "Arch Linux contributors" +SPDX-License-Identifier = "0BSD" + +[[annotations]] +path = [ + "python3.12-imp.patch", + "python3.12-six.patch", + "qt5-webengine-ffmpeg5.patch", + "qt5-webengine-ffmpeg7.patch", + "qt5-webengine-gcc-15.patch", + "qt5-webengine-icu-75.patch", + "qt5-webengine-ninja-1.12.patch", + "qt5-webengine-pipewire-0.3.patch", +] +SPDX-FileCopyrightText = "qt5-webengine contributors" +SPDX-License-Identifier = "BSD-3-Clause" diff --git a/linhes/qt5-webengine/python3.12-imp.patch b/linhes/qt5-webengine/python3.12-imp.patch new file mode 100644 index 0000000..f7cb480 --- /dev/null +++ b/linhes/qt5-webengine/python3.12-imp.patch @@ -0,0 +1,26 @@ +Description: stop using imp module which was removed in Python 3.12 +Origin: upstream, commits + https://chromium.googlesource.com/chromium/src/+/9e0c89a3b5638ba2 + https://chromium.googlesource.com/chromium/src/+/f5f6e361d037c316 +Last-Update: 2024-03-17 + +--- a/mojo/public/tools/mojom/mojom/fileutil.py ++++ b/mojo/public/tools/mojom/mojom/fileutil.py +@@ -3,7 +3,6 @@ + # found in the LICENSE file. + + import errno +-import imp + import os.path + import sys + +--- a/mojo/public/tools/mojom/mojom/parse/lexer.py ++++ b/mojo/public/tools/mojom/mojom/parse/lexer.py +@@ -2,7 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import imp + import os.path + import sys + diff --git a/linhes/qt5-webengine/python3.12-six.patch b/linhes/qt5-webengine/python3.12-six.patch new file mode 100644 index 0000000..4aef50b --- /dev/null +++ b/linhes/qt5-webengine/python3.12-six.patch @@ -0,0 +1,58 @@ +Patch-Source: https://sources.debian.org/data/main/q/qtwebengine-opensource-src/5.15.16+dfsg-3/debian/patches/python3.12-six.patch +-- +Description: implement find_spec() for _SixMetaPathImporter +Origin: upstream, https://github.com/benjaminp/six/commit/25916292d96f5f09 +Last-Update: 2024-03-17 + +--- a/third_party/protobuf/third_party/six/six.py ++++ b/third_party/protobuf/third_party/six/six.py +@@ -71,6 +71,11 @@ else: + MAXSIZE = int((1 << 63) - 1) + del X + ++if PY34: ++ from importlib.util import spec_from_loader ++else: ++ spec_from_loader = None ++ + + def _add_doc(func, doc): + """Add documentation to a function.""" +@@ -186,6 +191,11 @@ class _SixMetaPathImporter(object): + return self + return None + ++ def find_spec(self, fullname, path, target=None): ++ if fullname in self.known_modules: ++ return spec_from_loader(fullname, self) ++ return None ++ + def __get_module(self, fullname): + try: + return self.known_modules[fullname] +--- a/tools/grit/third_party/six/__init__.py ++++ b/tools/grit/third_party/six/__init__.py +@@ -71,6 +71,11 @@ else: + MAXSIZE = int((1 << 63) - 1) + del X + ++if PY34: ++ from importlib.util import spec_from_loader ++else: ++ spec_from_loader = None ++ + + def _add_doc(func, doc): + """Add documentation to a function.""" +@@ -186,6 +191,11 @@ class _SixMetaPathImporter(object): + return self + return None + ++ def find_spec(self, fullname, path, target=None): ++ if fullname in self.known_modules: ++ return spec_from_loader(fullname, self) ++ return None ++ + def __get_module(self, fullname): + try: + return self.known_modules[fullname] diff --git a/linhes/qt5-webengine/qt5-webengine-gcc-15.patch b/linhes/qt5-webengine/qt5-webengine-gcc-15.patch new file mode 100644 index 0000000..4b47240 --- /dev/null +++ b/linhes/qt5-webengine/qt5-webengine-gcc-15.patch @@ -0,0 +1,443 @@ +diff --git a/src/3rdparty/chromium/base/debug/profiler.h b/src/3rdparty/chromium/base/debug/profiler.h +index be6e272e0..b27f5f690 100644 +--- a/src/3rdparty/chromium/base/debug/profiler.h ++++ b/src/3rdparty/chromium/base/debug/profiler.h +@@ -5,6 +5,7 @@ + #ifndef BASE_DEBUG_PROFILER_H_ + #define BASE_DEBUG_PROFILER_H_ + ++#include <cstdint> + #include <stddef.h> + #include <cstdint> + +diff --git a/src/3rdparty/chromium/cc/trees/target_property.cc b/src/3rdparty/chromium/cc/trees/target_property.cc +index 00595fda0..ebd8c605a 100644 +--- a/src/3rdparty/chromium/cc/trees/target_property.cc ++++ b/src/3rdparty/chromium/cc/trees/target_property.cc +@@ -6,6 +6,10 @@ + + #include "cc/trees/target_property.h" + ++#include <cstdint> ++ ++#include <cstdint> ++ + namespace cc { + + static_assert(TargetProperty::LAST_TARGET_PROPERTY < kMaxTargetPropertyIndex, +diff --git a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc +index 98266a16c..7676e6097 100644 +--- a/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc ++++ b/src/3rdparty/chromium/device/base/synchronization/one_writer_seqlock.cc +@@ -6,6 +6,8 @@ + + #include "device/base/synchronization/one_writer_seqlock.h" + ++#include <cstdint> ++ + namespace device { + + OneWriterSeqLock::OneWriterSeqLock() : sequence_(0) {} +diff --git a/src/3rdparty/chromium/extensions/common/constants.h b/src/3rdparty/chromium/extensions/common/constants.h +index e6183dc11..5a12758ac 100644 +--- a/src/3rdparty/chromium/extensions/common/constants.h ++++ b/src/3rdparty/chromium/extensions/common/constants.h +@@ -13,6 +13,8 @@ + #include "components/version_info/channel.h" + #include "ui/base/layout.h" + ++#include <cstdint> ++ + namespace extensions { + + // Scheme we serve extension content from. +diff --git a/src/3rdparty/chromium/gpu/config/gpu_preferences.h b/src/3rdparty/chromium/gpu/config/gpu_preferences.h +index 57bda1f99..7a5ef9b3a 100644 +--- a/src/3rdparty/chromium/gpu/config/gpu_preferences.h ++++ b/src/3rdparty/chromium/gpu/config/gpu_preferences.h +@@ -5,6 +5,7 @@ + #ifndef GPU_CONFIG_GPU_PREFERENCES_H_ + #define GPU_CONFIG_GPU_PREFERENCES_H_ + ++#include <cstdint> + #include <stddef.h> + #include <cstdint> + #include <string> +diff --git a/src/3rdparty/chromium/net/base/parse_number.h b/src/3rdparty/chromium/net/base/parse_number.h +index 301d14ac8..378058a23 100644 +--- a/src/3rdparty/chromium/net/base/parse_number.h ++++ b/src/3rdparty/chromium/net/base/parse_number.h +@@ -11,6 +11,8 @@ + #include "base/strings/string_piece.h" + #include "net/base/net_export.h" + ++#include <cstdint> ++ + // This file contains utility functions for parsing numbers, in the context of + // network protocols. + // +diff --git a/src/3rdparty/chromium/pdf/document_attachment_info.h b/src/3rdparty/chromium/pdf/document_attachment_info.h +index fd78cb729..f9330a0db 100644 +--- a/src/3rdparty/chromium/pdf/document_attachment_info.h ++++ b/src/3rdparty/chromium/pdf/document_attachment_info.h +@@ -9,6 +9,8 @@ + + #include "base/strings/string16.h" + ++#include <cstdint> ++ + namespace chrome_pdf { + + struct DocumentAttachmentInfo { +diff --git a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h +index ac0b31a75..5d1c421d0 100644 +--- a/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h ++++ b/src/3rdparty/chromium/ppapi/utility/completion_callback_factory_thread_traits.h +@@ -38,6 +38,10 @@ namespace pp { + /// As a further optimization, we can add support for this later. + class ThreadSafeThreadTraits { + public: ++ ++ typedef pp::Lock Lock; ++ typedef pp::AutoLock AutoLock; ++ + class RefCount { + public: + /// Default constructor. In debug mode, this checks that the object is being +@@ -67,8 +71,6 @@ class ThreadSafeThreadTraits { + int32_t ref_; + }; + +- typedef pp::Lock Lock; +- typedef pp::AutoLock AutoLock; + }; + + /// The non-thread-safe version of thread traits. Using this class as the +diff --git a/src/3rdparty/chromium/third_party/angle/src/common/angleutils.h b/src/3rdparty/chromium/third_party/angle/src/common/angleutils.h +index fb9a44225..f9330f313 100644 +--- a/src/3rdparty/chromium/third_party/angle/src/common/angleutils.h ++++ b/src/3rdparty/chromium/third_party/angle/src/common/angleutils.h +@@ -15,6 +15,7 @@ + # include "absl/container/flat_hash_map.h" + #endif // defined(ANGLE_USE_ABSEIL) + ++#include <cstdint> + #include <climits> + #include <cstdarg> + #include <cstddef> +diff --git a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc +index 4e8788bc4..a5d35b31b 100644 +--- a/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc ++++ b/src/3rdparty/chromium/third_party/libgav1/src/src/utils/threadpool.cc +@@ -31,6 +31,7 @@ + #include <cstdio> + #include <cstdint> + #include <cstring> ++#include <cstdio> + #include <new> + #include <utility> + +diff --git a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h +index 098433c47..0820bb220 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h ++++ b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/proto/proto_importer_module.h +@@ -23,6 +23,8 @@ + #include "perfetto/trace_processor/status.h" + #include "src/trace_processor/trace_blob_view.h" + ++#include <cstdint> ++ + namespace perfetto { + + namespace protos { +diff --git a/src/3rdparty/chromium/ui/events/gesture_event_details.h b/src/3rdparty/chromium/ui/events/gesture_event_details.h +index d20416738..8dadab3d0 100644 +--- a/src/3rdparty/chromium/ui/events/gesture_event_details.h ++++ b/src/3rdparty/chromium/ui/events/gesture_event_details.h +@@ -5,6 +5,7 @@ + #ifndef UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DETAILS_H_ + #define UI_EVENTS_GESTURE_DETECTION_GESTURE_EVENT_DETAILS_H_ + ++#include <cstdint> + #include <string.h> + + #include "base/check_op.h" +diff --git a/src/3rdparty/chromium/ui/gl/gl_surface_glx.cc b/src/3rdparty/chromium/ui/gl/gl_surface_glx.cc +index 1d5527691..ef9d5ce13 100644 +--- a/src/3rdparty/chromium/ui/gl/gl_surface_glx.cc ++++ b/src/3rdparty/chromium/ui/gl/gl_surface_glx.cc +@@ -4,6 +4,7 @@ + + #include "ui/gl/gl_surface_glx.h" + ++#include <cstdint> + #include <utility> + + #include "base/bind.h" +diff --git a/src/3rdparty/chromium/ui/gl/gl_surface_glx.h b/src/3rdparty/chromium/ui/gl/gl_surface_glx.h +index ab612cd87..2178d8514 100644 +--- a/src/3rdparty/chromium/ui/gl/gl_surface_glx.h ++++ b/src/3rdparty/chromium/ui/gl/gl_surface_glx.h +@@ -5,6 +5,7 @@ + #ifndef UI_GL_GL_SURFACE_GLX_H_ + #define UI_GL_GL_SURFACE_GLX_H_ + ++#include <cstdint> + #include <stdint.h> + + #include <memory> +diff --git a/src/3rdparty/chromium/v8/src/base/logging.h b/src/3rdparty/chromium/v8/src/base/logging.h +index 7c774ed30..1c44cf72a 100644 +--- a/src/3rdparty/chromium/v8/src/base/logging.h ++++ b/src/3rdparty/chromium/v8/src/base/logging.h +@@ -5,6 +5,7 @@ + #ifndef V8_BASE_LOGGING_H_ + #define V8_BASE_LOGGING_H_ + ++#include <cstdint> + #include <cstring> + #include <cstdint> + #include <sstream> +diff --git a/src/core/browsing_data_remover_delegate_qt.h b/src/core/browsing_data_remover_delegate_qt.h +index 5adfbbe7e..4e5c59e33 100644 +--- a/src/core/browsing_data_remover_delegate_qt.h ++++ b/src/core/browsing_data_remover_delegate_qt.h +@@ -44,6 +44,8 @@ + + #include "content/public/browser/browsing_data_remover_delegate.h" + ++#include <cstdint> ++ + namespace QtWebEngineCore { + + class BrowsingDataRemoverDelegateQt : public content::BrowsingDataRemoverDelegate { +diff --git a/src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h b/src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h +index 90b1efd31..63526a738 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h ++++ b/src/3rdparty/chromium/third_party/webrtc/api/task_queue/task_queue_base.h +@@ -10,6 +10,7 @@ + #ifndef API_TASK_QUEUE_TASK_QUEUE_BASE_H_ + #define API_TASK_QUEUE_TASK_QUEUE_BASE_H_ + ++#include <cstdint> + #include <memory> + + #include "api/task_queue/queued_task.h" +diff --git a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.cc b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.cc +index 8a30c7f32..4934432cc 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.cc ++++ b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.cc +@@ -20,6 +20,8 @@ + #include "perfetto/base/build_config.h" + #include "perfetto/base/compiler.h" + ++#include <cstdint> ++ + #if PERFETTO_BUILDFLAG(PERFETTO_ZLIB) + #include <zlib.h> + #else +diff --git a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.h b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.h +index 624363ff6..6d717fba4 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.h ++++ b/src/3rdparty/chromium/third_party/perfetto/src/trace_processor/importers/gzip/gzip_utils.h +@@ -17,6 +17,7 @@ + #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_GZIP_GZIP_UTILS_H_ + #define SRC_TRACE_PROCESSOR_IMPORTERS_GZIP_GZIP_UTILS_H_ + ++#include <cstdint> + #include <memory> + + struct z_stream_s; +diff --git a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/tracing/core/slice.h b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/tracing/core/slice.h +index 4ce66fdea..3f3932b22 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/tracing/core/slice.h ++++ b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/ext/tracing/core/slice.h +@@ -20,6 +20,7 @@ + #include <stddef.h> + #include <string.h> + ++#include <cstdint> + #include <memory> + #include <string> + #include <vector> +diff --git a/src/3rdparty/chromium/third_party/perfetto/src/tracing/core/trace_packet.cc b/src/3rdparty/chromium/third_party/perfetto/src/tracing/core/trace_packet.cc +index 0dea150c1..c3def1683 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/src/tracing/core/trace_packet.cc ++++ b/src/3rdparty/chromium/third_party/perfetto/src/tracing/core/trace_packet.cc +@@ -19,6 +19,8 @@ + #include "perfetto/base/logging.h" + #include "perfetto/protozero/proto_utils.h" + ++#include <cstdint> ++ + namespace perfetto { + + TracePacket::TracePacket() = default; +diff --git a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/tracing_backend.h b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/tracing_backend.h +index 67b0d2eb5..3c2462de5 100644 +--- a/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/tracing_backend.h ++++ b/src/3rdparty/chromium/third_party/perfetto/include/perfetto/tracing/tracing_backend.h +@@ -17,6 +17,7 @@ + #ifndef INCLUDE_PERFETTO_TRACING_TRACING_BACKEND_H_ + #define INCLUDE_PERFETTO_TRACING_TRACING_BACKEND_H_ + ++#include <cstdint> + #include <memory> + #include <string> + +diff --git a/src/3rdparty/chromium/base/task/thread_pool.h b/src/3rdparty/chromium/base/task/thread_pool.h +index 085c249ba..afc674ca7 100644 +--- a/src/3rdparty/chromium/base/task/thread_pool.h ++++ b/src/3rdparty/chromium/base/task/thread_pool.h +@@ -5,6 +5,7 @@ + #ifndef BASE_TASK_THREAD_POOL_H_ + #define BASE_TASK_THREAD_POOL_H_ + ++#include <cstdint> + #include <memory> + #include <utility> + +diff --git a/src/3rdparty/chromium/net/tools/huffman_trie/trie_entry.h b/src/3rdparty/chromium/net/tools/huffman_trie/trie_entry.h +index fe70260f9..eac6a7fc2 100644 +--- a/src/3rdparty/chromium/net/tools/huffman_trie/trie_entry.h ++++ b/src/3rdparty/chromium/net/tools/huffman_trie/trie_entry.h +@@ -5,6 +5,7 @@ + #ifndef NET_TOOLS_HUFFMAN_TRIE_TRIE_ENTRY_H_ + #define NET_TOOLS_HUFFMAN_TRIE_TRIE_ENTRY_H_ + ++#include <cstdint> + #include <memory> + #include <string> + #include <vector> +diff --git a/src/3rdparty/chromium/third_party/webrtc/api/fec_controller.h b/src/3rdparty/chromium/third_party/webrtc/api/fec_controller.h +index 3e5f7bb21..87777a53f 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/api/fec_controller.h ++++ b/src/3rdparty/chromium/third_party/webrtc/api/fec_controller.h +@@ -11,6 +11,7 @@ + #ifndef API_FEC_CONTROLLER_H_ + #define API_FEC_CONTROLLER_H_ + ++#include <cstdint> + #include <memory> + #include <vector> + +diff --git a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/timestamp_map.h b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/timestamp_map.h +index c85666c9a..dfb90e447 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/timestamp_map.h ++++ b/src/3rdparty/chromium/third_party/webrtc/modules/video_coding/timestamp_map.h +@@ -11,6 +11,7 @@ + #ifndef MODULES_VIDEO_CODING_TIMESTAMP_MAP_H_ + #define MODULES_VIDEO_CODING_TIMESTAMP_MAP_H_ + ++#include <cstdint> + #include <memory> + + namespace webrtc { +diff --git a/src/3rdparty/chromium/third_party/webrtc/api/network_state_predictor.h b/src/3rdparty/chromium/third_party/webrtc/api/network_state_predictor.h +index 9cf5ab6f0..2d165baa5 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/api/network_state_predictor.h ++++ b/src/3rdparty/chromium/third_party/webrtc/api/network_state_predictor.h +@@ -11,6 +11,7 @@ + #ifndef API_NETWORK_STATE_PREDICTOR_H_ + #define API_NETWORK_STATE_PREDICTOR_H_ + ++#include <cstdint> + #include <memory> + #include <vector> + +diff --git a/src/3rdparty/chromium/gpu/command_buffer/common/skia_utils.h b/src/3rdparty/chromium/gpu/command_buffer/common/skia_utils.h +index 6508d79a1..a9f9528f1 100644 +--- a/src/3rdparty/chromium/gpu/command_buffer/common/skia_utils.h ++++ b/src/3rdparty/chromium/gpu/command_buffer/common/skia_utils.h +@@ -5,6 +5,7 @@ + #ifndef GPU_COMMAND_BUFFER_COMMON_SKIA_UTILS_H_ + #define GPU_COMMAND_BUFFER_COMMON_SKIA_UTILS_H_ + ++#include <cstdint> + #include <memory> + + #include "base/optional.h" +diff --git a/src/3rdparty/chromium/gpu/command_buffer/service/gpu_fence_manager.h b/src/3rdparty/chromium/gpu/command_buffer/service/gpu_fence_manager.h +index ee50d6fdd..576f6e3bc 100644 +--- a/src/3rdparty/chromium/gpu/command_buffer/service/gpu_fence_manager.h ++++ b/src/3rdparty/chromium/gpu/command_buffer/service/gpu_fence_manager.h +@@ -5,6 +5,7 @@ + #ifndef GPU_COMMAND_BUFFER_SERVICE_GPU_FENCE_MANAGER_H_ + #define GPU_COMMAND_BUFFER_SERVICE_GPU_FENCE_MANAGER_H_ + ++#include <cstdint> + #include <memory> + #include <vector> + +diff --git a/src/3rdparty/chromium/third_party/pdfium/core/fpdfapi/page/cpdf_function.h b/src/3rdparty/chromium/third_party/pdfium/core/fpdfapi/page/cpdf_function.h +index fd68b6b49..dc7c015d5 100644 +--- a/src/3rdparty/chromium/third_party/pdfium/core/fpdfapi/page/cpdf_function.h ++++ b/src/3rdparty/chromium/third_party/pdfium/core/fpdfapi/page/cpdf_function.h +@@ -7,6 +7,7 @@ + #ifndef CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_ + #define CORE_FPDFAPI_PAGE_CPDF_FUNCTION_H_ + ++#include <cstdint> + #include <memory> + #include <set> + #include <vector> +diff --git a/src/3rdparty/chromium/third_party/pdfium/core/fxcodec/jbig2/JBig2_DocumentContext.h b/src/3rdparty/chromium/third_party/pdfium/core/fxcodec/jbig2/JBig2_DocumentContext.h +index 9bcdd371e..5921794f1 100644 +--- a/src/3rdparty/chromium/third_party/pdfium/core/fxcodec/jbig2/JBig2_DocumentContext.h ++++ b/src/3rdparty/chromium/third_party/pdfium/core/fxcodec/jbig2/JBig2_DocumentContext.h +@@ -7,6 +7,7 @@ + #ifndef CORE_FXCODEC_JBIG2_JBIG2_DOCUMENTCONTEXT_H_ + #define CORE_FXCODEC_JBIG2_JBIG2_DOCUMENTCONTEXT_H_ + ++#include <cstdint> + #include <list> + #include <memory> + #include <utility> +diff --git a/src/3rdparty/chromium/third_party/pdfium/third_party/base/span.h b/src/3rdparty/chromium/third_party/pdfium/third_party/base/span.h +index bb07f43a0..0b7daf775 100644 +--- a/src/3rdparty/chromium/third_party/pdfium/third_party/base/span.h ++++ b/src/3rdparty/chromium/third_party/pdfium/third_party/base/span.h +@@ -9,6 +9,7 @@ + + #include <algorithm> + #include <array> ++#include <cstdint> + #include <iterator> + #include <type_traits> + #include <utility> +diff --git a/src/3rdparty/chromium/third_party/webrtc/video/stats_counter.h b/src/3rdparty/chromium/third_party/webrtc/video/stats_counter.h +index fb6017f41..ed5530ca0 100644 +--- a/src/3rdparty/chromium/third_party/webrtc/video/stats_counter.h ++++ b/src/3rdparty/chromium/third_party/webrtc/video/stats_counter.h +@@ -11,6 +11,7 @@ + #ifndef VIDEO_STATS_COUNTER_H_ + #define VIDEO_STATS_COUNTER_H_ + ++#include <cstdint> + #include <memory> + #include <string> + +diff --git a/src/3rdparty/chromium/third_party/woff2/include/woff2/output.h b/src/3rdparty/chromium/third_party/woff2/include/woff2/output.h +index c325f67be..5c4dc4d18 100644 +--- a/src/3rdparty/chromium/third_party/woff2/include/woff2/output.h ++++ b/src/3rdparty/chromium/third_party/woff2/include/woff2/output.h +@@ -10,6 +10,7 @@ + #define WOFF2_WOFF2_OUT_H_ + + #include <algorithm> ++#include <cstdint> + #include <cstring> + #include <memory> + #include <string> +diff --git a/chromium/cc/input/main_thread_scrolling_reason.h b/chromium/cc/input/main_thread_scrolling_reason.h +index 4ddd536afcc..dc1bc072790 100644 +--- a/src/3rdparty/chromium/cc/input/main_thread_scrolling_reason.h ++++ b/src/3rdparty/chromium/cc/input/main_thread_scrolling_reason.h +@@ -7,6 +7,7 @@ + + #include <memory> + #include <string> ++#include <cstdint> + #include "cc/cc_export.h" + + namespace base { diff --git a/linhes/qt5-webengine/qt5-webengine-icu-75.patch b/linhes/qt5-webengine/qt5-webengine-icu-75.patch new file mode 100644 index 0000000..6178a2c --- /dev/null +++ b/linhes/qt5-webengine/qt5-webengine-icu-75.patch @@ -0,0 +1,99 @@ +diff --git a/chromium/build/config/compiler/BUILD.gn b/chromium/build/config/compiler/BUILD.gn +index b511a58c5a8..abd78a74ead 100644 +--- a/chromium/build/config/compiler/BUILD.gn ++++ b/chromium/build/config/compiler/BUILD.gn +@@ -566,7 +566,7 @@ config("compiler") { + # Override Chromium's default for projects that wish to stay on C++11. + cflags_cc += [ "-std=${standard_prefix}++11" ] + } else { +- cflags_cc += [ "-std=${standard_prefix}++14" ] ++ cflags_cc += [ "-std=${standard_prefix}++17" ] + } + } else if (!is_win && !is_nacl) { + if (target_os == "android") { +diff --git a/chromium/base/allocator/partition_allocator/partition_alloc_constants.h b/chromium/base/allocator/partition_allocator/partition_alloc_constants.h +index f03ba1e4ab4..b1495f7ae74 100644 +--- a/chromium/base/allocator/partition_allocator/partition_alloc_constants.h ++++ b/chromium/base/allocator/partition_allocator/partition_alloc_constants.h +@@ -195,7 +195,7 @@ NumPartitionPagesPerSuperPage() { + // + // __STDCPP_DEFAULT_NEW_ALIGNMENT__ is C++17. As such, it is not defined on all + // platforms, as Chrome's requirement is C++14 as of 2020. +-#if defined(__STDCPP_DEFAULT_NEW_ALIGNMENT__) ++#if 0 + static constexpr size_t kAlignment = + std::max(alignof(std::max_align_t), __STDCPP_DEFAULT_NEW_ALIGNMENT__); + #else +diff --git a/chromium/third_party/webrtc/common_video/h264/sps_parser.h b/chromium/third_party/webrtc/common_video/h264/sps_parser.h +index 76e627d27a3..942435f44a0 100644 +--- a/chromium/third_party/webrtc/common_video/h264/sps_parser.h ++++ b/chromium/third_party/webrtc/common_video/h264/sps_parser.h +@@ -12,6 +12,7 @@ + #define COMMON_VIDEO_H264_SPS_PARSER_H_ + + #include "absl/types/optional.h" ++#include <cstdint> + + namespace rtc { + class BitBuffer; +diff --git a/chromium/third_party/webrtc/common_video/h264/pps_parser.h b/chromium/third_party/webrtc/common_video/h264/pps_parser.h +index d6c31b06887..d8852dfd186 100644 +--- a/chromium/third_party/webrtc/common_video/h264/pps_parser.h ++++ b/chromium/third_party/webrtc/common_video/h264/pps_parser.h +@@ -12,6 +12,7 @@ + #define COMMON_VIDEO_H264_PPS_PARSER_H_ + + #include "absl/types/optional.h" ++#include <cstdint> + + namespace rtc { + class BitBuffer; +diff --git a/chromium/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h b/chromium/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h +index 3b9971abae1..d4458038527 100644 +--- a/chromium/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h ++++ b/chromium/third_party/webrtc/modules/audio_processing/aec3/reverb_model_estimator.h +@@ -13,6 +13,7 @@ + + #include <array> + #include <vector> ++#include <memory> + + #include "absl/types/optional.h" + #include "api/array_view.h" +diff --git a/chromium/third_party/webrtc/modules/include/module_common_types_public.h b/chromium/third_party/webrtc/modules/include/module_common_types_public.h +index 345e45ce127..e686e5d691a 100644 +--- a/chromium/third_party/webrtc/modules/include/module_common_types_public.h ++++ b/chromium/third_party/webrtc/modules/include/module_common_types_public.h +@@ -12,6 +12,7 @@ + #define MODULES_INCLUDE_MODULE_COMMON_TYPES_PUBLIC_H_ + + #include <limits> ++#include <cstdint> + + #include "absl/types/optional.h" + +diff --git a/chromium/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc b/chromium/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc +index 8fcc799b795..bc69ddcf18c 100644 +--- a/chromium/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc ++++ b/chromium/third_party/blink/renderer/core/page/scrolling/text_fragment_selector_generator.cc +@@ -15,6 +15,7 @@ + #include "third_party/blink/renderer/core/page/scrolling/text_fragment_anchor_metrics.h" + #include "third_party/blink/renderer/core/page/scrolling/text_fragment_finder.h" + #include "third_party/blink/renderer/platform/text/text_boundaries.h" ++#include "absl/base/attributes.h" + + namespace blink { + +diff --git a/chromium/third_party/abseil-cpp/absl/base/options.h b/chromium/third_party/abseil-cpp/absl/base/options.h +index df506f0fae6..1de105fed4a 100644 +--- a/chromium/third_party/abseil-cpp/absl/base/options.h ++++ b/chromium/third_party/abseil-cpp/absl/base/options.h +@@ -180,7 +180,7 @@ + // absl::variant is a typedef of std::variant, use the feature macro + // ABSL_USES_STD_VARIANT. + +-#define ABSL_OPTION_USE_STD_VARIANT 2 ++#define ABSL_OPTION_USE_STD_VARIANT 0 + + + // ABSL_OPTION_USE_INLINE_NAMESPACE diff --git a/linhes/qt5-webengine/qt5-webengine-icu-78.patch b/linhes/qt5-webengine/qt5-webengine-icu-78.patch new file mode 100644 index 0000000..d11299c --- /dev/null +++ b/linhes/qt5-webengine/qt5-webengine-icu-78.patch @@ -0,0 +1,79 @@ +https://unicode-org.github.io/icu-docs/apidoc/dev/icu4c/uchar_8h_source.html +https://github.com/unicode-org/icu/blame/main/icu4c/source/common/unicode/uchar.h +/usr/include/unicode/uchar.h + +ICU78 adds LineBreak U_LB_UNAMBIGUOUS_HYPHEN = 48,/*[HH]*/. +U_LB_COUNT goes from 48 to 49. + +kBreakAllLineBreakClassTable is expected to be square with +the same number of bits across as the lines down for every +U_LB_COUNT LineBreak. This table should have U_LB_COUNT=49 +bit columns and 49 rows with a bunch of 1 bits sprinkled +all over and should expand each time a new LineBreak is +added. Rather than fiddling with the BA_LB_COUNT math or +keep extending the table with zeros across and down as they +did here: + +https://src.opensuse.org/nodejs/nodejs-electron/src/commit/ee8e43b84d0e17b17d817943357e74dee3e5474ae7e6eaff93c60926bfc3780a/text_break_iterator-icu74-breakAllLineBreakClassTable-should-be-consistent.patch + +we just hard set the table to 40 lines to support 0XX-39RI. +ShouldBreakAfterBreakAll for LineBreak >= 40EB always +return 0/false which is what the recent table patches were +doing anyways. Look at the columns RI to VI and lines +[RI]-[VI]. It's all zeros so everyone gave up extending +this table with cleverly placed 1's years ago and just came +up with Whatever Works (TM) patches. LineBreak support >= +39RI running with 0 may be less than optimal. Here's +another patch. + +https://bugs.gentoo.org/917635 + +The original table code and patches since are all garbage +anyways. Noone seems to understand what this table does. I +don't either but I do know its limits and proper shape and +that it's not required to have lines and columns added for +each new LineBreak unless you want perfect support for new +LineBreak. + +The NodeJS patch adds a 6th array column which won't +compile on earlier ICU versions where U_LB_COUNT is small. + +static const unsigned char kBreakAllLineBreakClassTable[][BA_LB_COUNT / 8 + 1] = { + +This line is written wrong. It creates an extra byte +column when BA_LB_COUNT is divisible by 8. Our example of +40 LineBreak can be stored in 40/8=5 column bytes yet this +sets the column count to 40/8+1=6. This would be correct +though with the size of this code I don't see a problem +allocating 40 extra bytes. + +static const unsigned char kBreakAllLineBreakClassTable[][(BA_LB_COUNT-1) / 8 + 1] = { + +severach@aur +https://aur.archlinux.org/packages/qt5-webengine + +$ notepadqq +Cannot mix incompatible Qt library (5.15.17) with this library (5.15.18) + +If you have trouble with an application not working, look +through this list for packages with old versions. + +pacman -Qs qt5- + +local/qt5-base 5.15.18+kde+r109-2 (qt5) +* A cross-platform application and UI framework +local/qt5-webchannel 5.15.17+kde+r3-1 (qt5) +* Provides access to QObject or QML objects from HTML clients for seamless integration of Qt applications with HTML/JavaScript clients + +diff -pNaru3 a/src/3rdparty/chromium/third_party/blink/renderer/platform/text/text_break_iterator.cc b/src/3rdparty/chromium/third_party/blink/renderer/platform/text/text_break_iterator.cc +--- a/src/3rdparty/chromium/third_party/blink/renderer/platform/text/text_break_iterator.cc 2025-11-11 01:42:16.454081862 -0500 ++++ b/src/3rdparty/chromium/third_party/blink/renderer/platform/text/text_break_iterator.cc 2025-11-11 01:49:41.838185933 -0500 +@@ -163,7 +163,7 @@ static const unsigned char kAsciiLineBre + // clang-format on + + #if U_ICU_VERSION_MAJOR_NUM >= 74 +-#define BA_LB_COUNT (U_LB_COUNT - 8) ++#define BA_LB_COUNT (40) /* (U_LB_COUNT - 8) */ + #elif U_ICU_VERSION_MAJOR_NUM >= 58 + #define BA_LB_COUNT (U_LB_COUNT - 3) + #else diff --git a/linhes/qt5-webengine/qt5-webengine-ninja-1.12.patch b/linhes/qt5-webengine/qt5-webengine-ninja-1.12.patch new file mode 100644 index 0000000..9bddb53 --- /dev/null +++ b/linhes/qt5-webengine/qt5-webengine-ninja-1.12.patch @@ -0,0 +1,12 @@ +diff --git a/chromium/content/public/browser/BUILD.gn b/chromium/content/public/browser/BUILD.gn +index 7cf82a4aacf..0e0dda2c3ca 100644 +--- a/chromium/content/public/browser/BUILD.gn ++++ b/chromium/content/public/browser/BUILD.gn +@@ -469,6 +469,7 @@ jumbo_source_set("browser_sources") { + "//build:chromeos_buildflags", + "//cc", + "//components/viz/host", ++ "//components/spellcheck:buildflags", + "//content/browser", # Must not be public_deps! + "//device/fido", + "//gpu", diff --git a/linhes/qt5-webengine/qt5-webengine-pipewire-0.3.patch b/linhes/qt5-webengine/qt5-webengine-pipewire-0.3.patch new file mode 100644 index 0000000..f8047e0 --- /dev/null +++ b/linhes/qt5-webengine/qt5-webengine-pipewire-0.3.patch @@ -0,0 +1,1819 @@ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn b/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn +index 5235512735d..8259442f811 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn ++++ b/chromium/third_party/webrtc/modules/desktop_capture/BUILD.gn +@@ -11,6 +11,11 @@ import("//build/config/ui.gni") + import("//tools/generate_stubs/rules.gni") + import("../../webrtc.gni") + ++if (rtc_use_pipewire) { ++ assert(rtc_pipewire_version == "0.2" || rtc_pipewire_version == "0.3", ++ "Unsupported PipeWire version") ++} ++ + use_desktop_capture_differ_sse2 = current_cpu == "x86" || current_cpu == "x64" + + config("x11_config") { +@@ -200,22 +205,41 @@ if (is_linux || is_chromeos) { + ] + } + +- if (rtc_link_pipewire) { ++ if (rtc_pipewire_version == "0.3") { + pkg_config("pipewire") { +- packages = [ "libpipewire-0.2" ] ++ packages = [ "libpipewire-0.3" ] ++ if (!rtc_link_pipewire) { ++ ignore_libs = true ++ } + } + } else { ++ pkg_config("pipewire") { ++ packages = [ "libpipewire-0.2" ] ++ if (!rtc_link_pipewire) { ++ ignore_libs = true ++ } ++ } ++ } ++ ++ if (!rtc_link_pipewire) { + # When libpipewire is not directly linked, use stubs to allow for dlopening of + # the binary. + generate_stubs("pipewire_stubs") { +- configs = [ "../../:common_config" ] ++ configs = [ ++ "../../:common_config", ++ ":pipewire", ++ ] + deps = [ "../../rtc_base" ] + extra_header = "linux/pipewire_stub_header.fragment" + logging_function = "RTC_LOG(LS_VERBOSE)" + logging_include = "rtc_base/logging.h" + output_name = "linux/pipewire_stubs" + path_from_source = "modules/desktop_capture/linux" +- sigs = [ "linux/pipewire.sigs" ] ++ if (rtc_pipewire_version == "0.3") { ++ sigs = [ "linux/pipewire03.sigs" ] ++ } else { ++ sigs = [ "linux/pipewire02.sigs" ] ++ } + } + } + +@@ -506,6 +530,7 @@ rtc_library("desktop_capture_generic") { + absl_deps = [ + "//third_party/abseil-cpp/absl/memory", + "//third_party/abseil-cpp/absl/strings", ++ "//third_party/abseil-cpp/absl/types:optional", + ] + + if (rtc_use_x11_extensions) { +@@ -526,20 +551,15 @@ rtc_library("desktop_capture_generic") { + sources += [ + "linux/base_capturer_pipewire.cc", + "linux/base_capturer_pipewire.h", +- "linux/screen_capturer_pipewire.cc", +- "linux/screen_capturer_pipewire.h", +- "linux/window_capturer_pipewire.cc", +- "linux/window_capturer_pipewire.h", + ] + + configs += [ + ":pipewire_config", + ":gio", ++ ":pipewire", + ] + +- if (rtc_link_pipewire) { +- configs += [ ":pipewire" ] +- } else { ++ if (!rtc_link_pipewire) { + deps += [ ":pipewire_stubs" ] + } + } +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc +index 2640e93aa98..c302a086ead 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc +@@ -14,8 +14,14 @@ + #include <glib-object.h> + #include <spa/param/format-utils.h> + #include <spa/param/props.h> ++#if !PW_CHECK_VERSION(0, 3, 0) + #include <spa/param/video/raw-utils.h> + #include <spa/support/type-map.h> ++#endif ++ ++#include <sys/ioctl.h> ++#include <sys/mman.h> ++#include <sys/syscall.h> + + #include <memory> + #include <utility> +@@ -30,7 +36,11 @@ + #include "modules/desktop_capture/linux/pipewire_stubs.h" + + using modules_desktop_capture_linux::InitializeStubs; +-using modules_desktop_capture_linux::kModulePipewire; ++#if PW_CHECK_VERSION(0, 3, 0) ++using modules_desktop_capture_linux::kModulePipewire03; ++#else ++using modules_desktop_capture_linux::kModulePipewire02; ++#endif + using modules_desktop_capture_linux::StubPathMap; + #endif // defined(WEBRTC_DLOPEN_PIPEWIRE) + +@@ -47,9 +57,156 @@ const char kScreenCastInterfaceName[] = "org.freedesktop.portal.ScreenCast"; + const int kBytesPerPixel = 4; + + #if defined(WEBRTC_DLOPEN_PIPEWIRE) ++#if PW_CHECK_VERSION(0, 3, 0) ++const char kPipeWireLib[] = "libpipewire-0.3.so.0"; ++#else + const char kPipeWireLib[] = "libpipewire-0.2.so.1"; + #endif ++#endif + ++// static ++struct dma_buf_sync { ++ uint64_t flags; ++}; ++#define DMA_BUF_SYNC_READ (1 << 0) ++#define DMA_BUF_SYNC_START (0 << 2) ++#define DMA_BUF_SYNC_END (1 << 2) ++#define DMA_BUF_BASE 'b' ++#define DMA_BUF_IOCTL_SYNC _IOW(DMA_BUF_BASE, 0, struct dma_buf_sync) ++ ++static void SyncDmaBuf(int fd, uint64_t start_or_end) { ++ struct dma_buf_sync sync = {0}; ++ ++ sync.flags = start_or_end | DMA_BUF_SYNC_READ; ++ ++ while (true) { ++ int ret; ++ ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync); ++ if (ret == -1 && errno == EINTR) { ++ continue; ++ } else if (ret == -1) { ++ RTC_LOG(LS_ERROR) << "Failed to synchronize DMA buffer: " ++ << g_strerror(errno); ++ break; ++ } else { ++ break; ++ } ++ } ++} ++ ++class ScopedBuf { ++ public: ++ ScopedBuf() {} ++ ScopedBuf(unsigned char* map, int map_size, bool is_dma_buf, int fd) ++ : map_(map), map_size_(map_size), is_dma_buf_(is_dma_buf), fd_(fd) {} ++ ~ScopedBuf() { ++ if (map_ != MAP_FAILED) { ++ if (is_dma_buf_) { ++ SyncDmaBuf(fd_, DMA_BUF_SYNC_END); ++ } ++ munmap(map_, map_size_); ++ } ++ } ++ ++ operator bool() { return map_ != MAP_FAILED; } ++ ++ void initialize(unsigned char* map, int map_size, bool is_dma_buf, int fd) { ++ map_ = map; ++ map_size_ = map_size; ++ is_dma_buf_ = is_dma_buf; ++ fd_ = fd; ++ } ++ ++ unsigned char* get() { return map_; } ++ ++ protected: ++ unsigned char* map_ = nullptr; ++ int map_size_; ++ bool is_dma_buf_; ++ int fd_; ++}; ++ ++template <class T> ++class Scoped { ++ public: ++ Scoped() {} ++ explicit Scoped(T* val) { ptr_ = val; } ++ ~Scoped() { RTC_NOTREACHED(); } ++ ++ T* operator->() { return ptr_; } ++ ++ bool operator!() { return ptr_ == nullptr; } ++ ++ T* get() { return ptr_; } ++ ++ T** receive() { ++ RTC_CHECK(!ptr_); ++ return &ptr_; ++ } ++ ++ Scoped& operator=(T* val) { ++ ptr_ = val; ++ return *this; ++ } ++ ++ protected: ++ T* ptr_ = nullptr; ++}; ++ ++template <> ++Scoped<GError>::~Scoped() { ++ if (ptr_) { ++ g_error_free(ptr_); ++ } ++} ++ ++template <> ++Scoped<gchar>::~Scoped() { ++ if (ptr_) { ++ g_free(ptr_); ++ } ++} ++ ++template <> ++Scoped<GVariant>::~Scoped() { ++ if (ptr_) { ++ g_variant_unref(ptr_); ++ } ++} ++ ++template <> ++Scoped<GVariantIter>::~Scoped() { ++ if (ptr_) { ++ g_variant_iter_free(ptr_); ++ } ++} ++ ++template <> ++Scoped<GDBusMessage>::~Scoped() { ++ if (ptr_) { ++ g_object_unref(ptr_); ++ } ++} ++ ++template <> ++Scoped<GUnixFDList>::~Scoped() { ++ if (ptr_) { ++ g_object_unref(ptr_); ++ } ++} ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++void BaseCapturerPipeWire::OnCoreError(void* data, ++ uint32_t id, ++ int seq, ++ int res, ++ const char* message) { ++ BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); ++ RTC_DCHECK(that); ++ ++ RTC_LOG(LS_ERROR) << "PipeWire remote error: " << message; ++} ++#else + // static + void BaseCapturerPipeWire::OnStateChanged(void* data, + pw_remote_state old_state, +@@ -64,7 +221,7 @@ void BaseCapturerPipeWire::OnStateChanged(void* data, + break; + case PW_REMOTE_STATE_CONNECTED: + RTC_LOG(LS_INFO) << "PipeWire remote state: connected."; +- that->CreateReceivingStream(); ++ that->pw_stream_ = that->CreateReceivingStream(); + break; + case PW_REMOTE_STATE_CONNECTING: + RTC_LOG(LS_INFO) << "PipeWire remote state: connecting."; +@@ -74,6 +231,7 @@ void BaseCapturerPipeWire::OnStateChanged(void* data, + break; + } + } ++#endif + + // static + void BaseCapturerPipeWire::OnStreamStateChanged(void* data, +@@ -83,6 +241,18 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data, + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); + RTC_DCHECK(that); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ switch (state) { ++ case PW_STREAM_STATE_ERROR: ++ RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; ++ break; ++ case PW_STREAM_STATE_PAUSED: ++ case PW_STREAM_STATE_STREAMING: ++ case PW_STREAM_STATE_UNCONNECTED: ++ case PW_STREAM_STATE_CONNECTING: ++ break; ++ } ++#else + switch (state) { + case PW_STREAM_STATE_ERROR: + RTC_LOG(LS_ERROR) << "PipeWire stream state error: " << error_message; +@@ -97,36 +267,74 @@ void BaseCapturerPipeWire::OnStreamStateChanged(void* data, + case PW_STREAM_STATE_STREAMING: + break; + } ++#endif + } + + // static ++#if PW_CHECK_VERSION(0, 3, 0) ++void BaseCapturerPipeWire::OnStreamParamChanged(void* data, ++ uint32_t id, ++ const struct spa_pod* format) { ++#else + void BaseCapturerPipeWire::OnStreamFormatChanged(void* data, + const struct spa_pod* format) { ++#endif + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); + RTC_DCHECK(that); + + RTC_LOG(LS_INFO) << "PipeWire stream format changed."; + ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (!format || id != SPA_PARAM_Format) { ++#else + if (!format) { + pw_stream_finish_format(that->pw_stream_, /*res=*/0, /*params=*/nullptr, + /*n_params=*/0); ++#endif + return; + } + ++#if PW_CHECK_VERSION(0, 3, 0) ++ spa_format_video_raw_parse(format, &that->spa_video_format_); ++#else + that->spa_video_format_ = new spa_video_info_raw(); + spa_format_video_raw_parse(format, that->spa_video_format_, + &that->pw_type_->format_video); ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ auto width = that->spa_video_format_.size.width; ++ auto height = that->spa_video_format_.size.height; ++#else + auto width = that->spa_video_format_->size.width; + auto height = that->spa_video_format_->size.height; ++#endif + auto stride = SPA_ROUND_UP_N(width * kBytesPerPixel, 4); + auto size = height * stride; + ++ that->desktop_size_ = DesktopSize(width, height); ++ + uint8_t buffer[1024] = {}; + auto builder = spa_pod_builder{buffer, sizeof(buffer)}; + + // Setup buffers and meta header for new format. +- const struct spa_pod* params[2]; ++ const struct spa_pod* params[3]; ++#if PW_CHECK_VERSION(0, 3, 0) ++ params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers, ++ SPA_PARAM_BUFFERS_size, SPA_POD_Int(size), SPA_PARAM_BUFFERS_stride, ++ SPA_POD_Int(stride), SPA_PARAM_BUFFERS_buffers, ++ SPA_POD_CHOICE_RANGE_Int(8, 1, 32))); ++ params[1] = reinterpret_cast<spa_pod*>(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, ++ SPA_POD_Id(SPA_META_Header), SPA_PARAM_META_size, ++ SPA_POD_Int(sizeof(struct spa_meta_header)))); ++ params[2] = reinterpret_cast<spa_pod*>(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_ParamMeta, SPA_PARAM_Meta, SPA_PARAM_META_type, ++ SPA_POD_Id(SPA_META_VideoCrop), SPA_PARAM_META_size, ++ SPA_POD_Int(sizeof(struct spa_meta_region)))); ++ pw_stream_update_params(that->pw_stream_, params, 3); ++#else + params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object( + &builder, + // id to enumerate buffer requirements +@@ -155,8 +363,18 @@ void BaseCapturerPipeWire::OnStreamFormatChanged(void* data, + // Size: size of the metadata, specified as integer (i) + ":", that->pw_core_type_->param_meta.size, "i", + sizeof(struct spa_meta_header))); +- +- pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/2); ++ params[2] = reinterpret_cast<spa_pod*>(spa_pod_builder_object( ++ &builder, ++ // id to enumerate supported metadata ++ that->pw_core_type_->param.idMeta, that->pw_core_type_->param_meta.Meta, ++ // Type: specified as id or enum (I) ++ ":", that->pw_core_type_->param_meta.type, "I", ++ that->pw_core_type_->meta.VideoCrop, ++ // Size: size of the metadata, specified as integer (i) ++ ":", that->pw_core_type_->param_meta.size, "i", ++ sizeof(struct spa_meta_video_crop))); ++ pw_stream_finish_format(that->pw_stream_, /*res=*/0, params, /*n_params=*/3); ++#endif + } + + // static +@@ -164,15 +382,26 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) { + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data); + RTC_DCHECK(that); + +- pw_buffer* buf = nullptr; ++ struct pw_buffer* next_buffer; ++ struct pw_buffer* buffer = nullptr; ++ ++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_); ++ while (next_buffer) { ++ buffer = next_buffer; ++ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_); + +- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) { ++ if (next_buffer) { ++ pw_stream_queue_buffer(that->pw_stream_, buffer); ++ } ++ } ++ ++ if (!buffer) { + return; + } + +- that->HandleBuffer(buf); ++ that->HandleBuffer(buffer); + +- pw_stream_queue_buffer(that->pw_stream_, buf); ++ pw_stream_queue_buffer(that->pw_stream_, buffer); + } + + BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type) +@@ -183,6 +412,7 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + pw_thread_loop_stop(pw_main_loop_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_type_) { + delete pw_type_; + } +@@ -190,30 +420,41 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + if (spa_video_format_) { + delete spa_video_format_; + } ++#endif + + if (pw_stream_) { + pw_stream_destroy(pw_stream_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_remote_) { + pw_remote_destroy(pw_remote_); + } ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (pw_core_) { ++ pw_core_disconnect(pw_core_); ++ } ++ ++ if (pw_context_) { ++ pw_context_destroy(pw_context_); ++ } ++#else + if (pw_core_) { + pw_core_destroy(pw_core_); + } ++#endif + + if (pw_main_loop_) { + pw_thread_loop_destroy(pw_main_loop_); + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + if (pw_loop_) { + pw_loop_destroy(pw_loop_); + } +- +- if (current_frame_) { +- free(current_frame_); +- } ++#endif + + if (start_request_signal_id_) { + g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_); +@@ -228,18 +469,16 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() { + } + + if (session_handle_) { +- GDBusMessage* message = g_dbus_message_new_method_call( +- kDesktopBusName, session_handle_, kSessionInterfaceName, "Close"); +- if (message) { +- GError* error = nullptr; +- g_dbus_connection_send_message(connection_, message, ++ Scoped<GDBusMessage> message(g_dbus_message_new_method_call( ++ kDesktopBusName, session_handle_, kSessionInterfaceName, "Close")); ++ if (message.get()) { ++ Scoped<GError> error; ++ g_dbus_connection_send_message(connection_, message.get(), + G_DBUS_SEND_MESSAGE_FLAGS_NONE, +- /*out_serial=*/nullptr, &error); +- if (error) { ++ /*out_serial=*/nullptr, error.receive()); ++ if (error.get()) { + RTC_LOG(LS_ERROR) << "Failed to close the session: " << error->message; +- g_error_free(error); + } +- g_object_unref(message); + } + } + +@@ -274,7 +513,11 @@ void BaseCapturerPipeWire::InitPipeWire() { + StubPathMap paths; + + // Check if the PipeWire library is available. +- paths[kModulePipewire].push_back(kPipeWireLib); ++#if PW_CHECK_VERSION(0, 3, 0) ++ paths[kModulePipewire03].push_back(kPipeWireLib); ++#else ++ paths[kModulePipewire02].push_back(kPipeWireLib); ++#endif + if (!InitializeStubs(paths)) { + RTC_LOG(LS_ERROR) << "Failed to load the PipeWire library and symbols."; + portal_init_failed_ = true; +@@ -284,16 +527,46 @@ void BaseCapturerPipeWire::InitPipeWire() { + + pw_init(/*argc=*/nullptr, /*argc=*/nullptr); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_main_loop_ = pw_thread_loop_new("pipewire-main-loop", nullptr); ++ ++ pw_thread_loop_lock(pw_main_loop_); ++ ++ pw_context_ = ++ pw_context_new(pw_thread_loop_get_loop(pw_main_loop_), nullptr, 0); ++ if (!pw_context_) { ++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire context"; ++ return; ++ } ++ ++ pw_core_ = pw_context_connect(pw_context_, nullptr, 0); ++ if (!pw_core_) { ++ RTC_LOG(LS_ERROR) << "Failed to connect PipeWire context"; ++ return; ++ } ++#else + pw_loop_ = pw_loop_new(/*properties=*/nullptr); + pw_main_loop_ = pw_thread_loop_new(pw_loop_, "pipewire-main-loop"); + ++ pw_thread_loop_lock(pw_main_loop_); ++ + pw_core_ = pw_core_new(pw_loop_, /*properties=*/nullptr); + pw_core_type_ = pw_core_get_type(pw_core_); + pw_remote_ = pw_remote_new(pw_core_, nullptr, /*user_data_size=*/0); + + InitPipeWireTypes(); ++#endif + + // Initialize event handlers, remote end and stream-related. ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_core_events_.version = PW_VERSION_CORE_EVENTS; ++ pw_core_events_.error = &OnCoreError; ++ ++ pw_stream_events_.version = PW_VERSION_STREAM_EVENTS; ++ pw_stream_events_.state_changed = &OnStreamStateChanged; ++ pw_stream_events_.param_changed = &OnStreamParamChanged; ++ pw_stream_events_.process = &OnStreamProcess; ++#else + pw_remote_events_.version = PW_VERSION_REMOTE_EVENTS; + pw_remote_events_.state_changed = &OnStateChanged; + +@@ -301,19 +574,33 @@ void BaseCapturerPipeWire::InitPipeWire() { + pw_stream_events_.state_changed = &OnStreamStateChanged; + pw_stream_events_.format_changed = &OnStreamFormatChanged; + pw_stream_events_.process = &OnStreamProcess; ++#endif + ++#if PW_CHECK_VERSION(0, 3, 0) ++ pw_core_add_listener(pw_core_, &spa_core_listener_, &pw_core_events_, this); ++ ++ pw_stream_ = CreateReceivingStream(); ++ if (!pw_stream_) { ++ RTC_LOG(LS_ERROR) << "Failed to create PipeWire stream"; ++ return; ++ } ++#else + pw_remote_add_listener(pw_remote_, &spa_remote_listener_, &pw_remote_events_, + this); + pw_remote_connect_fd(pw_remote_, pw_fd_); ++#endif + + if (pw_thread_loop_start(pw_main_loop_) < 0) { + RTC_LOG(LS_ERROR) << "Failed to start main PipeWire loop"; + portal_init_failed_ = true; + } + ++ pw_thread_loop_unlock(pw_main_loop_); ++ + RTC_LOG(LS_INFO) << "PipeWire remote opened."; + } + ++#if !PW_CHECK_VERSION(0, 3, 0) + void BaseCapturerPipeWire::InitPipeWireTypes() { + spa_type_map* map = pw_core_type_->map; + pw_type_ = new PipeWireType(); +@@ -323,23 +610,44 @@ void BaseCapturerPipeWire::InitPipeWireTypes() { + spa_type_format_video_map(map, &pw_type_->format_video); + spa_type_video_format_map(map, &pw_type_->video_format); + } ++#endif + +-void BaseCapturerPipeWire::CreateReceivingStream() { ++pw_stream* BaseCapturerPipeWire::CreateReceivingStream() { ++#if !PW_CHECK_VERSION(0, 3, 0) ++ if (pw_remote_get_state(pw_remote_, nullptr) != PW_REMOTE_STATE_CONNECTED) { ++ RTC_LOG(LS_ERROR) << "Cannot create pipewire stream"; ++ return nullptr; ++ } ++#endif + spa_rectangle pwMinScreenBounds = spa_rectangle{1, 1}; +- spa_rectangle pwScreenBounds = +- spa_rectangle{static_cast<uint32_t>(desktop_size_.width()), +- static_cast<uint32_t>(desktop_size_.height())}; +- +- spa_fraction pwFrameRateMin = spa_fraction{0, 1}; +- spa_fraction pwFrameRateMax = spa_fraction{60, 1}; ++ spa_rectangle pwMaxScreenBounds = spa_rectangle{UINT32_MAX, UINT32_MAX}; + + pw_properties* reuseProps = + pw_properties_new_string("pipewire.client.reuse=1"); +- pw_stream_ = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); ++#if PW_CHECK_VERSION(0, 3, 0) ++ auto stream = pw_stream_new(pw_core_, "webrtc-consume-stream", reuseProps); ++#else ++ auto stream = pw_stream_new(pw_remote_, "webrtc-consume-stream", reuseProps); ++#endif + + uint8_t buffer[1024] = {}; + const spa_pod* params[1]; + spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)}; ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_add_object( ++ &builder, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, ++ SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_video), ++ SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), ++ SPA_FORMAT_VIDEO_format, ++ SPA_POD_CHOICE_ENUM_Id(5, SPA_VIDEO_FORMAT_BGRx, SPA_VIDEO_FORMAT_RGBx, ++ SPA_VIDEO_FORMAT_RGBA, SPA_VIDEO_FORMAT_BGRx, ++ SPA_VIDEO_FORMAT_BGRA), ++ SPA_FORMAT_VIDEO_size, ++ SPA_POD_CHOICE_RANGE_Rectangle(&pwMinScreenBounds, &pwMinScreenBounds, ++ &pwMaxScreenBounds), ++ 0)); ++#else + params[0] = reinterpret_cast<spa_pod*>(spa_pod_builder_object( + &builder, + // id to enumerate formats +@@ -349,69 +657,218 @@ void BaseCapturerPipeWire::CreateReceivingStream() { + // then allowed formats are enumerated (e) and the format is undecided (u) + // to allow negotiation + ":", pw_type_->format_video.format, "Ieu", pw_type_->video_format.BGRx, +- SPA_POD_PROP_ENUM(2, pw_type_->video_format.RGBx, +- pw_type_->video_format.BGRx), ++ SPA_POD_PROP_ENUM( ++ 4, pw_type_->video_format.RGBx, pw_type_->video_format.BGRx, ++ pw_type_->video_format.RGBA, pw_type_->video_format.BGRA), + // Video size: specified as rectangle (R), preferred size is specified as + // first parameter, then allowed size is defined as range (r) from min and + // max values and the format is undecided (u) to allow negotiation +- ":", pw_type_->format_video.size, "Rru", &pwScreenBounds, 2, +- &pwMinScreenBounds, &pwScreenBounds, +- // Frame rate: specified as fraction (F) and set to minimum frame rate +- // value +- ":", pw_type_->format_video.framerate, "F", &pwFrameRateMin, +- // Max frame rate: specified as fraction (F), preferred frame rate is set +- // to maximum value, then allowed frame rate is defined as range (r) from +- // min and max values and it is undecided (u) to allow negotiation +- ":", pw_type_->format_video.max_framerate, "Fru", &pwFrameRateMax, 2, +- &pwFrameRateMin, &pwFrameRateMax)); +- +- pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_, ++ ":", pw_type_->format_video.size, "Rru", &pwMinScreenBounds, ++ SPA_POD_PROP_MIN_MAX(&pwMinScreenBounds, &pwMaxScreenBounds))); ++#endif ++ ++ pw_stream_add_listener(stream, &spa_stream_listener_, &pw_stream_events_, + this); ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (pw_stream_connect(stream, PW_DIRECTION_INPUT, pw_stream_node_id_, ++ PW_STREAM_FLAG_AUTOCONNECT, params, 1) != 0) { ++#else + pw_stream_flags flags = static_cast<pw_stream_flags>( +- PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE | +- PW_STREAM_FLAG_MAP_BUFFERS); +- if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr, ++ PW_STREAM_FLAG_AUTOCONNECT | PW_STREAM_FLAG_INACTIVE); ++ if (pw_stream_connect(stream, PW_DIRECTION_INPUT, /*port_path=*/nullptr, + flags, params, + /*n_params=*/1) != 0) { ++#endif + RTC_LOG(LS_ERROR) << "Could not connect receiving stream."; + portal_init_failed_ = true; +- return; ++ return nullptr; + } ++ ++ return stream; + } + + void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) { + spa_buffer* spaBuffer = buffer->buffer; +- void* src = nullptr; ++ ScopedBuf map; ++ uint8_t* src = nullptr; ++ ++ if (spaBuffer->datas[0].chunk->size == 0) { ++ RTC_LOG(LS_ERROR) << "Failed to get video stream: Zero size."; ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spaBuffer->datas[0].type == SPA_DATA_MemFd || ++ spaBuffer->datas[0].type == SPA_DATA_DmaBuf) { ++#else ++ if (spaBuffer->datas[0].type == pw_core_type_->data.MemFd || ++ spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) { ++#endif ++ map.initialize( ++ static_cast<uint8_t*>( ++ mmap(nullptr, ++ spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset, ++ PROT_READ, MAP_PRIVATE, spaBuffer->datas[0].fd, 0)), ++ spaBuffer->datas[0].maxsize + spaBuffer->datas[0].mapoffset, ++#if PW_CHECK_VERSION(0, 3, 0) ++ spaBuffer->datas[0].type == SPA_DATA_DmaBuf, ++#else ++ spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf, ++#endif ++ spaBuffer->datas[0].fd); ++ ++ if (!map) { ++ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " ++ << std::strerror(errno); ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spaBuffer->datas[0].type == SPA_DATA_DmaBuf) { ++#else ++ if (spaBuffer->datas[0].type == pw_core_type_->data.DmaBuf) { ++#endif ++ SyncDmaBuf(spaBuffer->datas[0].fd, DMA_BUF_SYNC_START); ++ } ++ ++ src = SPA_MEMBER(map.get(), spaBuffer->datas[0].mapoffset, uint8_t); ++#if PW_CHECK_VERSION(0, 3, 0) ++ } else if (spaBuffer->datas[0].type == SPA_DATA_MemPtr) { ++#else ++ } else if (spaBuffer->datas[0].type == pw_core_type_->data.MemPtr) { ++#endif ++ src = static_cast<uint8_t*>(spaBuffer->datas[0].data); ++ } + +- if (!(src = spaBuffer->datas[0].data)) { ++ if (!src) { ++ return; ++ } ++ ++#if PW_CHECK_VERSION(0, 3, 0) ++ struct spa_meta_region* video_metadata = ++ static_cast<struct spa_meta_region*>(spa_buffer_find_meta_data( ++ spaBuffer, SPA_META_VideoCrop, sizeof(*video_metadata))); ++#else ++ struct spa_meta_video_crop* video_metadata = ++ static_cast<struct spa_meta_video_crop*>( ++ spa_buffer_find_meta(spaBuffer, pw_core_type_->meta.VideoCrop)); ++#endif ++ ++ // Video size from metadata is bigger than an actual video stream size. ++ // The metadata are wrong or we should up-scale the video...in both cases ++ // just quit now. ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (video_metadata && (video_metadata->region.size.width > ++ static_cast<uint32_t>(desktop_size_.width()) || ++ video_metadata->region.size.height > ++ static_cast<uint32_t>(desktop_size_.height()))) { ++#else ++ if (video_metadata && (video_metadata->width > desktop_size_.width() || ++ video_metadata->height > desktop_size_.height())) { ++#endif ++ RTC_LOG(LS_ERROR) << "Stream metadata sizes are wrong!"; + return; + } + +- uint32_t maxSize = spaBuffer->datas[0].maxsize; +- int32_t srcStride = spaBuffer->datas[0].chunk->stride; +- if (srcStride != (desktop_size_.width() * kBytesPerPixel)) { ++ // Use video metadata when video size from metadata is set and smaller than ++ // video stream size, so we need to adjust it. ++ bool video_is_full_width = true; ++ bool video_is_full_height = true; ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (video_metadata && video_metadata->region.size.width != 0 && ++ video_metadata->region.size.height != 0) { ++ if (video_metadata->region.size.width < ++ static_cast<uint32_t>(desktop_size_.width())) { ++ video_is_full_width = false; ++ } else if (video_metadata->region.size.height < ++ static_cast<uint32_t>(desktop_size_.height())) { ++ video_is_full_height = false; ++ } ++ } ++#else ++ if (video_metadata && video_metadata->width != 0 && ++ video_metadata->height != 0) { ++ if (video_metadata->width < desktop_size_.width()) { ++ } else if (video_metadata->height < desktop_size_.height()) { ++ video_is_full_height = false; ++ } ++ } ++#endif ++ ++ DesktopSize video_size_prev = video_size_; ++ if (!video_is_full_height || !video_is_full_width) { ++#if PW_CHECK_VERSION(0, 3, 0) ++ video_size_ = DesktopSize(video_metadata->region.size.width, ++ video_metadata->region.size.height); ++#else ++ video_size_ = DesktopSize(video_metadata->width, video_metadata->height); ++#endif ++ } else { ++ video_size_ = desktop_size_; ++ } ++ ++ webrtc::MutexLock lock(¤t_frame_lock_); ++ if (!current_frame_ || !video_size_.equals(video_size_prev)) { ++ current_frame_ = std::make_unique<uint8_t[]>( ++ video_size_.width() * video_size_.height() * kBytesPerPixel); ++ } ++ ++ const int32_t dst_stride = video_size_.width() * kBytesPerPixel; ++ const int32_t src_stride = spaBuffer->datas[0].chunk->stride; ++ ++ if (src_stride != (desktop_size_.width() * kBytesPerPixel)) { + RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: " +- << srcStride ++ << src_stride + << " != " << (desktop_size_.width() * kBytesPerPixel); + portal_init_failed_ = true; ++ + return; + } + +- if (!current_frame_) { +- current_frame_ = static_cast<uint8_t*>(malloc(maxSize)); +- } +- RTC_DCHECK(current_frame_ != nullptr); +- +- // If both sides decided to go with the RGBx format we need to convert it to +- // BGRx to match color format expected by WebRTC. +- if (spa_video_format_->format == pw_type_->video_format.RGBx) { +- uint8_t* tempFrame = static_cast<uint8_t*>(malloc(maxSize)); +- std::memcpy(tempFrame, src, maxSize); +- ConvertRGBxToBGRx(tempFrame, maxSize); +- std::memcpy(current_frame_, tempFrame, maxSize); +- free(tempFrame); +- } else { +- std::memcpy(current_frame_, src, maxSize); ++ // Adjust source content based on metadata video position ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (!video_is_full_height && ++ (video_metadata->region.position.y + video_size_.height() <= ++ desktop_size_.height())) { ++ src += src_stride * video_metadata->region.position.y; ++ } ++ const int x_offset = ++ !video_is_full_width && ++ (video_metadata->region.position.x + video_size_.width() <= ++ desktop_size_.width()) ++ ? video_metadata->region.position.x * kBytesPerPixel ++ : 0; ++#else ++ if (!video_is_full_height && ++ (video_metadata->y + video_size_.height() <= desktop_size_.height())) { ++ src += src_stride * video_metadata->y; ++ } ++ ++ const int x_offset = ++ !video_is_full_width && ++ (video_metadata->x + video_size_.width() <= desktop_size_.width()) ++ ? video_metadata->x * kBytesPerPixel ++ : 0; ++#endif ++ ++ uint8_t* dst = current_frame_.get(); ++ for (int i = 0; i < video_size_.height(); ++i) { ++ // Adjust source content based on crop video position if needed ++ src += x_offset; ++ std::memcpy(dst, src, dst_stride); ++ // If both sides decided to go with the RGBx format we need to convert it to ++ // BGRx to match color format expected by WebRTC. ++#if PW_CHECK_VERSION(0, 3, 0) ++ if (spa_video_format_.format == SPA_VIDEO_FORMAT_RGBx || ++ spa_video_format_.format == SPA_VIDEO_FORMAT_RGBA) { ++#else ++ if (spa_video_format_->format == pw_type_->video_format.RGBx || ++ spa_video_format_->format == pw_type_->video_format.RGBA) { ++#endif ++ ConvertRGBxToBGRx(dst, dst_stride); ++ } ++ src += src_stride - x_offset; ++ dst += dst_stride; + } + } + +@@ -441,14 +898,13 @@ void BaseCapturerPipeWire::OnProxyRequested(GObject* /*object*/, + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GDBusProxy *proxy = g_dbus_proxy_new_finish(result, &error); ++ Scoped<GError> error; ++ GDBusProxy* proxy = g_dbus_proxy_new_finish(result, error.receive()); + if (!proxy) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to create a proxy for the screen cast portal: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } +@@ -462,38 +918,36 @@ void BaseCapturerPipeWire::OnProxyRequested(GObject* /*object*/, + // static + gchar* BaseCapturerPipeWire::PrepareSignalHandle(GDBusConnection* connection, + const gchar* token) { +- gchar* sender = g_strdup(g_dbus_connection_get_unique_name(connection) + 1); +- for (int i = 0; sender[i]; i++) { +- if (sender[i] == '.') { +- sender[i] = '_'; ++ Scoped<gchar> sender( ++ g_strdup(g_dbus_connection_get_unique_name(connection) + 1)); ++ for (int i = 0; sender.get()[i]; i++) { ++ if (sender.get()[i] == '.') { ++ sender.get()[i] = '_'; + } + } + +- gchar* handle = g_strconcat(kDesktopRequestObjectPath, "/", sender, "/", ++ gchar* handle = g_strconcat(kDesktopRequestObjectPath, "/", sender.get(), "/", + token, /*end of varargs*/ nullptr); +- g_free(sender); + + return handle; + } + + void BaseCapturerPipeWire::SessionRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped<gchar> variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + variant_string = + g_strdup_printf("webrtc_session%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "session_handle_token", +- g_variant_new_string(variant_string)); +- g_free(variant_string); ++ g_variant_new_string(variant_string.get())); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- portal_handle_ = PrepareSignalHandle(connection_, variant_string); ++ portal_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + session_request_signal_id_ = SetupRequestResponseSignal( + portal_handle_, OnSessionRequestResponseSignal); +- g_free(variant_string); + + RTC_LOG(LS_INFO) << "Screen cast session requested."; + g_dbus_proxy_call( +@@ -509,22 +963,21 @@ void BaseCapturerPipeWire::OnSessionRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped<GError> error; ++ Scoped<GVariant> variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to create a screen cast session: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + RTC_LOG(LS_INFO) << "Initializing the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped<gchar> handle; ++ g_variant_get_child(variant.get(), 0, "o", &handle); + if (!handle) { + RTC_LOG(LS_ERROR) << "Failed to initialize the screen cast session."; + if (that->session_request_signal_id_) { +@@ -536,8 +989,6 @@ void BaseCapturerPipeWire::OnSessionRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribing to the screen cast session."; + } + +@@ -557,11 +1008,11 @@ void BaseCapturerPipeWire::OnSessionRequestResponseSignal( + << "Received response for the screen cast session subscription."; + + guint32 portal_response; +- GVariant* response_data; +- g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); +- g_variant_lookup(response_data, "session_handle", "s", ++ Scoped<GVariant> response_data; ++ g_variant_get(parameters, "(u@a{sv})", &portal_response, ++ response_data.receive()); ++ g_variant_lookup(response_data.get(), "session_handle", "s", + &that->session_handle_); +- g_variant_unref(response_data); + + if (!that->session_handle_ || portal_response) { + RTC_LOG(LS_ERROR) +@@ -575,23 +1026,23 @@ void BaseCapturerPipeWire::OnSessionRequestResponseSignal( + + void BaseCapturerPipeWire::SourcesRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped<gchar> variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + // We want to record monitor content. +- g_variant_builder_add(&builder, "{sv}", "types", +- g_variant_new_uint32(capture_source_type_)); ++ g_variant_builder_add( ++ &builder, "{sv}", "types", ++ g_variant_new_uint32(static_cast<uint32_t>(capture_source_type_))); + // We don't want to allow selection of multiple sources. + g_variant_builder_add(&builder, "{sv}", "multiple", + g_variant_new_boolean(false)); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- sources_handle_ = PrepareSignalHandle(connection_, variant_string); ++ sources_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + sources_request_signal_id_ = SetupRequestResponseSignal( + sources_handle_, OnSourcesRequestResponseSignal); +- g_free(variant_string); + + RTC_LOG(LS_INFO) << "Requesting sources from the screen cast session."; + g_dbus_proxy_call( +@@ -608,22 +1059,21 @@ void BaseCapturerPipeWire::OnSourcesRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped<GError> error; ++ Scoped<GVariant> variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to request the sources: " << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + RTC_LOG(LS_INFO) << "Sources requested from the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped<gchar> handle; ++ g_variant_get_child(variant.get(), 0, "o", handle.receive()); + if (!handle) { + RTC_LOG(LS_ERROR) << "Failed to initialize the screen cast session."; + if (that->sources_request_signal_id_) { +@@ -635,8 +1085,6 @@ void BaseCapturerPipeWire::OnSourcesRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribed to sources signal."; + } + +@@ -668,17 +1116,16 @@ void BaseCapturerPipeWire::OnSourcesRequestResponseSignal( + + void BaseCapturerPipeWire::StartRequest() { + GVariantBuilder builder; +- gchar* variant_string; ++ Scoped<gchar> variant_string; + + g_variant_builder_init(&builder, G_VARIANT_TYPE_VARDICT); + variant_string = g_strdup_printf("webrtc%d", g_random_int_range(0, G_MAXINT)); + g_variant_builder_add(&builder, "{sv}", "handle_token", +- g_variant_new_string(variant_string)); ++ g_variant_new_string(variant_string.get())); + +- start_handle_ = PrepareSignalHandle(connection_, variant_string); ++ start_handle_ = PrepareSignalHandle(connection_, variant_string.get()); + start_request_signal_id_ = + SetupRequestResponseSignal(start_handle_, OnStartRequestResponseSignal); +- g_free(variant_string); + + // "Identifier for the application window", this is Wayland, so not "x11:...". + const gchar parent_window[] = ""; +@@ -698,23 +1145,22 @@ void BaseCapturerPipeWire::OnStartRequested(GDBusProxy *proxy, + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GVariant* variant = g_dbus_proxy_call_finish(proxy, result, &error); ++ Scoped<GError> error; ++ Scoped<GVariant> variant( ++ g_dbus_proxy_call_finish(proxy, result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to start the screen cast session: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + RTC_LOG(LS_INFO) << "Initializing the start of the screen cast session."; + +- gchar* handle = nullptr; +- g_variant_get_child(variant, 0, "o", &handle); +- g_variant_unref(variant); ++ Scoped<gchar> handle; ++ g_variant_get_child(variant.get(), 0, "o", handle.receive()); + if (!handle) { + RTC_LOG(LS_ERROR) + << "Failed to initialize the start of the screen cast session."; +@@ -727,8 +1173,6 @@ void BaseCapturerPipeWire::OnStartRequested(GDBusProxy *proxy, + return; + } + +- g_free(handle); +- + RTC_LOG(LS_INFO) << "Subscribed to the start signal."; + } + +@@ -746,9 +1190,10 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal( + + RTC_LOG(LS_INFO) << "Start signal received."; + guint32 portal_response; +- GVariant* response_data; +- GVariantIter* iter = nullptr; +- g_variant_get(parameters, "(u@a{sv})", &portal_response, &response_data); ++ Scoped<GVariant> response_data; ++ Scoped<GVariantIter> iter; ++ g_variant_get(parameters, "(u@a{sv})", &portal_response, ++ response_data.receive()); + if (portal_response || !response_data) { + RTC_LOG(LS_ERROR) << "Failed to start the screen cast session."; + that->portal_init_failed_ = true; +@@ -758,28 +1203,28 @@ void BaseCapturerPipeWire::OnStartRequestResponseSignal( + // Array of PipeWire streams. See + // https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.ScreenCast.xml + // documentation for <method name="Start">. +- if (g_variant_lookup(response_data, "streams", "a(ua{sv})", &iter)) { +- GVariant* variant; ++ if (g_variant_lookup(response_data.get(), "streams", "a(ua{sv})", ++ iter.receive())) { ++ Scoped<GVariant> variant; + +- while (g_variant_iter_next(iter, "@(ua{sv})", &variant)) { ++ while (g_variant_iter_next(iter.get(), "@(ua{sv})", variant.receive())) { + guint32 stream_id; +- gint32 width; +- gint32 height; +- GVariant* options; ++ guint32 type; ++ Scoped<GVariant> options; + +- g_variant_get(variant, "(u@a{sv})", &stream_id, &options); +- RTC_DCHECK(options != nullptr); ++ g_variant_get(variant.get(), "(u@a{sv})", &stream_id, options.receive()); ++ RTC_DCHECK(options.get()); + +- g_variant_lookup(options, "size", "(ii)", &width, &height); ++ if (g_variant_lookup(options.get(), "source_type", "u", &type)) { ++ that->capture_source_type_ = ++ static_cast<BaseCapturerPipeWire::CaptureSourceType>(type); ++ } + +- that->desktop_size_.set(width, height); ++ that->pw_stream_node_id_ = stream_id; + +- g_variant_unref(options); +- g_variant_unref(variant); ++ break; + } + } +- g_variant_iter_free(iter); +- g_variant_unref(response_data); + + that->OpenPipeWireRemote(); + } +@@ -807,35 +1252,30 @@ void BaseCapturerPipeWire::OnOpenPipeWireRemoteRequested( + BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(user_data); + RTC_DCHECK(that); + +- GError* error = nullptr; +- GUnixFDList* outlist = nullptr; +- GVariant* variant = g_dbus_proxy_call_with_unix_fd_list_finish( +- proxy, &outlist, result, &error); ++ Scoped<GError> error; ++ Scoped<GUnixFDList> outlist; ++ Scoped<GVariant> variant(g_dbus_proxy_call_with_unix_fd_list_finish( ++ proxy, outlist.receive(), result, error.receive())); + if (!variant) { +- if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) ++ if (g_error_matches(error.get(), G_IO_ERROR, G_IO_ERROR_CANCELLED)) + return; + RTC_LOG(LS_ERROR) << "Failed to open the PipeWire remote: " + << error->message; +- g_error_free(error); + that->portal_init_failed_ = true; + return; + } + + gint32 index; +- g_variant_get(variant, "(h)", &index); ++ g_variant_get(variant.get(), "(h)", &index); + +- if ((that->pw_fd_ = g_unix_fd_list_get(outlist, index, &error)) == -1) { ++ if ((that->pw_fd_ = ++ g_unix_fd_list_get(outlist.get(), index, error.receive())) == -1) { + RTC_LOG(LS_ERROR) << "Failed to get file descriptor from the list: " + << error->message; +- g_error_free(error); +- g_variant_unref(variant); + that->portal_init_failed_ = true; + return; + } + +- g_variant_unref(variant); +- g_object_unref(outlist); +- + that->InitPipeWire(); + } + +@@ -854,15 +1294,18 @@ void BaseCapturerPipeWire::CaptureFrame() { + return; + } + ++ webrtc::MutexLock lock(¤t_frame_lock_); + if (!current_frame_) { + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); + return; + } + +- std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(desktop_size_)); ++ DesktopSize frame_size = video_size_; ++ ++ std::unique_ptr<DesktopFrame> result(new BasicDesktopFrame(frame_size)); + result->CopyPixelsFrom( +- current_frame_, (desktop_size_.width() * kBytesPerPixel), +- DesktopRect::MakeWH(desktop_size_.width(), desktop_size_.height())); ++ current_frame_.get(), (frame_size.width() * kBytesPerPixel), ++ DesktopRect::MakeWH(frame_size.width(), frame_size.height())); + if (!result) { + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); + return; +@@ -887,4 +1330,11 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) { + return true; + } + ++// static ++std::unique_ptr<DesktopCapturer> BaseCapturerPipeWire::CreateRawCapturer( ++ const DesktopCaptureOptions& options) { ++ return std::make_unique<BaseCapturerPipeWire>( ++ BaseCapturerPipeWire::CaptureSourceType::kAny); ++} ++ + } // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h +index f28d7a558bc..75d20dbf1db 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.h +@@ -10,18 +10,23 @@ + + #ifndef MODULES_DESKTOP_CAPTURE_LINUX_BASE_CAPTURER_PIPEWIRE_H_ + #define MODULES_DESKTOP_CAPTURE_LINUX_BASE_CAPTURER_PIPEWIRE_H_ +- + #include <gio/gio.h> + #define typeof __typeof__ + #include <pipewire/pipewire.h> + #include <spa/param/video/format-utils.h> ++#if PW_CHECK_VERSION(0, 3, 0) ++#include <spa/utils/result.h> ++#endif + ++#include "absl/types/optional.h" + #include "modules/desktop_capture/desktop_capture_options.h" + #include "modules/desktop_capture/desktop_capturer.h" + #include "rtc_base/constructor_magic.h" ++#include "rtc_base/synchronization/mutex.h" + + namespace webrtc { + ++#if !PW_CHECK_VERSION(0, 3, 0) + class PipeWireType { + public: + spa_type_media_type media_type; +@@ -29,14 +34,25 @@ class PipeWireType { + spa_type_format_video format_video; + spa_type_video_format video_format; + }; ++#endif + + class BaseCapturerPipeWire : public DesktopCapturer { + public: +- enum CaptureSourceType { Screen = 1, Window }; ++ // Values are set based on source type property in ++ // xdg-desktop-portal/screencast ++ // https://github.com/flatpak/xdg-desktop-portal/blob/master/data/org.freedesktop.portal.ScreenCast.xml ++ enum class CaptureSourceType : uint32_t { ++ kScreen = 0b01, ++ kWindow = 0b10, ++ kAny = 0b11 ++ }; + + explicit BaseCapturerPipeWire(CaptureSourceType source_type); + ~BaseCapturerPipeWire() override; + ++ static std::unique_ptr<DesktopCapturer> CreateRawCapturer( ++ const DesktopCaptureOptions& options); ++ + // DesktopCapturer interface. + void Start(Callback* delegate) override; + void CaptureFrame() override; +@@ -45,6 +61,21 @@ class BaseCapturerPipeWire : public DesktopCapturer { + + private: + // PipeWire types --> ++#if PW_CHECK_VERSION(0, 3, 0) ++ struct pw_context* pw_context_ = nullptr; ++ struct pw_core* pw_core_ = nullptr; ++ struct pw_stream* pw_stream_ = nullptr; ++ struct pw_thread_loop* pw_main_loop_ = nullptr; ++ ++ spa_hook spa_core_listener_; ++ spa_hook spa_stream_listener_; ++ ++ // event handlers ++ pw_core_events pw_core_events_ = {}; ++ pw_stream_events pw_stream_events_ = {}; ++ ++ struct spa_video_info_raw spa_video_format_; ++#else + pw_core* pw_core_ = nullptr; + pw_type* pw_core_type_ = nullptr; + pw_stream* pw_stream_ = nullptr; +@@ -60,11 +91,13 @@ class BaseCapturerPipeWire : public DesktopCapturer { + pw_remote_events pw_remote_events_ = {}; + + spa_video_info_raw* spa_video_format_ = nullptr; ++#endif + ++ guint32 pw_stream_node_id_ = 0; + gint32 pw_fd_ = -1; + + CaptureSourceType capture_source_type_ = +- BaseCapturerPipeWire::CaptureSourceType::Screen; ++ BaseCapturerPipeWire::CaptureSourceType::kScreen; + + // <-- end of PipeWire types + +@@ -79,10 +112,12 @@ class BaseCapturerPipeWire : public DesktopCapturer { + guint sources_request_signal_id_ = 0; + guint start_request_signal_id_ = 0; + ++ DesktopSize video_size_; + DesktopSize desktop_size_ = {}; + DesktopCaptureOptions options_ = {}; + +- uint8_t* current_frame_ = nullptr; ++ webrtc::Mutex current_frame_lock_; ++ std::unique_ptr<uint8_t[]> current_frame_; + Callback* callback_ = nullptr; + + bool portal_init_failed_ = false; +@@ -91,21 +126,32 @@ class BaseCapturerPipeWire : public DesktopCapturer { + void InitPipeWire(); + void InitPipeWireTypes(); + +- void CreateReceivingStream(); ++ pw_stream* CreateReceivingStream(); + void HandleBuffer(pw_buffer* buffer); + + void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size); + ++#if PW_CHECK_VERSION(0, 3, 0) ++ static void OnCoreError(void* data, ++ uint32_t id, ++ int seq, ++ int res, ++ const char* message); ++ static void OnStreamParamChanged(void* data, ++ uint32_t id, ++ const struct spa_pod* format); ++#else + static void OnStateChanged(void* data, + pw_remote_state old_state, + pw_remote_state state, + const char* error); ++ static void OnStreamFormatChanged(void* data, const struct spa_pod* format); ++#endif + static void OnStreamStateChanged(void* data, + pw_stream_state old_state, + pw_stream_state state, + const char* error_message); + +- static void OnStreamFormatChanged(void* data, const struct spa_pod* format); + static void OnStreamProcess(void* data); + static void OnNewBuffer(void* data, uint32_t id); + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs +deleted file mode 100644 +index 3e21e9dc07c..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire.sigs ++++ /dev/null +@@ -1,44 +0,0 @@ +-// Copyright 2018 The WebRTC project authors. All rights reserved. +-// Use of this source code is governed by a BSD-style license that can be +-// found in the LICENSE file. +- +-//------------------------------------------------ +-// Functions from PipeWire used in capturer code. +-//------------------------------------------------ +- +-// core.h +-void pw_core_destroy(pw_core *core); +-pw_type *pw_core_get_type(pw_core *core); +-pw_core * pw_core_new(pw_loop *main_loop, pw_properties *props); +- +-// loop.h +-void pw_loop_destroy(pw_loop *loop); +-pw_loop * pw_loop_new(pw_properties *properties); +- +-// pipewire.h +-void pw_init(int *argc, char **argv[]); +- +-// properties.h +-pw_properties * pw_properties_new_string(const char *args); +- +-// remote.h +-void pw_remote_add_listener(pw_remote *remote, spa_hook *listener, const pw_remote_events *events, void *data); +-int pw_remote_connect_fd(pw_remote *remote, int fd); +-void pw_remote_destroy(pw_remote *remote); +-pw_remote * pw_remote_new(pw_core *core, pw_properties *properties, size_t user_data_size); +- +-// stream.h +-void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); +-int pw_stream_connect(pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); +-pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); +-void pw_stream_destroy(pw_stream *stream); +-void pw_stream_finish_format(pw_stream *stream, int res, const spa_pod **params, uint32_t n_params); +-pw_stream * pw_stream_new(pw_remote *remote, const char *name, pw_properties *props); +-int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); +-int pw_stream_set_active(pw_stream *stream, bool active); +- +-// thread-loop.h +-void pw_thread_loop_destroy(pw_thread_loop *loop); +-pw_thread_loop * pw_thread_loop_new(pw_loop *loop, const char *name); +-int pw_thread_loop_start(pw_thread_loop *loop); +-void pw_thread_loop_stop(pw_thread_loop *loop); +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc +deleted file mode 100644 +index fe672140cca..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.cc ++++ /dev/null +@@ -1,29 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#include "modules/desktop_capture/linux/screen_capturer_pipewire.h" +- +-#include <memory> +- +- +-namespace webrtc { +- +-ScreenCapturerPipeWire::ScreenCapturerPipeWire() +- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Screen) {} +-ScreenCapturerPipeWire::~ScreenCapturerPipeWire() {} +- +-// static +-std::unique_ptr<DesktopCapturer> +-ScreenCapturerPipeWire::CreateRawScreenCapturer( +- const DesktopCaptureOptions& options) { +- return std::make_unique<ScreenCapturerPipeWire>(); +-} +- +-} // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h +deleted file mode 100644 +index 66dcd680e06..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/screen_capturer_pipewire.h ++++ /dev/null +@@ -1,33 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#ifndef MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +-#define MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +- +-#include <memory> +- +-#include "modules/desktop_capture/linux/base_capturer_pipewire.h" +- +-namespace webrtc { +- +-class ScreenCapturerPipeWire : public BaseCapturerPipeWire { +- public: +- ScreenCapturerPipeWire(); +- ~ScreenCapturerPipeWire() override; +- +- static std::unique_ptr<DesktopCapturer> CreateRawScreenCapturer( +- const DesktopCaptureOptions& options); +- +- RTC_DISALLOW_COPY_AND_ASSIGN(ScreenCapturerPipeWire); +-}; +- +-} // namespace webrtc +- +-#endif // MODULES_DESKTOP_CAPTURE_LINUX_SCREEN_CAPTURER_PIPEWIRE_H_ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc b/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc +deleted file mode 100644 +index b4559156dce..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.cc ++++ /dev/null +@@ -1,29 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#include "modules/desktop_capture/linux/window_capturer_pipewire.h" +- +-#include <memory> +- +- +-namespace webrtc { +- +-WindowCapturerPipeWire::WindowCapturerPipeWire() +- : BaseCapturerPipeWire(BaseCapturerPipeWire::CaptureSourceType::Window) {} +-WindowCapturerPipeWire::~WindowCapturerPipeWire() {} +- +-// static +-std::unique_ptr<DesktopCapturer> +-WindowCapturerPipeWire::CreateRawWindowCapturer( +- const DesktopCaptureOptions& options) { +- return std::make_unique<WindowCapturerPipeWire>(); +-} +- +-} // namespace webrtc +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h b/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h +deleted file mode 100644 +index 7f184ef2999..00000000000 +--- a/chromium/third_party/webrtc/modules/desktop_capture/linux/window_capturer_pipewire.h ++++ /dev/null +@@ -1,33 +0,0 @@ +-/* +- * Copyright 2018 The WebRTC project authors. All Rights Reserved. +- * +- * Use of this source code is governed by a BSD-style license +- * that can be found in the LICENSE file in the root of the source +- * tree. An additional intellectual property rights grant can be found +- * in the file PATENTS. All contributing project authors may +- * be found in the AUTHORS file in the root of the source tree. +- */ +- +-#ifndef MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +-#define MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +- +-#include <memory> +- +-#include "modules/desktop_capture/linux/base_capturer_pipewire.h" +- +-namespace webrtc { +- +-class WindowCapturerPipeWire : public BaseCapturerPipeWire { +- public: +- WindowCapturerPipeWire(); +- ~WindowCapturerPipeWire() override; +- +- static std::unique_ptr<DesktopCapturer> CreateRawWindowCapturer( +- const DesktopCaptureOptions& options); +- +- RTC_DISALLOW_COPY_AND_ASSIGN(WindowCapturerPipeWire); +-}; +- +-} // namespace webrtc +- +-#endif // MODULES_DESKTOP_CAPTURE_LINUX_WINDOW_CAPTURER_PIPEWIRE_H_ +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc b/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc +index 82dbae48137..ed48b7d6d59 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/screen_capturer_linux.cc +@@ -14,7 +14,7 @@ + #include "modules/desktop_capture/desktop_capturer.h" + + #if defined(WEBRTC_USE_PIPEWIRE) +-#include "modules/desktop_capture/linux/screen_capturer_pipewire.h" ++#include "modules/desktop_capture/linux/base_capturer_pipewire.h" + #endif // defined(WEBRTC_USE_PIPEWIRE) + + #if defined(WEBRTC_USE_X11) +@@ -28,7 +28,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { +- return ScreenCapturerPipeWire::CreateRawScreenCapturer(options); ++ return BaseCapturerPipeWire::CreateRawCapturer(options); + } + #endif // defined(WEBRTC_USE_PIPEWIRE) + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc +index 41dbf836b03..2b142ae3b92 100644 +--- a/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc ++++ b/chromium/third_party/webrtc/modules/desktop_capture/window_capturer_linux.cc +@@ -14,7 +14,7 @@ + #include "modules/desktop_capture/desktop_capturer.h" + + #if defined(WEBRTC_USE_PIPEWIRE) +-#include "modules/desktop_capture/linux/window_capturer_pipewire.h" ++#include "modules/desktop_capture/linux/base_capturer_pipewire.h" + #endif // defined(WEBRTC_USE_PIPEWIRE) + + #if defined(WEBRTC_USE_X11) +@@ -28,7 +28,7 @@ std::unique_ptr<DesktopCapturer> DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { + #if defined(WEBRTC_USE_PIPEWIRE) + if (options.allow_pipewire() && DesktopCapturer::IsRunningUnderWayland()) { +- return WindowCapturerPipeWire::CreateRawWindowCapturer(options); ++ return BaseCapturerPipeWire::CreateRawCapturer(options); + } + #endif // defined(WEBRTC_USE_PIPEWIRE) + +diff --git a/chromium/third_party/webrtc/webrtc.gni b/chromium/third_party/webrtc/webrtc.gni +index ca8acdbf259..505c975cece 100644 +--- a/chromium/third_party/webrtc/webrtc.gni ++++ b/chromium/third_party/webrtc/webrtc.gni +@@ -117,6 +117,10 @@ declare_args() { + # Set this to link PipeWire directly instead of using the dlopen. + rtc_link_pipewire = false + ++ # Set this to use certain PipeWire version ++ # Currently we support PipeWire 0.2 (default) and PipeWire 0.3 ++ rtc_pipewire_version = "0.3" ++ + # Enable to use the Mozilla internal settings. + build_with_mozilla = false + +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs +new file mode 100644 +index 00000000000..5ac3d1d22b8 +--- /dev/null ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire02.sigs +@@ -0,0 +1,47 @@ ++// Copyright 2018 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from PipeWire used in capturer code. ++//------------------------------------------------ ++ ++// core.h ++void pw_core_destroy(pw_core *core); ++pw_type *pw_core_get_type(pw_core *core); ++pw_core * pw_core_new(pw_loop *main_loop, pw_properties *props); ++ ++// loop.h ++void pw_loop_destroy(pw_loop *loop); ++pw_loop * pw_loop_new(pw_properties *properties); ++ ++// pipewire.h ++void pw_init(int *argc, char **argv[]); ++ ++// properties.h ++pw_properties * pw_properties_new_string(const char *args); ++ ++// remote.h ++void pw_remote_add_listener(pw_remote *remote, spa_hook *listener, const pw_remote_events *events, void *data); ++int pw_remote_connect_fd(pw_remote *remote, int fd); ++void pw_remote_destroy(pw_remote *remote); ++pw_remote * pw_remote_new(pw_core *core, pw_properties *properties, size_t user_data_size); ++enum pw_remote_state pw_remote_get_state(pw_remote *remote, const char **error); ++ ++// stream.h ++void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); ++int pw_stream_connect(pw_stream *stream, enum pw_direction direction, const char *port_path, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); ++pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); ++void pw_stream_destroy(pw_stream *stream); ++void pw_stream_finish_format(pw_stream *stream, int res, const spa_pod **params, uint32_t n_params); ++pw_stream * pw_stream_new(pw_remote *remote, const char *name, pw_properties *props); ++int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); ++int pw_stream_set_active(pw_stream *stream, bool active); ++ ++// thread-loop.h ++void pw_thread_loop_destroy(pw_thread_loop *loop); ++pw_thread_loop * pw_thread_loop_new(pw_loop *loop, const char *name); ++int pw_thread_loop_start(pw_thread_loop *loop); ++void pw_thread_loop_stop(pw_thread_loop *loop); ++void pw_thread_loop_lock(struct pw_thread_loop *loop); ++void pw_thread_loop_unlock(struct pw_thread_loop *loop); +diff --git a/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs +new file mode 100644 +index 00000000000..78d241f40c6 +--- /dev/null ++++ b/chromium/third_party/webrtc/modules/desktop_capture/linux/pipewire03.sigs +@@ -0,0 +1,46 @@ ++// Copyright 2018 The WebRTC project authors. All rights reserved. ++// Use of this source code is governed by a BSD-style license that can be ++// found in the LICENSE file. ++ ++//------------------------------------------------ ++// Functions from PipeWire used in capturer code. ++//------------------------------------------------ ++ ++// core.h ++int pw_core_disconnect(pw_core *core); ++ ++// loop.h ++void pw_loop_destroy(pw_loop *loop); ++pw_loop * pw_loop_new(const spa_dict *props); ++ ++ ++// pipewire.h ++void pw_init(int *argc, char **argv[]); ++ ++// properties.h ++pw_properties * pw_properties_new_string(const char *args); ++ ++// stream.h ++void pw_stream_add_listener(pw_stream *stream, spa_hook *listener, const pw_stream_events *events, void *data); ++int pw_stream_connect(pw_stream *stream, enum pw_direction direction, uint32_t target_id, enum pw_stream_flags flags, const spa_pod **params, uint32_t n_params); ++pw_buffer *pw_stream_dequeue_buffer(pw_stream *stream); ++void pw_stream_destroy(pw_stream *stream); ++pw_stream * pw_stream_new(pw_core *core, const char *name, pw_properties *props); ++int pw_stream_queue_buffer(pw_stream *stream, pw_buffer *buffer); ++int pw_stream_set_active(pw_stream *stream, bool active); ++int pw_stream_update_params(pw_stream *stream, const spa_pod **params, uint32_t n_params); ++ ++// thread-loop.h ++void pw_thread_loop_destroy(pw_thread_loop *loop); ++pw_thread_loop * pw_thread_loop_new(const char *name, const spa_dict *props); ++int pw_thread_loop_start(pw_thread_loop *loop); ++void pw_thread_loop_stop(pw_thread_loop *loop); ++void pw_thread_loop_lock(pw_thread_loop *loop); ++void pw_thread_loop_unlock(pw_thread_loop *loop); ++pw_loop * pw_thread_loop_get_loop(pw_thread_loop *loop); ++ ++ ++// context.h ++void pw_context_destroy(pw_context *context); ++pw_context *pw_context_new(pw_loop *main_loop, pw_properties *props, size_t user_data_size); ++pw_core * pw_context_connect(pw_context *context, pw_properties *properties, size_t user_data_size); diff --git a/linhes/rsyslog/PKGBUILD b/linhes/rsyslog/PKGBUILD index 100a406..1175a42 100644 --- a/linhes/rsyslog/PKGBUILD +++ b/linhes/rsyslog/PKGBUILD @@ -1,6 +1,6 @@ pkgname=rsyslog -pkgver=8.2412.0 -pkgrel=1 +pkgver=8.2510.0 +pkgrel=2 pkgdesc="An enhanced multi-threaded syslogd with a focus on security and reliability" url="http://www.rsyslog.com/" arch=('x86_64' 'i686' 'aarch64' 'armv7h') @@ -16,20 +16,18 @@ backup=('etc/rsyslog.conf' 'etc/logrotate.d/rsyslog') options=('strip' 'zipman') source=("$pkgname-$pkgver.tar.gz::https://github.com/rsyslog/rsyslog/archive/v${pkgver}.tar.gz" - "https://patch-diff.githubusercontent.com/raw/rsyslog/rsyslog/pull/5406.patch" 'rsyslog.logrotate' 'rsyslog.conf' 'rsyslog.service') -sha256sums=('859a8dbd6b72b093815d55d17ede159d9cb3234af387b448dcc84078c4bbfe0d' - '6211753b8170cc9b778ddd5159aaff03d72878edecddab52d62a9d4893b7ef4c' +sha256sums=('ccc65a73e43318debbd011c05c7e0f2eac9bd8bf556d44aa4f5ee5cebac903cf' '0f5bea3fd4dff2c9f097bf95768b2e1f6e9cfd9a08eab98bc3b3b4d2ed44119a' '76d3c6f0c094a768ca12e314133080444db19900679b7a82f30d4c63fdabed38' '81b9f9b78395405b679849143a6709911d00e9317928fdb2a2540f52965847c2') build() { cd "$srcdir"/${pkgname}-${pkgver} - patch configure.ac ../5406.patch + #patch configure.ac ../5406.patch ./autogen.sh --prefix=/usr \ --sbindir=/usr/bin \ --enable-mysql \ @@ -45,7 +43,8 @@ build() { --enable-impstats \ --enable-imptcp \ --enable-omprog \ - --with-systemdsystemunitdir=/usr/lib/systemd/system + --with-systemdsystemunitdir=/usr/lib/systemd/system \ + HAVE_PKG_CONFIG=yes make } diff --git a/linhes/signal-cli/PKGBUILD b/linhes/signal-cli/PKGBUILD index 4a4f16a..b148945 100644 --- a/linhes/signal-cli/PKGBUILD +++ b/linhes/signal-cli/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: asamk <asamk@gmx.de> pkgname=signal-cli -pkgver=0.13.11 +pkgver=0.13.22 pkgrel=1 pkgdesc="Provides a commandline and dbus interface for secure Signal messaging." arch=('any') @@ -12,16 +12,16 @@ makedepends=('java-environment>=21' 'gradle' 'asciidoc') source=("https://github.com/AsamK/${pkgname}/archive/v${pkgver}.tar.gz" "https://github.com/AsamK/${pkgname}/releases/download/v${pkgver}/v${pkgver}.tar.gz.asc" "${pkgname}.sh") -sha512sums=('c71f079c31d36ae5af756088544898df5bff98ea0f23fe5379942b5e3a74c8df24b139cd8c849eb276e4a1ade0e71221ceaa4b5c7cc4063a6c0f07d30b51e7d8' +sha512sums=('d5bcefa6b08b85796fd15441ee29bb5d1913d3dee3c786a4381d5f94a228bfd9c8ca00f4c589ef72eab3e563ec6a1eb854c12826bae881b1c0fce1161bfa04cb' 'SKIP' - 'f58d7851c53eae1874692f032a489cb6fb459763a4195afaf93ddd4c65939e1e4e2bbf50438e04800aded466266c3a2a37fcc0f5168f61b8e711fcf03e8e8d12') + '64f181bd9170af5c462899fba765a92b8225e24c3fd2a25deec31d9879dec76a987de9efa065fc3e60e8f5a787e934e0abbdd43ab94445ad3eecacfe1a9de74d') validpgpkeys=('FA10826A74907F9EC6BBB7FC2BA2CD21B5B09570') prepare() { cd "${srcdir}" cd "${pkgname}-${pkgver}" - echo ';plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" }' >> settings.gradle.kts + echo ';plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0" }' >> settings.gradle.kts } build() { diff --git a/linhes/signal-cli/signal-cli.sh b/linhes/signal-cli/signal-cli.sh index 21077ea..bba72ff 100644 --- a/linhes/signal-cli/signal-cli.sh +++ b/linhes/signal-cli/signal-cli.sh @@ -3,4 +3,4 @@ CP="/usr/share/java/libsignal-client/libsignal-client.jar":"/usr/share/java/comm for name in /usr/share/java/signal-cli/*.jar ; do CP=$CP:"$name" done -exec /usr/bin/java -cp "$CP" org.asamk.signal.Main "$@" +exec /usr/bin/java --enable-native-access=ALL-UNNAMED -cp "$CP" org.asamk.signal.Main "$@" diff --git a/linhes/wxedid/PKGBUILD b/linhes/wxedid/PKGBUILD index e136aba..635a19d 100644 --- a/linhes/wxedid/PKGBUILD +++ b/linhes/wxedid/PKGBUILD @@ -2,7 +2,7 @@ # Contributor: Jonathan Liu <net147@gmail.com> pkgname=wxedid -pkgver=0.0.32 +pkgver=0.0.33 pkgrel=1 pkgdesc='wxWidgets-based EDID (Extended Display Identification Data) editor' arch=('x86_64') @@ -10,7 +10,7 @@ url="https://sourceforge.net/projects/${pkgname}/" license=('GPL-3.0-or-later') depends=('wxwidgets-gtk3') source=("https://downloads.sourceforge.net/${pkgname}/${pkgname}-${pkgver}.tar.gz") -sha512sums=('46aaf8a9fb578ea2ed725aa6a60a33f359dc76701226695d1f8e5c252d1fa834dc972fbf1f8788e4045699115bf3e7143bc70bc9d2b6a9731e69e0f51dfb6376') +sha512sums=('e09fcf9cc4c538c9ed7d8b92568cd16fbfaa84f58b9b8bf95de7d6e215606d4de5e5f7ecbf041cf676591cb93e1c36479ec88615684e4e4f4700af41c01074c9') build() { cd "${pkgname}-${pkgver}" diff --git a/linhes/xmltv/PKGBUILD b/linhes/xmltv/PKGBUILD index 6059dd6..17755b9 100644 --- a/linhes/xmltv/PKGBUILD +++ b/linhes/xmltv/PKGBUILD @@ -5,7 +5,7 @@ # Contributor: Andrew Simmons <andrew.simmons@gmail.com> pkgname=xmltv -pkgver=1.3.0 +pkgver=1.4.0 pkgrel=2 pkgdesc="Set of utilities to download tv listings and format them in xml" arch=('any') @@ -67,7 +67,7 @@ optdepends=('perl-file-chdir: testing grabbers' source=( "${pkgname}-${pkgver}.tar.gz::https://github.com/XMLTV/${pkgname}/archive/v${pkgver}.tar.gz" ) -sha256sums=('b01d17e14ad94d1123e641eb72297c8d98d810382451c63353a18dd1ddcc28e6') +sha256sums=('99ff1a57638ef9dc5d223cbb59ab0868411b08271ff949718af0e4b1ab997643') build() { cd "$pkgname-$pkgver" diff --git a/linhes/xmltv/PKGBUILD.sig b/linhes/xmltv/PKGBUILD.sig new file mode 100644 index 0000000..ec25ce2 --- /dev/null +++ b/linhes/xmltv/PKGBUILD.sig @@ -0,0 +1,12 @@ +-----BEGIN PGP SIGNATURE----- + +iQFRBAABCAA7FiEEvzIK2SIsJhBtZ+wcJLJ8J1xiaNMFAlmtsgIdHGtoYW1wZkB1 +c2Vycy5zb3VyY2Vmb3JnZS5uZXQACgkQJLJ8J1xiaNOWgQf/eYV0w0NiTyUQcVdU +3qIn2SY34A0PqNy0uQ+NPCyvUlkTNpxYplJDKOpnnq/g5TnX3xhDB3Bu+qRR4IOy +80CgYSno3Z/vJ89F58RdqLzUF1czJd1mH9xqb9WirVLCPCq/KYGc7M0gS4cPp6eW +xLl0DuQPs7LROCB4a5QCv+CjwzOP8whlmdp21zcENVqICvgrTmfV69QOdY7UQtGS +PjiijhDv2diarof4/leEkJ+YJzs9wMIv0kL2QyQwdBQicI19RaNJAfaziFyJKH+x +A/hcUGuoSCsCjwssXJUc66SVBXYRFu78+CgKwR+cbK0MZs9EUAPh7Z6xs4aEkMuA +oGKOmQ== +=2etZ +-----END PGP SIGNATURE----- diff --git a/linhes/zabbix/PKGBUILD b/linhes/zabbix/PKGBUILD index 13947b5..b5d3d7e 100644 --- a/linhes/zabbix/PKGBUILD +++ b/linhes/zabbix/PKGBUILD @@ -4,7 +4,7 @@ pkgbase=zabbix pkgname=(zabbix-server zabbix-agent{,2} zabbix-proxy zabbix-frontend-php zabbix-web-service) -pkgver=7.0.7 +pkgver=7.0.21 pkgrel=1 arch=(x86_64) url='https://www.zabbix.com/' @@ -17,7 +17,7 @@ source=("https://cdn.zabbix.com/zabbix/sources/stable/${pkgver%.*}/zabbix-${pkgv zabbix-proxy-mysql.service zabbix-proxy.{sysusers,tmpfiles} zabbix-web-service.{service,sysusers,tmpfiles}) -sha512sums=('670144e89554251a4e45e358fef2185d90bb610b318f637e6f9113685a983c574224d1a39e0b2a521d489a40a185712bad0c4809e39a61cbaa20477255244373' +sha512sums=('ed8a5b31e1c5645b31b4917784642cb724fb5ab13d13cbc2909840750e65d839b235883b306e212a4751603fec2c9f83ae3db8f9211d84d2cbefe21a777e0a12' '8c1fa2676bc0ef91bc39ec5f97b4d3ba5c365d063420455a3785121a54e120bc5afeacde42a48f4509c115f940dcc3b6c2f43044a7fbfb421182fc93b22a2444' '3ab3ac1acc7e35c8896157aef601ebc30815237ac5252cbd0c1ecb26eeaf9eccf5c49938ae8c85bb79a6f95f607f082f6b80ed660829599ec03aa626cca6d3dc' 'ca6b4779de23829dfdd80ee21e924fbe4e2754f4e693bed4b1a2aa846cd87d150e399b1169d7fe58d30c50ed837c1b8254e580de420267d0a1834d6dc409c43d' |
