From db438663ea99d4a85f5363b8c58bf120501ee8bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Nussbaumer?= Date: Sat, 18 Oct 2025 21:57:29 +0200 Subject: [PATCH] feat: add nfs-utils extension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit contains rpc.statd, needed to support locking with NFSv3 shares Signed-off-by: Andrey Smirnov Signed-off-by: Clément Nussbaumer --- .kres.yaml | 1 + MAINTAINERS.md | 1 + Makefile | 3 +- README.md | 1 + storage/nfs-utils/README.md | 31 ++ storage/nfs-utils/files/netconfig | 7 + storage/nfs-utils/files/passwd | 2 + storage/nfs-utils/files/services | 361 ++++++++++++++++++ storage/nfs-utils/libxml2/pkg.yaml | 33 ++ storage/nfs-utils/libxml2/vars.yaml | 1 + storage/nfs-utils/manifest.yaml.tmpl | 15 + storage/nfs-utils/nfs-utils-statd/pkg.yaml | 75 ++++ .../rpc-statd-create-directories.patch | 65 ++++ ...rpc-statd-separate-debug-from-stderr.patch | 21 + .../sm-notify-fix-unrecognized-service.patch | 29 ++ storage/nfs-utils/nfs-utils-statd/vars.yaml | 1 + storage/nfs-utils/pkg.yaml | 61 +++ storage/nfs-utils/rpc-statd.yaml | 70 ++++ storage/nfs-utils/rpcbind.yaml | 69 ++++ storage/nfs-utils/rpcbind/pkg.yaml | 50 +++ storage/nfs-utils/rpcbind/vars.yaml | 1 + storage/nfs-utils/rpcsvc-proto/pkg.yaml | 31 ++ storage/nfs-utils/rpcsvc-proto/vars.yaml | 1 + storage/nfs-utils/vars.yaml | 23 ++ storage/zfs/zfs-tools/libtirpc/pkg.yaml | 3 + 25 files changed, 955 insertions(+), 1 deletion(-) create mode 100644 storage/nfs-utils/README.md create mode 100644 storage/nfs-utils/files/netconfig create mode 100644 storage/nfs-utils/files/passwd create mode 100644 storage/nfs-utils/files/services create mode 100644 storage/nfs-utils/libxml2/pkg.yaml create mode 100644 storage/nfs-utils/libxml2/vars.yaml create mode 100644 storage/nfs-utils/manifest.yaml.tmpl create mode 100644 storage/nfs-utils/nfs-utils-statd/pkg.yaml create mode 100644 storage/nfs-utils/nfs-utils-statd/rpc-statd-create-directories.patch create mode 100644 storage/nfs-utils/nfs-utils-statd/rpc-statd-separate-debug-from-stderr.patch create mode 100644 storage/nfs-utils/nfs-utils-statd/sm-notify-fix-unrecognized-service.patch create mode 100644 storage/nfs-utils/nfs-utils-statd/vars.yaml create mode 100644 storage/nfs-utils/pkg.yaml create mode 100644 storage/nfs-utils/rpc-statd.yaml create mode 100644 storage/nfs-utils/rpcbind.yaml create mode 100644 storage/nfs-utils/rpcbind/pkg.yaml create mode 100644 storage/nfs-utils/rpcbind/vars.yaml create mode 100644 storage/nfs-utils/rpcsvc-proto/pkg.yaml create mode 100644 storage/nfs-utils/rpcsvc-proto/vars.yaml create mode 100644 storage/nfs-utils/vars.yaml diff --git a/.kres.yaml b/.kres.yaml index 7447207b..157f7e9e 100644 --- a/.kres.yaml +++ b/.kres.yaml @@ -36,6 +36,7 @@ spec: - nebula - netbird - newt + - nfs-utils - nfsd - nfsrahead - nut-client diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 25b32725..8b0e1f27 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -40,6 +40,7 @@ If the field is marked as `Needs Maintainer`, it means that the package is curre | metal-agent | Sidero Labs | NA | | nebula | s e | [iamwacko](https://github.com/iamwacko) | | netbird | Łukasz Szczepański | [l-szczepanski-speednet](https://github.com/l-szczepanski-speednet) | +| nfs-utils | Clément Nussbaumer | [clementnuss](https://github.com/clementnuss) | | nut-client | Sidero Labs | NA | | nvidia-container-toolkit-lts | Sidero Labs | NA | | nivida-container-toolkit-production | Sidero Labs | NA | diff --git a/Makefile b/Makefile index 56eb23f4..27862e9e 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ # THIS FILE WAS AUTOMATICALLY GENERATED, PLEASE DO NOT EDIT. # -# Generated on 2025-10-30T03:39:23Z by kres cd5a938. +# Generated on 2025-11-04T11:21:40Z by kres cd5a938. # common variables @@ -93,6 +93,7 @@ TARGETS += metal-agent TARGETS += nebula TARGETS += netbird TARGETS += newt +TARGETS += nfs-utils TARGETS += nfsd TARGETS += nfsrahead TARGETS += nut-client diff --git a/README.md b/README.md index d0ef1721..22226b69 100644 --- a/README.md +++ b/README.md @@ -145,6 +145,7 @@ tiers based on support level: | [fuse3](storage/fuse3) | :green_square: core | [ghcr.io/siderolabs/fuse3](https://github.com/siderolabs/extensions/pkgs/container/fuse3) | `3.17.4` | This system extension provides fuse3 functionality. | | [iscsi-tools](storage/iscsi-tools) | :green_square: core | [ghcr.io/siderolabs/iscsi-tools](https://github.com/siderolabs/extensions/pkgs/container/iscsi-tools) | `v0.2.0` | This system extension provides iscsi-tools. | | [mdadm](storage/mdadm) | :white_large_square: contrib | [ghcr.io/siderolabs/mdadm](https://github.com/siderolabs/extensions/pkgs/container/mdadm) | `v4.4` | This system extension provides mdadm binary. | +| [nfs-utils](storage/nfs-utils) | :white_large_square: contrib | [ghcr.io/siderolabs/nfs-utils](https://github.com/siderolabs/extensions/pkgs/container/nfs-utils) | `v0.1.1` | This system extension provides rpcbind and rpc.statd for NFSv3 file locking support. rpcbind is a server that converts RPC program numbers into universal addresses. rpc.statd is the NSM (Network Status Monitor) service daemon that notifies NFS peers of restarts. These services are required for NFSv3 mounts with file locking support. | | [nfsd](storage/nfsd) | :yellow_square: extra | [ghcr.io/siderolabs/nfsd](https://github.com/siderolabs/extensions/pkgs/container/nfsd) | `VERSION` | This system extension provides kernel module driver for NFSD built against a specific Talos version. | | [nfsrahead](storage/nfsrahead) | :white_large_square: contrib | [ghcr.io/siderolabs/nfsrahead](https://github.com/siderolabs/extensions/pkgs/container/nfsrahead) | `2.8.3` | This system extension provides nfsrahead, a tool to configure the readahead for NFS mounts. | | [zfs](storage/zfs) | :yellow_square: extra | [ghcr.io/siderolabs/zfs](https://github.com/siderolabs/extensions/pkgs/container/zfs) | `2.4.0-rc2-VERSION` | This system extension provides the ZFS kernel module, the ZFS utilities, and a service to import all ZFS pools on start and unmount all pools on stop. | diff --git a/storage/nfs-utils/README.md b/storage/nfs-utils/README.md new file mode 100644 index 00000000..b9d521dc --- /dev/null +++ b/storage/nfs-utils/README.md @@ -0,0 +1,31 @@ +# nfs-utils + +This extension provides `rpcbind` and `rpc.statd` daemons for NFSv3 file locking support. + +## What's Included + +- **rpcbind**: Converts RPC program numbers into universal addresses, required for RPC-based services +- **rpc.statd**: NSM (Network Status Monitor) service daemon that notifies NFS peers of host restarts +- **sm-notify**: Companion utility for rpc.statd + +## Use Case + +These services are essential for: +- NFSv3 mounts with file locking support +- Kubernetes environments using Trident or other NFS-based storage provisioners +- Any scenario requiring POSIX file locking on NFSv3 shares + +## How It Works + +The extension runs two containerized services: + +1. **rpcbind**: Starts first and provides the RPC portmapper service +2. **rpc.statd**: Depends on rpcbind and provides NFS lock state monitoring + +Both services start automatically and persist state across reboots in `/var/lib/nfs/statd` and `/var/lib/rpcbind`. + +## References + +- [rpcbind man page](https://linux.die.net/man/8/rpcbind) +- [rpc.statd man page](https://linux.die.net/man/8/rpc.statd) +- [Related Trident issue](https://github.com/NetApp/trident/issues/806#issuecomment-2399332314) diff --git a/storage/nfs-utils/files/netconfig b/storage/nfs-utils/files/netconfig new file mode 100644 index 00000000..5cbe4c12 --- /dev/null +++ b/storage/nfs-utils/files/netconfig @@ -0,0 +1,7 @@ +udp tpi_clts v inet udp - - +tcp tpi_cots_ord v inet tcp - - +udp6 tpi_clts v inet6 udp - - +tcp6 tpi_cots_ord v inet6 tcp - - +rawip tpi_raw - inet - - - +local tpi_cots_ord - loopback - - - +unix tpi_cots_ord - loopback - - - diff --git a/storage/nfs-utils/files/passwd b/storage/nfs-utils/files/passwd new file mode 100644 index 00000000..988240e9 --- /dev/null +++ b/storage/nfs-utils/files/passwd @@ -0,0 +1,2 @@ +root:x:0:0:root:/root:/bin/sh +nobody:x:65534:65534:nobody:/:/bin/false diff --git a/storage/nfs-utils/files/services b/storage/nfs-utils/files/services new file mode 100644 index 00000000..f90e9de6 --- /dev/null +++ b/storage/nfs-utils/files/services @@ -0,0 +1,361 @@ +# Network services, Internet style +# +# Updated from https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml . +# +# New ports will be added on request if they have been officially assigned +# by IANA and used in the real-world or are needed by a debian package. +# If you need a huge list of used numbers please install the nmap package. + +tcpmux 1/tcp # TCP port service multiplexer +echo 7/tcp +echo 7/udp +discard 9/tcp sink null +discard 9/udp sink null +systat 11/tcp users +daytime 13/tcp +daytime 13/udp +netstat 15/tcp +qotd 17/tcp quote +chargen 19/tcp ttytst source +chargen 19/udp ttytst source +ftp-data 20/tcp +ftp 21/tcp +fsp 21/udp fspd +ssh 22/tcp # SSH Remote Login Protocol +telnet 23/tcp +smtp 25/tcp mail +time 37/tcp timserver +time 37/udp timserver +whois 43/tcp nicname +tacacs 49/tcp # Login Host Protocol (TACACS) +tacacs 49/udp +domain 53/tcp # Domain Name Server +domain 53/udp +bootps 67/udp +bootpc 68/udp +tftp 69/udp +gopher 70/tcp # Internet Gopher +finger 79/tcp +http 80/tcp www # WorldWideWeb HTTP +kerberos 88/tcp kerberos5 krb5 kerberos-sec # Kerberos v5 +kerberos 88/udp kerberos5 krb5 kerberos-sec # Kerberos v5 +iso-tsap 102/tcp tsap # part of ISODE +acr-nema 104/tcp dicom # Digital Imag. & Comm. 300 +pop3 110/tcp pop-3 # POP version 3 +sunrpc 111/tcp portmapper # RPC 4.0 portmapper +sunrpc 111/udp portmapper +auth 113/tcp authentication tap ident +nntp 119/tcp readnews untp # USENET News Transfer Protocol +ntp 123/udp # Network Time Protocol +epmap 135/tcp loc-srv # DCE endpoint resolution +netbios-ns 137/udp # NETBIOS Name Service +netbios-dgm 138/udp # NETBIOS Datagram Service +netbios-ssn 139/tcp # NETBIOS session service +imap2 143/tcp imap # Interim Mail Access P 2 and 4 +snmp 161/tcp # Simple Net Mgmt Protocol +snmp 161/udp +snmp-trap 162/tcp snmptrap # Traps for SNMP +snmp-trap 162/udp snmptrap +cmip-man 163/tcp # ISO mgmt over IP (CMOT) +cmip-man 163/udp +cmip-agent 164/tcp +cmip-agent 164/udp +mailq 174/tcp # Mailer transport queue for Zmailer +xdmcp 177/udp # X Display Manager Control Protocol +bgp 179/tcp # Border Gateway Protocol +smux 199/tcp # SNMP Unix Multiplexer +qmtp 209/tcp # Quick Mail Transfer Protocol +z3950 210/tcp wais # NISO Z39.50 database +ipx 213/udp # IPX [RFC1234] +ptp-event 319/udp +ptp-general 320/udp +pawserv 345/tcp # Perf Analysis Workbench +zserv 346/tcp # Zebra server +rpc2portmap 369/tcp +rpc2portmap 369/udp # Coda portmapper +codaauth2 370/tcp +codaauth2 370/udp # Coda authentication server +clearcase 371/udp Clearcase +ldap 389/tcp # Lightweight Directory Access Protocol +ldap 389/udp +svrloc 427/tcp # Server Location +svrloc 427/udp +https 443/tcp # http protocol over TLS/SSL +https 443/udp # HTTP/3 +snpp 444/tcp # Simple Network Paging Protocol +microsoft-ds 445/tcp # Microsoft Naked CIFS +kpasswd 464/tcp +kpasswd 464/udp +submissions 465/tcp ssmtp smtps urd # Submission over TLS [RFC8314] +saft 487/tcp # Simple Asynchronous File Transfer +isakmp 500/udp # IPSEC key management +rtsp 554/tcp # Real Time Stream Control Protocol +rtsp 554/udp +nqs 607/tcp # Network Queuing system +asf-rmcp 623/udp # ASF Remote Management and Control Protocol +qmqp 628/tcp +ipp 631/tcp # Internet Printing Protocol +ldp 646/tcp # Label Distribution Protocol +ldp 646/udp +# +# UNIX specific services +# +exec 512/tcp +biff 512/udp comsat +login 513/tcp +who 513/udp whod +shell 514/tcp cmd syslog # no passwords used +syslog 514/udp +printer 515/tcp spooler # line printer spooler +talk 517/udp +ntalk 518/udp +route 520/udp router routed # RIP +gdomap 538/tcp # GNUstep distributed objects +gdomap 538/udp +uucp 540/tcp uucpd # uucp daemon +klogin 543/tcp # Kerberized `rlogin' (v5) +kshell 544/tcp krcmd # Kerberized `rsh' (v5) +dhcpv6-client 546/udp +dhcpv6-server 547/udp +afpovertcp 548/tcp # AFP over TCP +nntps 563/tcp snntp # NNTP over SSL +submission 587/tcp # Submission [RFC4409] +ldaps 636/tcp # LDAP over SSL +ldaps 636/udp +tinc 655/tcp # tinc control port +tinc 655/udp +silc 706/tcp +kerberos-adm 749/tcp # Kerberos `kadmin' (v5) +# +domain-s 853/tcp # DNS over TLS [RFC7858] +domain-s 853/udp # DNS over DTLS [RFC8094] +rsync 873/tcp +ftps-data 989/tcp # FTP over SSL (data) +ftps 990/tcp +telnets 992/tcp # Telnet over SSL +imaps 993/tcp # IMAP over SSL +pop3s 995/tcp # POP-3 over SSL +# +# From ``Assigned Numbers'': +# +#> The Registered Ports are not controlled by the IANA and on most systems +#> can be used by ordinary user processes or programs executed by ordinary +#> users. +# +#> Ports are used in the TCP [45,106] to name the ends of logical +#> connections which carry long term conversations. For the purpose of +#> providing services to unknown callers, a service contact port is +#> defined. This list specifies the port used by the server process as its +#> contact port. While the IANA can not control uses of these ports it +#> does register or list uses of these ports as a convienence to the +#> community. +# +socks 1080/tcp # socks proxy server +proofd 1093/tcp +rootd 1094/tcp +openvpn 1194/tcp +openvpn 1194/udp +rmiregistry 1099/tcp # Java RMI Registry +lotusnote 1352/tcp lotusnotes # Lotus Note +ms-sql-s 1433/tcp # Microsoft SQL Server +ms-sql-m 1434/udp # Microsoft SQL Monitor +ingreslock 1524/tcp +datametrics 1645/tcp old-radius +datametrics 1645/udp old-radius +sa-msg-port 1646/tcp old-radacct +sa-msg-port 1646/udp old-radacct +kermit 1649/tcp +groupwise 1677/tcp +l2f 1701/udp l2tp +radius 1812/tcp +radius 1812/udp +radius-acct 1813/tcp radacct # Radius Accounting +radius-acct 1813/udp radacct +cisco-sccp 2000/tcp # Cisco SCCP +nfs 2049/tcp # Network File System +nfs 2049/udp # Network File System +gnunet 2086/tcp +gnunet 2086/udp +rtcm-sc104 2101/tcp # RTCM SC-104 IANA 1/29/99 +rtcm-sc104 2101/udp +gsigatekeeper 2119/tcp +gris 2135/tcp # Grid Resource Information Server +cvspserver 2401/tcp # CVS client/server operations +venus 2430/tcp # codacon port +venus 2430/udp # Venus callback/wbc interface +venus-se 2431/tcp # tcp side effects +venus-se 2431/udp # udp sftp side effect +codasrv 2432/tcp # not used +codasrv 2432/udp # server port +codasrv-se 2433/tcp # tcp side effects +codasrv-se 2433/udp # udp sftp side effect +mon 2583/tcp # MON traps +mon 2583/udp +dict 2628/tcp # Dictionary server +f5-globalsite 2792/tcp +gsiftp 2811/tcp +gpsd 2947/tcp +gds-db 3050/tcp gds_db # InterBase server +icpv2 3130/udp icp # Internet Cache Protocol +isns 3205/tcp # iSNS Server Port +isns 3205/udp # iSNS Server Port +iscsi-target 3260/tcp +mysql 3306/tcp +ms-wbt-server 3389/tcp +nut 3493/tcp # Network UPS Tools +nut 3493/udp +distcc 3632/tcp # distributed compiler +daap 3689/tcp # Digital Audio Access Protocol +svn 3690/tcp subversion # Subversion protocol +suucp 4031/tcp # UUCP over SSL +sysrqd 4094/tcp # sysrq daemon +sieve 4190/tcp # ManageSieve Protocol +epmd 4369/tcp # Erlang Port Mapper Daemon +remctl 4373/tcp # Remote Authenticated Command Service +f5-iquery 4353/tcp # F5 iQuery +ntske 4460/tcp # Network Time Security Key Establishment +ipsec-nat-t 4500/udp # IPsec NAT-Traversal [RFC3947] +iax 4569/udp # Inter-Asterisk eXchange +mtn 4691/tcp # monotone Netsync Protocol +radmin-port 4899/tcp # RAdmin Port +sip 5060/tcp # Session Initiation Protocol +sip 5060/udp +sip-tls 5061/tcp +sip-tls 5061/udp +xmpp-client 5222/tcp jabber-client # Jabber Client Connection +xmpp-server 5269/tcp jabber-server # Jabber Server Connection +cfengine 5308/tcp +mdns 5353/udp # Multicast DNS +postgresql 5432/tcp postgres # PostgreSQL Database +freeciv 5556/tcp rptp # Freeciv gameplay +amqps 5671/tcp # AMQP protocol over TLS/SSL +amqp 5672/tcp +amqp 5672/sctp +x11 6000/tcp x11-0 # X Window System +x11-1 6001/tcp +x11-2 6002/tcp +x11-3 6003/tcp +x11-4 6004/tcp +x11-5 6005/tcp +x11-6 6006/tcp +x11-7 6007/tcp +gnutella-svc 6346/tcp # gnutella +gnutella-svc 6346/udp +gnutella-rtr 6347/tcp # gnutella +gnutella-rtr 6347/udp +redis 6379/tcp +sge-qmaster 6444/tcp sge_qmaster # Grid Engine Qmaster Service +sge-execd 6445/tcp sge_execd # Grid Engine Execution Service +mysql-proxy 6446/tcp # MySQL Proxy +babel 6696/udp # Babel Routing Protocol +ircs-u 6697/tcp # Internet Relay Chat via TLS/SSL +bbs 7000/tcp +afs3-fileserver 7000/udp +afs3-callback 7001/udp # callbacks to cache managers +afs3-prserver 7002/udp # users & groups database +afs3-vlserver 7003/udp # volume location database +afs3-kaserver 7004/udp # AFS/Kerberos authentication +afs3-volser 7005/udp # volume managment server +afs3-bos 7007/udp # basic overseer process +afs3-update 7008/udp # server-to-server updater +afs3-rmtsys 7009/udp # remote cache manager service +font-service 7100/tcp xfs # X Font Service +http-alt 8080/tcp webcache # WWW caching service +puppet 8140/tcp # The Puppet master service +bacula-dir 9101/tcp # Bacula Director +bacula-fd 9102/tcp # Bacula File Daemon +bacula-sd 9103/tcp # Bacula Storage Daemon +xmms2 9667/tcp # Cross-platform Music Multiplexing System +nbd 10809/tcp # Linux Network Block Device +zabbix-agent 10050/tcp # Zabbix Agent +zabbix-trapper 10051/tcp # Zabbix Trapper +amanda 10080/tcp # amanda backup services +dicom 11112/tcp +hkp 11371/tcp # OpenPGP HTTP Keyserver +db-lsp 17500/tcp # Dropbox LanSync Protocol +dcap 22125/tcp # dCache Access Protocol +gsidcap 22128/tcp # GSI dCache Access Protocol +wnn6 22273/tcp # wnn6 + +# +# Datagram Delivery Protocol services +# +rtmp 1/ddp # Routing Table Maintenance Protocol +nbp 2/ddp # Name Binding Protocol +echo 4/ddp # AppleTalk Echo Protocol +zip 6/ddp # Zone Information Protocol + +#========================================================================= +# The remaining port numbers are not as allocated by IANA. +#========================================================================= + +# Kerberos (Project Athena/MIT) services +kerberos4 750/udp kerberos-iv kdc # Kerberos (server) +kerberos4 750/tcp kerberos-iv kdc +kerberos-master 751/udp kerberos_master # Kerberos authentication +kerberos-master 751/tcp +passwd-server 752/udp passwd_server # Kerberos passwd server +krb-prop 754/tcp krb_prop krb5_prop hprop # Kerberos slave propagation +zephyr-srv 2102/udp # Zephyr server +zephyr-clt 2103/udp # Zephyr serv-hm connection +zephyr-hm 2104/udp # Zephyr hostmanager +iprop 2121/tcp # incremental propagation +supfilesrv 871/tcp # Software Upgrade Protocol server +supfiledbg 1127/tcp # Software Upgrade Protocol debugging + +# +# Services added for the Debian GNU/Linux distribution +# +poppassd 106/tcp # Eudora +moira-db 775/tcp moira_db # Moira database +moira-update 777/tcp moira_update # Moira update protocol +moira-ureg 779/udp moira_ureg # Moira user registration +spamd 783/tcp # spamassassin daemon +skkserv 1178/tcp # skk jisho server port +predict 1210/udp # predict -- satellite tracking +rmtcfg 1236/tcp # Gracilis Packeten remote config server +xtel 1313/tcp # french minitel +xtelw 1314/tcp # french minitel +zebrasrv 2600/tcp # zebra service +zebra 2601/tcp # zebra vty +ripd 2602/tcp # ripd vty (zebra) +ripngd 2603/tcp # ripngd vty (zebra) +ospfd 2604/tcp # ospfd vty (zebra) +bgpd 2605/tcp # bgpd vty (zebra) +ospf6d 2606/tcp # ospf6d vty (zebra) +ospfapi 2607/tcp # OSPF-API +isisd 2608/tcp # ISISd vty (zebra) +fax 4557/tcp # FAX transmission service (old) +hylafax 4559/tcp # HylaFAX client-server protocol (new) +munin 4949/tcp lrrd # Munin +rplay 5555/udp # RPlay audio service +nrpe 5666/tcp # Nagios Remote Plugin Executor +nsca 5667/tcp # Nagios Agent - NSCA +canna 5680/tcp # cannaserver +syslog-tls 6514/tcp # Syslog over TLS [RFC5425] +sane-port 6566/tcp sane saned # SANE network scanner daemon +ircd 6667/tcp # Internet Relay Chat +zope-ftp 8021/tcp # zope management by ftp +tproxy 8081/tcp # Transparent Proxy +omniorb 8088/tcp # OmniORB +clc-build-daemon 8990/tcp # Common lisp build daemon +xinetd 9098/tcp +git 9418/tcp # Git Version Control System +zope 9673/tcp # zope server +webmin 10000/tcp +kamanda 10081/tcp # amanda backup services (Kerberos) +amandaidx 10082/tcp # amanda backup services +amidxtape 10083/tcp # amanda backup services +sgi-cmsd 17001/udp # Cluster membership services daemon +sgi-crsd 17002/udp +sgi-gcd 17003/udp # SGI Group membership daemon +sgi-cad 17004/tcp # Cluster Admin daemon +binkp 24554/tcp # binkp fidonet protocol +asp 27374/tcp # Address Search Protocol +asp 27374/udp +csync2 30865/tcp # cluster synchronization tool +dircproxy 57000/tcp # Detachable IRC Proxy +tfido 60177/tcp # fidonet EMSI over telnet +fido 60179/tcp # fidonet EMSI over TCP + +# Local services diff --git a/storage/nfs-utils/libxml2/pkg.yaml b/storage/nfs-utils/libxml2/pkg.yaml new file mode 100644 index 00000000..bb402212 --- /dev/null +++ b/storage/nfs-utils/libxml2/pkg.yaml @@ -0,0 +1,33 @@ +name: libxml2 +variant: scratch +shell: /bin/bash +dependencies: + - stage: base +steps: + - sources: + - url: https://download.gnome.org/sources/libxml2/2.13/libxml2-{{ .LIBXML2_VERSION }}.tar.xz + destination: libxml2.tar.xz + sha256: {{ .LIBXML2_SHA256 }} + sha512: {{ .LIBXML2_SHA512 }} + env: + SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }} + prepare: + - | + tar -xJf libxml2.tar.xz --strip-components=1 + build: + - | + ./configure \ + --prefix=/usr/local \ + --without-python \ + --disable-static + + make -j $(nproc) + install: + - | + mkdir -p /rootfs + + make install DESTDIR=/rootfs + rm -rf /rootfs/usr/local/share/{doc,gtk-doc,man} +finalize: + - from: /rootfs + to: /rootfs diff --git a/storage/nfs-utils/libxml2/vars.yaml b/storage/nfs-utils/libxml2/vars.yaml new file mode 100644 index 00000000..f2bd455a --- /dev/null +++ b/storage/nfs-utils/libxml2/vars.yaml @@ -0,0 +1 @@ +INTERNAL_PACKAGE: true diff --git a/storage/nfs-utils/manifest.yaml.tmpl b/storage/nfs-utils/manifest.yaml.tmpl new file mode 100644 index 00000000..89f75022 --- /dev/null +++ b/storage/nfs-utils/manifest.yaml.tmpl @@ -0,0 +1,15 @@ +version: v1alpha1 +metadata: + name: nfs-utils + version: "{{ .VERSION }}" + author: PostFinance + description: | + [{{ .TIER }}] This system extension provides rpcbind and rpc.statd for NFSv3 file locking support. + + rpcbind is a server that converts RPC program numbers into universal addresses. + rpc.statd is the NSM (Network Status Monitor) service daemon that notifies NFS peers of restarts. + + These services are required for NFSv3 mounts with file locking support. + compatibility: + talos: + version: ">= v1.1.0" diff --git a/storage/nfs-utils/nfs-utils-statd/pkg.yaml b/storage/nfs-utils/nfs-utils-statd/pkg.yaml new file mode 100644 index 00000000..4db44fe9 --- /dev/null +++ b/storage/nfs-utils/nfs-utils-statd/pkg.yaml @@ -0,0 +1,75 @@ +name: nfs-utils-statd +variant: scratch +shell: /bin/bash +dependencies: + - stage: base + - stage: libtirpc-zfs + from: /rootfs + - stage: rpcsvc-proto + from: /rootfs + - stage: libxml2 + from: /rootfs + - stage: libevent + from: /rootfs + - stage: sqlite + from: /rootfs +steps: + - sources: + - url: https://www.kernel.org/pub/linux/utils/nfs-utils/{{ .NFS_UTILS_VERSION }}/nfs-utils-{{ .NFS_UTILS_VERSION }}.tar.xz + destination: nfs-utils.tar.xz + sha256: {{ .NFS_UTILS_SHA256 }} + sha512: {{ .NFS_UTILS_SHA512 }} + env: + SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }} + prepare: + - | + tar -xJf nfs-utils.tar.xz --strip-components=1 + - | + # Apply patches + patch -p1 < /pkg/rpc-statd-create-directories.patch + patch -p1 < /pkg/rpc-statd-separate-debug-from-stderr.patch + patch -p1 < /pkg/sm-notify-fix-unrecognized-service.patch + build: + - | + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig + export CFLAGS="${CFLAGS} -I/usr/local/include" + export LDFLAGS="${LDFLAGS} -L/usr/local/lib" + + ./configure \ + --prefix=/usr/local \ + --sbindir=/usr/local/sbin \ + --disable-nfsv4 \ + --disable-nfsv41 \ + --disable-gss \ + --disable-svcgss \ + --disable-kprefix \ + --disable-nfsdctl \ + --without-tcp-wrappers \ + --with-rpcgen=/usr/local/bin/rpcgen \ + --with-statedir=/var/lib/nfs \ + --with-statdpath=/var/lib/nfs/statd + - | + make -C support/nsm + make -C support/misc + make -C support/nfs + make -C utils/statd + install: + - | + mkdir -p /rootfs/usr/local/sbin + mkdir -p /rootfs/var/lib/nfs/statd + + # Install only rpc.statd and sm-notify from the built directories + make DESTDIR=/rootfs install -C utils/statd + + # cleanup + rm -rf /rootfs/usr/local/share + sbom: + outputPath: /rootfs/usr/local/share/spdx/nfs-utils-statd.spdx.json + version: {{ .NFS_UTILS_VERSION }} + cpes: + - cpe:2.3:a:nfs:nfs-utils:{{ .NFS_UTILS_VERSION }}:*:*:*:*:*:*:* + licenses: + - GPL-2.0 +finalize: + - from: /rootfs + to: /rootfs diff --git a/storage/nfs-utils/nfs-utils-statd/rpc-statd-create-directories.patch b/storage/nfs-utils/nfs-utils-statd/rpc-statd-create-directories.patch new file mode 100644 index 00000000..3b1a7c3a --- /dev/null +++ b/storage/nfs-utils/nfs-utils-statd/rpc-statd-create-directories.patch @@ -0,0 +1,65 @@ +# Automatically create sm and sm.bak directories for rpc.statd +# +# Problem: rpc.statd requires sm/ and sm.bak/ directories in /var/lib/nfs/statd/ +# to exist before starting. In containerized environments like Talos Linux, these +# aren't created by package managers, causing startup failures. +# +# Solution: Add nsm_ensure_directory() helper to automatically create these +# directories with mode 0755 during startup if they don't exist. + +diff --git a/support/nsm/file.c b/support/nsm/file.c +index 5ec801c3..e09c1aaa 100644 +--- a/support/nsm/file.c ++++ b/support/nsm/file.c +@@ -382,6 +382,38 @@ prune_bounding_set(void) + } + #endif /* HAVE_SYS_CAPABILITY_H */ + ++/* ++ * nsm_ensure_directory - create directory if it doesn't exist ++ * @dirname: name of directory to create (relative to current dir) ++ * ++ * Returns true if successful or directory already exists, false on error. ++ */ ++static _Bool ++nsm_ensure_directory(const char *dirname) ++{ ++ struct stat st; ++ ++ if (lstat(dirname, &st) == 0) { ++ if (S_ISDIR(st.st_mode)) ++ return true; ++ xlog(L_ERROR, "%s exists but is not a directory", dirname); ++ return false; ++ } ++ ++ if (errno != ENOENT) { ++ xlog(L_ERROR, "Failed to stat %s: %m", dirname); ++ return false; ++ } ++ ++ if (mkdir(dirname, S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH) == -1) { ++ xlog(L_ERROR, "Failed to create directory %s: %m", dirname); ++ return false; ++ } ++ ++ xlog(L_NOTICE, "Created directory %s", dirname); ++ return true; ++} ++ + /** + * nsm_drop_privileges - drop root privileges + * @pidfd: file descriptor of a pid file +@@ -403,6 +435,12 @@ nsm_drop_privileges(const int pidfd) + return false; + } + ++ /* Ensure sm and sm.bak directories exist */ ++ if (!nsm_ensure_directory(NSM_MONITOR_DIR)) ++ return false; ++ if (!nsm_ensure_directory(NSM_NOTIFY_DIR)) ++ return false; ++ + if (lstat(NSM_MONITOR_DIR, &st) == -1) { + xlog(L_ERROR, "Failed to stat %s/%s: %m", nsm_base_dirname, NSM_MONITOR_DIR); + return false; diff --git a/storage/nfs-utils/nfs-utils-statd/rpc-statd-separate-debug-from-stderr.patch b/storage/nfs-utils/nfs-utils-statd/rpc-statd-separate-debug-from-stderr.patch new file mode 100644 index 00000000..ce555969 --- /dev/null +++ b/storage/nfs-utils/nfs-utils-statd/rpc-statd-separate-debug-from-stderr.patch @@ -0,0 +1,21 @@ +# Separate --no-syslog flag from debug logging in rpc.statd +# +# Problem: The --no-syslog (-d) flag both disables syslog AND automatically +# enables ALL debug logging. In containers, we need stderr logging without +# debug verbosity flooding the logs. +# +# Solution: Remove the automatic xlog_config(D_ALL, 1) when using --no-syslog. +# Debug can still be enabled via /etc/nfs.conf or SIGUSR1 signal. + +diff --git a/utils/statd/statd.c b/utils/statd/statd.c +index a469a67a..645d4b98 100644 +--- a/utils/statd/statd.c ++++ b/utils/statd/statd.c +@@ -439,7 +439,6 @@ int main (int argc, char **argv) + if (run_mode & MODE_LOG_STDERR) { + xlog_syslog(0); + xlog_stderr(1); +- xlog_config(D_ALL, 1); + } else { + xlog_syslog(1); + xlog_stderr(0); diff --git a/storage/nfs-utils/nfs-utils-statd/sm-notify-fix-unrecognized-service.patch b/storage/nfs-utils/nfs-utils-statd/sm-notify-fix-unrecognized-service.patch new file mode 100644 index 00000000..7e64ce8f --- /dev/null +++ b/storage/nfs-utils/nfs-utils-statd/sm-notify-fix-unrecognized-service.patch @@ -0,0 +1,29 @@ +# Fix "Unrecognized service" / "Name does not resolve" error in sm-notify +# +# Problem: sm-notify calls getaddrinfo() with empty string "" for service +# parameter while using AI_NUMERICSERV flag. Musl libc (Alpine/Talos) rejects +# this - it requires either NULL or a valid numeric string. +# +# Solution: When srcport is NULL, use "0" instead of "". This is valid with +# AI_NUMERICSERV and will be assigned a random privileged port by bindresvport(). + +diff --git a/utils/statd/sm-notify.c b/utils/statd/sm-notify.c +index ed82b8f2..64fc7f18 100644 +--- a/utils/statd/sm-notify.c ++++ b/utils/statd/sm-notify.c +@@ -368,11 +368,11 @@ smn_bind_address(const char *srcaddr, const char *srcport) + if (srcaddr == NULL) + hint.ai_flags |= AI_PASSIVE; + +- /* Do not allow "node" and "service" parameters both to be NULL */ ++ /* When srcport is NULL, pass "0" to specify port 0 */ + if (srcport == NULL) +- error = getaddrinfo(srcaddr, "", &hint, &ai); +- else +- error = getaddrinfo(srcaddr, srcport, &hint, &ai); ++ srcport = "0"; ++ ++ error = getaddrinfo(srcaddr, srcport, &hint, &ai); + if (error != 0) { + xlog(L_ERROR, + "Invalid bind address or port for RPC socket: %s", diff --git a/storage/nfs-utils/nfs-utils-statd/vars.yaml b/storage/nfs-utils/nfs-utils-statd/vars.yaml new file mode 100644 index 00000000..f2bd455a --- /dev/null +++ b/storage/nfs-utils/nfs-utils-statd/vars.yaml @@ -0,0 +1 @@ +INTERNAL_PACKAGE: true diff --git a/storage/nfs-utils/pkg.yaml b/storage/nfs-utils/pkg.yaml new file mode 100644 index 00000000..190ad0ff --- /dev/null +++ b/storage/nfs-utils/pkg.yaml @@ -0,0 +1,61 @@ +name: nfs-utils +variant: scratch +shell: /bin/bash +dependencies: + - stage: base + - stage: libtirpc-zfs + from: /rootfs + - stage: rpcbind + from: /rootfs + - stage: nfs-utils-statd + from: /rootfs +steps: + - install: + - | + # Copy binaries and libraries from dependencies + mkdir -p /rootfs/usr/local/sbin + mkdir -p /rootfs/usr/local/bin + mkdir -p /rootfs/usr/local/lib + + # Dependencies are copied to / by bldr, copy them to /rootfs + cp -r /usr/local/sbin/* /rootfs/usr/local/sbin/ + cp -r /usr/local/lib/* /rootfs/usr/local/lib/ + - | + # Create container rootfs for each service + mkdir -p /rootfs/usr/local/lib/containers/rpcbind/etc + mkdir -p /rootfs/usr/local/lib/containers/rpc-statd/etc + + # Copy config files to container rootfs + cp /pkg/files/netconfig /rootfs/usr/local/lib/containers/rpcbind/etc/netconfig + cp /pkg/files/services /rootfs/usr/local/lib/containers/rpcbind/etc/services + cp /pkg/files/passwd /rootfs/usr/local/lib/containers/rpcbind/etc/passwd + + cp /pkg/files/netconfig /rootfs/usr/local/lib/containers/rpc-statd/etc/netconfig + cp /pkg/files/services /rootfs/usr/local/lib/containers/rpc-statd/etc/services + cp /pkg/files/passwd /rootfs/usr/local/lib/containers/rpc-statd/etc/passwd + + # cleanup + rm -rf /rootfs/usr/local/include + rm -rf /rootfs/usr/share + - | + mkdir -p /rootfs/usr/local/etc/containers + + cp /pkg/rpcbind.yaml /rootfs/usr/local/etc/containers/rpcbind.yaml + cp /pkg/rpc-statd.yaml /rootfs/usr/local/etc/containers/rpc-statd.yaml + test: + - | + mkdir -p /extensions-validator-rootfs + cp -r /rootfs/ /extensions-validator-rootfs/rootfs + cp /pkg/manifest.yaml /extensions-validator-rootfs/manifest.yaml + /extensions-validator validate --rootfs=/extensions-validator-rootfs --pkg-name="${PKG_NAME}" + sbom: + outputPath: /rootfs/usr/local/share/spdx/nfs-utils.spdx.json + version: {{ .VERSION }} + licenses: + - BSD-3-Clause + - GPL-2.0 +finalize: + - from: /rootfs + to: /rootfs + - from: /pkg/manifest.yaml + to: / diff --git a/storage/nfs-utils/rpc-statd.yaml b/storage/nfs-utils/rpc-statd.yaml new file mode 100644 index 00000000..3f632d9a --- /dev/null +++ b/storage/nfs-utils/rpc-statd.yaml @@ -0,0 +1,70 @@ +name: rpc-statd +depends: + - service: cri + - service: ext-rpcbind + - network: + - addresses + - connectivity + - hostname + - etcfiles +container: + entrypoint: /usr/local/sbin/rpc.statd + args: + - --foreground + - --no-syslog + security: + maskedPaths: [] + readonlyPaths: [] + mounts: + # ld-musl-x86_64.so.1 + - source: /lib + destination: /lib + type: bind + options: + - bind + - ro + # libc.so and other libs + - source: /usr/lib + destination: /usr/lib + type: bind + options: + - bind + - ro + # libtirpc and other custom libs + - source: /usr/local/lib + destination: /usr/local/lib + type: bind + options: + - bind + - ro + # rpc.statd and sm-notify binaries + - source: /usr/local/sbin + destination: /usr/local/sbin + type: bind + options: + - bind + - ro + # sm-notify expected at /usr/sbin/sm-notify + - source: /usr/local/sbin + destination: /usr/sbin + type: bind + options: + - bind + - ro + # statd state directory + - source: /var/lib/nfs/statd + destination: /var/lib/nfs/statd + type: bind + options: + - rshared + - rbind + - rw + # For rpcbind communication + - source: /run/rpcbind + destination: /run/rpcbind + type: bind + options: + - rshared + - rbind + - rw +restart: always diff --git a/storage/nfs-utils/rpcbind.yaml b/storage/nfs-utils/rpcbind.yaml new file mode 100644 index 00000000..5151396e --- /dev/null +++ b/storage/nfs-utils/rpcbind.yaml @@ -0,0 +1,69 @@ +name: rpcbind +depends: + - service: cri + - network: + - addresses + - connectivity + - hostname + - etcfiles +container: + entrypoint: /usr/local/sbin/rpcbind + args: + - -f + - -w + security: + maskedPaths: [] + readonlyPaths: [] + mounts: + # syslog socket for logging + - source: /dev/log + destination: /dev/log + type: bind + options: + - bind + - rw + # ld-musl-x86_64.so.1 + - source: /lib + destination: /lib + type: bind + options: + - bind + - ro + # libc.so and other libs + - source: /usr/lib + destination: /usr/lib + type: bind + options: + - bind + - ro + # libtirpc and other custom libs + - source: /usr/local/lib + destination: /usr/local/lib + type: bind + options: + - bind + - ro + # rpcbind binary + - source: /usr/local/sbin + destination: /usr/local/sbin + type: bind + options: + - bind + - ro + # rpcbind state directory + - source: /run/rpcbind + destination: /run/rpcbind + type: bind + options: + - rshared + - rbind + - rw + # For warmstart + - source: /var/lib/rpcbind + destination: /var/lib/rpcbind + type: bind + options: + - rshared + - rbind + - rw +restart: always diff --git a/storage/nfs-utils/rpcbind/pkg.yaml b/storage/nfs-utils/rpcbind/pkg.yaml new file mode 100644 index 00000000..e8f4b3df --- /dev/null +++ b/storage/nfs-utils/rpcbind/pkg.yaml @@ -0,0 +1,50 @@ +name: rpcbind +variant: scratch +shell: /bin/bash +dependencies: + - stage: base + - stage: libtirpc-zfs + from: /rootfs +steps: + - sources: + - url: https://sourceforge.net/projects/rpcbind/files/rpcbind/{{ .RPCBIND_VERSION }}/rpcbind-{{ .RPCBIND_VERSION }}.tar.bz2/download + destination: rpcbind.tar.bz2 + sha256: {{ .RPCBIND_SHA256 }} + sha512: {{ .RPCBIND_SHA512 }} + env: + SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }} + prepare: + - | + tar -xjf rpcbind.tar.bz2 --strip-components=1 + build: + - | + export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:/usr/lib/pkgconfig + export CFLAGS="${CFLAGS} -I/usr/local/include" + export LDFLAGS="${LDFLAGS} -L/usr/local/lib" + + ./configure \ + --prefix=/usr/local \ + --bindir=/usr/local/sbin \ + --sbindir=/usr/local/sbin \ + --with-rpcuser=nobody \ + --without-systemdsystemunitdir \ + --enable-warmstarts + + make + install: + - | + mkdir -p /rootfs/usr/local/sbin + make DESTDIR=/rootfs install + + # cleanup + rm -rf /rootfs/usr/local/share + sbom: + outputPath: /rootfs/usr/local/share/spdx/rpcbind.spdx.json + version: {{ .RPCBIND_VERSION }} + cpes: + - cpe:2.3:a:rpcbind_project:rpcbind:{{ .RPCBIND_VERSION }}:*:*:*:*:*:*:* + licenses: + - BSD-3-Clause +finalize: + - from: /rootfs + to: /rootfs diff --git a/storage/nfs-utils/rpcbind/vars.yaml b/storage/nfs-utils/rpcbind/vars.yaml new file mode 100644 index 00000000..f2bd455a --- /dev/null +++ b/storage/nfs-utils/rpcbind/vars.yaml @@ -0,0 +1 @@ +INTERNAL_PACKAGE: true diff --git a/storage/nfs-utils/rpcsvc-proto/pkg.yaml b/storage/nfs-utils/rpcsvc-proto/pkg.yaml new file mode 100644 index 00000000..cf2f3d49 --- /dev/null +++ b/storage/nfs-utils/rpcsvc-proto/pkg.yaml @@ -0,0 +1,31 @@ +name: rpcsvc-proto +variant: scratch +shell: /bin/bash +dependencies: + - stage: base +steps: + - sources: + - url: https://github.com/thkukuk/rpcsvc-proto/releases/download/v{{ .RPCSVC_PROTO_VERSION }}/rpcsvc-proto-{{ .RPCSVC_PROTO_VERSION }}.tar.xz + destination: rpcsvc-proto.tar.xz + sha256: {{ .RPCSVC_PROTO_SHA256 }} + sha512: {{ .RPCSVC_PROTO_SHA512 }} + env: + SOURCE_DATE_EPOCH: {{ .BUILD_ARG_SOURCE_DATE_EPOCH }} + prepare: + - | + tar -xJf rpcsvc-proto.tar.xz --strip-components=1 + build: + - | + ./configure \ + --prefix=/usr/local + + make -j $(nproc) + install: + - | + mkdir -p /rootfs + + make install DESTDIR=/rootfs + rm -rf /rootfs/usr/local/share/man +finalize: + - from: /rootfs + to: /rootfs diff --git a/storage/nfs-utils/rpcsvc-proto/vars.yaml b/storage/nfs-utils/rpcsvc-proto/vars.yaml new file mode 100644 index 00000000..f2bd455a --- /dev/null +++ b/storage/nfs-utils/rpcsvc-proto/vars.yaml @@ -0,0 +1 @@ +INTERNAL_PACKAGE: true diff --git a/storage/nfs-utils/vars.yaml b/storage/nfs-utils/vars.yaml new file mode 100644 index 00000000..acddab5c --- /dev/null +++ b/storage/nfs-utils/vars.yaml @@ -0,0 +1,23 @@ +VERSION: v0.1.1 + +# renovate: datasource=git-tags extractVersion=^v(?.*)$ depName=https://gitlab.gnome.org/GNOME/libxml2.git +LIBXML2_VERSION: 2.13.5 +LIBXML2_SHA256: 74fc163217a3964257d3be39af943e08861263c4231f9ef5b496b6f6d4c7b2b6 +LIBXML2_SHA512: acaecd4e3e95136d1c621f9e5f33976ebca87dfbf83859459e339597c3c57fbc47508a7de16af7fbf0e7e7c59fd6f9a82b2e732e1dd12efd79d666bac64ecf4e + +# renovate: datasource=github-releases extractVersion=^v(?.*)$ depName=thkukuk/rpcsvc-proto +RPCSVC_PROTO_VERSION: 1.4.4 +RPCSVC_PROTO_SHA256: 81c3aa27edb5d8a18ef027081ebb984234d5b5860c65bd99d4ac8f03145a558b +RPCSVC_PROTO_SHA512: 0138ac8fb2d8de3cb56f661bd1b6435fa0a35d3bd12c5cb7081c9ae1701e3620f47fe3dd002263db456655b61316749768e9a1a44325a1a6a542beae364a0393 + +# renovate: datasource=git-tags extractVersion=^rpcbind-((?\d+)_(?\d+)_(?\d+))?$ depName=git://linux-nfs.org/~steved/rpcbind.git +RPCBIND_VERSION: 1.2.8 +RPCBIND_SHA256: 964132c389918e8964d7334936b6dd10ef025b300c6b29e693ba0f29550e3de5 +RPCBIND_SHA512: 66f3955a67c4d0142ec635614ceafbc9bdbea985f2edaeec903f17efaf3c2e98f6483e8e6b7f1358cf8d2c1c877b281d153a3bf1b6748b6d259ae7ad1465ee71 + +# renovate: datasource=git-tags extractVersion=^nfs-utils-(?.*)$ depName=git://git.kernel.org/pub/scm/linux/kernel/git/rw/nfs-utils.git +NFS_UTILS_VERSION: 2.8.4 +NFS_UTILS_SHA256: 11c4cc598a434d7d340bad3e072a373ba1dcc2c49f855d44b202222b78ecdbf5 +NFS_UTILS_SHA512: 2b547b2dfd96672a4867a2d385e58309a242c8fab457f7e48f79c3f362f652d1f81ea356ac5c56837cf2e6c2754fd02b499f75d044251090a161d4c28dd9ca32 + +TIER: "contrib" diff --git a/storage/zfs/zfs-tools/libtirpc/pkg.yaml b/storage/zfs/zfs-tools/libtirpc/pkg.yaml index 71b1e91d..0a745a35 100644 --- a/storage/zfs/zfs-tools/libtirpc/pkg.yaml +++ b/storage/zfs/zfs-tools/libtirpc/pkg.yaml @@ -30,6 +30,9 @@ steps: - | mkdir -p /rootfs + mkdir -p /rootfs/usr/local/include/sys + cp /pkg/patches/sys-queue.h /rootfs/usr/local/include/sys/queue.h + make install DESTDIR=/rootfs rm -rf /rootfs/usr/local/share/man finalize: