Skip to content

Commit f16ad6b

Browse files
committedSep 6, 2022
Merge branch 'upstream-develop'
2 parents 7cddfdf + 8863d00 commit f16ad6b

File tree

14 files changed

+566
-5
lines changed

14 files changed

+566
-5
lines changed
 

‎.github/workflows/stale.yml

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: 'Close stale issues or PRs'
2+
3+
# Both `issue_comment` and `scheduled` event types are required for this Action
4+
# to work properly.
5+
on:
6+
issue_comment:
7+
types: [created]
8+
schedule:
9+
- cron: '*/5 * * * *'
10+
11+
permissions:
12+
issues: write
13+
pull-requests: write
14+
15+
jobs:
16+
stale:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- uses: actions/stale@v5
20+
with:
21+
days-before-stale: 14
22+
days-before-close: 7
23+
exempt-all-milestones: true
24+
close-issue-reason: not_planned
25+
only-labels: '❔ User Input'
26+
labels-to-remove-when-unstale: '❔ User Input,💤 Stale'
27+
stale-issue-label: '💤 Stale'
28+
stale-pr-label: '💤 Stale'
29+
stale-issue-message: |
30+
Ahoi!
31+
It looks like there hasn't been any recent updates on
32+
this issue. If you created this issue and no longer
33+
consider it to get merged, then please login to github
34+
and close it. Otherwise, if there is no further activity
35+
on this issue, it will be automatically closedwithin the
36+
next 7 days.
37+
Fair wind and a following sea!
38+
~ Your friendly MainsailGithubBot
39+
*PS: I'm just an automated script, not a real sailor.*
40+
stale-pr-message: |
41+
Ahoi!
42+
It looks like there hasn't been any recent updates on
43+
this pull request. If you created this pull request and
44+
no longer consider it to get merged, then please login
45+
to github and close it. Otherwise, if there is no further
46+
activity on this pull request, it will be automatically
47+
closed within the next 7 days.
48+
Fair wind and a following sea!
49+
~ Your friendly MainsailGithubBot
50+
*PS: I'm just an automated script, not a real sailor.*

‎src/config

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
# Shebang for better detection of file type
33

44
export DIST_NAME=MainsailOS
5-
export DIST_VERSION=0.7.0
5+
export DIST_VERSION=0.7.1
66
export BASE_IMAGE_ENLARGEROOT=2500
7-
export MODULES="base,pkgupgrade,mainsailos(network,piconfig,klipper,is_req_preinstall,moonraker,timelapse,mainsail,crowsnest,sonar,password-for-sudo),postrename"
7+
export MODULES="base,pkgupgrade,mainsailos(net,piconfig,klipper,is_req_preinstall,moonraker,timelapse,mainsail,crowsnest,sonar,password-for-sudo),postrename"
88
export BASE_RELEASE_COMPRESS=yes
99
export BASE_IMAGE_RESIZEROOT=600

‎src/modules/is_req_preinstall/config

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#!/bin/bash
22
# shellcheck disable=all
33
[ -n "$IS_REQ_PREINSTALL_VENV_DIR" ] || IS_REQ_PREINSTALL_VENV_DIR=/home/${BASE_USER}/klippy-env
4-
[ -n "$IS_REQ_PREINSTALL_DEPS" ] || IS_REQ_PREINSTALL_DEPS="python3-numpy python3-matplotlib"
4+
[ -n "$IS_REQ_PREINSTALL_DEPS" ] || IS_REQ_PREINSTALL_DEPS="python3-numpy python3-matplotlib \
5+
libatlas3-base libatlas-base-dev"
56
[ -n "$IS_REQ_PREINSTALL_PIP" ] || IS_REQ_PREINSTALL_PIP="numpy<=1.21.4"
67
[ -n "$IS_REQ_PREINSTALL_CFG_FILE" ] || IS_REQ_PREINSTALL_CFG_FILE="/boot/config.txt"

‎src/modules/moonraker/start_chroot_script

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ install_cleanup_trap
1616

