Puppet file_line doesn't work with agent rather with apply - regex

I am trying to add a line and replace others with puppet file_line resource. I have a very strange behavior. Here is the code:
file_line { 'bashrc':
ensure => present,
path => '/user/.bashrc',
line => 'HISTCONTROL=ignoredups:ignorespace:erasedups',
match => '^HISTCONTROL\=',
}
file_line { 'sysctl_conf':
ensure => present,
path => '/etc/sysctl.conf',
line => 'net.ipv6.conf.all.disable_ipv6=1',
notify => Exec['/sbin/sysctl -p'],
}
I have this line: HISTCONTROL=ignoredups in the .bashrc file. When I run puppet agent -t it just appends this line HISTCONTROL=ignoredups:ignorespace:erasedups to the file and the original line HISTCONTROL=ignoredups is still there. More interesting is that the second file_line resource istn't executed at all.
But when I run puppet apply -e "include module", the line in .bashrc is replaced and the net.ipv6.conf.all.disable_ipv6=1 is appended to /etc/sysctl.conf.
System information:
root#puppet [Home]:~# puppet agent --version
5.5.8
root#puppet [Home]:~# puppet --version
5.5.8
root#puppet [Home]:~# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.5 LTS
Release: 16.04
Codename: xenial
root#puppet [Home]:~# puppet module list | grep stdlib
├── puppetlabs-stdlib (v5.1.0)
Can someone explain this please, or how to fix this?
Thanks

Related

What is the a way to find "illegal characters found in URL"?

I have remote linux server and I am trying to build jenkins image from Dockerfile.
As I mounting local folder to the image, jenkins is not able to install necessary plugins.
I follow the advices from Official Jenkins Image: Installing more tools.
During building process I get an error:
=> ERROR [3/3] RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt------> [3/3] RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt:
#0 0.292 WARN: plugins.sh is deprecated, please switch to install-plugins.sh
#0 0.293 Analyzing war: /usr/share/jenkins/jenkins.war
#0 0.451 Downloading cloudbees-folder:6.9
#0 0.460 **curl: (3) Illegal characters found in URL**
Dockerfile:3
1 | FROM jenkins:2.60.3
2 | COPY plugins.txt /usr/share/jenkins/plugins.txt
3 | >>> RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt*
here is my content of plugins.txt file:
cloudbees-folder:6.9
antisamy-markup-formatter:2.7
build-timeout:1.28
credentials-binding:1.27.1
timestamper:1.21
ws-cleanup:0.44
ant:1.13
gradle:2.2
workflow-aggregator:2.7
github-branch-source:2.11.5
pipeline-github-lib:36.v4c01db_ca_ed16
pipeline-stage-view:2.31
git:5.0.0
subversion:2.17.0
ssh-slaves:2.854.v7fd446b_337c9
matrix-auth:3.1.6
pam-auth:1.10
ldap:659.v8ca_b_a_fe79fa_d
email-ext:2.93
mailer:1.34.2
I found one possible solution saying that Docker Jenkins Image - curl: (3) Illegal characters found in URL
there is different line endings between Windows and Mac OS.
however it did not help me. I would wait for your suggestions.

How does one install a specific ocaml compiler when it doesn't appear on the opam switch list?

