Linux Device Driver not loaded automatically using udev - linux-kernel

I am looking for a way to load my linux device driver automatically on start-up. For that I created a udev rules file:
KERNEL=="k1", SUBSYSTEM=="subx", SYMLINK+="sym_subx", ATTRS{vendor}=="0x14ab", ATTRS{device}=="0xe001", MODE="0660", GROUP="xyz"
I manually installed the driver first and then restarted the udev. After this, for the first time, I uninstalled and then installed the driver. I could see the driver getting installed correctly and also the symlink being created.
Now when I restart the machine, I am expecting that the driver is loaded automatically on start-up but its not the case. What could be missing here? Is there any entry that I need to do in some .conf file (modprobe.conf or any other)? Where should I put my module.ko file?
I am suspecting that something minor is missing. Any help will be highly appreciated.
Regards,
Sapan

I was finally able to do it myself. Steps to load the driver automatically are:
Put module.ko in /lib/modules/$(uname -r)/kernel/drivers/ - You may need to create the "module" directory for the first time
Write Udev Rules
% sudo depmod -a
This will update the dependencies of the drivers
Check /lib/modules/$(uname -r)/modules.dep file and search for modules.ko . It should list the dependencies on other modules if any
% sudo /sbin/reboot OR sudo udevadm trigger
It worked for me Linux SLES11

Related

How to run RediSearch module with Redis on WSL (Windows Subsystem for Linux)

I followed the steps on https://redislabs.com/blog/redis-on-windows-10/ and have installed Ubuntu 18.04 and am successfully running Redis v4.09 on Windows. But, when following the steps on https://oss.redislabs.com/redisearch/Quick_Start/, I have some issues.
In the download and running binaries section, I don't understand what I'm supposed to replace /path/to/module/src/redisearch.so with. I've downloaded RediSearch for Ubuntu 18.04 and I've moved the files to a folder named RediSearch within my Downloads folder. Could someone help me with the pathing considering I'm using Ubuntu on Windows? I've also tried it with Building and Running with Source section but that just runs into an error every time I run make:
*** No rule to make target 'build'. Stop.
How can I run the module with Redis?
With WSL, you have access to C: through /mnt/c/ from Linux.
So, if you really want to have redisearch on a folder in Downloads you need to use something like:
/mnt/c/Users/<yourUser>/Downloads/yourFolder/src/redisearch.so
However, you probably should use a folder within Linux instead. You can use wget to download from Linux.

How do I install a custom kernel on a google compute engine instance?

I would like to install a custom kernel image on a Google Compute Engine instance. I have an instance running with:
foo#instance-1:/boot/efi$ uname -a
Linux instance-1 4.10.0-22-generic #24-Ubuntu SMP Mon May 22 17:43:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
And I've built and installed my kernel image:
sudo dpkg -i linux-image-4.10.0-rc8.10.0-rc8_amd64.deb
It shows up in the grub configuration file, I've set the default grub menu item to correct number, and I've run
sudo update-grub
Yet, when I reboot, I get the same kernel I started with.
Google documentation on this seems to be non-existent. There is one spot that suggests I might have to create the image externally, install the kernel, and import it. However, I will need to do this a lot, so I'd rather just install new kernels the old fashioned way.
Turns out that in Google's stock Ubuntu image, there's a grub config file:
/etc/default/grub.d/50-cloudimg-settings.cfg
that overrides what's in
/etc/default/grub
Editing the first file got everything working.
Before attempting this, I assume you have a fallback option? Some way of falling back to your current state. This is important because it seems you may not have physical access to the system.
Please check what /boot/grub/grub.cfg shows as default kernel. It will be a section beginning with menuentry and under that, an entry starting with linux. If that points to /boot/<default-kernel> then that's what you need to update along with initrd entry so that both kernel image and initramfs point to your custom kernel.
Also, it's possible that boot order of kernel images is alphabetical so newer kernel images (later in alphabetical order) have preference over older ones. In that case if you can change kernel image's file name to be higher than default kernel image, and same for the corresponding initramfs and config files (they will all be similarly named) and then run update-grub that may be quicker way of booting into your custom kernel. You can find those files under /boot/.
What worked for me was going into /boot/ and removing the old images and then running sudo dpkg -i <new_image> and rebooting the system with sudo reboot

Vagrant up does not work with VMWare provider

