Unable to change ownership using chown even as root user - bash

Below is a snippet of my automation script, ownership gets changed for the directory (or)mount point - /deploy/umbro/$Client to ind$Client:ind as expected, but on the other hand, ownership for the directory (or)mount point, under the case statements are not getting changed.
Still remains as root:root
Not exactly sure where I have gone wrong.
#!/bin/bash
Client=$1
Region=$2
sudo mkfs -t xfs /dev/nvme1n1
sudo mkfs -t xfs /dev/nvme2n1
#Mount point creation for nvme2n1
mkdir -p /deploy/umbro/$Client
mount -t xfs /dev/nvme2n1 /deploy/umbro/$Client
sudo echo UUID=$(sudo blkid | grep /dev/nvme2n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client xfs defaults,nofail 0 2 >> /etc/fstab
perm=ind$Client:ind
chown -R $perm /deploy/umbro/$Client
#Mount point creation for nvme1n1, based on region
case $Region in
AUS)
mkdir -p /deploy/umbro/$Client/checkpoint/default/logs
chown -R ind$Client:ind /deploy/umbro/$Client/checkpoint/default/logs
mount -t xfs /dev/nvme1n1 /deploy/umbro/$Client/checkpoint/default/logs
sudo echo UUID=$(sudo blkid | grep /dev/nvme1n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client/checkpoint/default/logs xfs defaults,nofail 0 2 >> /etc/fstab
;;
EUR)
mkdir -p /deploy/umbro/$Client/checkpoint/arm/logs
chown -R ind$Client:ind /deploy/umbro/$Client/checkpoint/arm/logs
mount -t xfs /dev/nvme1n1 /deploy/umbro/$Client/checkpoint/arm/logs
sudo echo UUID=$(sudo blkid | grep /dev/nvme1n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client/checkpoint/arm/logs xfs defaults,nofail 0 2 >> /etc/fstab
;;
......
......
esac#!/bin/bash
Client=$1
Region=$2
sudo mkfs -t xfs /dev/nvme1n1
sudo mkfs -t xfs /dev/nvme2n1
#Mount point creation for nvme2n1
mkdir -p /deploy/umbro/$Client
mount -t xfs /dev/nvme2n1 /deploy/umbro/$Client
sudo echo UUID=$(sudo blkid | grep /dev/nvme2n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client xfs defaults,nofail 0 2 >> /etc/fstab
perm=ind$Client:ind
chown -R $perm /deploy/umbro/$Client
#Mount point creation for nvme1n1, based on region
case $Region in
AUS)
mkdir -p /deploy/umbro/$Client/checkpoint/default/logs
chown -R ind$Client:ind /deploy/umbro/$Client/checkpoint/default/logs
mount -t xfs /dev/nvme1n1 /deploy/umbro/$Client/checkpoint/default/logs
sudo echo UUID=$(sudo blkid | grep /dev/nvme1n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client/checkpoint/default/logs xfs defaults,nofail 0 2 >> /etc/fstab
;;
EUR)
mkdir -p /deploy/umbro/$Client/checkpoint/arm/logs
chown -R ind$Client:ind /deploy/umbro/$Client/checkpoint/arm/logs
mount -t xfs /dev/nvme1n1 /deploy/umbro/$Client/checkpoint/arm/logs
sudo echo UUID=$(sudo blkid | grep /dev/nvme1n1 | grep -Eo [\"].*[\"] | awk '{print $1}'| tr -d '"') /deploy/umbro/$Client/checkpoint/arm/logs xfs defaults,nofail 0 2 >> /etc/fstab
;;
......
......
esac
AWS EC2 - Red Hat Enterprise Linux Server release 7.7,
user - root
Strange observation is that, if I manually do the below steps, ownership gets changed recursievly till logs folder.
cd /deploy/umbro/$Client
chown -R ind$Client:ind checkpoint/

chown after mounting worked. thank you #thatotherguy for the nice explanation.

Related

how to parse list of values to a command using a for sentence?

my question is do you have any idea how to parse a list of arguments as a variable in for statement
iscsiadm -m discovery -t st -p 192.168.1.11 | awk -F ":" 'NF{print $NF}' | awk 'NR==1{print $1}'
vbox
vbox2
vbox3
vbox4
vbox5
vbox6
i want to pass a single parameter (vbox, vbox2,vbox3...) to a iscsi command to discover and login to this truenas vm
iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox -p 192.168.1.11 -l
iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox2 -p 192.168.1.11 -l
u mean like this ?
echo 'vbox vbox2 vbox3 vbox4 vbox5 vbox6' |
mawk 'sub(".+","iscsiadm -m node -T iqn.2005-10.org.freenas." \
"ctl:& -p 192.168.1.11 -l")^_' ORS=' ' RS='[[:space:]]+'
iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox -p 192.168.1.11 -l iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox2 -p 192.168.1.11 -l iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox3 -p 192.168.1.11 -l iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox4 -p 192.168.1.11 -l iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox5 -p 192.168.1.11 -l iscsiadm -m node -T iqn.2005-10.org.freenas.ctl:vbox6 -p 192.168.1.11 -l
thanks RARE Kpop Manifesto !!!
also i have this one
printf '%s\n' "${nas[#]}" |paste -sd ' '
for nas in $vbox; do
discover=iscsiadm -m node -T $connector:$nas -p $ip -l
done

Problem using grep to specify process IDs for I/O priority setting

I want to set highest I/O priority using ionice for processes with specific name (farmer and harvest)
Please help check what is wrong with my script it's not working
sudo ionice -c 1 -n 0 -p $(ps -ef | grep farmer | awk '{print $2}')
sudo ionice -c 1 -n 0 -p $(ps -ef | grep harvest | awk '{print $2}')
I got the error "ionice: ioprio_set failed: No such process" even though these processes exist
Use pgrep.
sudo ionice -c 1 -n 0 -p $(pgrep farmer)
sudo ionice -c 1 -n 0 -p $(pgrep harvest)

How to do auto upgrade to latest github software release version?

Releases uploads every time to url like
https://github.com/ipfs/go-ipfs/releases/tag/v0.9.1
my script is
#!/bin/bash
rm /home/ipfs/go-ipfs -rf
rm go-ipfs.tar.gz
curl -s https://api.github.com/repos/ipfs/go-ipfs/releases/latest | grep linux-amd64.tar.gz\" | grep download | sed 's/.*: \"//g' | sed 's/\"//g' | wget -i - -O /home/ipfs/go-ipfs.tar.gz
if test -f /home/ipfs/go-ipfs.tar.gz then
tar -xf /home/ipfs/go-ipfs.tar.g
newsize=$(wc -c <"/home/ipfs/go-ipfs/ipfs")
cursize=$(wc -c <"/home/ipfs/ipfs")
if [$newsize -ne $cursize]; then
mv /home/ipfs/go-ipfs/ipfs /home/ipfs/ipfs
chmod +x /home/ipfs/ipfs
pkill ipfs
fi
fi
but it has an error i cant fix
Solution is
#!/bin/bash
#remove old repo folder
rm /home/ipfs/go-ipfs -rf
#remove old tar.gz
rm go-ipfs.tar.gz
#try to download new
curl -s https://api.github.com/repos/ipfs/go-ipfs/releases/latest | grep linux-amd64.tar.gz\" | grep download | sed 's/.*: \"//g' | sed 's/\"//g' | wget -i - -O /home/ipfs/go-ipfs.tar.gz
#check file exists
if [ -f /home/ipfs/go-ipfs.tar.gz ]; then
#unpack tar gz
tar -xf /home/ipfs/go-ipfs.tar.gz
#get file sizes
newsize=$(wc -c <"/home/ipfs/go-ipfs/ipfs")
cursize=$(wc -c <"/home/ipfs/ipfs")
#if new file is not as current
if (($newsize != $cursize)); then
#replace it
mv /home/ipfs/go-ipfs/ipfs /home/ipfs/ipfs
chmod +x /home/ipfs/ipfs
#kill old to restart new
pkill ipfs
fi
fi

Check Transport endpoint is not connected

I am wanting to monitor whether a directory's transport is connected with bash.
I currently have the shell:
#!/bin/bash
mounts=('/mount1' '/mount2' '/mount3' '/mount4' '/HDD');
for mount in "${mounts[#]}"
do
if grep -qs ${mount} /proc/mounts
then
echo "${mount} is mounted."
else
#force remount
sudo umount -l ${mount}
sudo fusermount -uz ${mount}
sudo mount ${mount}
fi
done
but grep -qs ${mount} /proc/mounts does not actually check the endpoint? what should I do instead?

Why isn't my Arch Linux fully automated installer working?

I've been working on a simple fully-automated installer for ArchLinux recently.
I started with a basic three-partition system; that made a bootable system.
I added LVM and several more logical partitions; that worked also.
I'm now trying to add LUKS encryption; that isn't working.
I want to have LUKS inside of LVM for more flexibility. For a BIOS system with a single disk, that should look something like this:
Raw Partitions
+-----------+------+-------+-----------+
| Partition | Name | Size | Flags |
+-----------+------+-------+-----------+
| /dev/sda1 | grub | 2MB | bios_grub |
| /dev/sda2 | boot | 200MB | boot |
| /dev/sda3 | lvm | | lvm |
+-----------+------+-------+-----------+
LVM Partitions
+-------------+--------------+-------+------+
| LVM Device | LUKS Device | Name | Size |
+-------------+--------------+-------+------+
| LvmDvc-root | LuksDvc-root | root | 2GB |
| LvmDvc-home | LuksDvc-home | home | 2GB |
| LvmDvc-var | LuksDvc-var | var | 1G |
| LvmDvc-usr | LuksDvc-usr | usr | 1G |
| LvmDvc-swap | LuksDvc-swap | swap | 4G |
+-------------+--------------+-------+------+
LvmDvc-root is decrypted to LuksDvc-root using a passphrase.
All other LVM devices are decrypted using keys stored in /etc/ctyptkeys.
Partitions are mounted as:
/dev/mapper/LuksDvc-root -> /
/dev/sda2 -> /boot
/dev/mapper/LuksDvc-home -> /home
/dev/mapper/LuksDvc-var -> /var
/dev/mapper/LuksDvc-usr -> /usr
From what I can tell, disk partitioning and system install work just fine. I receive a slew of errors about lvmetad not being loaded during grub configuration, but the documentation in Arch's wiki indicates this is a non-issue (https://wiki.archlinux.org/index.php/GRUB#UEFI_systems_2). I also receive these same errors in the previous version of my script (using LVM, but not LUKS), and it produces a bootable system. So I don't think this error message indicates a problem.
When I boot the system, I get through GRUB just fine. I am presented with a dialogue to decrypt the root partition:
A password is required to access the LuksDvc-root volume:
Enter passphrase for /dev/mapper/LvmDvc-root:
I enter the passphrase used during installation, and receive this message:
No key available with this passphrase.
I'm using a very simple passphrase for testing (asdfasdf), so I doubt I'm messing it up. I can decrypt and mount the whole system from the live installer without incident, I just can't make it happen at boot.
I'm not sure what information would be most helpful for solving this. Here is the script I use to install the system:
#!/usr/bin/env bash
set -ex -o pipefail -o nounset
# Raw Partitioning
parted --script --align optimal -- /dev/sda mklabel gpt
parted --script --align optimal -- /dev/sda mkpart primary 2 4
parted --script --align optimal -- /dev/sda name 1 bios_grub
parted --script --align optimal -- /dev/sda set 1 bios_grub on
parted --script --align optimal -- /dev/sda mkpart primary 4 204
parted --script --align optimal -- /dev/sda name 2 boot
parted --script --align optimal -- /dev/sda set 2 boot on
parted --script --align optimal -- /dev/sda mkpart primary 204 -1
parted --script --align optimal -- /dev/sda name 3 lvm
parted --script --align optimal -- /dev/sda set 3 lvm on
# LVM Partitioning
pvcreate -ff --yes /dev/sda3
vgcreate LvmDvc /dev/sda3
lvcreate --zero y --wipesignatures y --name root --size 2G LvmDvc
lvcreate --zero y --wipesignatures y --name home --size 2G LvmDvc
lvcreate --zero y --wipesignatures y --name var --size 1G LvmDvc
lvcreate --zero y --wipesignatures y --name usr --size 1G LvmDvc
lvcreate --zero y --wipesignatures y --name swap --size 4G LvmDvc
# Root Partition
echo asdfasdf | cryptsetup -q --key-file - luksFormat /dev/mapper/LvmDvc-root
echo asdfasdf | cryptsetup -q --key-file - luksOpen /dev/mapper/LvmDvc-root LuksDvc-root
mkfs.ext4 -q /dev/mapper/LuksDvc-root
mkdir -p /mnt/archbox
mount /dev/mapper/LuksDvc-root /mnt/archbox
# Boot Partition
mkfs.ext4 -q /dev/sda2
# Encrypted Partitions
mkdir -p /mnt/archbox/etc/cryptkeys
chmod 400 /mnt/archbox/etc/cryptkeys
dd if=/dev/random of=/mnt/archbox/etc/cryptkeys/home bs=512 count=4 iflag=fullblock
chmod 400 /mnt/archbox/etc/cryptkeys/home
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/home luksFormat /dev/mapper/LvmDvc-home
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/home luksOpen /dev/mapper/LvmDvc-home LuksDvc-home
mkfs.ext4 -q /dev/mapper/LuksDvc-home
dd if=/dev/random of=/mnt/archbox/etc/cryptkeys/var bs=512 count=4 iflag=fullblock
chmod 400 /mnt/archbox/etc/cryptkeys/var
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/var luksFormat /dev/mapper/LvmDvc-var
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/var luksOpen /dev/mapper/LvmDvc-var LuksDvc-var
mkfs.ext4 -q /dev/mapper/LuksDvc-var
dd if=/dev/random of=/mnt/archbox/etc/cryptkeys/usr bs=512 count=4 iflag=fullblock
chmod 400 /mnt/archbox/etc/cryptkeys/usr
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/usr luksFormat /dev/mapper/LvmDvc-usr
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/usr luksOpen /dev/mapper/LvmDvc-usr LuksDvc-usr
mkfs.ext4 -q /dev/mapper/LuksDvc-usr
dd if=/dev/random of=/mnt/archbox/etc/cryptkeys/swap bs=512 count=4 iflag=fullblock
chmod 400 /mnt/archbox/etc/cryptkeys/swap
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/swap luksFormat /dev/mapper/LvmDvc-swap
cryptsetup -q --key-file /mnt/archbox/etc/cryptkeys/swap luksOpen /dev/mapper/LvmDvc-swap LuksDvc-swap
mkswap /dev/mapper/LuksDvc-swap
# Mount
mkdir -p /mnt/archbox/boot
mount /dev/sda2 /mnt/archbox/boot
mkdir -p /mnt/archbox/home
mount /dev/mapper/LuksDvc-home /mnt/archbox/home
mkdir -p /mnt/archbox/var
mount /dev/mapper/LuksDvc-var /mnt/archbox/var
mkdir -p /mnt/archbox/usr
mount /dev/mapper/LuksDvc-usr /mnt/archbox/usr
swapon /dev/mapper/LuksDvc-swap
# Packages
mkdir -p ./cache-dir
rm -f /mnt/archbox/var/lib/pacman/db.lck
pacstrap /mnt/archbox --cachedir ./cache-dir base grub
# Root password
echo "root:asdfasdf" | chpasswd --root /mnt/archbox
# FSTab
genfstab -U -p /mnt/archbox >> /mnt/archbox/etc/fstab
# CryptTab
echo "" > /mnt/archbox/etc/crypttab
echo "home /dev/mapper/LvmDvc-home /mnt/archbox/etc/cryptkeys/home" >> /mnt/archbox/etc/crypttab
echo "usr /dev/mapper/LvmDvc-usr /mnt/archbox/etc/cryptkeys/usr" >> /mnt/archbox/etc/crypttab
echo "var /dev/mapper/LvmDvc-var /mnt/archbox/etc/cryptkeys/var" >> /mnt/archbox/etc/crypttab
echo "swap /dev/mapper/LvmDvc-swap /mnt/archbox/etc/cryptkeys/swap" >> /mnt/archbox/etc/crypttab
# Ramdisk
file=/mnt/archbox/etc/mkinitcpio.conf
search="^\s*MODULES=.*$"
replace="MODULES=\\\"virtio virtio_blk virtio_pci virtio_net\\\""
grep -q "$search" "$file" && sed -i "s#$search#$replace#" "$file" || echo "$replace" >> "$file"
search="^\s*HOOKS=.*$"
replace="HOOKS=\\\"base udev autodetect modconf block keymap encrypt lvm2 filesystems keyboard shutdown fsck usr\\\""
grep -q "$search" "$file" && sed -i "s#$search#$replace#" "$file" || echo "$replace" >> "$file"
arch-chroot /mnt/archbox mkinitcpio -p linux
# Bootloader
arch-chroot /mnt/archbox grub-install --target=i386-pc --recheck /dev/sda
file=/mnt/archbox/etc/default/grub
search="^\s*GRUB_CMDLINE_LINUX=.*$"
replace="GRUB_CMDLINE_LINUX=\\\"init=/usr/lib/systemd/systemd cryptdevice=/dev/mapper/LvmDvc-root:LuksDvc-root root=/dev/mapper/LuksDvc-root quiet\\\""
grep -q "$search" "$file" && sed -i "s#$search#$replace#" "$file" || echo "$replace" >> "$file"
search="^\s*GRUB_DISABLE_LINUX_UUID=.*$"
replace="GRUB_DISABLE_LINUX_UUID=true"
grep -q "$search" "$file" && sed -i "s#$search#$replace#" "$file" || echo "$replace" >> "$file"
arch-chroot /mnt/archbox grub-mkconfig -o /boot/grub/grub.cfg
Does anything stick out as blatantly wrong? What should I be doing differently? Can I provide additional/specific information?
tl;dr - Install script seems to work, but I can't decrypt the system at boot. Halp!
I found the main problem: formatting the root LUKS volume should be done with a password, not a key file. Taking out the option --key-file - on the formatting and opening for the root volume fixes the problem I was seeing.
There are some other issues, in the script, but I'll come back after I've tried and failed to fix them.
appreciate any updates of your script; I'm currently testing it. Note, in the above script, the isolated '-' is a syntax error:
echo asdfasdf | cryptsetup -q --key-file - luksFormat /dev/mapper/LvmDvc-root
echo asdfasdf | cryptsetup -q --key-file - luksOpen /dev/mapper/LvmDvc-root LuksDvc-root
after taking out '--key-file' as you suggested, the two lines should be:
echo asdfasdf | cryptsetup -q luksFormat /dev/mapper/LvmDvc-root
echo asdfasdf | cryptsetup -q luksOpen /dev/mapper/LvmDvc-root LuksDvc-root
after this changing the script did run through with the warnings you mentioned. when booting the disk generated by the script, root volume password and then
dev/mapper/Lucks-Dvc-root: clean, ...
ERROR: device '' not found. Skipping fsck.
mount: wrong fs type, bad option, bad superblock ,
missing code page or helper program, ... try dmesg | tail
ERROR: root device mounted success..., but /usr/lib/systemd/systemd does not exist.
Bailing out...
sh: cant access tty: job control turned off
[rootfs /]#
when searching for this error, found:
"Looks like that script doesn't install systemd-sysvcompat, which provides the /sbin/init symlink to /usr/lib/systemd/systemd. You might want to file a bug report and/or use pacstrap in the future."
-- https://bbs.archlinux.org/viewtopic.php?id=146712
(post by WorMzy 2013-02-06 15:11:34)
What about using LVM on top of LUKS instead of the other way around used in your script?
I used the following instructions on a number of machines and it worked just fine: http://is.gd/OoDx1d

Resources