Skip to content

Commit

Permalink
kdePackages.kdenetwork-filesharing: hardcode runtime Samba dependenci…
Browse files Browse the repository at this point in the history
…es, add NixOS specific hint

Fixes #355008
  • Loading branch information
K900 committed Nov 10, 2024
1 parent 6fc560a commit ab8725b
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 15 deletions.
21 changes: 20 additions & 1 deletion pkgs/kde/gear/kdenetwork-filesharing/default.nix
Original file line number Diff line number Diff line change
@@ -1,14 +1,33 @@
{
lib,
mkKdeDerivation,
substituteAll,
samba,
shadow,
qtdeclarative,
}:
mkKdeDerivation {
pname = "kdenetwork-filesharing";

patches = [ ./smbd-path.patch ];
patches = [
(substituteAll {
src = ./dependency-paths.patch;
inherit samba;
usermod = lib.getExe' shadow "usermod";
})

# Provide a NixOS specific Samba hint
./samba-hint.patch
];

extraBuildInputs = [ qtdeclarative ];

# We can't actually install samba via PackageKit, so let's not confuse users any more than we have to
extraCmakeFlags = [ "-DSAMBA_INSTALL=OFF" ];

# Hardcoded as QStrings, which are UTF-16 so Nix can't pick these up automatically
postFixup = ''
mkdir -p $out/nix-support
echo "${samba} ${shadow}" > $out/nix-support/depends
'';
}
71 changes: 71 additions & 0 deletions pkgs/kde/gear/kdenetwork-filesharing/dependency-paths.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
diff --git a/samba/filepropertiesplugin/authhelper.cpp b/samba/filepropertiesplugin/authhelper.cpp
index 6cbbd90..ae1d696 100644
--- a/samba/filepropertiesplugin/authhelper.cpp
+++ b/samba/filepropertiesplugin/authhelper.cpp
@@ -49,7 +49,7 @@ ActionReply AuthHelper::isuserknown(const QVariantMap &args)
}

QProcess p;
- const auto program = QStringLiteral("pdbedit");
+ const auto program = QStringLiteral("@samba@/bin/pdbedit");
const auto arguments = QStringList({QStringLiteral("--debuglevel=0"), QStringLiteral("--user"), username });
p.setProgram(program);
p.setArguments(arguments);
@@ -88,7 +88,7 @@ ActionReply AuthHelper::createuser(const QVariantMap &args)
}

QProcess p;
- p.setProgram(QStringLiteral("smbpasswd"));
+ p.setProgram(QStringLiteral("@samba@/bin/smbpasswd"));
p.setArguments({
QStringLiteral("-L"), /* local mode */
QStringLiteral("-s"), /* read from stdin */
@@ -152,7 +152,7 @@ ActionReply AuthHelper::addtogroup(const QVariantMap &args)
QStringLiteral("-m"),
QStringLiteral("{%1}").arg(user.value()) });
#elif defined(Q_OS_LINUX) || defined(Q_OS_HURD)
- p.setProgram(QStringLiteral("/usr/sbin/usermod"));
+ p.setProgram(QStringLiteral("@usermod@"));
p.setArguments({
QStringLiteral("--append"),
QStringLiteral("--groups"),
diff --git a/samba/filepropertiesplugin/groupmanager.cpp b/samba/filepropertiesplugin/groupmanager.cpp
index a2ba851..d54f6ce 100644
--- a/samba/filepropertiesplugin/groupmanager.cpp
+++ b/samba/filepropertiesplugin/groupmanager.cpp
@@ -18,7 +18,7 @@ GroupManager::GroupManager(QObject *parent)
{
metaObject()->invokeMethod(this, [this] {
auto proc = new QProcess;
- proc->setProgram(QStringLiteral("testparm"));
+ proc->setProgram(QStringLiteral("@samba@/bin/testparm"));
proc->setArguments({QStringLiteral("--debuglevel=0"),
QStringLiteral("--suppress-prompt"),
QStringLiteral("--verbose"),
diff --git a/samba/filepropertiesplugin/sambausershareplugin.cpp b/samba/filepropertiesplugin/sambausershareplugin.cpp
index 4f6642e..86ea121 100644
--- a/samba/filepropertiesplugin/sambausershareplugin.cpp
+++ b/samba/filepropertiesplugin/sambausershareplugin.cpp
@@ -112,7 +112,8 @@ SambaUserSharePlugin::SambaUserSharePlugin(QObject *parent)
bool SambaUserSharePlugin::isSambaInstalled()
{
return QFile::exists(QStringLiteral("/usr/sbin/smbd"))
- || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"));
+ || QFile::exists(QStringLiteral("/usr/local/sbin/smbd"))
+ || QFile::exists(QStringLiteral("/run/current-system/sw/bin/smbd"));
}

void SambaUserSharePlugin::showSambaStatus()
diff --git a/samba/filepropertiesplugin/usermanager.cpp b/samba/filepropertiesplugin/usermanager.cpp
index 29238ce..ff20fcb 100644
--- a/samba/filepropertiesplugin/usermanager.cpp
+++ b/samba/filepropertiesplugin/usermanager.cpp
@@ -138,7 +138,7 @@ bool UserManager::canManageSamba() const
void UserManager::load()
{
auto proc = new QProcess(this);
- proc->setProgram(QStringLiteral("testparm"));
+ proc->setProgram(QStringLiteral("@samba@/bin/testparm"));
proc->setArguments({
QStringLiteral("--debuglevel=0"),
QStringLiteral("--suppress-prompt"),
14 changes: 14 additions & 0 deletions pkgs/kde/gear/kdenetwork-filesharing/samba-hint.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/samba/filepropertiesplugin/qml/MissingSambaPage.qml b/samba/filepropertiesplugin/qml/MissingSambaPage.qml
index 327c4a7..0564bc4 100644
--- a/samba/filepropertiesplugin/qml/MissingSambaPage.qml
+++ b/samba/filepropertiesplugin/qml/MissingSambaPage.qml
@@ -14,8 +14,7 @@ ColumnLayout {
QQC2.Label {
Layout.alignment: Qt.AlignHCenter
Layout.fillWidth: true
- text: xi18nc("@info", "The <application>Samba</application> file sharing service must be installed before folders can be shared.")
- explanation: i18n("Because this distro does not include PackageKit, we cannot show you a nice \"Install it\" button, and you will have to use your package manager to install the <command>samba</command> server package manually.")
+ text: xi18nc("@info", "The `services.samba.enable` and `services.samba.usershares.enable` NixOS options must be enabled before folders can be shared.")
wrapMode: Text.Wrap
}
Item {
14 changes: 0 additions & 14 deletions pkgs/kde/gear/kdenetwork-filesharing/smbd-path.patch

This file was deleted.

0 comments on commit ab8725b

Please sign in to comment.