I'm using Vagrant on the latest Linux Mint. It works fine with VirtualBox, however with VMWare it fails with this error: sudo helper setuid-wrapper must run as root.
The very few discussions about this issue I found on the net suggested to symlink ~/.vagrant.d to an not encrypted disk. This is what I tried, but unfortunately without any success at all. I also created symlinks for ~/vmware and ~/.vmware, but again without success.
Has anyone come across this error and found a solution?
Thank you very much.
This is still an issue today (Vagrant 1.9.3/Ubuntu 17.04/VMWare Workstation 12.5.5) if using an encrypted homedir. For me, the easiest solution was just to move the vagrant directory onto a non-encrypted filesystem as the OP suggested:
sudo mkdir /vagrant
sudo mv ~/.vagrant.d/ /vagrant/
ln -s /vagrant/.vagrant.d/ ~/.vagrant.d
Running in debug mode I can see the command its trying to run as root exists within the directory I moved:
INFO subprocess: Starting process: ["/home/geoff/.vagrant.d/gems/2.2.5/gems/vagrant-vmware-workstation-4.0.18/bin/vagrant_vmware_desktop_sudo_helper_wrapper_linux_amd64", "prune-forwarded-ports", "/tmp/vagrant-sudo-helper20170422-15385-brgg1q"]
And sure enough after vagrant up the VM now runs. Putting everything under /vagrant like this is a bit of a bodge and you would need to figure out something more elegant if you have more then one user, perhaps /vagrant/$USER. The directory I chose isn't Linux FHS compliant either but who cares ;-)
I wish this worked out the box but perhaps this will help someone

How to Create a configuration File For MongoDB

I have installed mongodb for mac os through 10gen and I have gone through the documentation to do so. Everything seems fine apart from the configuration file. I can not see it in /etc/mongod.config. Do I have to manually create this config file? And if so how can I go about it?
cheers
The default path for brew installed mongodb on Mac OS X is /usr/local/etc/mongod.conf
Unless you have installed a packaged version of MongoDB (for example, using Homebrew or Mac Ports) you will have to create a config file manually, or just pass the appropriate command line parameters when starting up MongoDB.
If you want a commented example of a config file to start with, the mongodb.conf in the Debian/Ubuntu package should be a good starting point. Important options to check are the dbpath and logpath which will likely be different for you.
It would also be worth looking at the Homebrew mongodb formula which includes setting up a LaunchAgent script to manage the mongod service.
Yes, unless you install via a package manager (like apt or yum on Linux) you have to create this manually. Then, When you start mongod you simply need to specify where the config file is, for example:
./mongod -f /path/to/mongod.conf
For how that file should look, just take a look here:
http://docs.mongodb.org/manual/reference/configuration-options/
You can also see the aforementioned Linux config files from the packages on github:
https://github.com/mongodb/mongo/blob/master/rpm/mongod.conf
https://github.com/mongodb/mongo/blob/master/debian/mongodb.conf
In the case you installed MongoDB without Homebrew, i.e. downloaded the TGZ package directly from MongoDB Download Center, you will can add the configuration file:
sudo nano /etc/mongod.conf
Please use only spaces (no tabs) in the file and leave a space after the key. For example:
security:
authorization: enabled
net:
port: 27017
bindIp: 0.0.0.0
And then run the instance with the configuration flag:
mongod -f /etc/mongod.conf
I wrote a post about installing MongoDB Community Edition directly from the TGZ archive.

Developing on Windows -> Deploying on a Virtual Machine?

Is there an easy way to integrate with VirtualBox such that I could develop under the host, Windows, and deploy and run scripts via a mounted folder in a guest linux system?
I'm looking to develop for Linux under Windows, kind of.
You can use VirtualBox's Shared Folders feature to enable your Ubuntu virtual machine to mount a directory of your Windows host. However, you're likey to be deal with some impedance mismatches like different line endings. I hope that is the least of your worries.
You might want to check out vagrant http://vagrantup.com/
It provides a nice and easy system to create a VM from a template in Virtual Box, and will automatically mount the project folder in the guest VM. The config can also easily be included in your project so others can use it.
I develop in PHP. And I use Debian as guest OS, and Win7 as host OS.
You can done automaticly mount share folder by:
new a file in /etc/init.d/ named mnt_win_sf, than you edit it:
It must has the same info head with /etc/init.d/apache2. And you need just one line of command:
mount -t vboxsf share_folder_name mount_point
We also need to excute this script before apache2, so we edit /etc/init.d/apache2. In the Require Start line, add mnt_win_sf
update them by:
sudo update-rc.d mnt_win_sf defaults
sudo update-rc.d apache2 defaults

Resources