How to reorder the services startup - CentOS? - linux

I have added a new service to my CentOS box. It should be started after the mounting the file systems.
Would appreciate your assistance,
Liora

You can add the following line in /etc/init.d/<your-service-script> file.
chkconfig: - 00 99
This denotes it will start the service number as 00 (first) and while stopping it is 99 (almost last).
You can make it as 01 and it would be better.

Related

How to make CAN bus operate from within a docker container?

I successfully dockerized my nodejs app running on a Beaglebone black. But now I'd like to access to the CAN from within the docker container but it doesn't work.
Note that I successfully configured the CAN ports in the host and candump shows it works.
$ candump can1
can1 18FF30D0 [8] 00 00 00 00 00 00 00 00
can1 18FF02D0 [4] 00 00 00 00
can1 18FF21D0 [3] 00 00 00
can1 18FF3CD0 [4] 00 7D 28 7D
can1 18FF30D0 [8] 00 03 00 00 00 00 00 00
can1 18FF02D0 [4] 00 00 00 00
I build socketcan node module in my Dockerfile as follows:
#If you don't have node/npm already, add that first
RUN apk add --no-cache nodejs
# Add the necessary build and runtime dependencies (see https://stackoverflow.com/questions/36202095/node-serialport-failing-on-alpine-linux)
RUN apk add --no-cache make gcc g++ python3 linux-headers udev
#RUN apk add --no-cache --virtual .gyp python3 make g++
RUN npm install
Once I run my app from the container, I get the following exception:
-- 🟡- 🚎 Canbus:can0: switched to channel "can0"…
Pepsr v2.1.192 5:36:40 PM 📈 [pepsr-iingenierie] -- 🟡- 🚎 Canbus:can0: cancel CAN as other channel "can0" doesn’t work either
Pepsr v2.1.192 5:36:40 PM 📈 [pepsr-iingenierie] -- 🔴- 🚎 Canbus:can0: Error: Error while creating channel
at Object.exports.createRawChannel (/home/debian/Desktop/devel/iot/node_modules/socketcan/socketcan.js:38:12)
at Canbus._connect (/home/debian/Desktop/devel/iot/pepsr.ddk.protocol.canBus.js:308:34)
at Canbus.connect (/home/debian/Desktop/devel/iot/pepsr.module.js:272:9)
at Object.<anonymous> (/home/debian/Desktop/devel/iot/pepsr.js:608:20)
at Module._compile (internal/modules/cjs/loader.js:1015:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
at Module.load (internal/modules/cjs/loader.js:879:32)
at Function.Module._load (internal/modules/cjs/loader.js:724:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12)
at internal/main/run_main_module.js:17:47
Thanks to the contributors who led me to a solution.
I finally found that the easiest way to let the container access to the host CAN bus is to use the --network parameter as follows:
$ docker run --rm --network=host <your image>
Forwarding network interfaces to Docker is more or less described here: Sharing virtual network with docker container

Hadoop Client unable to connect to datanode

I have single node hadoop cluster on ec2. Tried to give all posible combinations in slaves file.
May 01 2020 08:16:25.227 DEBUG org.apache.hadoop.hdfs.DFSClient - pipeline = 172.31.45.114:9866
May 01 2020 08:16:25.227 DEBUG org.apache.hadoop.hdfs.DFSClient - pipeline = 172.31.45.114:9866
May 01 2020 08:16:25.228 DEBUG org.apache.hadoop.hdfs.DFSClient - Connecting to datanode 172.31.45.114:9866
May 01 2020 08:16:25.228 DEBUG org.apache.hadoop.hdfs.DFSClient - Connecting to datanode 172.31.45.114:9866
May 01 2020 08:16:35.167 DEBUG org.apache.hadoop.ipc.Client - IPC Client (2007716372) connection to ec-x.x.x.x/x.x.x.x:54310 from vgs: closed
I have tried to bind the datanode to external ip , but its not binding, by default its binding on internal ip of the machine.
Also used dfs.client.use.datanode.hostname as true, still client is receiving the internal ip not external.
In order to run spark on EMR you need at least 2 nodes (I managed to run it on minimum 3, but from what I'm reading- I assume 2 should also be enough) - 1 node - MASTER is not enough.
You need MASTER and CORE.
Here you have some more comprehensive guide how to do it:
https://medium.com/big-data-on-amazon-elastic-mapreduce/run-a-spark-job-within-amazon-emr-in-15-minutes-68b02af1ae16

External USB 3.0 HDD Spin down and power off when powering off or rebooting the Raspberry Pi 4B

An external USB 3.0 HDD Seagate Expantion Drive 1TB is connected to my Raspberry Pi 4B on the Raspbian Buster.
The hard drive rarely works, so the first thing I would like it to shut down during idle time (rotation stopped).
I must say right away that I tried the "hdparm" utility, but it absolutely does not work for me. On my old Raspberry Pi 3B +, it did its job perfectly, but it doesn’t work at all on the new one.
I tried doing
sudo hdparm -S 10 / dev / sda1
and
sudo hdparm -Y / dev / sda1
But all he gives out is
/dev/sda:
issuing sleep command
SG_IO: bad / missing sense data, sb []: 70 00 05 00 00 00 00 0a 00 00 00 00 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
At the same time, the disk continues to rotate and the LED on the case is on, no matter how much I wait
I also tried to register the following settings in hdparm.conf:
/dev/sda1 {
spindown_time = 20
}
But this also did not give any effect, the disk continues to rotate.
Also, knowing that udisks2 is installed in the raspbian buster, I tried to create a configuration file Seagate_Expansion_NA4B2GTR-0: 0.conf (this is exactly what the command "udevadm info / dev / sda" gave me) in the directory /etc/udisks2/ with the contents
[ATA]
StandbyTimeout = 20
But it didn't work either.
The fact that the disk does not stop spinning is my first problem. The second problem is that when you turn off or restart Raspberry, the disk does not park its heads and its power is interrupted abruptly, which causes a very unpleasant rattle. I found similar queries on the Internet, this is a very common problem.
I would like that during the procedure of shutting down the OS, the disk should be correctly unmounted and its power turned off before power is lost on the USB 3.0 port.
Fortunately, I was able to write a similar script and it works great:
hddshutdown.sh
sudo umount -f /dev/sda1
sudo udisksclt power-off -b /dev/sda1
sleep 5
If I run this script just while the OS is running, it does exactly what I need: The disk is unmounted, the disk rotation stops and the LED on the case goes out. However, I cannot get this script to work the same way during the OS shutdown procedure.
I wrote this unit for systemd:
hddshutdown.service in /usr/lib/systemd/system/
[Unit]
Description=[=======USB-HDD-spindown============]
DefaultDependencies=no
After=umount.target
Before=shutdown.target poweroff.target reboot.target halt.target
[Service]
ExecStart=/bin/sh /home/pi/hddshutdown.sh
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=reboot.target
I did "sudo systemctl enable hddshutdown", tried several different configuration options, played with different Before, After, and WantedBy values, but none of the options worked, just one, the drive is successfully unmounted, but the power does not turn off, the drive continues to spin and LED is on until the moment the Pi is turned off. Moreover, I know for sure that the sh-script starts exactly, the "sleep" delay, which I set at the end of the script, really works.
I do not know Linux very well and this was my first experience writing units for systemd. I found information that udisksctl needs DBus to work, but it doesn’t exist during shutdown, and that’s why the drive’s power cannot turn off. I could not find a way to execute this unit as early as possible during the shutdown procedure when DBus is still available. (I don’t even know what it is, maybe I said stupidity)
Please help me solve 2 of these problems, thanks in advance.
I myself found the answer to my question. Because I use the Seagate Expansion drive, I used the Seagate Dashboard program from the official site to "reprogram" my hard drive. I was able to turn off the external LED-indicator and set the rotation shutdown time to 10 minutes and now on any system the hard disk is turned off after 10 minutes. Using programs like hdparm or udisks is no longer required!
What worked for me to make my HDD spin-down automatically when idle was this new implementation of hd-idle.
My particular setup is: Raspberry Pi 4B + Suptronics X835 + WD Blue WD20EZRZ.
Non of the other usual tools worked for me (hdparm, original hd-idle).

Raspberry Pi 3 B+ (Buster) can't control Dynamixel AX-12A with Raspberry Pi 3 B+ (Buster) with half duplex communication

I have a project to make mobile robot with Dynamixel AX-12A as the wheel, so i changes the AX-12A to Wheel Mode with CM-530 and it works well.
I follow the guide from http://www.oppedijk.com/robotics/control-dynamixel-with-raspberrypi
I already check my serial communication (UART) on Raspi using Terminal Minicom with only wiring up GPIO14 and GPIO15 together and it works well
Here is my /boot/config.txt at the end of code:
dtoverlay=pi3-disable-bt
hdmi_force_hotplug=1
enable_uart=1
init_uart_clock=16000000
Here is my /boot/cmdline.txt:
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait splash plymouth.ignore-serial-consoles
Here is my Python3 Code:
import serial
import time
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.OUT)
GPIO.setwarnings(False)
port = serial.Serial("/dev/ttyAMA0", baudrate=1000000, timeout=3.0)
while True:
GPIO.output(18, GPIO.HIGH)
port.write(bytearray.fromhex("FF FF 00 04 03 20 FF D8"))
time.sleep(0.1)
GPIO.output(18, GPIO.LOW)
time.sleep(3)
The problem is dynamixel ax-12a not responding to my hexa which should move with value 255. And there is no error feedback from program.
Btw i'm working this project with VNC through wifi in PC, did this cause problems with the communication?
If someone could help me, i thank you.
*sorry if i have bad english
After very long discussion, now i can control the motor, the problem is i sent the wrong instruction packet FF FF 00 04 03 20 FF D8, it should be FF FF 00 05 03 20 FF 00 D8.

Send a file from phone to laptop using bluetooth with bluez - don't work

I want to send a file from my phone to my laptop. Both of them has bluetooth.
On the laptop I have archlinux. I have installed bluez-5.35-1 for bluetooth management.
After installing, I typed:
systemctl enable bluetooth.service
systemctl start bluetooth.service
Then, using bluetoothctl I started bluetooth by typing power on
Now, I can discover and pair the laptop from my phone.
I started the FTP server using:
systemctl --user start obex
On the phone, I tried to send a file, but I receive a message after a very short period file not sent.
In journalctl -f I can see the following logs:
Oct 04 18:01:16 laptop obexd[8058]: CONNECT(0x0), (null)(0xffffffff)
Oct 04 18:01:16 laptop obexd[8058]: CONNECT(0x0), (null)(0x0)
Oct 04 18:01:16 laptop obexd[8058]: PUT(0x2), (null)(0xffffffff)
Oct 04 18:01:16 laptop obexd[8058]: PUT(0x2), FORBIDDEN(0x43)
Oct 04 18:01:16 laptop obexd[8058]: DISCONNECT(0x1), (null)(0xffffffff)
Oct 04 18:01:16 laptop obexd[8058]: DISCONNECT(0x1), SUCCESS(0x20)
Oct 04 18:01:16 laptop obexd[8058]: disconnected: Transport got disconnected
I'm assuming that it's a permission issue since I can see that FORBIDDEN there. Where is the configuration file of obexd to see where it'll tries to save the file? I don't understand why bluez is so poor documented.
Anyone issued the same problems with bluetooth?
Starting obexd with the -a or --auto-accept option ("Automatically accept push requests") allows for pushing a file from the phone to the laptop.
This option skips the authorization request to the agent.

Resources