1717
# make sure that this module can be used standalone
1818
apt_update_skip
19-
check_install_pkgs "git virtualenv"
19+
check_install_pkgs "git virtualenv wireless-tools"
2020

2121
echo_green "Installing Moonraker and enable Moonraker Service"
2222
# install MainsailOS premade moonraker.conf

‎src/modules/net/config

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Network module setup
2+
# shellcheck disable=all
3+
4+
# Use disable power save for wifi module
5+
[ -n "$NETWORK_DISABLE_PWRSAVE" ] || NETWORK_DISABLE_PWRSAVE=yes
6+
7+
# Type of power save rclocal/service/udev
8+
# rclocal - backwards compatibility, runs via rc.local
9+
# service - will add an systemd.service to enable or disable behavior
10+
# on reboots
11+
# udev - creates a udev rules that should affect all wifi devices.
12+
13+
[ -n "$NETWORK_PWRSAVE_TYPE" ] || NETWORK_PWRSAVE_TYPE=udev
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
Wifi-README.txt
2+
###############
3+
4+
5+
Due to changes in Raspberry Pi OS, which OS_NAME is based on,
6+
there is no longer a OS_NAME-wpa-supplicant.txt available.
7+
8+
How do I setup a (new) network on my Pi ?
9+
-----------------------------------------
10+
11+
As described in the original Raspberry Pi OS documentation.
12+
See https://www.raspberrypi.com/documentation/computers/configuration.html#setting-up-a-headless-raspberry-pi.
13+
14+
15+
Quote:
16+
You will need to define a wpa_supplicant.conf file for your particular wireless network.
17+
Put this file onto the boot folder of the SD card.
18+
When the Raspberry Pi boots for the first time,
19+
it will copy that file into the correct location in the Linux root file system
20+
and use those settings to start up wireless networking.
21+
22+
The Raspberry Pi’s IP address will not be visible immediately after power on,
23+
so this step is crucial to connect to it headlessly.
24+
Depending on the OS and editor you are creating this on,
25+
the file could have incorrect newlines or the wrong file extension,
26+
so make sure you use an editor that accounts for this.
27+
Linux expects the line feed (LF) newline character.
28+
29+
What does that all mean? What do I have to do now?
30+
----------------------------------------------
31+
32+
First, ensure you have a proper text editor of your choice.
33+
Recommendations are Notepad++, VSCode, Atom or SublimeText.
34+
35+
################################################################################
36+
#### IMPORTANT! ATTENTION! ####
37+
################################################################################
38+
39+
!!!!! HEADS-UP WINDOWS USERS !!!!!
40+
----------------------------------
41+
42+
Do not use Wordpad for editing this file, it will mangle it and your
43+
configuration won't work. Use a proper text editor instead.
44+
45+
!!!!! HEADS-UP MacOS X USERS !!!!!
46+
---------------------------------
47+
48+
If you use Textedit to edit this file make sure to use "plain text format"
49+
and "disable smart quotes" in "Textedit > Preferences", otherwise Textedit
50+
will use none-compatible characters and your network configuration won't work!
51+
52+
53+
1.) Open your chosen text editor and create a new file called
54+
55+
wpa_supplicant.conf
56+
57+
2.) Create a basic configuration. This has to be in place!
58+
59+
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
60+
country=<Insert 2 letter ISO 3166-1 country code here>
61+
update_config=1
62+
63+
Valid Country Codes are:
64+
65+
GB (United Kingdom)
66+
FR (France)
67+
DE (Germany)
68+
US (United States)
69+
SE (Sweden)
70+
71+
For a full list, please visit https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
72+
73+
2.1) If you plan to use multiple WiFi networks, also add
74+
75+
ap_scan=1
76+
77+
to the mentioned basic configuration.
78+
79+
80+
3.) Setup your "network" block.
81+
82+
For detailed information, please consult:
83+
https://linux.die.net/man/5/wpa_supplicant.conf
84+
or
85+
https://wiki.debian.org/WiFi/HowToUse#wpa_supplicant
86+
or
87+
https://man.archlinux.org/man/wpa_supplicant.conf.5
88+
89+
Examples:
90+
91+
Open or unsecured WiFi network:
92+
-------------------------------
93+
94+
# Open/unsecured
95+
network={
96+
scan_ssid=1 # Used to find hidden SSID's
97+
ssid="put SSID here"
98+
key_mgmt=NONE
99+
}
100+
101+
-------------------------------
102+
103+
104+
WEP "secured" network:
105+
-------------------------------
106+
107+
NOTE:
108+
109+
WEP can be cracked within minutes. If your network is still relying on this
110+
encryption scheme you should seriously consider to update your network ASAP.
111+
112+
network={
113+
ssid="put SSID here"
114+
key_mgmt=NONE
115+
wep_key0="put password here"
116+
wep_tx_keyidx=0
117+
}
118+
--------------------------------
119+
120+
121+
WPA2 Personal secured network:
122+
(Please don't use WPA secured networks, WPA isn't secure anymore)
123+
--------------------------------
124+
125+
# WPA/WPA2 secured
126+
network={
127+
scan_ssid=1 # Used to find hidden SSID's
128+
ssid="<Name of your wireless LAN>"
129+
psk="<Password for your wireless LAN>"
130+
proto=RSN
131+
key_mgmt=WPA-PSK
132+
pairwise=CCMP
133+
auth_alg=OPEN
134+
}
135+
--------------------------------
136+
137+
For the WPA2 Enterprise setup, please use your google-foo.
138+
This is an advanced topic!
139+
140+
4.) Put that file on to the "/boot" partition,
141+
this partition is FAT32 formatted and should be visible if you plug the SD Card into your computer.
142+
143+
If you created a file while the Pi was running, copy that file to boot.
144+
Assuming you created the file in your users "home" directory use
145+
146+
sudo cp -v wpa_supplicant.conf /boot/
147+
148+
5.) Almost done... Please reboot the pi and wait for it to connect.
149+
150+
NOTE:
151+
152+
Attach a screen and watch the console output to get its IP address or
153+
consult your router setup page to grab that information.
154+
155+
You could also try to reach it by its hostname.
156+
157+
http://<yourpisname>.local
158+
159+
If you didnt change the hostname during initial flash, you could use
160+
161+
http://OS_NAME.local
162+
163+
6.) Enjoy OS_NAME :)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Simple configuration for a typical WPA2 network
2+
3+
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
4+
update_config=1
5+
country=US # US Country code
6+
7+
network={
8+
scan_ssid=1
9+
ssid="<Name of your wireless LAN>"
10+
psk="<Password for your wireless LAN>"
11+
proto=RSN
12+
key_mgmt=WPA-PSK
13+
pairwise=CCMP
14+
auth_alg=OPEN
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#### Disable wifi power_save
2+
####
3+
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
4+
#### Copyright 2022
5+
#### https://github.com/mainsail-crew/MainsailOS
6+
####
7+
#### This File is distributed under GPLv3
8+
####
9+
#### Note: This is based on:
10+
#### https://www.intel.com/content/www/us/en/support/articles/000006168/boards-and-kits.html
11+
12+
[Unit]
13+
Description=Disable power management for wlan0
14+
After=network.target
15+
16+
[Service]
17+
Type=oneshot
18+
StandardOutput=tty
19+
ExecStart=/usr/local/bin/pwrsave off
20+
21+
[Install]
22+
WantedBy=multi-user.target
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ACTION=="add", \
2+
SUBSYSTEM=="net", \
3+
KERNEL=="wlan*" \
4+
RUN+="/usr/sbin/iw %k set power_save off"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/bin/bash
2+
#### Disable wifi power_save
3+
####
4+
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
5+
#### Copyright 2022
6+
#### https://github.com/mainsail-crew/MainsailOS
7+
####
8+
#### This File is distributed under GPLv3
9+
####
10+
#### Note: This is based on:
11+
#### https://www.intel.com/content/www/us/en/support/articles/000006168/boards-and-kits.html
12+
13+
14+
## Error handling
15+
set -eou pipefail
16+
17+
## Debug Mode
18+
#set -x
19+
20+
### Message func
21+
function help_msg {
22+
echo -e "Usage:\n"
23+
echo -e "\tpwrsave [ on | off ]"
24+
echo -e "\t\ton\tEnables Power Management of 'wlan0'"
25+
echo -e "\t\toff\tDisables Power Management of 'wlan0'\n"
26+
exit 1
27+
}
28+
29+
function has_wifi {
30+
LC_ALL=C iwconfig wlan0 &> /dev/null && echo "0" || echo "1"
31+
}
32+
33+
function check_wifi_present {
34+
# make sure to exit if command missing
35+
if [ -z "$(command -v iwconfig)" ]; then
36+
echo -e "Command 'iwconfig' not found ... [EXITING]"
37+
exit 1
38+
fi
39+
if [ "$(has_wifi)" != "0" ]; then
40+
echo -e "[ \e[33mWARN\e[0m ] No WiFi hardware present ... [SKIPPED]"
41+
exit 0
42+
fi
43+
}
44+
45+
function disable_pwr_save {
46+
iwconfig wlan0 power off
47+
echo -e "[ \e[32mOK\e[0m ] Disabled Power Management for wlan0"
48+
}
49+
50+
51+
function enable_pwr_save {
52+
iwconfig wlan0 power on
53+
echo -e "[ \e[32mOK\e[0m ] Enabled Power Management for wlan0"
54+
}
55+
56+
57+
### MAIN
58+
function main {
59+
local arg
60+
if [ "$(id -u)" != "0" ]; then
61+
echo -e "\n$(basename "${0}"): This script needs root priviledges!\n"
62+
exit 1
63+
fi
64+
if [ "${#}" == "0" ]; then
65+
echo -e "$(basename "${0}"): No argument set!"
66+
help_msg
67+
fi
68+
if [ "${#}" -gt 1 ]; then
69+
echo -e "$(basename "${0}"): Too many arguments set!"
70+
help_msg
71+
fi
72+
arg="${1}"
73+
case "${arg}" in
74+
"on")
75+
check_wifi_present
76+
enable_pwr_save
77+
;;
78+
"off")
79+
check_wifi_present
80+
disable_pwr_save
81+
;;
82+
?|*)
83+
echo -e "$(basename "${0}"): Unknown argument '${arg}' !"
84+
help_msg
85+
;;
86+
esac
87+
}
88+
89+
main "${@}"
90+
exit 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,105 @@
1+
#!/bin/bash
2+
#### Disable wifi power_save
3+
####
4+
#### Written by Stephan Wendel aka KwadFan <me@stephanwe.de>
5+
#### Copyright 2022
6+
#### https://github.com/mainsail-crew/MainsailOS
7+
####
8+
#### This File is distributed under GPLv3
9+
####
10+
#### Note: This is based on:
11+
#### https://www.intel.com/content/www/us/en/support/articles/000006168/boards-and-kits.html
12+
13+
14+
## Error handling
15+
set -eou pipefail
16+
17+
## Debug Mode
18+
#set -x
19+
20+
### Message func
21+
function help_msg {
22+
echo -e "Usage:\n"
23+
echo -e "\tpwrsave-udev [ on | off | create ]"
24+
echo -e "\t\ton\tEnables Power Management via udev rule"
25+
echo -e "\t\toff\tDisables Power Management via udev rule"
26+
echo -e "\t\tcreate\tCreate Power Management udev rule\n"
27+
exit 1
28+
}
29+
30+
31+
### Check rule exist
32+
function check_rule {
33+
if [ ! -f /etc/udev/rules.d/070-wifi-powersave.rules ]; then
34+
echo -e "[ \e[31mERROR\e[0m ] Udev Rule for WiFi Powermanagement not found!"
35+
help_msg
36+
exit 1
37+
fi
38+
}
39+
40+
function disable_pwr_save {
41+
sed -i 's/on/off/' /etc/udev/rules.d/070-wifi-powersave.rules
42+
echo -e "[ \e[32mOK\e[0m ] Disabled Power Management"
43+
}
44+
45+
46+
function enable_pwr_save {
47+
sed -i 's/off/on/' /etc/udev/rules.d/070-wifi-powersave.rules
48+
echo -e "[ \e[32mOK\e[0m ] Enabled Power Management"
49+
}
50+
51+
function create_rule {
52+
if [ -f /etc/udev/rules.d/070-wifi-powersave.rules ]; then
53+
echo -e "[ \e[33mSKIPPED\e[0m ] Udev rule already exists!"
54+
exit 0
55+
fi
56+
57+
cat << EOF > /etc/udev/rules.d/070-wifi-powersave.rules
58+
ACTION=="add", \
59+
SUBSYSTEM=="net", \
60+
KERNEL=="wlan*" \
61+
RUN+="/usr/sbin/iw %k set power_save off"
62+
EOF
63+
echo -e "[ \e[32mOK\e[0m ] Created Udev rule ... \n"
64+
echo -e "Please 'reboot' to take changes effect.\n"
65+
}
66+
67+
68+
69+
### MAIN
70+
function main {
71+
local arg
72+
if [ "$(id -u)" != "0" ]; then
73+
echo -e "\n$(basename "${0}"): This script needs root priviledges!\n"
74+
exit 1
75+
fi
76+
if [ "${#}" == "0" ]; then
77+
echo -e "$(basename "${0}"): No argument set!"
78+
help_msg
79+
fi
80+
if [ "${#}" -gt 1 ]; then
81+
echo -e "$(basename "${0}"): Too many arguments set!"
82+
help_msg
83+
fi
84+
arg="${1}"
85+
if [ "${arg}" == "create" ]; then
86+
create_rule
87+
exit 0
88+
fi
89+
check_rule
90+
case "${arg}" in
91+
"on")
92+
enable_pwr_save
93+
;;
94+
"off")
95+
disable_pwr_save
96+
;;
97+
?|*)
98+
echo -e "$(basename "${0}"): Unknown argument '${arg}' !"
99+
help_msg
100+
;;
101+
esac
102+
}
103+
104+
main "${@}"
105+
exit 0

