From 774a9f0a7401cea542075fa9a5bb7c3aad668f87 Mon Sep 17 00:00:00 2001 From: Robin Davies Date: Thu, 19 May 2022 10:00:56 -0400 Subject: [PATCH] Fixes uninstall problems. --- CMakeLists.txt | 4 ++-- README.md | 2 +- debian/control | 4 ++-- debian/postinst | 2 +- debian/prerm | 2 +- docs/Installing.md | 4 ++-- docs/download.md | 4 ++-- docs/index.md | 2 +- src/AdminClient.cpp | 11 ++++------- src/CMakeLists.txt | 8 -------- src/ConfigMain.cpp | 41 ++++++++++++++++++++++++++++----------- src/DeviceIdFile.cpp | 19 +++++++++--------- src/JackConfiguration.cpp | 2 +- src/PiPedalModel.cpp | 10 +++++++++- 14 files changed, 65 insertions(+), 50 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c31133d..cc623d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,10 +1,10 @@ cmake_minimum_required(VERSION 3.16.0) project(pipedal - VERSION 0.9.10 + VERSION 0.9.11 DESCRIPTION "PiPedal Guitar Effect Pedal For Raspberry Pi" HOMEPAGE_URL "https://rerdavies.github.io/pipedal" ) -set (DISPLAY_VERSION "v0.9.10-rc-1") +set (DISPLAY_VERSION "v0.9.11-rc-2") set (CMAKE_INSTALL_PREFIX "/usr/") diff --git a/README.md b/README.md index 5667402..028e6cd 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -Download: v0.9.10-rc-1      Website: [https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal). +Download: v0.9.11-rc-2      Website: [https://rerdavies.github.io/pipedal](https://rerdavies.github.io/pipedal). Use your Raspberry Pi as a guitar effects pedal. Configure and control PiPedal with your phone or tablet. diff --git a/debian/control b/debian/control index ce587f0..7ce47cf 100644 --- a/debian/control +++ b/debian/control @@ -3,12 +3,12 @@ Depends: libstdc++6 (>= 9), libasound2 (>= 1.0.16), libc6 (>= 2.34), libgcc-s1 ( Description: IoT guitar effect for Raspberry Pi IoT guitar effect pedal for Raspberry Pi, with phone-friendly web interface. Homepage: https://github.com/rerdavies/pipedal -Maintainer: Robin Davies Source: pipedal Package: pipedal Pre-Depends: hostapd;authbind Priority: optional Section: sound -Version: 0.1.4 +Version: 0.9.11 Installed-Size: 15147 diff --git a/debian/postinst b/debian/postinst index 2c01f69..5b6d830 100755 --- a/debian/postinst +++ b/debian/postinst @@ -1,2 +1,2 @@ #!/usr/bin/bash -/usr/local/pipedalconfig --install +/usr/bin/pipedalconfig --install diff --git a/debian/prerm b/debian/prerm index 47f515a..12ec940 100755 --- a/debian/prerm +++ b/debian/prerm @@ -1,2 +1,2 @@ #!/usr/bin/bash -/usr/local/pipedalconfig --uninstall +/usr/bin/pipedalconfig --uninstall diff --git a/docs/Installing.md b/docs/Installing.md index b21c45a..d61f3ea 100644 --- a/docs/Installing.md +++ b/docs/Installing.md @@ -4,14 +4,14 @@ Download the most recent Debian (.deb) package for your platform: -- [Raspberry Pi OS (64-bit) v0.9.10-rc-1](https://github.com/rerdavies/pipedal/releases/download/v0.9.10-rc-1/pipedal_0.9.10_arm64.deb) +- [Raspberry Pi OS (64-bit) v0.9.11-rc-2](https://github.com/rerdavies/pipedal/releases/download/v0.9.11-rc-2/pipedal_0.9.11_arm64.deb) Install the package by running ``` sudo apt update cd ~/Downloads - sudo apt-get install ./pipedal_0.9.10_arm64.deb + sudo apt-get install ./pipedal_0.9.11_arm64.deb ``` After installing, follow the instructions in [Configuring PiPedal after Installation](Configuring.md). diff --git a/docs/download.md b/docs/download.md index f7053d0..cbab4ab 100644 --- a/docs/download.md +++ b/docs/download.md @@ -4,14 +4,14 @@ Download the most recent Debian (.deb) package for your platform: -- [Ubuntu or Raspberry Pi OS (64-bit)](https://github.com/rerdavies/pipedal/releases/download/v0.9.10-rc-1/pipedal_0.9.10_arm64.deb) v0.9.10-rc-1 +- [Ubuntu or Raspberry Pi OS (64-bit)](https://github.com/rerdavies/pipedal/releases/download/v0.9.11-rc-2/pipedal_0.9.11_arm64.deb) v0.9.11-rc-2 Install the package by running ``` sudo apt update cd ~/Downloads - sudo apt-get install ./pipedal_0.9.10_arm64.deb + sudo apt-get install ./pipedal_0.9.11_arm64.deb ``` Follow the instructions in [_Configuring PiPedal After Installation_](https://rerdavies.github.io/pipedal/Configuring.html) to complete the installation. diff --git a/docs/index.md b/docs/index.md index 180c834..67be215 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,7 +1,7 @@ -v0.9.10-rc-1 +v0.9.11-rc-2 Use your Raspberry Pi as a guitar effects pedal. Configure and control PiPedal with your phone or tablet. diff --git a/src/AdminClient.cpp b/src/AdminClient.cpp index 9d7dbd6..4f77e59 100644 --- a/src/AdminClient.cpp +++ b/src/AdminClient.cpp @@ -64,7 +64,8 @@ bool AdminClient::WriteMessage(const char *message) } catch (const std::exception &e) { - Lv2Log::error(SS("Failed to connect to PiPedal Admin service.")); + // Socket permissions require membership in pipedal_d group. + Lv2Log::error(SS("Failed to connect to PiPedal Admin service. " << e.what())); return false; } } @@ -168,7 +169,7 @@ void AdminClient::MonitorGovernor(const std::string &governor) bool result = WriteMessage(cmd.str().c_str()); if (!result) { // unexpected. Should throw exception on failure. - throw PiPedalException("Operation failed."); + Lv2Log::warning("Not monitoring CPU governor status."); } } void AdminClient::UnmonitorGovernor() @@ -180,9 +181,5 @@ void AdminClient::UnmonitorGovernor() std::stringstream cmd; cmd << "UnmonitorGovernor"; cmd << '\n'; - bool result = WriteMessage(cmd.str().c_str()); - if (!result) - { // unexpected. Should throw exception on failure. - throw PiPedalException("Operation failed."); - } + bool ignored = WriteMessage(cmd.str().c_str()); } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3eb5259..1a82cd3 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -8,14 +8,6 @@ set (USE_PCH 1) include(FindPkgConfig) -# apt install libsdbus-c++-dev -# apt install libsdbus-c++-bin -find_package(sdbus-c++ REQUIRED) - - - - - # Can't get the pkg_check to work. # pkg_check_modules(LIBNL3 "nl-genl-3") diff --git a/src/ConfigMain.cpp b/src/ConfigMain.cpp index ebaa2cf..256c86e 100644 --- a/src/ConfigMain.cpp +++ b/src/ConfigMain.cpp @@ -64,7 +64,7 @@ using namespace pipedal; #define PIPEDAL_P2PD_SERVICE "pipedal_p2pd" #define JACK_SERVICE "jack" -#define REMOVE_OLD_SERVICE 1 // Grandfathering: whether to remove the old shutdown service (now pipedaladmind) +#define REMOVE_OLD_SERVICE 0 // Grandfathering: whether to remove the old shutdown service (now pipedaladmind) #define OLD_SHUTDOWN_SERVICE "pipedalshutdownd" std::filesystem::path GetServiceFileName(const std::string &serviceName) @@ -101,27 +101,27 @@ void EnableService() { if (sysExec(SYSTEMCTL_BIN " enable " NATIVE_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to enable the " NATIVE_SERVICE " service."; + cout << "Error: Failed to enable the " NATIVE_SERVICE " service.\n"; } if (sysExec(SYSTEMCTL_BIN " enable " ADMIN_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to enable the " ADMIN_SERVICE " service."; + cout << "Error: Failed to enable the " ADMIN_SERVICE " service.\n"; } } void DisableService() { if (sysExec(SYSTEMCTL_BIN " disable " NATIVE_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to disable the " NATIVE_SERVICE " service."; + cout << "Error: Failed to disable the " NATIVE_SERVICE " service.\n"; } if (sysExec(SYSTEMCTL_BIN " disable " ADMIN_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to disable the " ADMIN_SERVICE " service."; + cout << "Error: Failed to disable the " ADMIN_SERVICE " service.\n"; } #if REMOVE_OLD_SERVICE if (sysExec(SYSTEMCTL_BIN " disable " OLD_SHUTDOWN_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to disable the " OLD_SHUTDOWN_SERVICE " service."; + cout << "Error: Failed to disable the " OLD_SHUTDOWN_SERVICE " service.\n"; } #endif } @@ -130,24 +130,24 @@ void StopService(bool excludeShutdownService = false) { if (sysExec(SYSTEMCTL_BIN " stop " NATIVE_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to stop the " NATIVE_SERVICE " service."; + cout << "Error: Failed to stop the " NATIVE_SERVICE " service.\n"; } if (!excludeShutdownService) { if (sysExec(SYSTEMCTL_BIN " stop " ADMIN_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to stop the " ADMIN_SERVICE " service."; + cout << "Error: Failed to stop the " ADMIN_SERVICE " service.\n"; } #if REMOVE_OLD_SERVICE if (sysExec(SYSTEMCTL_BIN " stop " OLD_SHUTDOWN_SERVICE ".service") != EXIT_SUCCESS) { - cout << "Error: Failed to stop the " OLD_SHUTDOWN_SERVICE " service."; + cout << "Error: Failed to stop the " OLD_SHUTDOWN_SERVICE " service.\n"; } #endif } if (sysExec(SYSTEMCTL_BIN " stop " JACK_SERVICE ".service") != EXIT_SUCCESS) { - throw PiPedalException("Failed to stop the " JACK_SERVICE " service."); + cout << "Error: Failed to stop the " JACK_SERVICE " service.\n"; } } @@ -527,9 +527,24 @@ static void PrepareDeviceidFile() { DeviceIdFile deviceIdFile; - deviceIdFile.deviceName = "PiPedal-" + RandomChars(2); + deviceIdFile.deviceName = "PiPedal"; deviceIdFile.uuid = MakeUuid(); deviceIdFile.Save(); + } else { + DeviceIdFile deviceIdFile; + if (deviceIdFile.deviceName == "" || deviceIdFile.uuid == "") + { + if (deviceIdFile.deviceName == "") + { + deviceIdFile.deviceName = "PiPedal"; + } + if (deviceIdFile.uuid == "") + { + deviceIdFile.uuid = MakeUuid(); + } + deviceIdFile.Save(); + } + } } @@ -539,6 +554,10 @@ void Install(const std::filesystem::path &programPrefix, const std::string endpo { throw PiPedalException("Failed to create audio service group."); } + if (sysExec(GROUPADD_BIN " -f " SERVICE_GROUP_NAME) != EXIT_SUCCESS) + { + throw PiPedalException("Failed to create pipedald service group."); + } PrepareDeviceidFile(); InstallJackService(); diff --git a/src/DeviceIdFile.cpp b/src/DeviceIdFile.cpp index ecccddb..027f0cc 100644 --- a/src/DeviceIdFile.cpp +++ b/src/DeviceIdFile.cpp @@ -39,16 +39,16 @@ const char DeviceIdFile::DEVICEID_FILE_NAME[] = "/etc/pipedal/config/device_uuid void DeviceIdFile::Load() { - ifstream f; - - f.open(DEVICEID_FILE_NAME); - if (!f.is_open()) { - throw invalid_argument("Can't open file " + std::string(DEVICEID_FILE_NAME)); - } + ifstream f; - std::getline(f, uuid); - std::getline(f, deviceName); + f.open(DEVICEID_FILE_NAME); + if (f.is_open()) + { + std::getline(f, uuid); + std::getline(f, deviceName); + } + } } void DeviceIdFile::Save() { @@ -67,10 +67,9 @@ void DeviceIdFile::Save() { throw logic_error("Group not found: pipedal_d"); } - std::ignore = chown(path.c_str(),-1,group_->gr_gid); + std::ignore = chown(path.c_str(), -1, group_->gr_gid); std::ignore = chmod(path.c_str(), S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH); - f << uuid << endl; f << deviceName << endl; } diff --git a/src/JackConfiguration.cpp b/src/JackConfiguration.cpp index b211ac7..2d8565f 100644 --- a/src/JackConfiguration.cpp +++ b/src/JackConfiguration.cpp @@ -163,7 +163,7 @@ void JackConfiguration::Initialize() AddPorts(client, &this->outputAudioPorts_, "system", JACK_DEFAULT_AUDIO_TYPE, JackPortIsInput); AddPorts(client, &this->inputMidiPorts_, "system", JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput); AddPorts(client, &this->outputMidiPorts_, "system", JACK_DEFAULT_MIDI_TYPE, JackPortIsInput); - isValid_ = true; + isValid_ = (this->inputAudioPorts_.size() > 0 && this->outputAudioPorts_.size() > 0); this->errorStatus_ = ""; jack_client_close(client); } diff --git a/src/PiPedalModel.cpp b/src/PiPedalModel.cpp index 0c375c1..5e7d1f7 100644 --- a/src/PiPedalModel.cpp +++ b/src/PiPedalModel.cpp @@ -688,7 +688,15 @@ void PiPedalModel::UpdateDnsSd() DeviceIdFile deviceIdFile; deviceIdFile.Load(); - avahiService.Announce(webPort,deviceIdFile.deviceName,deviceIdFile.uuid,"pipedal"); + if (deviceIdFile.deviceName != "" && deviceIdFile.uuid != "") + { + avahiService.Announce(webPort,deviceIdFile.deviceName,deviceIdFile.uuid,"pipedal"); + } else { + // device_uuid file is written at install time. This warning is harmless if you're debugging. + // Without it, we can't pulblish the website via dnsDS. + // Run "pipedalconfig --install" to create the file. + Lv2Log::warning("Cant read device_uuid file. dnsSD announcement skipped."); + } } void PiPedalModel::SetWifiDirectConfigSettings(const WifiDirectConfigSettings &wifiDirectConfigSettings)