LX accord will be around 28k OTD give or take and the CR-V LX will be around 30-31K OTD
Caleb Mondoloka
CR-V EX will be around 32-33K OTD, and the Accord doesn't have an EX
only a Sport special edition and Ex-L
https://www.youtube.com/watch?v=SLB_c_ayRMo
https://www.golinuxcloud.com/tmux-cheatsheet/
http://willthames.github.io/2016/09/21/using-command-and-shell-in-ansible.html
https://www.golinuxcloud.com/ansible-tutorial/
https://www.golinuxcloud.com/kubernetes-tutorial/
https://github.com/kodekloudhub/certified-kubernetes-administrator-course
https://github.com/mmumshad/kubernetes-the-hard-way
https://www.reddit.com/r/devops/comments/mvad97/gitlab_offers_gitlab_certified_associate/
https://www.shell-tips.com/bash/debug-script/
https://www.udemy.com/course/automate/learn/lecture/3465796#overview
https://www.youtube.com/watch?v=v_S64kldryc
https://k21academy.com/docker-kubernetes/certified-kubernetes-administrator-cka-certification-training-step-by-step-activity-guides-hands-on-lab-exercise/
STAR interview technique
https://www.amazon.jobs/en/principles
https://www.mersenne.org/download/
https://learn.flackbox.com/courses/81445/lectures/1177240
ansible
https://rhtapps.redhat.com/promo/course/do007?segment=3
https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html#yaml-syntax
git
https://www.udemy.com/course/git-github-crash-course/learn/lecture/25672796#overview
https://www.youtube.com/watch?v=FyAAIHHClqI
https://www.udemy.com/course/mastering-git-for-beginners-and-experts/learn/lecture/26290392#overview
https://www.youtube.com/watch?v=v_S64kldryc&t=219s
https://www.halvorsen.blog/documents/programming/python/python.php
https://youtu.be/dadKFIEJQbc
https://www.youtube.com/watch?v=v_S64kldryc
https://www.youtube.com/channel/UCs4dFR-31isXFkNuYSBHgLg
https://linuxhint.com/read_file_line_by_line_bash/
https://www.youtube.com/watch?v=kE-6KDyf-0o
https://www.udemy.com/course/creating-your-first-udemy-course-unofficial/learn/lecture/18810984#overview
https://www.youtube.com/watch?v=sNDs6AoNmA8
Thursday, July 29, 2021
Some good urls
git - tag
Tags (label) - Like a tag on your t-shirt @ the store, its a reference name applied to particular commit ID.
Git has option to tag a commit in the repository history so that you can find it easily at the later point in time.
To apply tag to a commit
$ git tag -a <pattern->name of the tag> -m "Commit message" <commitid>
If you apply tag on your local repo, it will only be available to local repo.
is it for yourself or for everyone. If its for everyone, you have to apply from remote repo.
Contents of the tag
$ git show <pattern>
Display list of tags available
$ git tag
Push the tags
$ git push --tags
You need to have permission to push tags.
Delete a tag
$ git tag -d <tag>
Naming conversion
QA_data_epic
Release Version:
R1.2
R1.3
R1.4
Lets do by example
1. Lets first clone the repo
$ git https://github.com/abc/myrepo.git workspace00
2. List all tags available
$ cd workstation; git tag
3. Apply tag
- first find a commit ID and apply
$ git log --oneline -2
$ git tag -a "R1.2" -m "Put comment for release 1.2" <commit_ID>
$ git tag -a "R1.2" -m "Put comment for release 1.2" abc123
Now view the tag
$ git log --oneline -2
now, you can refer this tag to refer to this commit ID.
$ git show R1.2
shows commit ID and message...
Can you have multiple Tags?
Yes, but need to be different type of tag.
Can you apply one tag on one commit and same on different commit id?
- No
Lets apply a tag
$ git tag -a "R1.3 -m "Comment for release 1.3" abc123
You see one commit id has multiple tags on it. But can not use same tag to apply to different commit ID.
$ git tag -a "R1.3" -m "Put comment for release 1.3" abc123
Fatal: Failed to resolve "abc123" as a valid ref.
We can apply a tag only to one commit at a time.
However one commit id can have multiple tag on it.
if you have permission to push the tag, you can do it.
$ git push --tags
Note: In your org, @private repo, you may not have permission to push it.
$ git tag
$ git tag -d R1.3
$ git log --oneline -2
Repo -> Branch -> Commit_ID
Merge VS Rebase
What is rebase?
- Merge is a process of taking content from one branch and put it into another branch. Merge creates a new commit_ID at the destination branch.
- Rebase is in fact a different type of merge. What it does is, it does not add new commit_ID, but it realign the branch.
Lets say you have branch and some commit ID.
You create a new branch (say test) from one commit ID at master.
and you have some new commit IDs on test branch.
Now, go back to your source branch, and if you do a commit; if you modify something on test branch, and if you try to merge something from test branch to its source branch 'master', what happens is -
it will take the changes at the source branch 'master' and from the barnch where you trying to mesge. Both of them put together and it creates new reference which is called 'new commit id' through merge.
Rebase
- On a latest commit ID, it will feel like this branch is created on new commit ID.
Wednesday, July 28, 2021
RHCSA exam prep notes
1. How to reset root password on RHEL8 server?
-> Reboot your system
-> On your boot (timer) menu, press arrow key
-> Press e to edit
-> Go to the link starts with linux
-> Go to end of the line by pressing end on your keyboard
-> type - rd.break enforcing=0
-> press ctrl+x to save and exit
-> You will be at the prompt menu # Emergency mode
-> Mount sysroot # mount -o remount,rw /sysroot/
# chroot /sysroot
# passwd root
autorelabel
-> Exit exit at the prompt
-> Login to your system and run
# restorecon /etc/shadow
2. Assign static IP address
either use nmcli command line tool or
use manually
# cd /etc/sysconfig/network-scripts
# vi ifcfg-eth0 (interface name)
BOOTPROTO="static"
ONBOOT="yes"
IPADDR=192.168.100.100
NETMASK=/24
GATEWAY=192.168.100.1
DNS1=192.68.100.1 - DNS server ip
# systemctl restart network
# systemctl restart NetworkManager
# cat /etc/resolv.conf
# netstat -rn
# ping gateway
# ping google.com # if access to outside @internet will allowed.
# ssh hostname (IP)
3. Disable firewall, enable SElinux
# systemctl stop firewalld
# systemctl disable firewalld
# getenforce
# setenforce 0
# vi /etc/selinux/config
SELINUX=enforcing
4. Set up repo
# vi exam.repo
[examrepo1]
baseurl=http://path
gpgcheck=0
[examrepo2]
baseurl=http:url
gpgcheck=0
# yum clean all
# yum repolist
# yum search httpd
# yum install httpd
5. Assign hostname to your system
# hostnamectl -h
# hostnamectl set-hostname myhost.eg.com
Tuesday, July 27, 2021
Python - day 16 if elif else continue
Session 16
task1: Implement vowel program using if else?
Condition1 condition2 condition3 (Pair conditions)
Note: When we are implementing pair conditions, we should use logical operators to concatinate (join or between).
like
and
or
about
and
True and True -> True
True and Flase -> False
False and True -> False
False or False -> False
When do we use operator?
-> When following statement should execute any one condition is true.
task2
Implement vowel program using if else and which should handle case sensitive?
-> Implement above vower program by using if else and which should handle case sensitive by using pre-defined method?
Design with o/p
task3
write a python program to accept student 3 subject marks and display the result?
Step1: Design with O/P
----------------------
Solution:-
Task4
Implement above program using 6 subjects
task5: Accept person age display person status
rpm: Find out what files are in my rpm package
rpm: Find out what files are in my rpm package
Use following syntax to list the files for already INSTALLED package:
rpm -ql package-name
Use following syntax to list the files for RPM package:
rpm -qlp package.rpm
Type the following command to list the files for gnupg*.rpm package file:
$ rpm -qlp rpm -qlp gnupg-1.4.5-1.i386.rpm
In this example, list files in a installed package called ksh:
$ rpm -ql ksh
See the files installed by a yum package named bash:
repoquery --list bash
repoquery -l '*bash*'
Syntax
repoquery -l {package-name-here}
repoquery -q -l {package-name-here}
repoquery -q -l --plugins {package-name-here}
repoquery -q -l --plugins *{package-name-here}*
repoquery -q -l --plugins http
repoquery -q -l --plugins ksh
here,
-l : List files in package
-q : For rpmquery compatibility (not needed)
--plugins : Enable plug-ins support
List the contents of a package using yum command
1. Open the terminal bash shell and type:
$ sudo yum install yum-utils
2. See the files installed by a yum package named bash:
$ repoquery --list bash
$ repoquery -l '*bash*'
https://www.cyberciti.biz/faq/howto-list-find-files-in-rpm-package/
Creating a CA-Signed Certificate for the Tomcat Server
Creating a CA-Signed Certificate for the Tomcat Server
Procedure
1. From the command prompt, go to the folder that contains the keytool.exe file:
- For Windows systems, go to C:\Program Files\Commvault\ContentStore\jre\bin.
- For Linux systems, go to /usr/lib/jvm/jdkx/bin.
2. To create the keystore file containing the key-pair/certificate to be signed, run the following command:
For Windows:
> keytool -genkey -alias tomcat -keyalg RSA -keystore "C:\mykeystore.jks" -ext SAN=dns:<domainname>
> keytool -genkey -alias tomcat -keyalg RSA -keystore "C:\mykeystore.jks" -ext "SAN=dns:myserv.eg.com,dns:cnameserv.eg.com,EMAIL:admin@eg.com"
For Linux:
# keytool -genkey -alias tomcat -keyalg RSA -keystore "/mykeystore.jks" -ext SAN=dns:<domainname>
3. Generate a CSR, run the following command:
keytool -certreq -keyalg RSA -alias tomcat -file C:\tomcat.csr -keystore C:\mykeystore.jks -validity <daysValid> -ext SAN=dns:<domainname>
keytool -certreq -keyalg RSA -alias tomcat -file C:\tomcat.csr -keystore C:\mykeystore.jks -validity 365 -ext SAN=dns:myserv.eg.com,dns:cnameserv.eg.com
4. Upload the CSR to the CA website, indicate the type of Tomcat server, and submit for signing.
5. Download the root, intermediate, and issued server/domain certificates.
6. Import each signed certificate that is issued by the CA using the following commands:
a. Root certificate:
keytool -import -alias root -keystore C:\mykeystore.jks -trustcacerts -file C:\valicert_class2_root.crt
b. Intermediate certificate:
keytool -import -alias intermed -keystore C:\mykeystore.jks -trustcacerts -file C:\gd_intermediate.crt
c. Issued server/domain certificate:
keytool -import -alias tomcat -keystore C:\mykeystore.jks -trustcacerts -file C:\server_certificate_whatevername.crt
Note: The keystore parameter must be the path to the keystore file that was used to generate the CSR. You must use the same keystore file throughout this procedure.
https://documentation.commvault.com/commvault/v11/article?p=50497.htm
7. Configure certificate
1. Stop the Tomcat Server.
2. Go to software_installation_path/Apache/Conf, and then back up the server.xml file that is part of the Apache configuration.
3. Copy the generated keystore file to software_installation_path/Apache.
4. For new installations of Version 11 SP9 or higher, in the server.xml file, modify the path to the generated keystore file and the keystore password values:
<Certificate certificateKeystoreFile="software_installation_path/Apache/your_file" certificateKeystorePassword="password" certificateKeystoreType="JKS"/>
8. Restart the service
a. Click Start and point to All Programs.
b. Click Commvault > Process Manager.
c. Under the Services tab, right-click a running service and then click Restart.
Python - day15 - if else
Session 14: 7/15/2021
Review
<syntax2>
if <condition>:
st1
st2
else:
st3
st4
a=int(input("Enter first number"))
b=int(input("Please enter 2nd number"))
if a>b:
print("A is greater then B")
else:
print("A is less than B"
====================================
When will you go for if elif else?
When we have more than 2 options to choose from based on condition, we will use if elif else.
In this case, if the condition is true, it will execute the statement and skips the rest of the statement.
On the other hand, if if condition is false, the control will go to elif part and executes and else part skips. but if elif is false, then executes the else part.
Write a python program to accept one letter and check if it is vowel or not?
Step1: Design with o/p
----------------------
o/p
-------------------------
enter your letter:
user enters a, store a into a variable called letter: a
return: it is vowel.
Enter your letter:
user enter b, store b into variable called letter: b
return: its not a vowel.
coding
--------
letter=input("Enter your letter")
if letter=='a':
print("It is a vowel")
elif letter=='e':
print("It is a vowel")
elif letter=='i':
print("It is a vowel')
elif letter=='o':
print("It is a vowel')
elif letter=='u':
print("It is a vowel")
else
print("It is not a vowel")
When you run this code
input - enter ur letter
user enters a
a=a
condition is true, the it is vowel and rest of the condition is skips.
run it again
user enters b
b=a -> false , skips
b=e and keep checking and it will go to else part and returns the value
it is not vowel.
In this code we have 6 conditions, one for vower and other for consonent
Task1:
implement above program by using if else?
letter=input("Enter a letter")
if(letter=='a'|'e'|'i'|'o'|'u'):
print("The letter is vowel")
else:
print("The letter is not a vowel"
task2
Implement above vowel program by using if else and which should handle casesensitive?
Step1: Design with 0/p
=======================
le=input("Enter a letter")
if (le=='A' or le='a' or le=='E' or le=='e' or le=='I' or le=='i' or le=='o' or le=='O' or le=='U' or le=='u'):
print(le, "is a vowel")
else
print(le, "is not a consonant")
Task3
-----
Write a python program to accept student 3 subject marks and display the result?
Step1: Design with O/P
----------------------
o/p
----------
Enter m1 marks: 60
enter m2 marks: 70
enter m3 marks: 80
m1+m2+m3 = 60+70+80 = totmarks
totmarks/3 -> avg marks
Now display result
result can be vary..
avgmarks=70
1. fail: if > 35 in any one subject
2. First division: if >=60
3. 2nd division: if avgmarks is between 50-59
4. 3rd divison: if avg marks is in between 35 to 49
so output form above command is
Result is: Fist division.
Review and complete these tasks before tomorrow class.
----------------------------------
task4:
implement above program using 6 subjects.
task5:
Accept person's age display person status?
Step1: Design with o/p
----------------------
1. if age>=59
print senior citizen
2. if age is in between 25 to 57
- working citizen
3. if age is in between 16 and 24
- college students
4. if age is between 4-15
- school kids
5. if kids are in between 1-3
playing kids
6. invalid selection
o/p
---------------
Please enter your age:
user enters 59
sore 59 into a variable 'age' so age=50
print:
you are senior citizen.
Python - Day14 - if else
Day/Session 14: Condition - 7/14/2021
Simple if
1. if lese
<syntax1>
if <condition>:
st1
else:
st2
When condition 1 is true it will execute statemetn1 and if fails, executes2.
first control will check the condition, if the condition is true, it will execute statement 1. it will skip the else statement.
if the condition is false, it will skip the if statement and goes to else part and executes else part.
<syntax2>
-------------
if <condition>:
st1
st2
else:
st3
st4
control will check the condition. if the condition is true it will enter into if condition and executes the statement 1 and statement 2. It skips the else part.
if condition is false, it skips the if part and conrol goes to else part and executes the else part.
eg1.
Write a python program to accept i and j value. Compare j and j values:
Step1: Design with o/p
----------------------
o/p
-----------------------
enter i value: 10
10 you store into i, i=10
enter j value: 5
store 5 int j, j=5
Write a condititon j is greater than i.
-> open your idle
File -> new file
i=int(input("Please enter i value"))
j=int(input("Enter j value"))
if i>j:
print("i is greater than j")
else:
print("j is greater than j")
run the program
enter 10, 10 will be stored in i
enter next number 5, stored in j.
next compares
i >j -> 10 > j -> condition is true so
it will execute if block. it skips else block.
There is a chance that user may type i=10 and j=10
what happens?
Since if condition evaluates and it is not true, it will skips the if blocks and goes to else part.
Since we don't have choice to write 3rd option, it will executes the else part.
to resolve this issue, we have to go to if, else, if part.
when do you use simple if?
-> we use simple if when particular condition need to verify.
when we have to c
in simple if, we have only one option. That means, when we have one option based on condition, we use simple if.
When do you use if else?
-> When we have 2 options, we want to execute one option based on condition.
3. if elif else
----------------
<SYNTAX>
---------
if <condition1>:
st1
elif <condition2>:
st2
else:
st3
when you have more than 2 options.
first control will check condition1. if condition is true, it will execute st1 and skip elif and else part.
2nd option:
control checks the condition1 and if condition1 is false, it will skip and goes to elif and checks condition2. If its true, it executes and skips else part.
if elif contition 2 is false, it will skip the condition2 and control goes to else part and executes st3.
--------------------------
Eg,
Implement compare i and j using if elif else?
write down all the options
i=int(input("Enter i value:")
j=int(input("Enter j value:")
if i>j:
print("i is greater than j")
elif:
print(j is greater than i")
else:
print("i is equal to j")
run the program:
enter i value: 10 -> 10 will be stored in i
enter j value: 5 -> 5 will stored in j
enter 5 and 10
5 greater than 10 -> skip if
compares elif part
conditon is true, executes
and prints the statemetn 2 and skips the else part
3rd, enter 10 and 10
compares first codition - flase,
end condition: false
executes else part.
you can use elif (3rd condition) but its not necessary. ..
Note: Do'nt use unnecesary conditions.
i=int(input("Enter i value:")
j=int(input("Enter j value:")
if i>j:
print("i is greater than j")
elif:
print(j is greater than i")
elif i==j:
print("i is equal to j")
Q. Implement above program using the requiremet below.
a. user enters 10 and 5
b. User enters 10 and 10 value
c. User enters 5 and 10 values.
Write the code for this condition
Step1: Design with O/p
o/p
---------------------------------
Enter i value: 10 - user enter 10
10 stored in 10
enter j value: 5
user enter 5 and stored in j.
and display
i is greater than j.
j value is : 10
i=int(input("Enter i value:")
j=int(input("Enter j value:")
if i>j:
print("i is greater than j")
print(The value of i is:", i)
elif j>i:
print(j is greater than i")
print("i value is:",j)
elif i==j:
print("i is equal to j")
print("i value us:", i)
print("j value is:",j)
10 adn 5
10>10
condition is true, executes the statemetn.
skips rest elif and else part
5>10 - false if skip
elif 5>10 -> false and executes
review the code above...
Python - day13 - if else
Day 13 - Python 7-13-2021
1. Simple if
<syntax1>
if <condition>:
st1
st2
by using relational operators
> -> Greater than
For eg,
-> 10>5 -> true,
10>20 -> false
10<20 -> true
10<5 -> False
10>=10 -> Yes -> True
10 <=20 -> True
10 <=10 -> True
10==10 -> True
10!=20 -> True
10!=10 -> False
< -> Less than
>=
<=
==
!=
coding
if 10>5:
print("Hi")
print("Hello")
we have two statements.
Which statement is conditional dependent statement?
the first one..
what is the output of this code?
Since first condition is true, it will print hi and hello is regular statement, so it will also prints the output
first condition 10>5 is checked and its true so print Hi is printed
the control goes to next statement, and prints hello.
next,
if 10>20:
print("Hi"
print("Hello")
here you will get only Hello outout
10>20 is false so it skips the statement. goes to next statement and reads it. It prints Hello.
<syntax2>
if <condition>:
statement1
st2
st3
we have two consitional statement. and one regular statement.
First condition is checked and if it is true, following two statements are printed.
lets say if condition is false, it will skip these two statements and go to next.
we have two statement conditional dependent and we have one conditional indenendent.
what happens when condition is false,
if condition is false, it will skip st1 and st2 and following statement is always executed.
if 10>5:
print("Hi")
print("Hello")
print("Bye")
what is the output?
->
Hi
Hello
Bye
10>10 true,
control will enter next statement and print Hi, Hello and goes to regular statement and prints bye.
if 10>50:
print("Hi")
print("Hello")
print("Bye")
what is the output?
o/p
--------
bye
10>50 will check and it false, it skips that section and goes to next section and prints bye.
eg,
Implement divide by zero error program by using simple if to handle run time error.
Design with output(o/p)
------------------------
Enter first number: 10
10 i sstored into a variable a.
Enter 2nd number: 0
user enter 0 and stored it into a variable b.
Please enter 2nd number other than zero: 5
user enter 5 and stored in c.
Division result is: 2
third statement is condition dependence. if user enter b==0:
checking the condition b.
3rd is condition accepting number other than 0.
So, we have to write a program. How to write a prigarm?
a=int(input("Enter first number:"))
b=int(input("Enter 2nd number:"))
if b==0:
b=int(input("Please enter 2nd number other than 0"))
c=a/b
print("Division result is:", c)
here, user enters first number 10 stored in a
user enters 0 and stored on b
it will prompt user to enter a number other than zero.
and result will be printed.
lets say frist user enter 10 and stored in a
2nd user enter 5 and stored in b.
review
o/p
---------------
first
enter first number executes and user enters 10 and stored in a
control goes to 2nd line and user enter 0 and 0 is stoed in b.
after that control will check the condition
0=0 which is true and executes next staetmetn.
please enter 2nd number other than zero.
lets assume, user enters 5 and stored in c.
now, control goes to next statement
c=10/5-2.0
now, print
Divison result is 2.0.
what happens
simple if is only verifies only once so we have to use loops if you have to verify multiple condition.
our user may not be gentle man who enter only one right answer.
Review yesterday's 5 home work.
Python - Day 12 - condition - if else
Day 12. Python
Write a python program to accept 2 numbers from the user and perform division and display division result?
Step1:
Step
vi test.py or open with idle
a=ent(input("Enter first number:"))
b=ent(input("Enter 2nd number:"))
c=a/b
print("Divison result is:", c)
run module
Enter first number:
enter 2nd number:
10 will be storing in a and so on
what happens if user enters 10 and 0?
error: run time error - zeroDivisionError: division by zero
value can not be divide by 0.
observation:
-----------
in the program above, when user entered first number 10 and second number 0, it will throw divide by zero error (run time error). Because of that program execution will be terminated abnormally.
run the program
enter first no: 10
enter 2nd no: 0
error:
Control Statement
in every programming language, control statement is very importand
how to handle run time errors?
- We can handle run time errors in 2 ways.
1. By using login
2. By using exception handling mechanism
1. By using login
- for this, we use control statement
2. Using exception hadling mechanism
-
What can we do using control statement?
- Using comtrol statement, we can control the program control execution flow according to our requirement.
When do we use control statement?
-> When we want to control the program execution flow as per our requirement.
We will go for control statements.
In python, we have 3 types of control statements.
1. Conditional statements
2. Loops
3. Transfer Statements
1. Conditional statements
Lets look at 4 scenarios
---------------------------------
statement 1
statement 2
statement 3
statement 4
statement 5
you have 5 lines of code and execution in order. We don't need any control statement
2nd scenario
---------------------------------
statement 1
statement 2
statement 3 ***
statement 4
statement 5
here staement3 may execute or may not execute. In this type of condition weneed conditional stement
---------------------------------
3nd
statement 1
statement 2
statement 3 ***
statement 4
statement 5
here statement 3 executing multiple time so we use look
---------------------------------
4th
statement 1
statement 2
statement 3 ***
statement 4
statement 5 ***
here, executing 1 and jumping to stetmenet 3 and jumping to 5, we use transfer statement.
as per the situation, we use one of the condition.
=============================
1. Conditional statements
What can we do with conditional statement?
- Using conditional statements, we can execute single statement or multiple statements based on condition.
When do we use conditional statements?
-> When you want to execute single statement or multiple statements based on condition, we will use conditional statements.
Types of conditional statements?
- In python, we have following conditional statements
1. Simple if
2. if else
3. if elif
4. multiple if
5. nested if
HW
Write a program using simple if, if else, if elif, multiple if, and nested if.
==============================
xcellis:
QXS-4 series chassis overview and qxs-456 chassis overview
xcellis I artico documentation center
Friday, July 23, 2021
Some HP Servers
Some HP servers
HPE DL325 G10 128GB 24 cores
HPE DL380p 384 GB 24 cores
HPE DL580 G10 3TB RAM 88 cores
SuperDome Flex 14TB 288 cores
Tuesday, July 20, 2021
ROM Flash Component for Linux - HPE ProLiant DL325 Gen10 (A41) Servers
ROM Flash Component for Linux - HPE ProLiant DL325 Gen10 (A41) Servers
HPE A41 - Bios update
Download the software
Multi-part downloadFile name: firmware-system-a41-2.20_2019_09_17-1.1.x86_64.compsig (2.0 KB)
File name: firmware-system-a41-2.20_2019_09_17-1.1.x86_64.rpm (16 MB)
Installation:
To update firmware from Linux operating system on target server:
Install the RPM package
> rpm -Uvh <filename>.rpm
See where the files land
> rpm -qlp <filename>.rpm
Change to the directory you see in the previous step and run hpsetup by typing ‘./hpsetup’ at the command prompt.
# cd /usr/lib/x86_64-linux-gnu/firmware.../
# ./hpsetup
login with your iLO management account/PW when prompted
type 'y' and enter to update the software.
when prompt for reboot, say y.
Reboot Requirement:
Reboot is required after installation for updates to take effect and hardware stability to be maintained.
https://support.hpe.com/hpesc/public/swd/detail?swItemId=MTX-531cc9e031d243a48b39a6430f#tab3
How to create a Linux RPM package
How to create a Linux RPM package
Posted: November 27, 2020 | byValentin Bajrami (Red Hat Accelerator, Sudoer)
This article shows you how to package a script into an RPM file for easy installation, updating, and removal from your Linux systems. Before I jump into the details, I'll explain what an RPM package is, and how you can install, query, remove, and, most importantly, create one yourself.
This article covers:
- What an RPM package is.
- How to create an RPM package.
- How to install, query, and remove an RPM package.
What is an RPM package?
RPM stands for Red Hat Package Manager. It was developed by Red Hat and is primarily used on Red Hat-based Linux operating systems (Fedora, CentOS, RHEL, etc.).
An RPM package uses the .rpm
extension and is a bundle (a collection) of different files. It can contain the following:
- Binary files, also known as executables (
nmap
,stat
,xattr
,ssh
,sshd
, etc.). - Configuration files (
sshd.conf
,updatedb.conf
,logrotate.conf
, etc.). - Documentation files (
README
,TODO
,AUTHOR
, etc.).
The name of every RPM package is comprised as follows:
<name>-<version>-<release>.<arch>.rpm
An example:
bdsync-0.11.1-1.x86_64.rpm
[ You might also enjoy: Linux package management with YUM and RPM ]
How to create an RPM package
You'll need the following components to build an RPM package:
- A workstation or a virtual machine (I am using Fedora 32 on a virtual machine).
- Software to build the package.
- Source code to package.
- SPEC file to build the RPM.
Installing the required software
The following packages need to be installed to build the RPM package:
$ sudo dnf install -y rpmdevtools rpmlint
After installing rpmdevtools
, we can run the following as a user called sai.local:
$ rpmdev-setuptree
Note: Do not build RPM packages as the root user. This is highly discouraged.
The above command creates the following directory structure:
rpmbuild/
├── BUILD
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
- The BUILD directory is used during the build process of the RPM package. This is where the temporary files are stored, moved around, etc.
- The RPMS directory holds RPM packages built for different architectures and noarch if specified in
.spec
file or during the build. - The SOURCES directory, as the name implies, holds sources. This can be a simple script, a complex C project that needs to be compiled, a pre-compiled program, etc. Usually, the sources are compressed as
.tar.gz
or.tgz
files. - The SPEC directory contains the
.spec
files. The.spec
file defines how a package is built. More on that later. - The SRPMS directory holds the
.src.rpm
packages. A Source RPM package doesn’t belong to an architecture or distribution. The actual.rpm
package build is based on the.src.rpm
package.
A .src.rpm
package is very flexible since it can be built and re-built on every other RPM-based distribution and architecture.
Since you're now familiar with what each directory holds, here's how to create a simple but functional bash script that I'll show you how to package.
Create the bash script
You are probably familiar with the following error:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
da:ea:16:ff:db:d3:5c:0c:12:11:de:dd:2d:ba:fd:2a.
Please contact your system administrator.
Add correct host key in /home/foo/.ssh/known_hosts to get rid of this message.
Offending key in /home/foo/.ssh/known_hosts:42
RSA host key for domain.com has changed, and you have requested strict checking.
Host key verification failed.
So the purpose of this bash script is to remove the offending key from ~/.known_hosts
without having to manually edit the file and remove 42.
Note that ssh-keygen -R
didn’t work in my case, so I created a script called rm-ssh-offendingkey
to automate this process. Here it is:
#!/usr/bin/env bash
rmoffendingKey()
{
local offendingKey="$1"
local st=1
if [[ ! -z $offendingKey && $offendingKey =~ [[:digit:]] ]]; then
sed -i "${offendingKey}d" ~/.ssh/known_hosts
st=$?
else
printf '%s\n' "You need to provide a line number" >&2
fi
return $st
}
rmoffendingKey “$1”
Place the script in the designated directory
To build the script, you need to put it in the directory the RPM build process is expecting it to be in. Create the directory structure:
$ mkdir p ~/rpmbuild/SOURCES/sshscript-1/rm-ssh-offendingkey/
Put the rm-ssh-offendingkey
script in the sshscript-1/rm-ssh-offendingkey
directory.
Subsequently, I .tar.gz
the source as follows:
$ cd ~/rpmbuild/SOURCES/ && tar zcvf sshscripts-1.tar.gz sshscripts-1/
Create the .spec file
To be able to package the script, you need to create a .spec
file. To make a default .spec
file for the package, I am going to use the following syntax:
rpmdev-newspec rm-ssh-offendingkey
Now let’s run tree ~/rpmbuild
to see what the directory structure looks like:
/home/sai.local/rpmbuild/
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│ └── sshscripts-1
│ └── rm-ssh-offendingkey-1
│ └── rm-ssh-offendingkey
├── SPECS
│ └── rm-ssh-offendingkey.spec
└── SRPMS
The generated rm-ssh-offendingkey.spec
file needs some modifications. The generated .spec
file assumes that I am going to compile and build software. Since I'm packaging a simple bash script, I'll remove some unnecessary lines from the .spec
file and add others. For example, I added Requires: bash so that the package requires bash to be installed as well. I also added BuildArch: noarch which means that the package should work on a 32-bit and a 64-bit CPU architecture.
Name: sshscripts
Version: 1
Release: 0
Summary: A simple bash script to remove ssh offending key from known hosts
BuildArch: noarch
License: GPL
#URL:
Source0: %{name}-%{version}.tar.gz
#BuildRequires:
Requires: bash
%description
This is a simple script that somehow automates the removal of ssh offending key from the ~/.ssh/known_hosts file
%prep
%setup -q
%build
%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT/%{_bindir}
cp rm-ssh-offendingkey-1/* $RPM_BUILD_ROOT/%{_bindir}
%clean
rm -rf $RPM_BUILD_ROOT
%files
%{_bindir}/rm-ssh-offendingkey
%changelog
* Sun Nov 8 2020 Valentin Bajrami <valentin.bajrami@slimmer.ai> - 0.1
- First version being packaged
It's important to specify which files are going to be installed under the %files section. Here I’ve explicitly put the following line:
%files
%{_bindir}/rm-ssh-offendingkey
This is sufficient since I only want this script to go to /usr/bin
. Oh, by the way, %{_bindir} is called a macro and translates to /usr/bin
. You can verify this by running:
$> rpm --eval '%{_bindir}'
/usr/bin
Other useful macros to be aware of are:
Macro Translates to
%{_sbindir} /usr/sbin
%{_datadir} /usr/share
%{_sysconfdir} /etc
Checking the .spec file on error (rpmlint)
At the beginning of the article, I installed the rpmlint
package along with rpmdev-tools
, which helps me to check the .spec
file for errors.
$ rpmlint ~/rpmbuild/SPECS/rm-ssh-ffendingkey.spec
/home/sai.local/rpmbuild/SPECS/rm-ssh-ffendingkey.spec: W: invalid-url Source0: sshscripts-1.tar.gz
0 packages and 1 specfiles checked; 0 errors, 1 warnings.
Everthing looks good.
Building the package (rpmbuild)
To build the RPM package you can use the rpmbuild
command. Earlier in this tutorial, I mentioned the difference between the .src.rpm
(Source RPM package) and the .rpm
package.
To create the .src
rpm package, use:
$ rpmbuild -bs ~/rpmbuild/SPECS/rm-ssh-offendingkey.spec
The flags -bs
have the following meanings:
- -b | build
- -s | source
To create the binary .rpm package, use:
$ rpmbuild -bb ~/rpmbuild/SPECS/rm-ssh-offendingkey.spec
The flags -bb
have the following meanings:
- -b | build
- -b | binary
If all goes well, you now have the following directory structure:
$ tree ~/rpmbuild/
/home/sai.local/rpmbuild/
├── BUILD
│ └── sshscripts-1
│ ├── debugfiles.list
│ ├── debuglinks.list
│ ├── debugsourcefiles.list
│ ├── debugsources.list
│ ├── elfbins.list
│ └── rm-ssh-offendingkey-1
│ └── rm-ssh-offendingkey
├── BUILDROOT
├── RPMS
│ └── noarch
│ └── sshscripts-1-0.noarch.rpm
├── SOURCES
│ ├── sshscripts-1
│ │ └── rm-ssh-offendingkey-1
│ │ └── rm-ssh-offendingkey
│ └── sshscripts-1.tar.gz
├── SPECS
│ └── rm-ssh-offendingkey.spec
└── SRPMS
11 directories, 10 files
The following lines are indicating that the RPM package has successfully been built.
├── RPMS
│ └── noarch
│ └── sshscripts-1-0.noarch.rpm
Installing the RPM package
After a successful build of the package, you now can install the RPM package as follows:
$ sudo rpm -ivh ~/rpmbuild/RPMS/noarch/sshscripts-1-0.noarch.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:sshscripts-1-0 ################################# [100%]
Verifying the package has been installed
To verify the package has correctly been installed, run the following command:
$ rpm -qi sshscripts-1
Name : sshscripts
Version : 1
Release : 0
Architecture: noarch
Install Date: Mon 09 Nov 2020 01:29:51 AM CET
Group : Unspecified
Size : 294
License : GPL
Signature : (none)
Source RPM : sshscripts-1-0.src.rpm
Build Date : Mon 09 Nov 2020 01:08:14 AM CET
Build Host : slimmerAI
Summary : A simple bash script to remove ssh offending key from known hosts
Description :
This is a simple script that somehow automates the removal of ssh offending key from the ~/.ssh/known_hosts file
Querying some more info about the package, in the spec file, I did add a %changelog entry. This %changelog entry can be viewed as follows:
$ rpm -q sshscripts-1 --changelog
* Sun Nov 08 2020 Valentin Bajrami <valentin.bajrami@slimmer.ai> - 0.1
- First version being packaged
See what’s in the RPM package
It is very easy and quite convenient to see which files an RPM package contains. This information is retrieved as follows:
$ rpm -ql sshscripts-1
/usr/bin/rm-ssh-offendingkey
Removing the RPM package
Removing the package from the system is just as easy as installing it.
$ sudo rpm -ve sshscripts-1
[sudo] password for sai.local:
Preparing packages...
sshscripts-1-0.noarch
- - v | verbose
- - e | erase
Final thoughts
In this document, I covered the very basics of an RPM package, including how to build, install, and remove it from your system. The .spec
file can get very complicated as you build more advanced software. If you plan to continue your journey on building RPM packages, don’t forget to check out mock and the mock GitHub page.
https://www.redhat.com/sysadmin/create-rpm-package
https://www.redhat.com/en/services/training/rh024-red-hat-linux-technical-overview?intcmp=701f20000012ngPAAQ§ion=Outcomes
CommVault - Creating a CA-Signed Certificate for the Tomcat Server
Creating a CA-Signed Certificate for the Tomcat Server
Procedure
1. From the command prompt, go to the folder that contains the keytool.exe file:
- For Windows systems, go to C:\Program Files\Commvault\ContentStore\jre\bin.
- For Linux systems, go to /usr/lib/jvm/jdkx/bin.
2. To create the keystore file containing the key-pair/certificate to be signed, run the following command:
For Windows:
> keytool -genkey -alias tomcat -keyalg RSA -keystore "C:\mykeystore.jks" -ext SAN=dns:<domainname>
> keytool -genkey -alias tomcat -keyalg RSA -keystore "C:\mykeystore.jks" -ext "SAN=dns:myserv.eg.com,dns:cnameserv.eg.com,EMAIL:admin@eg.com"
For Linux:
# keytool -genkey -alias tomcat -keyalg RSA -keystore "/mykeystore.jks" -ext SAN=dns:<domainname>
3. Generate a CSR, run the following command:
keytool -certreq -keyalg RSA -alias tomcat -file C:\tomcat.csr -keystore C:\mykeystore.jks -validity <daysValid> -ext SAN=dns:<domainname>
keytool -certreq -keyalg RSA -alias tomcat -file C:\tomcat.csr -keystore C:\mykeystore.jks -validity 365 -ext SAN=dns:myserv.eg.com,dns:cnameserv.eg.com
4. Upload the CSR to the CA website, indicate the type of Tomcat server, and submit for signing.
5. Download the root, intermediate, and issued server/domain certificates.
6. Import each signed certificate that is issued by the CA using the following commands:
a. Root certificate:
keytool -import -alias root -keystore C:\mykeystore.jks -trustcacerts -file C:\valicert_class2_root.crt
b. Intermediate certificate:
keytool -import -alias intermed -keystore C:\mykeystore.jks -trustcacerts -file C:\gd_intermediate.crt
c. Issued server/domain certificate:
keytool -import -alias tomcat -keystore C:\mykeystore.jks -trustcacerts -file C:\server_certificate_whatevername.crt
Note: The keystore parameter must be the path to the keystore file that was used to generate the CSR. You must use the same keystore file throughout this procedure.
7. Configure certificate
1. Stop the Tomcat Server.
2. Go to software_installation_path/Apache/Conf, and then back up the server.xml file that is part of the Apache configuration.
3. Copy the generated keystore file to software_installation_path/Apache.
4. For new installations of Version 11 SP9 or higher, in the server.xml file, modify the path to the generated keystore file and the keystore password values:
<Certificate certificateKeystoreFile="software_installation_path/Apache/your_file" certificateKeystorePassword="password" certificateKeystoreType="JKS"/>
8. Restart the service
a. Click Start and point to All Programs.
b. Click Commvault > Process Manager.
c. Under the Services tab, right-click a running service and then click Restart.
https://documentation.commvault.com/commvault/v11/article?p=50497.htm
Windows - Registry backup in Windows Server 2019/2016
Registry backup in Windows Server 2019/2016
Press WinKey+R or R click on start menu and click on Run
- Type regedit and click ok
-> Click on file -> Export
-> Specify the location and save it with today's data: regedit_bk_07202021
Restore registry from backup
-> Open the registry editor
-> Click on file -> import
-> Specify the backup location
-> Select the file you downloaded before
-> wait for a while, done ..
Paste from Notepad into Word without getting extra line breaks after every line
How to paste content from notes to windows words without line break?
Win-Word adds spacing after each paragraph, and it considers each pasted line a new paragraph.
Solution:
-> Select all text (e.g. Control-A)
-> Right-click the selected text
-> Then select Paragraph.
-> Check the box "Don't add space between paragraphs of the same style
Friday, July 16, 2021
pyton class
Session 14: 7/15/2021
Review
<syntax2>
if <condition>:
st1
st2
else:
st3
st4
a=int(input("Enter first number"))
b=int(input("Please enter 2nd number"))
if a>b:
print("A is greater then B")
else:
print("A is less than B"
====================================
When will you go for if elif else?
When we have more than 2 options to choose from based on condition, we will use if elif else.
In this case, if the condition is true, it will execute the statement and skips the rest of the statement.
On the other hand, if if condition is false, the control will go to elif part and executes and else part skips. but if elif is false, then executes the else part.
Write a python program to accept one letter and check if it is vowel or not?
Step1: Design with o/p
----------------------
o/p
-------------------------
enter your letter:
user enters a, store a into a variable called letter: a
return: it is vowel.
Enter your letter:
user enter b, store b into variable called letter: b
return: its not a vowel.
coding
--------
letter=input("Enter your letter")
if letter=='a':
print("It is a vowel")
elif letter=='e':
print("It is a vowel")
elif letter=='i':
print("It is a vowel')
elif letter=='o':
print("It is a vowel')
elif letter=='u':
print("It is a vowel")
else
print("It is not a vowel")
When you run this code
input - enter ur letter
user enters a
a=a
condition is true, the it is vowel and rest of the condition is skips.
run it again
user enters b
b=a -> false , skips
b=e and keep checking and it will go to else part and returns the value
it is not vowel.
In this code we have 6 conditions, one for vower and other for consonent
Task1:
implement above program by using if else?
letter=input("Enter a letter")
if(letter=='a'|'e'|'i'|'o'|'u'):
print("The letter is vowel")
else:
print("The letter is not a vowel"
task2
Implement above vowel program by using if else and which should handle casesensitive?
Step1: Design with 0/p
=======================
le=input("Enter a letter")
if (le=='A' or le='a' or le=='E' or le=='e' or le=='I' or le=='i' or le=='o' or le=='O' or le=='U' or le=='u'):
print(le, "is a vowel")
else
print(le, "is not a consonant")
Task3
-----
Write a python program to accept student 3 subject marks and display the result?
Step1: Design with O/P
----------------------
o/p
----------
Enter m1 marks: 60
enter m2 marks: 70
enter m3 marks: 80
m1+m2+m3 = 60+70+80 = totmarks
totmarks/3 -> avg marks
Now display result
result can be vary..
avgmarks=70
1. fail: if > 35 in any one subject
2. First division: if >=60
3. 2nd division: if avgmarks is between 50-59
4. 3rd divison: if avg marks is in between 35 to 49
so output form above command is
Result is: Fist division.
Review and complete these tasks before tomorrow class.
----------------------------------
task4:
implement above program using 6 subjects.
task5:
Accept person's age display person status?
Step1: Design with o/p
----------------------
1. if age>=59
print senior citizen
2. if age is in between 25 to 57
- working citizen
3. if age is in between 16 and 24
- college students
4. if age is between 4-15
- school kids
5. if kids are in between 1-3
playing kids
6. invalid selection
o/p
---------------
Please enter your age:
user enters 59
sore 59 into a variable 'age' so age=50
print:
you are senior citizen.
Git branch show detached HEAD
Git branch show detached HEAD 1. List your branch $ git branch * (HEAD detached at f219e03) 00 2. Run re-set hard $ git reset --hard 3. ...
-
snmpconfig command allow you to managge snmpv1/v3 agent configuration on SAN switch. Event trap level is mapped with event severity level....
-
Firmware upgrade on HPE SuperDom Flex 280 - prerequisites tasks a. Set up repo b. Upload firmware to your webserver 1. For foundation so...
-
Disabling the Telnet protocol on Brocade SAN switches By default, telnet is enabled on Brocade SAN switches. As part of security hardening o...