Ubuntu run script as user when usb inserted - ubuntu-16.04

I want to automatically attach any inserted usb drive to a virtual machine that is run inside ubuntu under particular user login.
To do that, I've set up the following udev rule(from [1], [2]):
KERNEL=="sd?", ENV{ID_BUS}=="usb", SUBSYSTEM=="block", RUN+="/bin/su me -c '/home/me/automout.sh'"
To test udev working, the automount.sh script was done as following:
#!/bin/bash
echo "$devpath">/home/me/2
When run manually, the empty file is created inside home, but when a usb is inserted, nothing happens. What may be the cause of that?

Indeed, as MiiinimalLogic suggested, the problem was owner of the script.
If you want to run a script as another user via su, the script should belong to root.
The file may still reside in user's home.

Related

Mix can't access a directory it just created to run the Phoenix server?

I am trying to run the Phoenix demo application per the official guide from an Administrator PowerShell session where I am the admin on my machine. I have installed every dependency but when I try to run mix phx.server, it tells me that it couldn't remove a file because (it's) not the owner. It seems odd that the using mix phx.new hello wouldn't have full control over this file that it just created. See the following output from my PowerShell session:
PS C:\users\Isaiah Nelson\Lab> cd hello
PS C:\users\Isaiah Nelson\Lab\hello> mix ecto.create
Compiling 13 files (.ex)
Generated hello app
The database for Hello.Repo has been created
PS C:\users\Isaiah Nelson\Lab\hello> mix phx.server
** (File.Error) could not remove file "c:/users/Isaiah Nelson/Lab/hello/_build/dev/lib/hello/priv": not owner
(elixir) lib/file.ex:1128: File.rm!/1
(mix) lib/mix/utils.ex:452: Mix.Utils.symlink_or_copy/2
(mix) lib/mix/project.ex:644: Mix.Project.build_structure/2
(mix) lib/mix/tasks/compile.all.ex:21: Mix.Tasks.Compile.All.run/1
(mix) lib/mix/task.ex:331: Mix.Task.run_task/3
(mix) lib/mix/tasks/compile.ex:96: Mix.Tasks.Compile.run/1
(mix) lib/mix/task.ex:331: Mix.Task.run_task/3
(mix) lib/mix/tasks/app.start.ex:58: Mix.Tasks.App.Start.run/1
I have since tried scouring the documentation on the Mix Task for phx.server but found no clues why this has happening. I have also even tried to set the 'hello' directory owner to Administrators, my user (Isaiah Nelson) and 'Everyone' with full control and inherited permissions but still I cannot run the demo app without getting this error. Is this a issue with Mix creating files in Windows via Powershell or is this some other Windows file permission issue? Either way, how I might fix it so I can run the demo?
If there is no reason to run phx app as administrator, you could "take" ownership recursively of the folder where project is located. Right click on folder then Properties > Securty > Advanced (button) then in new window Observe Owner at the top, click on "Change" link and find&pick your username. Click ok to close search dialog, then select "Replace all child object permission entries with inheritable permission entries from this object". Finally click Ok (or Apply) and try to run app without elevated rights.
EDIT
I found that in some cases editing code from WSL and later without WSL can mix access rights on file system leading to this or similar behavior, e.g. can't move folder to different location. If this is your case, then I suggest you to decide where your dev environment is, in WSL or in Win.

Samba Share Not Writable (Linux)

I am currently running a fresh install of CentOS 7 (64-bit). This machine isn't used for anything except for storage via Samba. However, for some strange reason, I can't see to get the share to be writable through windows. With the drive mapped, I can read the file lists and browse (even accessing files), but I cannot write any new files.
The steps that I took was to install samba via yum. I added a system user, bdawson, and then added that same user as a Samba user. I then logged in as that user and make a directory called storage (path being /home/bdawson/Storage).
I then edited my Samba config and added the following:
[Storage]
valid users = bdawson,#bdawson
path = /home/bdawson/Storage
write list = bdawson,#bdawson
/home/bdawson was chown -R'd to be owned by bdawson:bdawson. File permissions are set to 0755 for both /home/bdawson and /home/bdawson/Storage.
At this point, I am not sure what I'm doing wrong that is preventing me from being able to write. This same configuration worked just fine on a different machine, so I'm at a complete loss. (Side note: Samba logs aren't showing any issues and watching the Samba connections via Webmin does show that I am connecting and reading from the share, but attempts to write to it fail saying I need permission.)
After a lot of digging, I discovered this was due to a missing SELinux label. This was not an issue with my Ubuntu share, since Ubuntu doesn't use SELinux.

Raspberry pi, starting program via LXDE fails, file not found

I'm trying to start Libreoffice impress automatically once my raspberry pi has started up.
I created:
.config/lxsession/LXDE/autostart
and added my presentation:
sudo libreoffice -show /home/pi/test.odp
When i execute the command in a terminal, all works fine.
However the autostart doesn't seem to work at boot. Libreoffice starts, but then says it can't find the file...
The file .config/lxsession/LXDE/autostart is used to start applications without root privileges. Therefore, you should remove "sudo" from your code:
libreoffice -show /home/pi/test.odp
That should work as intended. If your presentation need root privileges (I don't see why it would, but anyway), you could use gksudo on your code, then at boot you would see a window asking for your password to proceed. The new code would look like this:
gksudo libreoffice -show /home/pi/test.odp
Important: please note you should not try to open a GUI enabled application with sudo or root privileges, as this can have bad consequences, such as modifying permissions and ownership on program files, which could lead to malfunctioning. If you really need to open a GUI application as root, always use gksudo or gksu.
On the other hand, if you really need to open a program at boot with root privileges, you should look into using the file /etc/rc.local or the cron service for that.

Moving MongoDB's data folder?

I have 2 computers in different places (so it's impossible to use the same wifi network).
One contains about 50GBs of data (MongoDB files) that I want to move to the second one which has much more computation power for analysis. But how can I make MongoDB on the second machine recognize that folder?
When you start mongodprocess you provide an argument to it --dbpath /directory which is how it knows where the data folder is.
All you need to do is:
stop the mongod process on the old computer. wait till it exits.
copy the entire /data/db directory to the new computer
start mongod process on the new computer giving it --dbpath /newdirectory argument.
The mongod on the new machine will use the folder you indicate with --dbpath. There is no need to "recognize" as there is nothing machine specific in that folder, it's just data.
I did this myself recently, and I wanted to provide some extra considerations to be aware of, in case readers (like me) run into issues.
The following information is specific to *nix systems, but it may be applicable with very heavy modification to Windows.
If the source data is in a mongo server that you can still run (preferred)
Look into and make use of mongodump and mongorestore. That is probably safer, and it's the official way to migrate your database.
If you never made a dump and can't anymore
Yes, the data directory can be directly copied; however, you also need to make sure that the mongodb user has complete access to the directory after you copy it.
My steps are as follows. On the machine you want to transfer an old database to:
Edit /etc/mongod.conf and change the dbPath field to the desired location.
Use the following script as a reference, or tailor it and run it on your system, at your own risk.
I do not guarantee this works on every system --> please verify it manually.
I also cannot guarantee it works perfectly in every case.
WARNING: will delete everything in the target data directory you specify.
I can say, however, that it worked on my system, and that it passes shellcheck.
The important part is simply copying over the old database directory, and giving mongodb access to it through chown.
#!/bin/bash
TARGET_DATA_DIRECTORY=/path/to/target/data/directory # modify this
SOURCE_DATA_DIRECTORY=/path/to/old/data/directory # modify this too
echo shutting down mongod...
sudo systemctl stop mongod
if test "$TARGET_DATA_DIRECTORY"; then
echo removing existing data directory...
sudo rm -rf "$TARGET_DATA_DIRECTORY"
fi
echo copying backed up data directory...
sudo cp -r "$SOURCE_DATA_DIRECTORY" "$TARGET_DATA_DIRECTORY"
sudo chown -R mongodb "$TARGET_DATA_DIRECTORY"
echo starting mongod back up...
sudo systemctl start mongod
sudo systemctl status mongod # for verification
quite easy for windows, just move the data folder to the target location
run cmd
"C:\your\mongodb\bin-path\mongod.exe" --dbpath="c:\what\ever\path\data\db"
In case of Windows in case you need just to configure new path for data, all you need to create new folder, for example D:\dev\mongoDb-data, open C:\Program Files\MongoDB\Server\6.0\bin\mongod.cfg and change there path :
Then, restart your PC. Check folder - it should contains new files/folders with data.
Maybe what you didn't do was export or dump the database.
Databases aren't portable therefore must be exported or created as a dumpfile.
Here is another question where the answer is further explained

postgresql installation failed

I tried to install postgresql 8.4 in my windows 7 (64 bit). But it fails with following messages in log
Initialising the database cluster (this may take a few minutes)...
Executing cscript //NoLogo "C:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "****" "C:\PostgreSQL\8.4" "C:\PostgreSQL\data" 5432 "DEFAULT"
Script exit code: 1
Script output:
CScript Error: Can't find script engine "VBScript" for script "C:\PostgreSQL\8.4\installer\server\initcluster.vbs".
Script stderr:
Program ended with an error exit code
Error running cscript //NoLogo "C:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "****" "C:\PostgreSQL\8.4" "C:\PostgreSQL\data" 5432 "DEFAULT" : Program ended with an error exit code
Problem running post-install step. Installation may not complete correctly
The database cluster initialisation failed.
Creating Uninstaller
Creating uninstaller 25%
Creating uninstaller 50%
Creating uninstaller 75%
I have googled about this and run the command 'regsvr32 vbscript.dll' and it shows the message 'DllRegisterServer in vbscript.dll is succeeded', but it haven't solved my issue.
Also I set the default value for {B54F3741-5B07-11cf-A4B0-00AA004A55E8} in registry to the file path of vbscript.dll, but it also haven't solved my issue.
How to fix this issue?
Following link solve my issue
http://www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/
The article text:
I’ll keep this one short and sweet. For those of you that have tried
to install PostgreSQL (mine was 8.3.7-1) on Windows Vista and got the
error Database Cluster Initialisation Failed error at the end of the
install, read this.
The problem is that Vista has some safety features associated with
setting permissions on the Program Files folder. Basically, even if
you are an admin, you can’t change permissions on some folders like
Program Files and Windows folder itself. This causes initdb to be
unable to create some folders and the database cluster. What this
means for you is that you need to install PostgreSQL in another folder
that is not inside Program Files.
By the way, if you have forgotten your Postgres account password while
installing the first time, just open a Command Prompt in Vista (If you
don’t know how, Google for it). Then type the command “net user”. You
will see a list of users on your computer. Find Postgre’s account.
It’s usually “postgres“. Then you need to change its password by
typing “net user postgres new_password” where new_password is… well, a
new password for the account. You will be needing that postgres
account during install. You will need admin privileges to do this
change however.
Firstly, uninstall any failed installations. Use the Control Panel or
the PostgreSQL installer in the install folder.
During the install, you will be prompted to choose where you want to
install the program. Just select a location in another place. Like
“C:\PostgreSQL” or something similar. It may even be on your desktop.
But not inside Program Files. Not inside Windows folder. However, it’s
not as easy. Bear with me.
After the install, you will still see that darned error message (or
something like non-fatal error occured). Do not despair! (For Windows
Power Users, we are just assigning Full Control permission to Postgres
account on the new PostgreSQL install folder). For other users, read
on if you don’t know how to do it.
Go to where you just installed PostgreSQL. In this case, the C:
drive. There, right-click on the folder (usually called PostgreSQL),
and go to Properties – Security tab. Click on the Edit button. You
will now see some usernames and other stuff. Click on the Add button.
In the “Enter the object names to select” box, enter “postgres” and
press Check. Postgres’ user account should appear there. Click on Ok.
Now from the “Group or Usernames” box, select the Postgres account. In
the window below, with lots of checkboxes, assign permission “Full
Control” in the Allow Column to it. Note, if you don’t want to allow
full control, just give it read/write. But I just went ahead and gave
it Full Control. (I was tired and annoyed. The “World’s most advanced
open source database” had failed to install!). Click on Ok and wait a
bit for permissions to be applied.
Then, just do a re-install. Do not uninstall anything. Just run the
setup again. It’ll say that a PostgreSQL install folder already exists
and other stuff. Just click on Next until the install finishes. If you
see “file cannot be copied” errors, click on the “ignore” button when
needed.
That’s it. PostgreSQL should be up and running on Vista now. Hope it
works for you too as it did for me, and that my guide is helpful to
anybody. If it works, or if you have other solutions, let us know.
Thanks for reading! :)
I got the same result installing "postgresql-9.2.3-1-windows-x64.exe" on Windows 7 Enterprise
and the problem get solved when I change the installation path.
Try to install into "c:\postgresql" instead of "c:\program files\Postgresql"
Good luck
For me the problem was that PATH variable did not have C:\Windows\system32 and so it did not find ICACLS command to change folder permissions. So the solution is to add C:\Windows\system32 to system PATH variable (if it does not contain it already):
Control Panel -> System -> Advanced System Settings -> Advanced -> Environment Variables
Under "System variable" find and select "Path"
Click "Edit..."
Now if value does not contain path to system32 append string ;C:\Windows\system32 (or wherever your windows path is)
I've pulled shin's link from the google cache:
Original link:
http://www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/
Cached link:
http://webcache.googleusercontent.com/search?q=cache:RXu-5-ZzfcgJ:www.geekscribes.net/blog/2009/04/22/postgresql-database-cluster-initialisation-failed-solution/+&cd=3&hl=ro&ct=clnk
PostgreSQL Database Cluster Initialisation Failed Solution
I’ll keep this one short and sweet. For those of you that have tried to install PostgreSQL (mine was 8.3.7-1) on Windows Vista and got the error Database Cluster Initialisation Failed error at the end of the install, read this.
The problem is that Vista has some safety features associated with setting permissions on the Program Files folder. Basically, even if you are an admin, you can’t change permissions on some folders like Program Files and Windows folder itself. This causes initdb to be unable to create some folders and the database cluster. What this means for you is that you need to install PostgreSQL in another folder that is not inside Program Files.
By the way, if you have forgotten your Postgres account password while installing the first time, just open a Command Prompt in Vista (If you don’t know how, Google for it). Then type the command “net user”. You will see a list of users on your computer. Find Postgre’s account. It’s usually “postgres“. Then you need to change its password by typing “net user postgres new_password” where new_password is… well, a new password for the account. You will be needing that postgres account during install. You will need admin privileges to do this change however.
Firstly, uninstall any failed installations. Use the Control Panel or the PostgreSQL installer in the install folder.
During the install, you will be prompted to choose where you want to install the program. Just select a location in another place. Like “C:\PostgreSQL” or something similar. It may even be on your desktop. But not inside Program Files. Not inside Windows folder. However, it’s not as easy. Bear with me.
After the install, you will still see that darned error message (or something like non-fatal error occured). Do not despair! (For Windows Power Users, we are just assigning Full Control permission to Postgres account on the new PostgreSQL install folder). For other users, read on if you don’t know how to do it.
Go to where you just installed PostgreSQL. In this case, the C: drive. There, right-click on the folder (usually called PostgreSQL), and go to Properties – Security tab. Click on the Edit button. You will now see some usernames and other stuff. Click on the Add button. In the “Enter the object names to select” box, enter “postgres” and press Check. Postgres’ user account should appear there. Click on Ok.
Now from the “Group or Usernames” box, select the Postgres account. In the window below, with lots of checkboxes, assign permission “Full Control” in the Allow Column to it. Note, if you don’t want to allow full control, just give it read/write. But I just went ahead and gave it Full Control. (I was tired and annoyed. The “World’s most advanced open source database” had failed to install!). Click on Ok and wait a bit for permissions to be applied.
Then, just do a re-install. Do not uninstall anything. Just run the setup again. It’ll say that a PostgreSQL install folder already exists and other stuff. Just click on Next until the install finishes. If you see “file cannot be copied” errors, click on the “ignore” button when needed.
That’s it. PostgreSQL should be up and running on Vista now. Hope it works for you too as it did for me, and that my guide is helpful to anybody. If it works, or if you have other solutions, let us know. Thanks for reading!
Solution:
• Uninstall PostgreSQL
• Run command: net user postgres /delete
• Click: Control Panel -> User Accounts -> Configure advanced user profile properties -> delete all “Unknown User” instances that seem to be left from PostgreSQL installation.
• Run: compmgmt.msc -> Click Local Users and Groups -> Users -> New User… -> User name: postgres, Password: postgrespass -> Create
• Run: compmgmt.msc -> Click Local Users and Groups -> Users -> postgres ->Member of -> Add… -> Administrators -> OK
• copy the PostgreSQL installer postgresql-8.4.9-1-windows.exe to C:\
• Run: runas /user:postgres cmd.exe -> cd \ -> postgresql-8.4.9-1-windows.exe -> installed successfully without errors. Checked data folder and confirmed files created successfully.
• Run: compmgmt.msc -> Local Users and Groups -> Users -> postgres -> Member of -> Administrators -> Remove
• Run: compmgmt.msc -> Local Users and Groups -> Users -> postgres -> Member of -> Add… -> Power Users -> OK
Your Windows install is a little borked, and you will need to re-register the VBScript engine to get the installer to run.
Edit: I'm blind, the post author had already tried this.
See:
http://wiki.postgresql.org/wiki/Running_%26_Installing_PostgreSQL_On_Native_Windows#The_installer_exits_with_a_runtime_installation_error.3F
I had the same problem when trying to install PostgreSQL 9.3.5-3 on a Windows 7 x64 machine (not joined to a domain) in a folder, created on the root, with full access to everybody. The problem was solved by not using ä in my password, so avoid using non-English characters in your password.
This message still occurs in Postgres v9.3.1.1.
For me, the problem was running the installer under the "Administrator" account. This doesn't work. Run it under an administrator account, avoiding the built-in "Administrator" account.
I don't really know what it's usually called, but it's the one that already exists on a fresh install; the one that cannot be changed to a Standard User; the one whose profile is stored in C:\Users\Administrator. Turns out it was a bad idea using this account; learned it the hard way.
(Windows Server 2008 R2 64-bit)
Hey guys the answer is very simple just install postgresql on another folder outside program files. it prompts a non fatal error and proceeds to with the installation...
I have solved the same problem on Windows Server 2003 and postgres 9.2.9-3 by creating directory for installation beforehand, and giving full access on it to group "Users".
The answer is very simple, move the downloaded .exe file to some other folder . for ex: c:\postgres and try to install it.
your issue is due to some admin privilege issues
There seem to be many reasons cause the installation fail.
In my case, I'm using Windows 10 home edition, which has no advance user group control,
so a lot of solutions above doesn't work for me. And I guess this is why the installation fails.
What I do is just using BigSQL's installer instead of EnterpriceDB's installer,
Choose the second installer in posgresql download center
Or visit BigSQL directly.
After some struggle I came across this post. I struggled some more time and I think I finally figured it out with the help of all the invaluable input from my predecessors in this post.
My case
It's November 2018.
PostgreSQL 11.1 Winodws-x64 from EnterpriseDB as suggested by postgresql.org
Tried to install on Windows 10 (both Home and Professional)
I tried several constellations and boiled down the process to this:
Pre-installation
Uninstall any failed installations.
Add a local user "postgres" (lowercase worked for me) to your computer, assign a SIMPLE password and administrative rights. Do avoid special characters at all expenses, stick with english letters (upper and lowercase) and numbers only.
Add a folder on your computer OUTSIDE the "C:\Program Files" or Windows folder. I chose C:\PostgreSQL
Assign full control over the above folder to the postgres account.
Installation
Run the installer (postgresql-11.1-1-windows-x64.exe in my case)
use the above password and folder when prompted (not the default folder)
Post-installation
For security reasons you should now assign a proper password to the windows-user "postgres" and remove administrative rights from the account.
Test your installation by running pgAdmin and connecting to your server. However, the password for the postgres user you need to connect to the server will still be the simple one you used earlier. You may change it within pgAdmin by selecting the postgres database left, choose Tools -> Query Tool and type ALTER USER postgres WITH PASSWORD '4wligzo748o$%&'; or whatever. Execute with the flash symbol or F5.
But maybe this is wrong altogether and you should rather run a linux vm with postgreSQL server.
Struggling with this problem for days. Finally got help from the EDB team
My problem got solved by doing the following steps :
1) Open the command prompt and go to the following directory:
cd "C:\Program Files\PostgreSQL\10\bin"
2) Once you are inside this "C:\Program Files\PostgreSQL\10\bin" directory execute the following command:
.\initdb.exe -D "C:\Program Files\PostgreSQL\10\data"
3) At the end of this command you will be promoted to execute a pg_ctl command to start the Postgres cluster. Please execute the command and once you get a message as the server started you are all set to use the Postgres database.
Note: Instead of 10 user whatever version you have installed. If the pg_ctl command in the third step gives an error after running it in \bin directory, then try running it in \data directory. After the above process re-run the installer.
I know it is not the the solution but installing 32 bit of Postgres, worked for me
I had the same problem when trying to install PostgreSQL 9.6.2 on a Windows 7 32 bit machine,but i got solution,first just uninstall the installed postgres,then delete the postgres folder from 'c' drive,delete the entry from temp file which resides in "C:\Users\AppData\Local\Temp".Then again installed postgres 9.6.2 that installed successfully.
Had this same problem trying to install on my company computer (PC running Windows 7). If you are not admin on your computer, you need to install it within your personal "User" folder (not in the "Program Files" folder(s) at the root).
If you still can't access Postgres:
Once you'd installed it under your "User" folder, use the 'Run' program and type in "services.msc" and hit enter. In the window that pops up, go down to your postgres installation, right-click and go to "properties". In the "Log On" tab, select "Local System account" then go back to the "General" tab and click "Start". It should boot after that.
After this, I was able to run "pgAdmin" and access the database (after entering the password I used during installation).
I had the same problem today when installing postgres 9.6.19 on windows 10.
Solution: Neither the installation path nor the windows path variable may contain a blank! Near to the end of the installer log file (found in wondows %temp% dir with a name like bitrock_installer_16156.log) i found:
Script stderr: "\UnxUtils\usr\local\wbin\";"C:\Program" kann
syntaktisch an dieser Stelle nicht verarbeitet werden.
where the installation directory i set as well as my windows %PATH% variable contained
C:\Program Files\
Workaround:
open a command prompt as administrator and type:
set path=C:\WINDOWS\system32
PostgreSQL-9.6.10-1-win64-bigsql.exe
And then of course choose a path not containing a blank.
That did it for me.
I encountered an issue where a username with a space in it on windows fails the postgres installation.
To test:
Reinstalled windows 10 home (restored)
Made a user account without the space
Postgres installed successfully
Very frustrating...
check the services: if any folder there postgres related stop it, and change to disable mode.
check regedit: HKEY_LOCAL_MACHINE, HKEY_CURRENT_USER -> software -> remove postgres folder if exists.
In system environment variable: TEMP path location, remove the TEMP folder for both user and system. and Rename the TEMP to TEMP1 or something..
In system environment variable: remove path for postgres if it exists.
Now change the location of postgres.exe file to another drive.
Restart the system
Then Run postgres.exe
create a new installation directory for postgres and put /data outside.
the easiest way i solve this was:
1.- uninstall if you have already installed
2.- delete all files with failed instalations
3.- start windows in secure mode
4.- run installer in secure mode (it pops a warning but ignore) and restart
and that's it when restarted the service was running ok and everything works fine