I've installed this compiler before in a docker container, but I don't understand why it's missing right now. Command and error:
(iit_synthesis) brando9~ $ opam switch create ocaml-variants.4.07.1+flambda_coq-serapi.8.11.0+0.11.1 ocaml-variants.4.07.1+flambda
[ERROR] No compiler matching `ocaml-variants.4.07.1+flambda' found, use `opam switch list-available' to see what is available, or use `--packages' to
select packages explicitly.
but it's not in the list:
(iit_synthesis) brando9~ $ opam switch list-available
# Listing available compilers from repositories: default
# Name # Version # Synopsis
ocaml-option-32bit 1 Set OCaml to be compiled in 32-bit mode for 64-bit Linux and OS X hosts
ocaml-option-flambda 1 Set OCaml to be compiled with flambda activated
ocaml-option-nnpchecker 1 Set OCaml to be compiled with --enable-naked-pointers-checker
ocaml-option-spacetime 1 Set OCaml to be compiled with spacetime activated
ocaml-options-vanilla 1 Ensure that OCaml is compiled with no special options enabled
Opam update fails
Output:
$ opam update --all
<><> Updating package repositories ><><><><><><><><><><><><><><><><><><><><><><>
Processing 1/1: [default: http]
Processing 1/1: [default: http]
[default] synchronised from https://opam.ocaml.org
[ERROR] Could not update repository "default": "~/anaconda/bin/patch -p1 -i /dfs/scratch0/brando9/.opam/log/patch-99014-0624b6" exited with code 2
I probably should have started with this but I installed opam with "manually" with deb because I don't have sudo. In particular I did this:
# - opam (snap, no sudo)
# ref: https://askubuntu.com/questions/339/how-can-i-install-a-package-without-root-access
apt-get download opam
#apt-get download opam_1.2.2-4_amd64
# manually checked the opam name
#ls | less
mkdir -p ~/.local
dpkg -x opam_1.2.2-4_amd64.deb ~/.local/bin
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc.user
source ~/.bashrc.user
tr ':' '\n' <<< "$PATH"
opam --version
before that I did try installing opam with conda (which has worked in the past) but it failed. I wonder if that screwed things up :/. Will try to reproduce to post the conda error. But I ran conda install -c conda-forge opam.
related:
How to install a specific version of ocaml compiler with opam
https://discuss.ocaml.org/t/why-doesnt-my-server-show-the-ocaml-compiler-that-i-need/10917
https://www.reddit.com/r/ocaml/comments/zed88p/how_does_one_install_a_specific_ocaml_compiler/
How does one install opam without sudo priveledges on linux/ubuntu?

nWipe Package compiled in Centos not working in Busybox embedded linux

I have compiled nwipe open source utility in Centos. Once compiled it works absolutely fine on the machine where it was compiled. I have also copied the compiled package to another machine running Centos along with required libraries and it works fine.
I have tried to package this utility to work with Busybox RAMBOX embedded linux. The purpose of this utility is to PXEBoot the workstations via TFTP and auto wipe all the hard-drives.
In order to achieve this, I have used Linux kernel from Centos netboot CD and downloaded the busybox, copied nwipe utility that I compiled on another Centos development server.
I also copied all the required libraries. See below.
when I do ldd nwipe. It shows the dependencies for the libraries.
[root#localhost src]# ldd nwipe
linux-gate.so.1 => (0x00a78000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00650000)
libparted.so.2 => /usr/lib/libparted.so.2 (0x007fd000)
libpanel.so.5 => /usr/lib/libpanel.so.5 (0x00dd0000)
libncurses.so.5 => /lib/libncurses.so.5 (0x006db000)
libc.so.6 => /lib/libc.so.6 (0x004b0000)
libtinfo.so.5 => /lib/libtinfo.so.5 (0x007e2000)
/lib/ld-linux.so.2 (0x0048a000)
libuuid.so.1 => /lib/libuuid.so.1 (0x0025b000)
libdl.so.2 => /lib/libdl.so.2 (0x00649000)
libdevmapper.so.1.02 => /lib/libdevmapper.so.1.02 (0x0073c000)
libselinux.so.1 => /lib/libselinux.so.1 (0x006ba000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00a2e000)
libudev.so.0 => /lib/libudev.so.0 (0x0066d000)
so I copied all these libraries dependencies to the busybox /lib /usr/lib folders.
Finally I compiled the busybox and used cpio and gzip to get the initrd.img file.
Then I use centos netboot kernel 2.6 and initrd.img to pxeboot the workstation. Everything works fine, I can use all the busybox basic linux commands. But when I execute ./nwipe it does not work. It simply shows the shell prompt again.
/# ./nwipe
/#
see below the content of my init file.
#!/bin/sh
#Mount things needed by this script
mount -t proc proc /proc
mount -t sysfs sysfs /sys
#Disable kernel messages from popping onto the screen
echo 0 > /proc/sys/kernel/printk
#Clear the screen
clear
#Create all the symlinks to /bin/busybox
busybox --install -s
#Create device nodes
mknod /dev/null c 1 3
mknod /dev/tty c 5 0
mdev -s
#Function for parsing command line options with "=" in them
# get_opt("init=/sbin/init") will return "/sbin/init"
get_opt() {
echo "$#" | cut -d "=" -f 2
}
#Defaults
init="/sbin/init"
root="/dev/hda1"
#Process command line options
for i in $(cat /proc/cmdline); do
case $i in
root\=*)
root=$(get_opt $i)
;;
init\=*)
init=$(get_opt $i)
;;
esac
done
#Mount the root device
mount "${root}" /newroot
#Check if $init exists and is executable
if [[ -x "/newroot/${init}" ]] ; then
#Unmount all other mounts so that the ram used by
#the initramfs can be cleared after switch_root
umount /sys /proc
#Switch to the new root and execute init
exec switch_root /newroot "${init}"
fi
#This will only be run if the exec above failed
echo "Failed to switch_root, dropping to a shell"
exec sh
Could someone please help me what I have to do to fix this?
How I can run my compiled software with busybox?
Thanks well in advance for reading this post.
I have managed to fix this by not using busybox. This time around I have used Centos minimal install and used dracut utility to create kernel and initramfs and mounted the root file system as NFS on the server. It works like a charm.
It works like a full blown Linux Centos and it is pretty fast.
Thank you for looking at this post :)

