diff --git a/data/network/dhcp/conf/dhcpd.conf b/data/network/dhcp/conf/dhcpd.conf new file mode 100644 index 0000000..9129747 --- /dev/null +++ b/data/network/dhcp/conf/dhcpd.conf @@ -0,0 +1,116 @@ +# dhcpd.conf +# +# Sample configuration file for ISC dhcpd +# + +# option definitions common to all supported networks... +option domain-name "owo.nya"; + +default-lease-time 600; +max-lease-time 7200; + +# The ddns-updates-style parameter controls whether or not the server will +# attempt to do a DNS update when a lease is confirmed. We default to the +# behavior of the version 2 packages ('none', since DHCP v2 didn't +# have support for DDNS.) +ddns-update-style none; + + +subnet 192.168.12.0 netmask 255.255.255.0 { + range 192.168.12.20 192.168.12.200; + option domain-name-servers 10.10.0.1; + option domain-name "owo.nya"; + option routers 192.168.12.1; +} + + + +# If this DHCP server is the official DHCP server for the local +# network, the authoritative directive should be uncommented. +#authoritative; + +# Use this to send dhcp log messages to a different log file (you also +# have to hack syslog.conf to complete the redirection). +#log-facility local7; + +# No service will be given on this subnet, but declaring it helps the +# DHCP server to understand the network topology. + +#subnet 10.152.187.0 netmask 255.255.255.0 { +#} + +# This is a very basic subnet declaration. + +#subnet 10.254.239.0 netmask 255.255.255.224 { +# range 10.254.239.10 10.254.239.20; +# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org; +#} + +# This declaration allows BOOTP clients to get dynamic addresses, +# which we don't really recommend. + +#subnet 10.254.239.32 netmask 255.255.255.224 { +# range dynamic-bootp 10.254.239.40 10.254.239.60; +# option broadcast-address 10.254.239.31; +# option routers rtr-239-32-1.example.org; +#} + +# A slightly different configuration for an internal subnet. +#subnet 10.5.5.0 netmask 255.255.255.224 { +# range 10.5.5.26 10.5.5.30; +# option domain-name-servers ns1.internal.example.org; +# option domain-name "internal.example.org"; +# option routers 10.5.5.1; +# option broadcast-address 10.5.5.31; +# default-lease-time 600; +# max-lease-time 7200; +#} + +# Hosts which require special configuration options can be listed in +# host statements. If no address is specified, the address will be +# allocated dynamically (if possible), but the host-specific information +# will still come from the host declaration. + +#host passacaglia { +# hardware ethernet 0:0:c0:5d:bd:95; +# filename "vmunix.passacaglia"; +# server-name "toccata.example.com"; +#} + +# Fixed IP addresses can also be specified for hosts. These addresses +# should not also be listed as being available for dynamic assignment. +# Hosts for which fixed IP addresses have been specified can boot using +# BOOTP or DHCP. Hosts for which no fixed address is specified can only +# be booted with DHCP, unless there is an address range on the subnet +# to which a BOOTP client is connected which has the dynamic-bootp flag +# set. +#host fantasia { +# hardware ethernet 08:00:07:26:c0:a5; +# fixed-address fantasia.example.com; +#} + +# You can declare a class of clients and then do address allocation +# based on that. The example below shows a case where all clients +# in a certain class get addresses on the 10.17.224/24 subnet, and all +# other clients get addresses on the 10.0.29/24 subnet. + +#class "foo" { +# match if substring (option vendor-class-identifier, 0, 4) = "SUNW"; +#} + +#shared-network 224-29 { +# subnet 10.17.224.0 netmask 255.255.255.0 { +# option routers rtr-224.example.org; +# } +# subnet 10.0.29.0 netmask 255.255.255.0 { +# option routers rtr-29.example.org; +# } +# pool { +# allow members of "foo"; +# range 10.17.224.10 10.17.224.250; +# } +# pool { +# deny members of "foo"; +# range 10.0.29.10 10.0.29.230; +# } +#} diff --git a/data/network/dhcp/conf/dhcpd6.conf b/data/network/dhcp/conf/dhcpd6.conf new file mode 100644 index 0000000..d885e78 --- /dev/null +++ b/data/network/dhcp/conf/dhcpd6.conf @@ -0,0 +1,102 @@ +# Server configuration file example for DHCPv6 +# From the file used for TAHI tests - addresses chosen +# to match TAHI rather than example block. + +# IPv6 address valid lifetime +# (at the end the address is no longer usable by the client) +# (set to 30 days, the usual IPv6 default) +default-lease-time 2592000; + +# IPv6 address preferred lifetime +# (at the end the address is deprecated, i.e., the client should use +# other addresses for new connections) +# (set to 7 days, the usual IPv6 default) +preferred-lifetime 604800; + +# T1, the delay before Renew +# (default is 1/2 preferred lifetime) +# (set to 1 hour) +option dhcp-renewal-time 3600; + +# T2, the delay before Rebind (if Renews failed) +# (default is 3/4 preferred lifetime) +# (set to 2 hours) +option dhcp-rebinding-time 7200; + +# Enable RFC 5007 support (same than for DHCPv4) +allow leasequery; + +# Global definitions for name server address(es) and domain search list +option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:3f3e; +option dhcp6.domain-search "test.example.com","example.com"; + +# Set preference to 255 (maximum) in order to avoid waiting for +# additional servers when there is only one +##option dhcp6.preference 255; + +# Server side command to enable rapid-commit (2 packet exchange) +##option dhcp6.rapid-commit; + +# The delay before information-request refresh +# (minimum is 10 minutes, maximum one day, default is to not refresh) +# (set to 6 hours) +option dhcp6.info-refresh-time 21600; + +# Static definition (must be global) +#host myclient { +# # The entry is looked up by this +# host-identifier option +# dhcp6.client-id 00:01:00:01:00:04:93:e0:00:00:00:00:a2:a2; +# +# # A fixed address +# fixed-address6 3ffe:501:ffff:100::1234; +# +# # A fixed prefix +# fixed-prefix6 3ffe:501:ffff:101::/64; +# +# # Override of the global definitions, +# # works only when a resource (address or prefix) is assigned +# option dhcp6.name-servers 3ffe:501:ffff:100:200:ff:fe00:4f4e; +# +# # For debug (to see when the entry statements are executed) +# # (log "sol" when a matching Solicitation is received) +# ##if packet(0,1) = 1 { log(debug,"sol"); } +#} +# +#host otherclient { +# # This host entry is hopefully matched if the client supplies a DUID-LL +# # or DUID-LLT containing this MAC address. +# hardware ethernet 01:00:80:a2:55:67; +# +# fixed-address6 3ffe:501:ffff:100::4321; +#} + +# The subnet where the server is attached +# (i.e., the server has an address in this subnet) +#subnet6 3ffe:501:ffff:100::/64 { +# # Two addresses available to clients +# # (the third client should get NoAddrsAvail) +# range6 3ffe:501:ffff:100::10 3ffe:501:ffff:100::11; +# +# # Use the whole /64 prefix for temporary addresses +# # (i.e., direct application of RFC 4941) +# range6 3ffe:501:ffff:100:: temporary; +# +# # Some /64 prefixes available for Prefix Delegation (RFC 3633) +# prefix6 3ffe:501:ffff:100:: 3ffe:501:ffff:111:: /64; +#} + +# A second subnet behind a relay agent +#subnet6 3ffe:501:ffff:101::/64 { +# range6 3ffe:501:ffff:101::10 3ffe:501:ffff:101::11; +# +# # Override of the global definitions, +# # works only when a resource (address or prefix) is assigned +# option dhcp6.name-servers 3ffe:501:ffff:101:200:ff:fe00:3f3e; +# +#} + +# A third subnet behind a relay agent chain +#subnet6 3ffe:501:ffff:102::/64 { +# range6 3ffe:501:ffff:102::10 3ffe:501:ffff:102::11; +#} diff --git a/data/network/dhcp/dhcpd.leases b/data/network/dhcp/dhcpd.leases new file mode 100644 index 0000000..f6dae61 --- /dev/null +++ b/data/network/dhcp/dhcpd.leases @@ -0,0 +1,158 @@ +# The format of this file is documented in the dhcpd.leases(5) manual page. +# This lease file was written by isc-dhcp-4.4.3-P1 + +# authoring-byte-order entry is generated, DO NOT DELETE +authoring-byte-order little-endian; + +server-duid "\000\001\000\001-\261\365a\002B\300\250\014\002"; + +lease 192.168.12.20 { + starts 3 2024/04/17 02:53:08; + ends 3 2024/04/17 03:03:08; + cltt 3 2024/04/17 02:53:08; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + client-hostname "rander-standardpc"; +} +lease 192.168.12.21 { + starts 3 2024/04/17 02:55:15; + ends 3 2024/04/17 03:05:15; + cltt 3 2024/04/17 02:55:15; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + set vendor-class-identifier = "Linux ipconfig"; +} +lease 192.168.12.20 { + starts 3 2024/04/17 02:58:38; + ends 3 2024/04/17 03:08:38; + cltt 3 2024/04/17 02:58:38; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; + client-hostname "manjaro"; +} +lease 192.168.12.20 { + starts 3 2024/04/17 03:03:38; + ends 3 2024/04/17 03:13:38; + cltt 3 2024/04/17 03:03:38; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; + client-hostname "manjaro"; +} +lease 192.168.12.21 { + starts 3 2024/04/17 02:55:15; + ends 3 2024/04/17 03:05:15; + tstp 3 2024/04/17 03:05:15; + cltt 3 2024/04/17 02:55:15; + binding state free; + hardware ethernet bc:24:11:35:3e:af; + set vendor-class-identifier = "Linux ipconfig"; +} +lease 192.168.12.22 { + starts 3 2024/04/17 03:07:42; + ends 3 2024/04/17 03:17:42; + cltt 3 2024/04/17 03:07:42; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + uid "\001\274$\021\330\267\247"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; +} +lease 192.168.12.23 { + starts 3 2024/04/17 03:08:09; + ends 3 2024/04/17 03:18:09; + cltt 3 2024/04/17 03:08:09; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + client-hostname "(none)"; +} +lease 192.168.12.20 { + starts 3 2024/04/17 03:08:38; + ends 3 2024/04/17 03:18:38; + cltt 3 2024/04/17 03:08:38; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; + client-hostname "manjaro"; +} +lease 192.168.12.22 { + starts 3 2024/04/17 03:09:55; + ends 3 2024/04/17 03:19:55; + cltt 3 2024/04/17 03:09:55; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + uid "\001\274$\021\330\267\247"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; + client-hostname "ubuntu"; +} +lease 192.168.12.23 { + starts 3 2024/04/17 03:12:43; + ends 3 2024/04/17 03:22:43; + cltt 3 2024/04/17 03:12:43; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + set vendor-class-identifier = "Linux ipconfig"; +} +lease 192.168.12.20 { + starts 3 2024/04/17 03:13:38; + ends 3 2024/04/17 03:23:38; + cltt 3 2024/04/17 03:13:38; + binding state active; + next binding state free; + rewind binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; + client-hostname "manjaro"; +} +lease 192.168.12.22 { + starts 3 2024/04/17 03:09:55; + ends 3 2024/04/17 03:19:55; + tstp 3 2024/04/17 03:19:55; + cltt 3 2024/04/17 03:12:09; + binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + uid "\001\274$\021\330\267\247"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; +} +lease 192.168.12.23 { + starts 3 2024/04/17 03:12:43; + ends 3 2024/04/17 03:22:43; + tstp 3 2024/04/17 03:22:43; + cltt 3 2024/04/17 03:12:43; + binding state free; + hardware ethernet bc:24:11:d8:b7:a7; + set vendor-class-identifier = "Linux ipconfig"; +} +lease 192.168.12.20 { + starts 3 2024/04/17 03:13:38; + ends 3 2024/04/17 03:23:38; + tstp 3 2024/04/17 03:23:38; + cltt 3 2024/04/17 03:13:38; + binding state free; + hardware ethernet bc:24:11:35:3e:af; + uid "\001\274$\0215>\257"; + set vendor-class-identifier = "PXEClient:Arch:00000:UNDI:002001"; +} diff --git a/data/network/dhcp/int b/data/network/dhcp/int new file mode 100644 index 0000000..0241143 --- /dev/null +++ b/data/network/dhcp/int @@ -0,0 +1,18 @@ +# Defaults for isc-dhcp-server (sourced by /etc/init.d/isc-dhcp-server) + +# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf). +#DHCPDv4_CONF=/etc/dhcp/dhcpd.conf +#DHCPDv6_CONF=/etc/dhcp/dhcpd6.conf + +# Path to dhcpd's PID file (default: /var/run/dhcpd.pid). +#DHCPDv4_PID=/var/run/dhcpd.pid +#DHCPDv6_PID=/var/run/dhcpd6.pid + +# Additional options to start dhcpd with. +# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead +#OPTIONS="" + +# On what interfaces should the DHCP server (dhcpd) serve DHCP requests? +# Separate multiple interfaces with spaces, e.g. "eth0 eth1". +INTERFACESv4="vmbr0" +INTERFACESv6="" diff --git a/docker-compose.yml b/docker-compose.yml index a0722ae..6e4c609 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,10 +4,10 @@ networks: name: netvm services: - openssh-server: - image: ssh-custom + pve-server2: + image: pve-custom2 build: ./pve - container_name: sshcustom-server + container_name: pve-server2 privileged: true hostname: pve-owo networks: @@ -17,12 +17,6 @@ services: - PUID=1000 - PGID=1000 - TZ=Etc/UTC - - SUDO_ACCESS=true #optional - - PASSWORD_ACCESS=true #optional - - USER_PASSWORD=password #optional - - USER_PASSWORD_FILE=/path/to/file #optional - - USER_NAME=rander #optional - - LOG_STDOUT= #optional volumes: - "./data/logs:/var/log" - "./data/pve/pve_cluster:/var/lib/pve-cluster" @@ -30,18 +24,8 @@ services: - "./data/bin:/srv/bin" - "./data/disks:/var/lib/vz" - "./data/network/interfaces:/etc/network/interfaces" + - "./data/network/dhcp/conf:/etc/dhcp" + - "./data/network/dhcp/dhcpd.leases:/var/lib/dhcp/dhcpd.leases" + - "./data/network/dhcp/int:/etc/default/isc-dhcp-server" - "/etc/resolv.conf:/etc/resolv.conf" restart: unless-stopped - - socat-server: - image: socat-custom - build: ./sc - container_name: socat-server - privileged: true - networks: - netvm: - ipv4_address: 192.168.12.3 - ports: - - 8006:8006 - - 2222:22 - restart: unless-stopped diff --git a/pve/Dockerfile b/pve/Dockerfile index ef22f83..4538721 100644 --- a/pve/Dockerfile +++ b/pve/Dockerfile @@ -1,4 +1,3 @@ -# syntax=docker/dockerfile:1 FROM quay.io/toolbx-images/debian-toolbox:12 ENV PVE_VERSION=8.1 \ @@ -15,7 +14,7 @@ RUN apt-get update && \ RUN \ echo "**** install runtime packages ****" && \ - apt update && apt install -y logrotate neovim netcat-openbsd sudo openssh-server wget systemctl curl gnupg ca-certificates rsyslog net-tools iputils-ping && \ + apt update && apt install -y isc-dhcp-server kitty-terminfo btop logrotate neovim netcat-openbsd sudo openssh-server wget systemctl curl gnupg ca-certificates rsyslog net-tools iputils-ping && \ echo "**** setup openssh environment ****" && \ useradd -m rander && \ usermod --shell /bin/bash rander && \ @@ -81,9 +80,9 @@ RUN apt-get update && \ #set (temporary) password for root RUN echo "root:root"|chpasswd -RUN systemctl enable pvenetcommit.service pve-firewall +RUN systemctl enable pvenetcommit.service pve-firewall isc-dhcp-server -RUN mkdir -p /var/lib/dhcp && apt update && apt install ifupdown2 -y || true && mkdir -p /run/sshd && systemctl enable networking +RUN mkdir -p /var/lib/dhcp && apt update && apt install ifupdown2 -y || true # add local files EXPOSE 2222 @@ -93,8 +92,6 @@ COPY entrypoint.sh / RUN chmod +x /entrypoint.sh -RUN mkdir -p /run/ssh systemctl enable ssh - #use setup.sh to start proxmox service STOPSIGNAL SIGINT ENTRYPOINT [ "/entrypoint.sh" ] diff --git a/pve/entrypoint.sh b/pve/entrypoint.sh index c9db881..31e85da 100644 --- a/pve/entrypoint.sh +++ b/pve/entrypoint.sh @@ -31,6 +31,7 @@ docker_setup_pve() { echo "root:$ADMIN_PASSWORD"|chpasswd } +systemctl start networking && systemctl start isc-dhcp-server & RELAY_HOST=${RELAY_HOST:-ext.home.local} sed -i "s/RELAY_HOST/$RELAY_HOST/" /etc/postfix/main.cf PVE_ENTERPRISE=${PVE_ENTERPRISE:-no} @@ -39,28 +40,6 @@ rm -f /etc/apt/sources.list.d/pve-enterprise.list docker_verify_minimum_env echo 'rander:12345' | chpasswd -mkdir -p /run/sshd -chmod 755 /run/sshd -/usr/sbin/sshd - -#ip route add default via 192.168.0.2/20 -#bridge -#brctl addbr vmbr0 eth1 -#brctl addif vmbr0 eth1 -#ip link set vmbr0 up - -# Start api first in background -#echo -n "Starting Proxmox VE API..." -#/usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-api & -#while true; do -# if [ ! -f /run/proxmox-backup/api.pid ]; then -# echo -n "..." -# sleep 3 -# else -# break -# fi -#done -#echo "OK" docker_setup_pve @@ -73,6 +52,8 @@ if [ -n "$ENABLE_PVE_FIREWALL" -a "$ENABLE_PVE_FIREWALL" == "no" ]; then systemctl mask pve-firewall.service fi +mkdir /run/sshd && chmod 0755 /run/sshd && /usr/sbin/sshd & +systemctl start networking && systemctl start isc-dhcp-server & echo "Running PVE..." exec "$@" diff --git a/sc/entrypoint.sh b/sc/entrypoint.sh deleted file mode 100644 index 8de145a..0000000 --- a/sc/entrypoint.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -set -eo pipefail -shopt -s nullglob -ADMIN_PASSWORD="nyaowo" - -# Verify that the minimally required password settings are set for new databases. -docker_setup_pve() { - #Set pve user - echo "root:$ADMIN_PASSWORD"|chpasswd -} - - -mkdir -p /var/lib/dhcp -#sudo apt install ifupdown2 -y || true -echo 'rander:12345' | chpasswd -mkdir -p /run/sshd -sudo chmod 755 /run/sshd -/usr/sbin/sshd - -sudo socat -dd TCP-LISTEN:8006,fork,reuseaddr,keepalive,keepidle=60,keepintvl=60 TCP:192.168.12.2:8006,keepalive,keepidle=60,keepintvl=60 && \ -sudo socat -dd TCP-LISTEN:2222,fork,reuseaddr,keepalive,keepidle=60,keepintvl=60 TCP:192.168.12.2:22,keepalive,keepidle=60,keepintvl=60 - - -#systemctl enable networking - - -#ip route add default via 192.168.0.2/20 -#bridge -#brctl addbr vmbr0 eth1 -#brctl addif vmbr0 eth1 -#ip link set vmbr0 up - -# Start api first in background -#echo -n "Starting Proxmox VE API..." -#/usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-api & -#while true; do -# if [ ! -f /run/proxmox-backup/api.pid ]; then -# echo -n "..." -# sleep 3 -# else -# break -# fi -#done -#echo "OK" - -docker_setup_pve - -echo "Running SOCAT..." -exec "$@" - -while true; do - # Your commands or checks here - sleep 60 # Adjust the sleep interval as needed -done - -#exec gosu backup /usr/lib/x86_64-linux-gnu/proxmox-backup/proxmox-backup-proxy "$@" diff --git a/socat/data/socat.sh b/socat/data/socat.sh new file mode 100644 index 0000000..e9b34a8 --- /dev/null +++ b/socat/data/socat.sh @@ -0,0 +1,3 @@ +socat -dd TCP-LISTEN:8006,fork,reuseaddr,keepalive,keepidle=60,keepintvl=60 TCP:192.168.12.2:8006,keepalive,keepidle=60,keepintvl=60 & +socat -dd TCP-LISTEN:2222,fork,reuseaddr,keepalive,keepidle=60,keepintvl=60 TCP:192.168.12.2:22,keepalive,keepidle=60,keepintvl=60 & + diff --git a/socat/docker-compose.yml b/socat/docker-compose.yml new file mode 100644 index 0000000..e91c689 --- /dev/null +++ b/socat/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + netvm: + external: true + name: netvm + +services: + socat-server: + image: socat-custom + build: ./sc + container_name: socat-server + privileged: true + networks: + netvm: + ipv4_address: 192.168.12.3 + ports: + - 8006:8006 + - 2222:2222 + volumes: + - "./data/socat.sh:/root/socat.sh" + restart: unless-stopped diff --git a/sc/Dockerfile b/socat/sc/Dockerfile similarity index 80% rename from sc/Dockerfile rename to socat/sc/Dockerfile index 76c3a2f..7600f84 100644 --- a/sc/Dockerfile +++ b/socat/sc/Dockerfile @@ -15,10 +15,8 @@ RUN apt-get update && \ RUN \ echo "**** install runtime packages ****" && \ - apt update && apt install -y socat logrotate neovim netcat-openbsd sudo openssh-server wget systemctl curl gnupg ca-certificates rsyslog net-tools iputils-ping && \ + apt update && apt install -y socat logrotate btop kitty-terminfo neovim netcat-openbsd sudo wget systemctl curl gnupg ca-certificates rsyslog net-tools iputils-ping && \ echo "**** setup openssh environment ****" && \ - useradd -m rander && \ - usermod --shell /bin/bash rander && \ rm -rf \ /tmp/* \ $HOME/.cache diff --git a/socat/sc/entrypoint.sh b/socat/sc/entrypoint.sh new file mode 100644 index 0000000..1c4c94a --- /dev/null +++ b/socat/sc/entrypoint.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -eo pipefail +shopt -s nullglob +ADMIN_PASSWORD="nyaowo" + +# Verify that the minimally required password settings are set for new databases. +echo "root:$ADMIN_PASSWORD"|chpasswd +mkdir -p /var/lib/dhcp +/bin/bash /root/socat.sh & + + +echo "Running SOCAT..." +exec "$@" + +while true; do + # Your commands or checks here + sleep 60 # Adjust the sleep interval as needed +done