Paul's Blog Entries for July 2025
Tuesday 1st July 2025
Local Packages
Updated curl in the development repository to new upstream release candidate 8.15.0~rc2
Wednesday 2nd July 2025
Local Packages
Updated unrar to 7.12
Thursday 3rd July 2025
Fedora Project
Updated perl-Test-MockModule to 0.180.0 in Rawhide:
Local Packages
Updated perl-Module-CoreList to 5.20250702:
- Updated for v5.42.0
Updated perl-Test-MockModule to 0.180.0 as per the Fedora version
Monday 7th July 2025
Fedora Project
Updated perl-Finance-Quote to 1.66 in F-41, F-42, Rawhide and EPEL-10:
Modified CurrencyRates/CurrencyFreaks.pm to return from and to values instead of calculated rate
Removed Bloomberg.pm, Tiaacref.pm, Troweprice.pm
AlphaVantage: Return 'symbol not found' when no price data is returned
ASX: Changed error message when symbol isn't found (GH#497)
Added a new module to fetch the fund NAV from CMBChina (GH#494)
Added Cookie Jar to Comdirect user agent (GH#491)
Removed HU.pm, Oslobors.pm, and SEB.pm (GH#490)
Updated perl-Moose to 2.4000 in Rawhide:
- Documentation
Clarified some wording regarding the interactions between attribute configuration options "init_arg" and "required" (GH#187)
- Other
The release schedule and numbering scheme has changed; see Moose::Manual::Support
Updated perl-Test-Differences to 0.72 in Rawhide:
Changes to tests only, so tests pass when you have a new perl that supports bools, but an old Data::Dumper that doesn't
Local Packages
Updated city-fan.org-release to include the GPG key for the Fedora 43 repository in the package
Updated perl-Moose to 2.4000 as per the Fedora version
Updated perl-Net-DNS to 1.51:
- Resync with IANA DNS Parameters registry
- Add prototype DELEG RR package
- Minor code and documentation improvements
Updated perl-Term-ReadLine-Gnu to 1.46:
Add readline-8.3 support
New functions: rl_reparse_colors, rl_print_keybinding
New variables: rl_full_quoting_desired, rl_macro_display_hook, rl_completion_rewrite_hook
New state values for rl_readline_state: RL_STATE_READSTR
- Sample code updates
- Import almost all examples from the GNU Readline Library
Use "/usr/bin/env" for sh-bang
Add eg/README.md
Make the check for being in emacs to be more like bash (GH#28)
Add a wrap function on every function that has Keymap as an argument
- Add some constant functions
Add macro functions for rl_readline_state: RL_SETSTATE(), RL_UNSETSTATE(), RL_ISSTATE()
Export READERR
Fix for compilation in C23 mode (GH#32)
- POD updates
Fix description of add_defun() in BUGS section (GH#23)
- Fix formatting
GitHub actions: update OS and perl-version matrix
Updated perl-Test-Differences to 0.72 as per the Fedora version
Tuesday 8th July 2025
Fedora Project
Updated python-crypto (2.6.1) to stop using deprecated %py3_build/%py3_install macros (Bug #2377592)
Updated python-fluidity-sm (0.2.0) to stop using deprecated %py3_build/%py3_install macros (Bug #2377723)
Updated python-lexicon (2.0.1) to stop using deprecated %py3_build/%py3_install macros (Bug #2377852)
Updated python-paramiko (3.5.1) to stop using deprecated %py3_build/%py3_install macros (Bug #2377972)
Thursday 10th July 2025
Local Packages
Updated curl in development repository to new upstream release candidate 8.15.0~rc3
Friday 11th July 2025
Fedora Project
Updated geoipupdate to 7.1.1 in Rawhide:
- Update dependencies and re-build binaries with new Go version; no substantive changes
Updated perl-Business-ISBN-Data to 20250710.001 in Rawhide:
- Data update for 2025-07-10
Updated perl-IO-Socket-SSL to 2.095 in Rawhide:
Regression: make sysread set buffer to empty string again when returning EOF (GH#171)
Branched and built smbldap-tools (0.9.11) for EPEL-9
Local Packages
- All Perl based packages in the development repository rebuilt for Perl 5.42
Updated geoipupdate to 7.1.1 as per the Fedora version
Updated perl-IO-Socket-SSL to 2.095 as per the Fedora version
Monday 14th July 2025
Fedora Project
Updated perltidy to 20250711 in Rawhide (see CHANGES.md for details)
Local Packages
Updated perl-Perl-Tidy to 20250711 as per the Fedora perltidy package
Tuesday 15th July 2025
Local Packages
Updated perl-Mail-Sendmail to 0.82:
Fixed typos (CPAN RT#88351, CPAN RT#119000)
Improvement to use Sys::Hostname::Long (CPAN RT#36112, GH#2)
Wednesday 16th July 2025
Local Packages
Updated curl to 8.15.0:
- TLS: Remove support for Secure Transport and BearSSL
altsvc: Accept 'clear' without semicolon as well
asyn-ares: Remove redundant NULL check
asyn-thrdd: Free the previous name before strdup'ing the new
autotools: Detect and link 'brotlicommon' library for brotli
autotools: Drop '$top_builddir/src' from src header path
autotools: Drop headers from src mk-unity rules (fixup)
autotools: Drop no longer necessary '--srcdir' unity options
autotools: Drop redundant 'Makefile.inc' from 'EXTRA_DIST' in src
- autotools: Simplify configuration in tests, examples
bufq: Change read/write signatures
bufq: Remove the unused Curl_bufq_unwrite function
build: Assume 'sys/socket.h', 'sys/time.h' on non-Windows (as in 'curl/curl.h')
build: Drop 'HAVE_SYS_SOCKET_H' and 'HAVE_SYS_TIME_H' macros
build: Drop explicit curlx from hdr paths, refer headers with 'curlx/' prefix
- build: Drop unused variables in tests
build: Fix libcurltool with cmake and tunits, related tidy-ups
build: Split '.c' and '.h' file lists in tests
build: Stop checking for 'sys/stat.h'
build: stubgss tidy-ups (in tests)
build: Sync build scripts between client/libtest
build: Tidy up 'Makefile.inc' use in lib and src
build: Tidy up header paths, use srcdir where possible
cf-socket: Make socket data_pending a no-op
checksrc-all: Rewrite in Perl, remove 'checksrc.bat'
checksrc: Reduce exceptions, apply again to curlx
cmake/FindGSS: Fix processing C header path options
cmake/FindGSS: Initialize result variables
cmake: 'curl_add_clang_tidy_test_target' tidy-ups
cmake: Build 'stubgss' library for libtests to match autotools
cmake: Check USE_WINDOWS_SSPI when adding secur32 to CURL_LIBS
- cmake: Configure c-ares header directory in project root (was: lib)
cmake: Document OpenSSL and ngtcp2 crypto lib custom variables
- cmake: Drop never-propagated C macros
cmake: Drop passing redundant 'CURL_STATICLIB' in examples and clients
- cmake: Drop redundant macro from test clients
cmake: Drop reference to future variable
cmake: Enable soversion by default for OpenHarmony OS
cmake: Fix 'curl_add_clang_tidy_test_target' when no '-D' option
cmake: Fix generator expression in docs/examples
cmake: Gather options recursively in 'curl_add_clang_tidy_test_target'
- cmake: Make docs depend on support files
cmake: Move 'OUTPUT' argument in the 'add_custom_command()' line
cmake: Omit clang-tidy on internal libs curlu and curltool
cmake: Replace 'cmakelint' with 'cmake-lint' from 'cmakelang', fix issues
cmake: Replace the way clang-tidy verifies tests, fix issues found
cmake: Simplify handling generated 'lib1521.c' in libtests
cmake: Sync 'target_link_libraries()' order in tests more
cmake: Sync tests scripts by using the variable 'BUNDLE'
- cmake: Sync tests scripts with each other and autotools (more)
cmake: Use 'target_link_options()' when available
config-win32: Fix default targets, shorten macro logic
configure: Order LDAP after the SSL libraries
connect: Drop unused struct member
connection: Clarify 'transport'
connection: Eliminate member 'remote_addr'
curl-config: Fix whitespace in usage text
curl.h: Make CURL_IPRESOLVE_* symbols defined as longs
curl.h: Make CURLSSLOPT_* symbols defined as longs
curl.h: Remove the "RESERVED" error codes
curl: Implement non-blocking STDIN read on Windows
curl: Improve non-blocking STDIN performance
curl: Remove the global argument from many functions
- curl: Unify pointer names to global config
curl_get_line: Make sure lines end with newline
curl_memory.h: Fix to undefine 'accept4'
curl_path: Make SFTP handle a path like /~ properly
curlinfo: Provide the 'digest' feature
CURLSHOPT_SHARE.md: Mention multi-threading requires callbacks
DEPRECATE.md: Add VS2005 removal to the list
- digest: Fix build with disabled digest auth
DISTROS: Update NixOS link
docs,tests: Fix english grammar "allow to" -> "allow <something> to"
docs/CONTRIBUTE: Fix broken link
docs/examples: Add ftp-delete.c
docs: Beef up examples/websocket.c
docs: Fix broken link in CODE_REVIEW.md
docs: Fix broken link in INSTALL.md
docs: Fix docs for CURLOPT_PREQUOTE after GH#17616
docs: Fix documentation of connect_only 2
- docs: Fix two typos
docs: Mention that the netrc file works without port numbers
- docs: Mention the as-is concept generically
docs: Note SSLS-EXPORT feature in -ssl-sessions doc
- docs: Reflect that delimiter-separated capath is only OpenSSL
docs: Sync -tls-earlydata support with CURLOPT_SSL_OPTIONS
docs: Warn about lifetime in CURLOPT_CLOSESOCKET*
- easy: Fix comment-documentation
easygetopt: Fix curl logo in header comment
firefox-db2pem: Avoid use of eval in script
- ftp: Fix prequotes for a directory in URL
ftplistparser: Split parse_unix into sub-functions
h2_serverpush: Fix file handle leaks reported by clang-tidy
- h3: Fix query of concurrent streams
- http/3: Report handshake with version and cipher as for TCP connections
http2: Do not delay RST send on aborted transfer
http2: Fix var types in is_alive() implementations
http: Explicitly ignore parsing errors for Retry-After
http: Fix build with cookies and HSTS disabled
http_ntlm: Protect against null deref
http_ntlm: Remove unreachable code
INSTALL.md: Cygwin details and add source code link
ldap: Avoid automake caching issues with LDAP library names
ldap: If ldap-lib is sufficient, add it to LIBS
ldap: Initial support for --with-ldap option
lib2082: Drop 'typedef struct'
- lib: Address single-use issues
- lib: Avoid reusing unclean connection
lib: Drop two interim macros in favour of native libcurl API calls
- lib: Fix unused parameter/function compiler warnings
lib: Make 'CURLX_SET_BINMODE()' and use it
lib: Make 'curlx_wait_ms()' and use it
lib: Replace scache no-op macros with '#ifdef'
lib: Stop 'time()' debug overrides at the end of source in altsvc, hsts
lib: Unify recv/send function signatures
libcurl-env.md: Drop LOGNAME, USER and NTLMUSER
libcurl.m4: Fix indentation
libssh2: Remove use of 'initialised' for clean-up
libssh: De-complex myssh_statemach_act()
libssh: Fix readdir issues
libtests: Make tests 1503, 1504, 1505 use the 1502 binary
libtests: More header tidy-ups
libtests: Stop building the same source multiple times
memdebug.h: #undef 'fclose' before defining it
memdebug.h: Eliminate global macro 'CURL_MT_LOGFNAME_BUFSIZE'
memdebug: Include in unity batch
memory: Stop overriding unused 'wcsdup()'/'_wcsdup()' system functions
memory: Tidy up '_tcsdup()' override
- misc: Fix typos
mk-lib1521: Replace 'printf' with 'curl_mprintf'
- multi: Add dirty bitset
- multi: Do not expire a blocked transfer
- multi: Fix polling with pending input
- multi: Remove careful bounds check as coverity says it is not needed
- multi: xfer table/bitset, handle limits
ngtcp2: Fix coverity warning about result handling
- openssl: Enable read-ahead
openssl: Error on SSL_ERROR_SYSCALL
- openssl: Fix handling of buffered data
- openssl: Fix openssl engine use
- openssl: Fix pkcs11 provider available check
- os400: Upgrade ILE/RPG bindings with latest definitions
pingpong: On disconnect, check for unflushed pingpong state
projects/build-openssl.bat: Remove
pytest: test_07_70, weaken early data check
pytest: Adapt for runs with openssl-1.1.1
pytest: Disable test_07_37 and test_07_36 with openssl's quic
quic: Implement CURLINFO_TLS_SSL_PTR
RELEASE-PROCEDURE.md: Update docs/VERSIONS
runtests.pl: Fix sprintf() using one too many %s
runtests: Fix 'LD_PRELOAD' detection for cmake-built curl binaries
runtests: Support memory-limits per test
rustls: Apply memory function overrides, fixing an ECH buffer free
rustls: Don't try printing the not provided file
schannel: Allow partial chains for manual peer verification
schannel: Drop Windows 2000 compatibility logic
- scorecard: Flame graphs and documentation
SCP/SFTP: Avoid busy loop after EAGAIN
- scripts: Fix to quote the copyright email address
- socks: Fix query when filter context is null
system.h: Remove some macros
test1117: Reduce write delays
test1175: Fix to run, and fix documentation issues detected
test1222: Fix for out-of-tree and no-libcurl-manual builds
test1499, 1599: use '%LOGDIR'
test1499: Verify two chunked responses on reused connection
test1596: Let test pass after year 2036
test1706: Pass include directory to 'managen' for out-of-tree builds
tests/client: Drop autotools logic no longer necessary
tests/client: Use 'curl_mfprintf()'
tests/dnsd: Read config from file
tests/http/clients: Drop hack and use 'curl_setup.h' again
tests/http/clients: Move to tests/client
tests/http/requirements: Remove multipart
tests/libtest: Call 'curlx_now_init()' for unit 1399, 2600 (Windows)
tests/libtest: Drop 'TEST_HANG_TIMEOUT' redefinition hack
tests/libtest: Drop a checksrc exception
tests/libtest: Use 'curltime' from curlx
tests/server/util.c: Include netinet/in6.h
tests/server: De-dupe/merge three 'sockdaemon()' clones into one
tests/server: Drop 'memdebug.h'
tests/server: Make all global vars/funcs static
tests/server: Move memory init to 'memptr.c'
tests/servers.pm: Add more ways to figure out current user
- tests: Always make bundles, adapt build and tests
- tests: Bundle http clients, de-dupe, enable for MSVC
- tests: Constify, make consts static
tests: Drop 'BUNDLE_SRC' variable
tests: Drop mk-bundle exceptions
- tests: Drop unused or redundant includes
tests: Drop useless "nodist_SOURCES" assignments
tests: Fail torture if !valgrind&threaded resolver
tests: Fix 1301, 1308 to fail on error
tests: Fix 'BUNDLE' variable references in 'Makefile.am'
tests: Make all names < 75 characters long
- tests: Make individual test sources compile cleanly
tests: Make sshserver less verbose
tests: Move 'curlcheck.h' to libtest as 'unitcheck.h'
tests: Move GSS-API dynamic stub into debug-mode libcurl
tests: torture: Don't duplicate valgrind command
tests: Use %b64[] to base64 data
tests: Use %b64[] to base64 data in 2056, 2057
tftpd: Use 'CURLMIN()' macro
tidy-up: Replace '<memdebug.h>' with '"memdebug.h"' (src, units)
tls: Remove Curl_ssl false_start
tool1621: Drop unused internal libcurl headers
tool_getparam: Fix --ftp-pasv
tool_operate: Fix return code when --retry is used but not triggered
tool_paramhelp: Fix language in comments
- top-complexity: Lower max allowed complexity threshold to 90
- unit tests: Extract "private" prototypes at build time
unit1302: Expand the base64 encode/decode tests
- url: Fix connection lifetime checks
url: Fix NULL deref with bad password when no user is provided
urlapi: Simplify and split into sub functions
urlapi: Use upper case hex encoding
vauth: Move auth structs to conn meta data
vtls: Change send/recv signatures of tls backends
vtls: Fix a copy-pasted early data comment typo
vtls: Log rustls negotiated KEX group name
vtls: Prefer ciphersuite to cipher in msgs
vtls: Prefer rustls-ffi ciphersuite name API
VULN-DISCLOSURE-POLICY.md: Fix typos
VULN-DISCLOSURE-POLICY: All reports should be disclosed
VULN-DISCLOSURE-POLICY: Exclude not installed software
VULN-DISCLOSURE-POLICY: Minor language polish
warnless: Drop parts of the 'read'/'write' preprocessor hack (Windows)
warnless: Replace 'read()'/'write()' wrapper functions with macros (Windows)
windows: Drop redundant 'curl_wcsdup_callback' callback
windows: Fixup 'fopen()' in 'CURLDEBUG' builds
- windows: Reduce/stop loading DLLs at runtime
wolfssl: Add support for ML_KEM hybrids
ws: Drop redundant 'CURL_EXTERN' from function definitions
xfer: Manage pause bits
Friday 18th July 2025
Local Packages
Updated java-1.8.0-oracle to Java SE 8 update 461
Sunday 20th July 2025
Replacing disks on server
For some time I had been getting emails about SMART warnings on one of my servers, like these:
Device: /dev/sdb [SAT], 10 Offline uncorrectable sectors Device: /dev/sdb [SAT], 78 Currently unreadable (pending) sectors
The numbers had been growing so I knew I had to replace the disk, which was a Seagate Barracuda 7200.10 320GB, one of a pair (sda, sdb) that were mirrored using mdraid level 1 so the server was still fine for the moment with sda not reporting any issues. I bought a pair of trusty Crucial MX500 500GB SSDs as replacements.
The existing partitioning arrangement was as follows:
Partition |
Start Sec |
End Sec |
Size |
RAID device |
Usage |
|
|||||
/dev/sda: 298.1 GiB (320 GB) with GPT partition table |
|||||
sda1 |
2048 |
821247 |
400.0 MiB |
md0 |
- |
sda2 |
821248 |
2459647 |
800.0 MiB |
md1 |
/boot (OSa) |
sda3 |
2459648 |
4098047 |
800.0 MiB |
md2 |
/boot (OSb) |
sda4 |
4098048 |
171870207 |
80.0 GiB |
md3 |
vgGKOS |
sda5 |
171870208 |
423528447 |
120.0 GiB |
md4 |
vgGKdata |
sda6 |
423528448 |
424347647 |
400.0 MiB |
- |
/boot/efi |
- |
|
|
|
- |
95.7 GiB spare |
|
|||||
/dev/sdb: 298.1 GiB (320 GB) with GPT partition table |
|||||
sdb1 |
2048 |
821247 |
400.0 MiB |
md0 |
- |
sdb2 |
821248 |
2459647 |
800.0 MiB |
md1 |
/boot (OSa) |
sdb3 |
2459648 |
4098047 |
800.0 MiB |
md2 |
/boot (OSb) |
sdb4 |
4098048 |
171870207 |
80.0 GiB |
md3 |
vgGKOS |
sdb5 |
171870208 |
423528447 |
120.0 GiB |
md4 |
vgGKdata |
sdb6 |
423528448 |
424347647 |
400.0 MiB |
- |
/boot/efi (copy) |
- |
|
|
|
- |
95.7 GiB spare |
|
|||||
The LVM volume groups were set up as follows:
Volume Group |
Logical Volume |
Size |
Mount Point (OSa) |
Mount Point (OSb) |
vgGKdata |
srv |
40.00 GiB |
/srv |
/srv |
vgGKdata |
home |
40.00 GiB |
/home |
/home |
vgGKdata |
Free Space |
39.93 GiB |
- |
- |
|
||||
vgGKOS |
root.A |
15.00 GiB |
/ |
- |
vgGKOS |
root.B |
15.00 GiB |
- |
/ |
VgGkOS |
tmp |
10.00 GiB |
/tmp |
/tmp |
VgGkOS |
swap |
16.00 GiB |
- |
- |
VgGkOS |
Free Space |
23.93 GiB |
- |
- |
First step was to open up the server and install the new SSDs. That introduced two new drives, sdc and sdd with nothing on them. Since the new drives were bigger than the old ones, I took the opportunity to make the partitions bigger so that I'd be able to expand things with very little effort in the process of replacing the disks. I used gdisk to partition both drives like this:
Partition |
Start Sec |
End Sec |
Size |
Partition Code |
RAID device |
Usage |
|
||||||
/dev/sdc: 465.8 GiB (500 GB) with GPT partition table |
||||||
sdc1 |
2048 |
1128447 |
550.0 MiB |
EF00 |
md0 |
- |
sdc2 |
1128448 |
5322751 |
2.0 GiB |
FD00 |
md1 |
/boot (OSa) |
sdc3 |
5322752 |
9517055 |
2.0 GiB |
FD00 |
md2 |
/boot (OSb) |
sdc4 |
9517056 |
345061375 |
160.0 GiB |
FD00 |
md3 |
vgGKOS |
sdc5 |
345061376 |
764491775 |
200.0 GiB |
FD00 |
md4 |
vgGKdata |
sdc6 |
764491776 |
765618175 |
550.0 MiB |
EF00 |
- |
/boot/efi |
- |
|
|
|
|
- |
100.7 GiB spare |
|
||||||
md0 was originally an EFI system partition on top of an mdraid array but I decided a long time ago that that was a bad idea after reading this.
The next step was to add the new partitions to the existing RAID arrays:
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 409536 (399.94 MiB 419.36 MB)
Used Dev Size : 409536 (399.94 MiB 419.36 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun Jul 20 14:14:27 2025
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1067
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
# mdadm /dev/md0 --add /dev/sdc1 /dev/sdd1
mdadm: added /dev/sdc1
mdadm: added /dev/sdd1
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 409536 (399.94 MiB 419.36 MB)
Used Dev Size : 409536 (399.94 MiB 419.36 MB)
Raid Devices : 2
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jul 20 14:39:25 2025
State : clean
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Consistency Policy : resync
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1069
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
2 8 33 - spare /dev/sdc1
3 8 49 - spare /dev/sdd1
# mdadm /dev/md0 --grow --raid-devices=4
raid_disks for /dev/md0 set to 4
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 409536 (399.94 MiB 419.36 MB)
Used Dev Size : 409536 (399.94 MiB 419.36 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jul 20 14:40:00 2025
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Consistency Policy : resync
Rebuild Status : 50% complete
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1080
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
3 8 49 2 spare rebuilding /dev/sdd1
2 8 33 3 spare rebuilding /dev/sdc1
(some time later)
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 409536 (399.94 MiB 419.36 MB)
Used Dev Size : 409536 (399.94 MiB 419.36 MB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Sun Jul 20 14:40:05 2025
State : clean
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1090
Number Major Minor RaidDevice State
0 8 1 0 active sync /dev/sda1
1 8 17 1 active sync /dev/sdb1
3 8 49 2 active sync /dev/sdd1
2 8 33 3 active sync /dev/sdc1I then repeated the process to add new partitions to arrays md1, md2, md3 and md4 in a similar fashion, then waiting for them to complete synchronizing the data on to the new drives..
That just left the filesystems on the sixth partitions of each drive (EFI system partitions) to copy over, which I did using dd:
# dd if=/dev/sda6 of=/dev/sdc6 bs=1024 409600+0 records in 409600+0 records out 419430400 bytes (419 MB, 400 MiB) copied, 34.6945 s, 12.1 MB/s # blkid /dev/sdc6 /dev/sdc6: SEC_TYPE="msdos" UUID="F0A9-5AF2" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI system partition" PARTUUID="6d396dbf-f553-484c-8e35-7b798d584b3d" # dd if=/dev/sdb6 of=/dev/sdd6 bs=1024 409600+0 records in 409600+0 records out 419430400 bytes (419 MB, 400 MiB) copied, 8.80212 s, 47.7 MB/s
Those filesystems will be reformatted next time I install an updated OS on the server, so I didn't bother doing anything to try to increase the size of the filesystems at this time.
The /boot/efi/EFI/fedora/grub.cfg file points to the filesystem containing /boot, which was on md2 and had the same UUID as it always had, so there was nothing to change there.
The next step was to arrange for booting to take place from the new drives instead of the old one. Here was the current situation:
# efibootmgr BootCurrent: 0000 Timeout: 1 seconds BootOrder: 0000,0001,0002,0003,0004,0006,0007,0008,0009,0005 Boot0000* Fedora HD(6,GPT,16233012-926f-4b61-9831-f0bbf24efd21,0x193e8800,0xc8000)/\EFI\FEDORA\SHIMX64.EFI Boot0001* UEFI OS HD(1,GPT,5584e986-3d0e-48d4-a261-f14498dfe02c,0x800,0xc8000)/\EFI\BOOT\BOOTX64.EFI0000424f Boot0002* UEFI OS HD(1,GPT,39ed59ca-e1da-4126-9e16-ee7b14ca4ec7,0x800,0xc8000)/\EFI\BOOT\BOOTX64.EFI0000424f Boot0003* UEFI: IP4 Intel(R) Ethernet Connection (H) I219-LM PciRoot(0x0)/Pci(0x1f,0x6)/MAC(e0071bff0827,0)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f Boot0004* UEFI: IP6 Intel(R) Ethernet Connection (H) I219-LM PciRoot(0x0)/Pci(0x1f,0x6)/MAC(e0071bff0827,0)/IPv6([::],0,Static,[::],[::],64)0000424f Boot0005* UEFI: Built-in EFI Shell VenMedia(5023b95c-db26-429b-a648-bd47664c8012)0000424f Boot0006* Fedora HD(1,GPT,5584e986-3d0e-48d4-a261-f14498dfe02c,0x800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0007* Fedora HD(6,GPT,16233012-926f-4b61-9831-f0bbf24efd21,0x193e8800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0008* Fedora HD(1,GPT,39ed59ca-e1da-4126-9e16-ee7b14ca4ec7,0x800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0009* Fedora HD(6,GPT,c3a13747-6fe1-49f3-b4a6-5770d6e2ee1f,0x193e8800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f # blkid /dev/sda6 /dev/sda6: SEC_TYPE="msdos" UUID="F0A9-5AF2" BLOCK_SIZE="512" TYPE="vfat" PARTLABEL="EFI System Partition" PARTUUID="16233012-926f-4b61-9831-f0bbf24efd21" # blkid /dev/sdc6 /dev/sdc6: PARTLABEL="EFI system partition" PARTUUID="6d396dbf-f553-484c-8e35-7b798d584b3d"
I added a new boot table entry to boot from sdc6:
# efibootmgr -c -d /dev/sdc -p 6 -L "Fedora SSD" -l '\EFI\FEDORA\SHIMX64.EFI' BootCurrent: 0000 Timeout: 1 seconds BootOrder: 000A,0000,0001,0002,0003,0004,0006,0007,0008,0009,0005 Boot0000* Fedora HD(6,GPT,16233012-926f-4b61-9831-f0bbf24efd21,0x193e8800,0xc8000)/\EFI\FEDORA\SHIMX64.EFI Boot0001* UEFI OS HD(1,GPT,5584e986-3d0e-48d4-a261-f14498dfe02c,0x800,0xc8000)/\EFI\BOOT\BOOTX64.EFI0000424f Boot0002* UEFI OS HD(1,GPT,39ed59ca-e1da-4126-9e16-ee7b14ca4ec7,0x800,0xc8000)/\EFI\BOOT\BOOTX64.EFI0000424f Boot0003* UEFI: IP4 Intel(R) Ethernet Connection (H) I219-LM PciRoot(0x0)/Pci(0x1f,0x6)/MAC(e0071bff0827,0)/IPv4(0.0.0.0,0,DHCP,0.0.0.0,0.0.0.0,0.0.0.0)0000424f Boot0004* UEFI: IP6 Intel(R) Ethernet Connection (H) I219-LM PciRoot(0x0)/Pci(0x1f,0x6)/MAC(e0071bff0827,0)/IPv6([::],0,Static,[::],[::],64)0000424f Boot0005* UEFI: Built-in EFI Shell VenMedia(5023b95c-db26-429b-a648-bd47664c8012)0000424f Boot0006* Fedora HD(1,GPT,5584e986-3d0e-48d4-a261-f14498dfe02c,0x800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0007* Fedora HD(6,GPT,16233012-926f-4b61-9831-f0bbf24efd21,0x193e8800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0008* Fedora HD(1,GPT,39ed59ca-e1da-4126-9e16-ee7b14ca4ec7,0x800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot0009* Fedora HD(6,GPT,c3a13747-6fe1-49f3-b4a6-5770d6e2ee1f,0x193e8800,0xc8000)/\EFI\FEDORA\SHIM.EFI0000424f Boot000A* Fedora SSD HD(6,GPT,6d396dbf-f553-484c-8e35-7b798d584b3d,0x2d913800,0x113000)/\EFI\FEDORA\SHIMX64.EFI
The next step was to reboot and make sure that the new boot entry worked, which it did. I then shut down the server and physically disconnected the two old drives, the brought the server back up again. That worked too, which was nice, although I did get a bunch of emails about degraded RAID arrays, which was expected.
I now had a bunch of mdraid devices with two working devices (now called sda* and sdb*) and two missing devices, so I dropped the size back to two devices for each array, e.g.:
# mdadm /dev/md0 --grow --raid-devices=2
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 409536 (399.94 MiB 419.36 MB)
Used Dev Size : 409536 (399.94 MiB 419.36 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun Jul 20 16:10:52 2025
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1094
Number Major Minor RaidDevice State
3 8 17 0 active sync /dev/sdb1
2 8 1 1 active sync /dev/sda1Since the (smaller) partitions of the old drives were no longer part of the array, I could grow the array to fill the new partitions:
# mdadm --grow --size max /dev/md0
mdadm: component size of /dev/md0 has been set to 563184K
# mdadm --detail /dev/md0
/dev/md0:
Version : 1.0
Creation Time : Sat Mar 11 04:06:43 2017
Raid Level : raid1
Array Size : 563184 (549.98 MiB 576.70 MB)
Used Dev Size : 563184 (549.98 MiB 576.70 MB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Sun Jul 20 16:24:36 2025
State : clean, resyncing
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Consistency Policy : resync
Resync Status : 99% complete
Name : localhost.localdomain:0
UUID : 3189b1a3:f4ba415b:45d478c0:2e5a08c2
Events : 1099
Number Major Minor RaidDevice State
3 8 17 0 active sync /dev/sdb1
2 8 1 1 active sync /dev/sda1I waited for the resync to complete before progressing to the next one.
So, I now had md0 with an old EFI system partition on it that I wasn't bothered about, md1 and md2 with ext4 filesystems that would need to be grown to fit the new array sizes, and md3 and md4 containing LVM physical volumes that would also need to be grown to fit the new array sizes:
# resize2fs /dev/md1 resize2fs 1.47.0 (5-Feb-2023) Please run 'e2fsck -f /dev/md1' first. # e2fsck -f /dev/md1 e2fsck 1.47.0 (5-Feb-2023) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Boot.A: 44/51296 files (22.7% non-contiguous), 87780/204784 blocks # resize2fs /dev/md1 resize2fs 1.47.0 (5-Feb-2023) Resizing the filesystem on /dev/md1 to 524284 (4k) blocks. The filesystem on /dev/md1 is now 524284 (4k) blocks long. # resize2fs /dev/md2 resize2fs 1.47.0 (5-Feb-2023) Filesystem at /dev/md2 is mounted on /boot; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 1 The filesystem on /dev/md2 is now 524284 (4k) blocks long. # pvdisplay /dev/md3 --- Physical volume --- PV Name /dev/md3 VG Name vgGKOS PV Size <79.94 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 20463 Free PE 6127 Allocated PE 14336 PV UUID riajtP-OOK7-tK5g-Mypy-X3Qd-7uwE-JGLwWD # pvresize -v /dev/md3 Resizing volume "/dev/md3" to 335413248 sectors. Resizing physical volume /dev/md3 from 20463 to 40943 extents. Updating physical volume "/dev/md3" Archiving volume group "vgGKOS" metadata (seqno 5). Physical volume "/dev/md3" changed Creating volume group backup "/etc/lvm/backup/vgGKOS" (seqno 6). 1 physical volume(s) resized or updated / 0 physical volume(s) not resized # pvdisplay /dev/md3 --- Physical volume --- PV Name /dev/md3 VG Name vgGKOS PV Size <159.94 GiB / not usable 3.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 40943 Free PE 26607 Allocated PE 14336 PV UUID riajtP-OOK7-tK5g-Mypy-X3Qd-7uwE-JGLwWD # pvdisplay /dev/md4 --- Physical volume --- PV Name /dev/md4 VG Name vgGKdata PV Size <119.94 GiB / not usable 4.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 30703 Free PE 10223 Allocated PE 20480 PV UUID ClxfPu-FRD6-XHC7-Eb6U-80E6-SD0p-02VbT9 # pvresize -v /dev/md4 Resizing volume "/dev/md4" to 419299328 sectors. Resizing physical volume /dev/md4 from 30703 to 51183 extents. Updating physical volume "/dev/md4" Archiving volume group "vgGKdata" metadata (seqno 3). Physical volume "/dev/md4" changed Creating volume group backup "/etc/lvm/backup/vgGKdata" (seqno 4). 1 physical volume(s) resized or updated / 0 physical volume(s) not resized # pvdisplay /dev/md4 --- Physical volume --- PV Name /dev/md4 VG Name vgGKdata PV Size <199.94 GiB / not usable 3.00 MiB Allocatable yes PE Size 4.00 MiB Total PE 51183 Free PE 30703 Allocated PE 20480 PV UUID ClxfPu-FRD6-XHC7-Eb6U-80E6-SD0p-02VbT9
Now that my LVM volume groups had more free space in them, I was able to increase the size of some of the logical volumes and the filesystems that were on them:
# vgdisplay -v vgGKOS --- Volume group --- VG Name vgGKOS System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 4 Open LV 3 Max PV 0 Cur PV 1 Act PV 1 VG Size 159.93 GiB PE Size 4.00 MiB Total PE 40943 Alloc PE / Size 14336 / 56.00 GiB Free PE / Size 26607 / 103.93 GiB VG UUID fqtzpQ-wcO6-zKdc-FCq6-T7rv-uycT-rZ2Znz --- Logical volume --- LV Path /dev/vgGKOS/root.A LV Name root.A VG Name vgGKOS LV UUID uUA2SK-Dbl0-9UxV-rHBh-BxE5-PE9X-zZod0K LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-03-11 06:01:58 +0000 LV Status available # open 0 LV Size 15.00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:2 --- Logical volume --- LV Path /dev/vgGKOS/root.B LV Name root.B VG Name vgGKOS LV UUID antmFD-DOat-FuYa-luud-GSUP-iOG0-0ZmiJk LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-03-11 06:02:05 +0000 LV Status available # open 1 LV Size 15.00 GiB Current LE 3840 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 --- Logical volume --- LV Path /dev/vgGKOS/swap LV Name swap VG Name vgGKOS LV UUID FqM6KO-cLko-BZdr-Nwq1-ye8Y-Iczm-CON3ob LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-03-11 06:02:24 +0000 LV Status available # open 1 LV Size 16.00 GiB Current LE 4096 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:1 --- Logical volume --- LV Path /dev/vgGKOS/tmp LV Name tmp VG Name vgGKOS LV UUID 1OHDnb-EwWq-Ccbi-JZ9Y-6Xq6-tH0a-pObqqZ LV Write Access read/write LV Creation host, time localhost.localdomain, 2017-03-11 06:03:08 +0000 LV Status available # open 1 LV Size 10.00 GiB Current LE 2560 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3 --- Physical volumes --- PV Name /dev/md3 PV UUID riajtP-OOK7-tK5g-Mypy-X3Qd-7uwE-JGLwWD PV Status allocatable Total PE / Free PE 40943 / 26607 # lvextend --size 25G /dev/vgGKOS/root.A Size of logical volume vgGKOS/root.A changed from 15.00 GiB (3840 extents) to 25.00 GiB (6400 extents). Logical volume vgGKOS/root.A successfully resized. # lvextend --size 25G /dev/vgGKOS/root.B Size of logical volume vgGKOS/root.B changed from 15.00 GiB (3840 extents) to 25.00 GiB (6400 extents). Logical volume vgGKOS/root.B successfully resized. # df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgGKOS-root.B 15375304 7901936 6670552 55% / # resize2fs /dev/mapper/vgGKOS-root.A resize2fs 1.47.0 (5-Feb-2023) Please run 'e2fsck -f /dev/mapper/vgGKOS-root.A' first. # e2fsck -f /dev/mapper/vgGKOS-root.A e2fsck 1.47.0 (5-Feb-2023) Root.A: recovering journal Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Feature orphan_present is set but orphan file is clean. Clear<y>? yes Root.A: ***** FILE SYSTEM WAS MODIFIED ***** Root.A: 115563/983040 files (0.4% non-contiguous), 2292449/3932160 blocks # resize2fs /dev/mapper/vgGKOS-root.A resize2fs 1.47.0 (5-Feb-2023) Resizing the filesystem on /dev/mapper/vgGKOS-root.A to 6553600 (4k) blocks. The filesystem on /dev/mapper/vgGKOS-root.A is now 6553600 (4k) blocks long. # resize2fs /dev/mapper/vgGKOS-root.B resize2fs 1.47.0 (5-Feb-2023) Filesystem at /dev/mapper/vgGKOS-root.B is mounted on /; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 4 The filesystem on /dev/mapper/vgGKOS-root.B is now 6553600 (4k) blocks long. # df / Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/vgGKOS-root.B 25692476 7901972 16557784 33% /
I was similarly able to extend the sizes of /srv and /home on vgGKdata. I rebooted to make sure that all was well, then shut the machine down again to finally remove the old drives from the system before putting the case back together and bringing the server back up.
All in all a great success!
Monday 21st July 2025
Fedora Project
Updated ansible-collection-community-libvirt to 2.0.0 in Rawhide:
This is a major release of the community.libvirt collection
Many changes for virt_volume: see CHANGELOG.rst for details
New module community.libvirt.virt_install to provision new virtual machines using the virt-install tool
Updated perl-Path-Tiny to 0.150 in Rawhide:
Released with newest Dist::Zilla to avoid xattrs in the tarball
Local Packages
Updated ansible-collection-community-libvirt to 2.0.0 as per the Fedora version
Updated perl-ExtUtils-ParseXS to 3.58:
ExtUtils::ParseXS has been extensively restructured internally; most of these changes shouldn't be visible externally, but might affect XS code that was using invalid or unsupported syntax
Updated perl-Module-CoreList to 5.20250720:
- Updated for v5.43.1
- Updated for v5.43.0
Updated perl-Path-Tiny to 0.150 as per the Fedora version
Tuesday 22nd July 2025
Fedora Project
Updated perl-Business-ISBN-Data to 20250722.001 in Rawhide:
- Data update for 2025-07-22
Sunday 27th July 2025
Local Packages
Rebuilt ansible-collection-community-libvirt (2.0.0), bluefish (2.2.17), check (0.15.2), grepmail (5.3111), gtkwave (3.3.124), Judy (1.0.5), libgpg-error (1.55), libidn (1.43), libnet (1.3), libssh2 (1.11.1), libxml2 (2.12.10), libxslt (1.1.43), mod_fcgid (2.3.9), nmap (7.92), perl-Any-Moose (0.27), perl-Class-XSAccessor (1.19). perl-DBI (1.647), perl-Dir-Self (0.11), perl-Feature-Compat-Class (0.07), perl-HTML-Lint (2.32), perl-IO-AIO (4.81), perl-MCE (1.901), perl-MIME-Types (2.28), perl-MIME-tools (1.515), perl-Moose (2.4000), perl-Mouse (2.5.11), perl-Net-DNS (1.51), perl-Object-HashBase (0.015), perl-Perl-Critic (1.156), perl-Perl-Tidy (20250711), perl-Specio (0.51), perl-Test-InDistDir (1.112071), perl-Test-LeakTrace (0.17), perl-Type-Tiny (2.008002), perl-Types-Path-Tiny (0.006), pptp (1.10.0), proftpd (1.3.9), rbldnsd (0.998b), sendmail (8.18.1), smbldap-tools (0.9.11) and spamass-milter (0.4.0) for the Fedora_43_Mass_Rebuild
Updated curl (8.15.0) to fix broken dependency on CA bundle when we don't use the old one at /etc/pki/tls/certs/ca-bundle.crt (related to Changes/dropingOfCertPemFile)
Monday 28th July 2025
Fedora Project
Updated perl-Crypt-CBC to 3.07 in F-41, F-42, EPEL-9, EPEL-10 and Rawhide:
- New upstream maintainer
Fix CVE-2025-2814 by using Crypt::URandom
Fix decryption of ciphertext created with 'header' => 'randomiv'
Fixed bug in which manually-specified key and -pkdf=>"none" was not having any effect
Converted build process to Dist::Zilla
Miscellaneous minor Dist::Zilla related changes
Updated perl-Crypt-CBC (2.33) in EPEL-8 with back-ported fix for CVE-2025-2814 using Crypt::URandom
Updated perl-Devel-Cover to 1.51 in Rawhide:
- Test against 5.42.0
Add nvim report to show coverage in neovim
Fix cover --outputdir option (GH#358)
Updated perl-Text-CSV_XS to 1.61 in Rawhide:
Add love letter to CSV from xan project with reference
Bugtracker to Github (long overdue) (GH#63)
Update to Devel::PPPort-3.73
Local Packages
Updated perl-Text-CSV_XS to 1.61 as per the Fedora version
Updated unrar to 7.13 beta 1
Wednesday 30th July 2025
Fedora Project
Rebuilt geoipupdate (7.1.1) for the Fedora_43_Mass_Rebuild
Local Packages
Updated davfs2 (1.7.1) to add sysusers.d config file to allow rpm to create users/groups automatically from Fedora 43 onwards, and to add support for building with neon version 0.35
Rebuilt geoipupdate (7.1.1) as per the Fedora version
Updated perl-Net-DNS to 1.52:
- Refactor SVCB to avoid internal use of generic keyNN
- DELEG documentation and code improvement
Fix bug in resolver base selection on non-Unix/Linux platforms (CPAN RT#168433)
Thursday 31st July 2025
Fedora Project
Updated davfs2 (1.7.1) in Rawhide to support building with neon 0.35.0
Local Packages
Updated dovecot (2.4.1) to fix downstream HMAC patch compatibility with latest openssl (Bug #2383209)
Updated unrar to 7.13
Previous Month: June 2025
Next Month: August 2025