c++ - Monitor mount folder in linux - c++

I would like to monitor and detect if a new file is created on a mounted folder in linux using c++.
I understand that inotify can be used only if the folder is local.

None of the common remote filesystems support notification.
The only general way to monitor a remote directory is via polling.

Related

Is it possible to download file or folders from AWS Linux EC2 instance to local Windows 10 machine?

I am having one Linux Ec2 instance on AWS and my local machine is Windows 10 (64-bit).
I want to download some files or folders from Ec2 to location windows machine.
I am not sure whether it is possible or not? if yes, how we can do that.
thanks.
I tried this it worked for me.
Download https://mobaxterm.mobatek.net/ its an Enhanced terminal for Windows.
You can link your EC2 instance directly via SSH its pretty simple to set up. Just follow the instuctions they've given. Once linked, its super easy to export, import, create files and folders all via mobaxterm.
folders in mobaxterm:
Got the command to Copy from Windows to Linux.
First you need to install putty (putty-64bit-0.74-installer.msi) on your windows machine
The Command is as follow it will copy the folder(e.g. DokerAutomationResult) to the windows machine from AWSLinux machine.
pscp -r ubuntu#xx.xxx.xx.xx:/home/ubuntu/DokerAutomationResult ./
[pscp -r ubuntu#(ipAddress):(locationOfLinuxFileLocation /(locationToCopyInWInodws) ]
For better Understanding:
https://www.youtube.com/watch?v=Sc0f-sxDJy0&ab_channel=Liv4IT
Yes it is possible to download files from ec2 linux instance to local system.
You can use scp -i key user#ip add:/file location which you want to download.
. will download file in your current location on local system

Symbolic link on Amazon File Share System FSx - Windows EC2

I am currently hosting my ASP.Net web application on AWS. I have searched for the best aws storage options for windows environment. I have found that aws File shares system FSx is suitable for our needs.
One of the required features in my app is to be able to create symbolic link on the network shared folder. On my local environment I have active directory and network shared folder. I have applied those steps to enable symbolic link on my pc with windows 10 and it works:
1- Enable remote to remote symbolic link using this cmd command:
fsutil behavior set SymlinkEvaluation R2R:1
2- Check if the feature is enabled:
fsutil behavior query SymlinkEvaluation
the result is:
Local to local symbolic links are enabled.
Local to remote symbolic links are enabled.
Remote to local symbolic links are disabled.
Remote to remote symbolic links are enabled.
3- apply this command for gain access to the target directory:
net use y: "\\share\Public\" * /user:UserName /persistent:yes
4- create symbolic link using this command:
mklink /D \\share\Public\Husam\symtest \\share\Public
It works fine on my local network with active directory.
On aws I have EC2 windows VM joined aws managed domain. The same domain I created the FSx with. I logged in to the machine with domain administrator. I gave security permission (share and security) to this uses on the shared folder using Windows File Shares GUI Tool.
When I try to create the symbolic link I get: Access Denied
mklink /d \\fs-432432fr34234a.myad.com\share\Husam\slink \\fs-432432fr34234a.myad.com\share
Access Denied
any suggestions? is there a way to add this permission in active directory?
It looks to me like mklink is not supported by amazon fsx. I can mklink to my heart's content on my ebs volume but not on the fsx. Also when I mount the share in linux ln -s test1 test2
ln: failed to create symbolic link 'test2': Operation not supported
I found a comment that said "in the GPO you can Change it in "Computer Configuration > Administrative Templates > System > Filesystem" and configure "Selectively allow the evaluation of a symbolic link" – deru May 11 '17 at 6:45." I don't think it will help because I can mklink on ebs.
This is a problem for me as my asp.net web app also uses mklink during it's setup. My solution is to use a windows container for my web app and then use docker-compose to put the links in to the FSx file system. I thought that I wanted to do the docker-compose build on the fsx volume. This was a terrible idea though because the ebs volume is way faster.
I was getting the same error messages reported above. I consulted with the AWS contacts available to the company I work for, and they confirmed that as of right now, FSx for Windows File Server does not support symbolic links.

Visual Studio 2017 remote code synchronization

I've been developing a c++ project on linux remote server these days, however, I'd like to do all the coding things on my windows machine using VS2017. So I need some kind of synchronization tool to synchronize the codes such that whenever I save the file in VS2017 the changes can be synchronized to the linux server immediately. Is there any tool or VS2017 extension can help me?
I don't want to use git as it may cause a lot meaningless commits.
Several ideas:
Cygwin. Compile your code on the emulated Linux/Unix environment for local testing and use Visual Studio as your IDE. Do final testing on the Linux box with less frequency. Can be combined with any of the ideas below.
Git, but with a different branch for commits. Do a squashed merged for all meaningful commits or pull requests to master.
Samba. Mount your Linux file system on your Windows PC or vice versa. Copy files between Windows and Linux as if was a network drive.
Local VM. Run Linux in a local Virtual Machine with VMWare or VirtualBox. Drag and drop files between Windows host and Linux guest OS using the host/guest extensions stuff. Then you can dink around with deploying to the real Linux machine later.
Personally, for my open source projects where I'm too lazy to boot into Linux locally to test code before deploying to AWS, I basically do some combination with the above.
And #5 of course is: Dropbox. :( I use OneDrive and a Python script on Linux to pull down files.

Google Cloud Single-Node File Server add another disk

I made a fairly standard deployment of the Single-Node File Server on Google Cloud. It works fine as I can mount the file server's disk from other instances.
However, now I want to add another disk to the same file server. The documentation says I should use the following command to add another file system:
zfs create storagepool_name/file_system_name
I tried to run this command on the VM that is acting as the file server, but I get the error that the command zfs is not found.
Now I can probably install zfs myself, but I wonder whether that will somehow collide with whatever the deployment has already set up on the machine.
Is installing and setting up zfs myself a problem? If so, how do I add another disk to the file server?
I figured out what went wrong with my setup of the Single-Node File Server.
First, the default deployment settings seems to choose xfs as the default file system instead of zfs. The file server I had was using xfs, as can be seen in the metadata of the instance itself.
Secondly, as user John Hanley commented in my question, even with zfs selected as the file system, only the root user has its PATH variable set-up properly to be able to directly use the zfs command.

Sharing code directory from host with boot2docker does not call inotify on guest

I am trying to setup a dev environment with boot2docker/Virtualbox. Sharing a folder on the host with the docker container works, but since it is shared through a Virtualbox shared folder inotify does not trigger inside the container (and the code is not reloaded).
Is there a way to get the source folder into a docker image with boot2docker that still triggers inotify in the container? I would rather not use polling, since using polling inside a Virtualbox share has a heavy CPU cost on the host.
That is boot2docker limitation because of this double layers of indirection you have to go through one with Virtual box and another is with docker. Looks like you will be better off setting up your own Vagrant machine and use one of alternative methods to share the folders, either through NFS, RSYNC or Unison plugin mentioned in the comment above