Need to solve "Can't locate VMware/VIRuntime.pm" in cygwin

I have a (maybe) unusual situation. I need to run VMware CLI commands in a Windows box, but via the cygwin CLI inside a shell script. I can NOT change this for now, so any suggestions to "why not do this instead" may be futile, although appreciated. Here's a sample script.
#!/bin/bash
# Paths for vmware-cmd.pl file to run vmware commands from vsphere cli
_vcli_dir="/cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI"
_vcli_bin="$_vcli_dir/bin"
_vcli_perl="$_vcli_dir/Perl"
_vcli_perl_bin="$_vcli_perl/bin"
_vcli_perl_lib="$_vcli_perl/lib"
_vcli_perl_vlib="$_vcli_perl_lib/VMware"
_vcmd=vmware-cmd.pl
export _orig_path=$PATH
# Add above directories to path variable
export PATH=$PATH:$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
echo $PATH
$_vcmd /?
export PATH=$_orig_path
echo $PATH
When I run the above script, I get
Can't locate VMware/VIRuntime.pm in #INC (#INC contains:
/usr/lib/perl5/site_perl/5.14/i686-cygwin-threads-64int
/usr/lib/perl5/site_perl/5.14
/usr/lib/perl5/vendor_perl/5.14/i686-cygwin-threads-64int
/usr/lib/perl5/vendor_perl/5.14
/usr/lib/perl5/5.14/i686-cygwin-threads-64int /usr/lib/perl5/5.14
/usr/lib/perl5/site_perl/5.10 /usr/lib/perl5/vendor_perl/5.10
/usr/lib/perl5/site_perl/5.8 .) at /cygdrive/c/Program Files
(x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl line 8. BEGIN
failed--compilation aborted at /cygdrive/c/Program Files
(x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl line 8.
I can run the same vmware-cmd.pl script from a DOS command prompt
c:> vmware-cm.pl
So I now my installation is correct.
Any clues please?
This post gave me the idea to fix it. But now I get a core dump.
How is Perl's #INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)
The added line is the second export PERL5LIB line.
#!/bin/bash
# Path for vmware-cmd.pl file to run vmware commands from vsphere cli
_vcli_dir="/cygdrive/c/Program Files (x86)/VMware/VMware vSphere CLI"
_vcli_bin="$_vcli_dir/bin"
_vcli_perl="$_vcli_dir/Perl"
_vcli_perl_bin="$_vcli_perl/bin"
_vcli_perl_lib="$_vcli_perl/lib"
_vcli_perl_vlib="$_vcli_perl_lib/VMware"
_vcmd=vmware-cmd.pl
export _orig_path=$PATH
# Add above directories to path variable
export PATH=$PATH:$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
export PERL5LIB=$_vcli_dir:$_vcli_bin:$_vcli_perl:$_vcli_perl_bin:$_vcli_perl_lib:$_vcli_perl_vlib
echo $PATH
$_vcmd /?
export PATH=$_orig_path
echo $PATH
I solved by going through my elbow to get to my a**, as the saying goes.
What I did was
- Install vmware cli on my Windows box to the default directory
- Added environment variables for the VMware main directory, the bin directory, the Perl directory and the Perl/bin directory
- Added these environment variables to my PATH variable.
Then I created a vmware-cli.bat file that takes parameters and concatenates them into a vmware-cli command with the correct values. For example, I call this to list the VMs in the server
cygwin:> ./vmware-cli.bat vmware-cmd.pl --server MyServer --username User --password PW -l
Inside the batch file I essentailly do
REM Get first parm as the command, and then concatenate the rest of the parms
set VCLI_CMD=%1
shift
:LOOP
if %1x==x goto :EXECUTE
set VCLI_CMD=%VCLI_CMD% %1
shift
goto LOOP:
:EXECUTE
%VCLI_CMD%
This is an alternative to the previous posted that will allow you to keep it in the same shell script
VIMCMD="/cygdrive/C/Program Files (x86)/VMware/VMware vSphere CLI/bin/vmware-cmd.pl"
VIMCMD_DOS=$(cygpath -d "$VIMCMD")
DOS_VIMCMD="cmd /c $VIMCMD_DOS"
Then you can run:
$ $DOS_VIMCMD --version
vSphere SDK for Perl version: 6.0.0
Script 'vmware-cmd.pl' version: 6.0.0

PHPUnit Extension warning in Yii

I am setting up unit testing to work with the Yii framework. Apart from Yii, my PHPUnit works great. But along with Yii when I try to test it, it gives me the following warning every time.
Warning: include(PHPUnit_Extensions_Story_TestCase.php): failed to open stream:
No such file or directory in D:\xampp\htdocs\yii1112\framework\YiiBase.php on li
ne 423
Warning: include(): Failed opening 'PHPUnit_Extensions_Story_TestCase.php' for i
nclusion (include_path='.;D:\xampp\htdocs\sms_dev\protected\extensions\yii-mail;
D:\xampp\htdocs\sms_dev\protected\extensions\giix-components;D:\xampp\htdocs\sms
_dev\protected\components;D:\xampp\htdocs\sms_dev\protected\models;D:\xampp\php\
PEAR') in D:\xampp\htdocs\yii1112\framework\YiiBase.php on line 423
I have searched a lot and have also asked in the Yii forum, but nothing seems to be working out.
Does anyone have any idea what this warning means? How can I get rid of it?
The file PHPUnit_Extensions_Story_TestCase.php is part of the package PHPUnit_Story, which can be installed with:
pear install phpunit/PHPUnit_Story
See also: PHPUnit can't find PHPUnit_Extensions_Story_TestCase. What package is missing?
The protected/tests directory is not in your include path. I would suggest moving your protected directory from any public location, and just add the protected folder to the include path. so d:\xampp\htdocs\sms_dev\protected\ instead of listing each directory seperately.
Either this is the problem or the file doesn't exist and you have to check your code.
With pear install dependencies [ Now pear packages are not updated better install with composer ]
sudo pear channel-discover pear.phpunit.de
sudo pear install phpunit/PHPUnit_Story
sudo pear install phpunit/PHP_Selenium
Better if you install phpunit with composer these errors will not come
step 1:
Create a composer.json file in your project root:
{
"require-dev": {
"phpunit/phpunit": "4.6.*",
"phpunit/phpunit-selenium": ">=1.4",
"phpunit/dbunit": ">=1.3",
"phpunit/phpunit-story": "*",
"phpunit/php-invoker": "*"
},
"autoload": {
"psr-0": {"": "src"}
},
"config": {
"bin-dir": "bin/"
}
}
step 2:
Install composer into your project using:
curl -sS https://getcomposer.org/installer | php
Ensure composer is executable:
chmod +x composer.phar
Let composer install the dependencies:
./composer.phar install --dev
Check you have a project specific phpunit version installed:
bin/phpunit --version
the above specified is a softlink
ls -la bin/phpunit
bin/phpunit -> ../vendor/phpunit/phpunit/phpunit
Afterwords you can make softlink of 'phpunit' from vendor directory into directory of php in use.
This will remove all warnings related to
PHP Warning: include(classes/PHPUnit_Extensions_Story_TestCase.php)
PHP Warning: include(): Failed opening 'classes/PHPUnit_Extensions_Story_TestCase.php'
PHP Warning: include(classes/Composer\Autoload\ClassLoader.php)