Worked on updating installation files, e.g. install.sh, requirements.txt, and setup.py. Maybe broken, proceed with caution.
This commit is contained in:
parent
d81d563bb6
commit
7bbc45bda2
184
install.sh
184
install.sh
@ -1,12 +1,141 @@
|
||||
#!/usr/bin/env bash
|
||||
#Basic install script for Fenrir.
|
||||
read -rp "This will install Fenrir. Press ctrl+C to cancel, or enter to continue."
|
||||
# Install script for Fenrir Screen Reader
|
||||
set -e
|
||||
|
||||
# Check if running as root
|
||||
if [[ $(whoami) != "root" ]]; then
|
||||
echo "This script must be run as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Python version
|
||||
pythonVersion=$(python3 -c "import sys; print(f'{sys.version_info.major}.{sys.version_info.minor}')")
|
||||
requiredVersion="3.8"
|
||||
if ! python3 -c "import sys; exit(0 if sys.version_info >= (3, 8) else 1)" 2>/dev/null; then
|
||||
echo "Python ${requiredVersion} or higher is required. Current version: ${pythonVersion}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Fenrir Screen Reader Installation"
|
||||
echo "=================================="
|
||||
read -rp "This will install the Fenrir screen reader. Press Ctrl+C to cancel, or Enter to continue."
|
||||
|
||||
# Check for pip3
|
||||
if ! command -v pip3 &> /dev/null; then
|
||||
echo "pip3 is required but not installed. Please install pip3 first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Function to check dependencies
|
||||
checkDependencies() {
|
||||
echo "Checking dependencies..."
|
||||
if python3 check-dependencies.py; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to install dependencies with pip
|
||||
installWithPip() {
|
||||
echo "Installing Python dependencies with pip..."
|
||||
pip3 install -r requirements.txt --break-system-packages
|
||||
}
|
||||
|
||||
# Function to detect package manager and provide instructions
|
||||
detectPackageManager() {
|
||||
if command -v apt &> /dev/null; then
|
||||
echo "apt"
|
||||
elif command -v dnf &> /dev/null; then
|
||||
echo "dnf"
|
||||
elif command -v yum &> /dev/null; then
|
||||
echo "yum"
|
||||
elif command -v pacman &> /dev/null; then
|
||||
echo "pacman"
|
||||
elif command -v zypper &> /dev/null; then
|
||||
echo "zypper"
|
||||
else
|
||||
echo "unknown"
|
||||
fi
|
||||
}
|
||||
|
||||
# Function to show package manager instructions
|
||||
showPackageInstructions() {
|
||||
local pm=$1
|
||||
echo "Package manager installation instructions:"
|
||||
case $pm in
|
||||
"apt")
|
||||
echo " sudo apt update"
|
||||
echo " sudo apt install python3-evdev python3-daemonize python3-dbus python3-pyudev python3-pexpect"
|
||||
echo " sudo apt install python3-pyte python3-setproctitle python3-enchant python3-xdg"
|
||||
echo " sudo apt install speech-dispatcher espeak-ng sox alsa-utils"
|
||||
;;
|
||||
"dnf"|"yum")
|
||||
echo " sudo $pm install python3-evdev python3-daemonize python3-dbus python3-pyudev python3-pexpect"
|
||||
echo " sudo $pm install python3-pyte python3-setproctitle python3-enchant python3-pyxdg"
|
||||
echo " sudo $pm install speech-dispatcher espeak-ng sox alsa-utils"
|
||||
;;
|
||||
"pacman")
|
||||
echo " sudo pacman -S python-evdev python-daemonize python-dbus python-pyudev python-pexpect"
|
||||
echo " sudo pacman -S python-pyte python-setproctitle python-pyenchant python-pyxdg"
|
||||
echo " sudo pacman -S speech-dispatcher espeak-ng sox alsa-utils"
|
||||
;;
|
||||
"zypper")
|
||||
echo " sudo zypper install python3-evdev python3-daemonize python3-dbus python3-pyudev python3-pexpect"
|
||||
echo " sudo zypper install python3-pyte python3-setproctitle python3-enchant python3-pyxdg"
|
||||
echo " sudo zypper install speech-dispatcher espeak-ng sox alsa-utils"
|
||||
;;
|
||||
*)
|
||||
echo " Unknown package manager. Please install the dependencies manually."
|
||||
echo " Required packages: evdev, daemonize, dbus-python, pyudev, pexpect, pyte, setproctitle"
|
||||
echo " System packages: speech-dispatcher, espeak-ng, sox, alsa-utils"
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
# Initial dependency check
|
||||
echo "Performing initial dependency check..."
|
||||
if ! checkDependencies; then
|
||||
echo ""
|
||||
echo "Some dependencies are missing. You have two options:"
|
||||
echo "1. Install using pip (not recommended uses --break-system-packages)"
|
||||
echo "2. Install using your system package manager (recommended assuming I got the package names and package manager syntax right)"
|
||||
echo ""
|
||||
|
||||
read -rp "Use pip to install Python dependencies? (y/N): " usePip
|
||||
usePip="${usePip:0:1}"
|
||||
|
||||
if [[ "${usePip^}" == "Y" ]]; then
|
||||
installWithPip
|
||||
else
|
||||
packageManager=$(detectPackageManager)
|
||||
echo ""
|
||||
showPackageInstructions "$packageManager"
|
||||
echo ""
|
||||
echo "Please install the packages above, then press Enter to continue..."
|
||||
read -r
|
||||
fi
|
||||
|
||||
# Check dependencies again
|
||||
echo "Rechecking dependencies..."
|
||||
if ! checkDependencies; then
|
||||
echo "Some dependencies are still missing. Please install them manually."
|
||||
echo "You can run 'python3 check-dependencies.py' to see which ones are missing."
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "All dependencies satisfied!"
|
||||
|
||||
# Install Fenrir application files
|
||||
echo "Installing Fenrir application files..."
|
||||
|
||||
# Fenrir main application
|
||||
install -m755 -d /opt/fenrirscreenreader
|
||||
cp -af src/* /opt/fenrirscreenreader
|
||||
|
||||
ln -fs /opt/fenrirscreenreader/fenrir /usr/bin/fenrir
|
||||
|
||||
# tools
|
||||
install -m755 -d /usr/share/fenrirscreenreader/tools
|
||||
cp -af tools/* /usr/share/fenrirscreenreader/tools
|
||||
@ -45,22 +174,47 @@ else
|
||||
install -m644 -D "config/settings/settings.conf" /etc/fenrirscreenreader/settings/settings.conf
|
||||
fi
|
||||
|
||||
# Install systemd service if systemd is available
|
||||
if command -v systemctl &> /dev/null; then
|
||||
echo "Installing systemd service..."
|
||||
|
||||
# end message
|
||||
# Detect which service file to use
|
||||
if [ -f "/etc/arch-release" ] || [ -f "/etc/manjaro-release" ]; then
|
||||
serviceFile="autostart/systemd/Arch/fenrir.service"
|
||||
else
|
||||
serviceFile="autostart/systemd/Debian/fenrir.service"
|
||||
fi
|
||||
|
||||
if [ -f "$serviceFile" ]; then
|
||||
install -m644 "$serviceFile" /etc/systemd/system/fenrir.service
|
||||
systemctl daemon-reload
|
||||
echo "Systemd service installed. Enable with: sudo systemctl enable fenrir"
|
||||
else
|
||||
echo "Warning: Systemd service file not found: $serviceFile"
|
||||
fi
|
||||
else
|
||||
echo "Warning: Systemd not detected. Manual service setup may be required."
|
||||
fi
|
||||
|
||||
# Final message
|
||||
cat << EOF
|
||||
Installation complete.
|
||||
install path:/opt/fenrirscreenreader
|
||||
settings path:/etc/fenrirscreenreader
|
||||
|
||||
To test Fenrir:
|
||||
sudo fenrir
|
||||
Installation complete!
|
||||
=============================
|
||||
Install path: /opt/fenrirscreenreader
|
||||
Settings path: /etc/fenrirscreenreader
|
||||
|
||||
To have Fenrir start on system boot using systemd:
|
||||
download service file: https://raw.githubusercontent.com/chrys87/fenrir/master/autostart/systemd/Arch/fenrir.service
|
||||
move the service file to: /etc/systemd/system/fenrir.service
|
||||
sudo systemctl enable fenrir
|
||||
Next steps:
|
||||
1. Test Fenrir: sudo fenrir
|
||||
2. Enable autostart: sudo systemctl enable fenrir
|
||||
3. Configure audio (run both as user and root):
|
||||
- PulseAudio: /usr/share/fenrirscreenreader/tools/configure_pulse.sh
|
||||
- PipeWire: /usr/share/fenrirscreenreader/tools/configure_pipewire.sh
|
||||
|
||||
Pulseaudio users may want to run
|
||||
/usr/share/fenrirscreenreader/tools/configure_pulse.sh
|
||||
once from their user account, then once from the root.
|
||||
For help:
|
||||
- Documentation: https://git.stormux.org/storm/fenrir
|
||||
- Configuration: sudo fenrir --help
|
||||
- Dependency check: python3 check-dependencies.py
|
||||
|
||||
Fenrir installation successful!
|
||||
EOF
|
||||
|
@ -1,9 +1,16 @@
|
||||
daemonize
|
||||
evdev
|
||||
pexpect
|
||||
pyenchant
|
||||
pyperclip
|
||||
pyte
|
||||
pyudev
|
||||
pyxdg
|
||||
setproctitle
|
||||
daemonize>=2.5.0
|
||||
evdev>=1.4.0
|
||||
dbus-python>=1.3.0
|
||||
pyperclip>=1.8.0
|
||||
pyudev>=0.24.0
|
||||
pyte>=0.8.0
|
||||
setproctitle>=1.3.0
|
||||
setuptools>=65.0.0
|
||||
pexpect>=4.8.0
|
||||
|
||||
# Optional dependencies for enhanced functionality:
|
||||
# pyenchant>=3.2.0 # For spell checking commands
|
||||
# pyxdg>=0.28 # For XDG base directory support
|
||||
# PyGObject>=3.42.0 # For GStreamer sound driver
|
||||
# pyatspi>=2.40.0 # For AT-SPI input driver
|
||||
# speechd>=0.11.0 # For speech-dispatcher Python bindings
|
||||
|
22
setup.py
22
setup.py
@ -94,17 +94,17 @@ setup(
|
||||
data_files=dataFiles,
|
||||
|
||||
# Dependent packages (distributions)
|
||||
python_requires='>=3.6',
|
||||
python_requires='>=3.8',
|
||||
install_requires=[
|
||||
"evdev>=1.1.2",
|
||||
"evdev>=1.4.0",
|
||||
"daemonize>=2.5.0",
|
||||
"dbus-python>=1.2.8",
|
||||
"pyperclip",
|
||||
"pyudev>=0.21.0",
|
||||
"setuptools",
|
||||
"setproctitle",
|
||||
"pexpect",
|
||||
"pyte>=0.7.0",
|
||||
"dbus-python>=1.3.0",
|
||||
"pyperclip>=1.8.0",
|
||||
"pyudev>=0.24.0",
|
||||
"setuptools>=65.0.0",
|
||||
"setproctitle>=1.3.0",
|
||||
"pexpect>=4.8.0",
|
||||
"pyte>=0.8.0",
|
||||
],
|
||||
)
|
||||
|
||||
@ -113,12 +113,12 @@ if not forceSettingsFlag:
|
||||
# create settings file from example if not exist
|
||||
if not os.path.isfile('/etc/fenrirscreenreader/settings/settings.conf'):
|
||||
try:
|
||||
copyfile('config/fenrirscreenreader/settings/settings.conf', '/etc/fenrirscreenreader/settings/settings.conf')
|
||||
copyfile('config/settings/settings.conf', '/etc/fenrirscreenreader/settings/settings.conf')
|
||||
print('create settings file in /etc/fenrirscreenreader/settings/settings.conf')
|
||||
except OSError as e:
|
||||
print(f"Could not copy settings file to destination: {e}")
|
||||
else:
|
||||
print('settings.conf file found. It is not overwritten automatical')
|
||||
print('settings.conf file found. It is not overwritten automatically')
|
||||
|
||||
print('')
|
||||
print('To have Fenrir start at boot:')
|
||||
|
@ -5,4 +5,4 @@
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
|
||||
version = "2025.06.16"
|
||||
codeName = "testing"
|
||||
codeName = "installation-script-updates"
|
||||
|
Loading…
x
Reference in New Issue
Block a user