‎src/modules/net/start_chroot_script

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
#!/usr/bin/env bash
2+
# Network
3+
# Adds to /boot configuration files that let you set up wifi network before booting
4+
# Written by Guy Sheffer <guysoft at gmail dot com> and Gina Häußge <gina@octoprint.org>
5+
# GPL V3
6+
#
7+
# Modified by Stephan Wendel aka KwadFan <me@stephanwe.de>
8+
# https://github.com/mainsail-crew/MainsailOS
9+
# Last modification: August/2022
10+
#
11+
########
12+
set -x
13+
set -e
14+
15+
export LC_ALL=C
16+
17+
source /common.sh
18+
install_cleanup_trap
19+
20+
unpack /filesystem/boot /"${BASE_BOOT_MOUNT_PATH}"
21+
22+
if [ "${BASE_DISTRO}" == "ubuntu" ] || [ "${BASE_DISTRO}" == "armbian" ]; then
23+
echo "ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev" > /etc/wpa_supplicant/wpa_supplicant.conf
24+
echo "update_config=1" >> /etc/wpa_supplicant/wpa_supplicant.conf
25+
echo "ap_scan=1" >> /etc/wpa_supplicant/wpa_supplicant.conf
26+
echo "country=US" >> /etc/wpa_supplicant/wpa_supplicant.conf
27+
fi
28+
29+
if [ "${BASE_DISTRO}" == "raspbian" ]; then
30+
# Workaround rfkill not unblocking on boot
31+
rm /var/lib/systemd/rfkill/*
32+
fi
33+
34+
# set OS_NAME in Wifi-README.txt according to DIST_NAME
35+
if [ -f "/boot/WiFi-README.txt" ]; then
36+
sed -i 's|OS_NAME|'"${DIST_NAME}"'|g' /boot/WiFi-README.txt
37+
fi
38+
39+
40+
# copy /etc/wpa_supplicant/ifupdown.sh to /etc/ifplugd/action.d/ifupdown - for wlan auto reconnect
41+
[ -f /etc/ifplugd/action.d/ifupdown ] && mv /etc/ifplugd/action.d/ifupdown /etc/ifplugd/action.d/ifupdown.original
42+
[ -f /etc/wpa_supplicant/ifupdown.sh ] && ln -s /etc/wpa_supplicant/ifupdown.sh /etc/ifplugd/action.d/ifupdown
43+
44+
if [ ! -f "/etc/rc.local" ];then
45+
echo 'exit 0' >> /etc/rc.local
46+
fi
47+
48+
# prevent ntp updates from failing due to some Rpi3 weirdness, see also "Fix SSH" further below
49+
apt-get update --allow-releaseinfo-change
50+
apt-get install -y iptables
51+
sed -i 's@exit 0@@' /etc/rc.local
52+
echo '/sbin/iptables -t mangle -I POSTROUTING 1 -o wlan0 -p udp --dport 123 -j TOS --set-tos 0x00' >> /etc/rc.local
53+
echo 'exit 0' >> /etc/rc.local
54+
55+
# Install powersave option
56+
if [ "$NETWORK_DISABLE_PWRSAVE" == "yes" ]; then
57+
58+
# Copy pwrsave script
59+
unpack filesystem/usr/local/bin /usr/local/bin root
60+
61+
# Use rc.local
62+
if [ "$NETWORK_PWRSAVE_TYPE" == "rclocal" ]; then
63+
echo_green "Modifying /etc/rc.local ..."
64+
sed -i 's@exit 0@@' /etc/rc.local
65+
(echo "# Disable WiFi Power Management"; \
66+
echo 'echo "Disabling power management for wlan0 ..."' ; \
67+
echo "/usr/local/bin/pwrsave off"; echo "exit 0") >> /etc/rc.local
68+
fi
69+
# Use service
70+
if [ "$NETWORK_PWRSAVE_TYPE" == "service" ]; then
71+
echo_green "Installing disable-wifi-pwr-mgmt service ..."
72+
unpack filesystem/etc/systemd/system /etc/systemd/system root
73+
systemctl_if_exists enable disable-wifi-pwr-mgmt.service
74+
fi
75+
# Use udev rule
76+
if [ "$NETWORK_PWRSAVE_TYPE" == "udev" ]; then
77+
echo_green "Installing WiFi Power Management udev rule ..."
78+
unpack filesystem/etc/udev/rules.d /etc/udev/rules.d root
79+
fi
80+
# strip out unneeded script, depending on choose
81+
if [ "$NETWORK_PWRSAVE_TYPE" != "udev" ]; then
82+
rm -f /usr/local/bin/pwrsave-udev
83+
else
84+
rm -f /usr/local/bin/pwrsave
85+
fi
86+
fi

‎src/modules/postrename/config

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
####
1010
# shellcheck disable=all
1111

12-
# Intentionaly left blank
12+
# Intentionally left blank

‎src/modules/postrename/filesystem/root/postrename

+12
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,20 @@ function relocate_venv {
7575
venvs=(klippy-env moonraker-env)
7676

7777
for venv in "${venvs[@]}"; do
78+
# Move venv
7879
sudo -u "${DEFAULT_USER}" \
7980
virtualenv --relocatable -p /usr/bin/python3 "/home/${DEFAULT_USER}/${venv}"
81+
82+
# delete pycache (*.pyc files)
83+
find "/home/${DEFAULT_USER}/${venv}" -name "__pycache__" -type d -exec rm -rf {} +
84+
85+
# repair shebangs
86+
while IFS= read -r file ; do
87+
88+
sed -i 's|pi/'"${venv}"'|'"${DEFAULT_USER}"'/'"${venv}"'|g' "${file}"
89+
90+
done < <(grep -iR "pi/${venv}" "/home/${DEFAULT_USER}/${venv}"/* | cut -d":" -f1)
91+
8092
done
8193
}
8294

0 commit comments

Comments
 (0)
Please sign in to comment.