<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://halfface.se/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ekaanbj</id>
	<title>Halfface - User contributions [en-gb]</title>
	<link rel="self" type="application/atom+xml" href="https://halfface.se/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ekaanbj"/>
	<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Special:Contributions/Ekaanbj"/>
	<updated>2026-04-19T07:27:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ubuntu&amp;diff=16606</id>
		<title>Ubuntu</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ubuntu&amp;diff=16606"/>
		<updated>2026-04-16T13:05:11Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Installed packages. */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Which package contains file==&lt;br /&gt;
 apt-file search filename&lt;br /&gt;
 dpkg -S /usr/sbin/apache2&lt;br /&gt;
&lt;br /&gt;
==List contents of package==&lt;br /&gt;
 apt-file list packagename&lt;br /&gt;
 dpkg -c &amp;lt;$package.deb&amp;gt;&lt;br /&gt;
 dpkg -c pgpool2&lt;br /&gt;
 dpkg -L &amp;lt;package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Update apt-file database=&lt;br /&gt;
 apt-file update&lt;br /&gt;
=updates the list of available packages and their versions=&lt;br /&gt;
 apt-get update&lt;br /&gt;
&lt;br /&gt;
=upgrade single package=&lt;br /&gt;
 apt --only-upgrade install apache2&lt;br /&gt;
=Is restart of service requirred=&lt;br /&gt;
 needrestart&lt;br /&gt;
&lt;br /&gt;
=show installed packages in cronological order=&lt;br /&gt;
 zcat -f /var/log/dpkg.log* | grep &amp;quot;\ install\ &amp;quot; | sort | tail&lt;br /&gt;
&lt;br /&gt;
=Installed packages.=&lt;br /&gt;
 dpkg-query -W&lt;br /&gt;
 dpkg --get-selections&lt;br /&gt;
 apt-get install openssh-client openssh-server&lt;br /&gt;
&lt;br /&gt;
=List packages on one machine and install on another.=&lt;br /&gt;
 dpkg --get-selections &amp;gt; installed-software&lt;br /&gt;
 dpkg --set-selections &amp;lt; installed-software&lt;br /&gt;
 dselect&lt;br /&gt;
&lt;br /&gt;
=Upgrade.=&lt;br /&gt;
 sudo apt-get -y update&lt;br /&gt;
 sudo apt-get -y upgrade&lt;br /&gt;
&lt;br /&gt;
=Which package provides.=&lt;br /&gt;
 http://packages.ubuntu.com/&lt;br /&gt;
&lt;br /&gt;
=List available linux packages.=&lt;br /&gt;
 apt-cache pkgnames&lt;br /&gt;
&lt;br /&gt;
=install local deb packages=&lt;br /&gt;
 sudo dpkg -i 1.deb 2.deb&lt;br /&gt;
=remove delete uninstall deb package=&lt;br /&gt;
 apt remove &amp;lt;deb&amp;gt;&lt;br /&gt;
 dpkg -r &amp;lt;deb&amp;gt;&lt;br /&gt;
Remove config files too.&lt;br /&gt;
 apt purge &amp;lt;deb&amp;gt;&lt;br /&gt;
 dpkg -P &amp;lt;deb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=add sources=&lt;br /&gt;
find sources.&lt;br /&gt;
 cat $(find /etc/apt/sources.list{,.d} -type f )| bash_clean_comments | awk &#039;{print $2 &amp;quot; &amp;quot; $3}&#039; | sort | uniq&lt;br /&gt;
&lt;br /&gt;
=install from experimental=&lt;br /&gt;
 # add next row to /etc/apt/sources.list and do an apt-get update&lt;br /&gt;
 deb http://ftp.debian.org/debian/ experimental main contrib non-free&lt;br /&gt;
 # Then install latest version of ekiga.&lt;br /&gt;
 apt-get -t experimental install ekiga&lt;br /&gt;
&lt;br /&gt;
=which version of debian=&lt;br /&gt;
 lsb_release&lt;br /&gt;
&lt;br /&gt;
=add gpg key=&lt;br /&gt;
 gpg --keyserver subkeys.pgp.net --recv-keys AED4B06F473041FA&lt;br /&gt;
 gpg -a --export AED4B06F473041FA | sudo apt-key add -&lt;br /&gt;
=clean /var/cache/apt=&lt;br /&gt;
 sudo apt-get clean&lt;br /&gt;
&lt;br /&gt;
=which version is available and installed(*** means installed)=&lt;br /&gt;
 apt-cache policy apache2-bin&lt;br /&gt;
=Read values from the debconf database=&lt;br /&gt;
 debconf-get-selections | grep ^iptables-persistent&lt;br /&gt;
=Set value in debconf database=&lt;br /&gt;
 echo newrelic-php5 newrelic-php5/application-name string &amp;quot;blablabla&amp;quot; | debconf-set-selections&lt;br /&gt;
=dowload deb=&lt;br /&gt;
 sudo apt-get install --download-only --reinstall sudo&lt;br /&gt;
 apt-get download &amp;lt;package-name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=verify deb package(changes)=&lt;br /&gt;
checksums are stored /var/lib/dpkg/info/elasticsearch.md5sums&lt;br /&gt;
 dpkg --verify elasticsearch&lt;br /&gt;
 ??5?????? c /etc/elasticsearch/elasticsearch.yml&lt;br /&gt;
 ??5?????? c /etc/elasticsearch/jvm.options&lt;br /&gt;
&lt;br /&gt;
=extract deb=&lt;br /&gt;
 dpkg-deb -xv elasticsearch_7.9.3_amd64.deb .&lt;br /&gt;
=configure networks=&lt;br /&gt;
 /etc/netplan/10-eth0.yaml&lt;br /&gt;
 netplan apply&lt;br /&gt;
=add static route=&lt;br /&gt;
/etc/network/interfaces&lt;br /&gt;
 #--------------------------------------------#&lt;br /&gt;
 # Setup eth0 - connected to private LAN/VLAN #&lt;br /&gt;
 #--------------------------------------------# &lt;br /&gt;
 auto eth0&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet static&lt;br /&gt;
         address 10.70.201.5&lt;br /&gt;
         netmask 255.255.255.192&lt;br /&gt;
         ### Ubuntu Linux add persistent route command ###&lt;br /&gt;
         post-up route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.70.201.6&lt;br /&gt;
=add static route netplan way=&lt;br /&gt;
 network:&lt;br /&gt;
     ethernets:&lt;br /&gt;
         enp0s3:&lt;br /&gt;
             dhcp4: false&lt;br /&gt;
             addresses: [192.168.1.202/24]&lt;br /&gt;
             gateway4: 192.168.1.1&lt;br /&gt;
             nameservers:&lt;br /&gt;
               addresses: [8.8.8.8,8.8.4.4,192.168.1.1]&lt;br /&gt;
             routes:&lt;br /&gt;
             - to: 172.16.0.0/24&lt;br /&gt;
               via: 192.168.1.100&lt;br /&gt;
     version: 2&lt;br /&gt;
 # netplan apply&lt;br /&gt;
==multiple interface==&lt;br /&gt;
 /etc/netplan/50-cloud-init.yaml&lt;br /&gt;
 network:&lt;br /&gt;
     version: 2&lt;br /&gt;
     ethernets:&lt;br /&gt;
         ens3:&lt;br /&gt;
             dhcp4: true&lt;br /&gt;
             dhcp6: true&lt;br /&gt;
             match:&lt;br /&gt;
                 macaddress: fa:16:3e:84:e6:98&lt;br /&gt;
             mtu: 1500&lt;br /&gt;
             set-name: ens3&lt;br /&gt;
         ens4:&lt;br /&gt;
             dhcp4: true&lt;br /&gt;
             dhcp6: false&lt;br /&gt;
             match:&lt;br /&gt;
                 macaddress: fa:16:3e:20:fa:72&lt;br /&gt;
             mtu: 1450&lt;br /&gt;
             set-name: ens4&lt;br /&gt;
             dhcp4-overrides:&lt;br /&gt;
                 route-metric: 200&lt;br /&gt;
         ens5:&lt;br /&gt;
             dhcp4: true&lt;br /&gt;
             dhcp6: false&lt;br /&gt;
             match:&lt;br /&gt;
                 macaddress: fa:16:3e:3a:7a:a4&lt;br /&gt;
             mtu: 1450&lt;br /&gt;
             set-name: ens5&lt;br /&gt;
             dhcp4-overrides:&lt;br /&gt;
                 route-metric: 200&lt;br /&gt;
&lt;br /&gt;
=enable sysstat=&lt;br /&gt;
 apt -y install sysstat&lt;br /&gt;
 sed -i &#039;s/ENABLED=&amp;quot;false&amp;quot;/ENABLED=&amp;quot;true&amp;quot;/g&#039; /etc/default/sysstat&lt;br /&gt;
 systemctl restart sysstat&lt;br /&gt;
&lt;br /&gt;
=automatic update=&lt;br /&gt;
Disable automatic updates.&lt;br /&gt;
 sed -i &#039;s/APT::Periodic::Unattended-Upgrade &amp;quot;1&amp;quot;;/APT::Periodic::Unattended-Upgrade &amp;quot;0&amp;quot;;/g&#039; /etc/apt/apt.conf.d/20auto-upgrades&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Unix]]&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Elasticsearch&amp;diff=16605</id>
		<title>Elasticsearch</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Elasticsearch&amp;diff=16605"/>
		<updated>2026-04-16T08:41:50Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* count shards */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=what does it mean=&lt;br /&gt;
 cdm                 Continuous Diagnostics Mitigation&lt;br /&gt;
 cdm                 client data master&lt;br /&gt;
&lt;br /&gt;
=Add password to .netrc and use curl -n to use creds=&lt;br /&gt;
 ~/.netrc &lt;br /&gt;
 machine localhost&lt;br /&gt;
 login &amp;lt;username&amp;gt;&lt;br /&gt;
 password &amp;lt;password&amp;gt;&lt;br /&gt;
=count entries in index=&lt;br /&gt;
 GET /&amp;lt;indicie&amp;gt;/_count&lt;br /&gt;
=get latest content from indicies.=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/&amp;lt;index&amp;gt;/_search&amp;quot; -H &#039;Content-Type: application/json&#039; -d &#039;{&lt;br /&gt;
  &amp;quot;size&amp;quot;: 1,&lt;br /&gt;
  &amp;quot;sort&amp;quot;: [&lt;br /&gt;
    { &amp;quot;@timestamp&amp;quot;: { &amp;quot;order&amp;quot;: &amp;quot;desc&amp;quot; } }&lt;br /&gt;
  ]&lt;br /&gt;
}&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Stats of elasticsearch=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_nodes/stats/jvm?pretty&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Who is master=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_cat/master?v&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Are we recovering=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=List indicies by size=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_cat/indices?v&amp;amp;bytes=b&amp;amp;s=store.size:desc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=list shards by size=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -skn &amp;quot;https://localhost:9200/_cat/shards?h=index,shard,prirep,store,ip,node&amp;amp;bytes=b&amp;amp;s=store:desc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=View 5 log entries from biggest indicie= &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -X GET &amp;quot;https://localhost:9200/&amp;lt;indicie&amp;gt;/_search?size=5&amp;amp;pretty&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Search for a string of a log entry in the biggest indicie.=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -X GET &amp;quot;https://localhost:9200/.ds-logs-system.syslog-default-2022.08.22-000006/_search?pretty&amp;quot; -H &#039;Content-Type: application/json&#039; -d&#039;{&lt;br /&gt;
  &amp;quot;query&amp;quot;: {&lt;br /&gt;
    &amp;quot;match&amp;quot;: {&lt;br /&gt;
      &amp;quot;message&amp;quot;: &amp;quot;&amp;lt;string&amp;gt;&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&#039; | jq -r .hits.hits[]._source.message&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=list snapshot setup=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_snapshot?pretty&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Look at snapshots=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_snapshot/elastic_snapshots_repo/_all?pretty&amp;quot; | jq -r &#039;.snapshots | sort_by(.end_time)[] | .snapshot&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=List indices inside snapshot=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_snapshot/elastic_snapshots_repo/daily-snapshots-2025.09.10-ctbhwxs5r4yl4okmthrilq?pretty&amp;quot; | jq -r &#039;.snapshots[].indices | sort[]&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=restore index=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X POST &amp;quot;https://localhost:9200/_snapshot/elastic_snapshots_repo/&amp;lt;snapshot_name&amp;gt;/_restore&amp;quot; -H &#039;Content-Type: application/json&#039; -d &#039;{&lt;br /&gt;
  &amp;quot;indices&amp;quot;: &amp;quot;&amp;lt;index_to_restore&amp;gt;&amp;quot;,&lt;br /&gt;
  &amp;quot;ignore_unavailable&amp;quot;: true,&lt;br /&gt;
  &amp;quot;include_global_state&amp;quot;: false&lt;br /&gt;
}&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=look at status of recover=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_cat/recovery?v&amp;amp;h=index,shard,stage,source_host,target_host,total,recovered,percent,recovery_type&amp;amp;bytes=b&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Remove all indices=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -n -sk -X GET &amp;quot;https://localhost:9200/_cat/indices?h=index&amp;amp;s=store.size:desc&amp;quot; | while read INDEX ; do echo &#039;*&#039; &amp;quot;${INDEX}&amp;quot; ; echo curl -n -sk -X DELETE &amp;quot;https://localhost:9200/${INDEX}&amp;quot; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Delete empty indices=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Delete empty indices&lt;br /&gt;
curl -skn &amp;quot;https://localhost:9200/_cat/indices?h=index,docs.count&amp;quot; | awk &#039;$2 == 0 {print $1}&#039; | while read idx; do&lt;br /&gt;
  curl -skn -X DELETE &amp;quot;https://localhost:9200/$idx&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=count shards=&lt;br /&gt;
 curl -snk &amp;quot;https://localhost:9200/_cat/shards?v&amp;quot; | wc -l&lt;br /&gt;
=elastic-agent=&lt;br /&gt;
Test config&lt;br /&gt;
 yq .outputs.default /opt/Elastic/Agent/elastic-agent.yml&lt;br /&gt;
 curl -u &amp;lt;username:password&amp;gt; &amp;lt;hosts&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Mysql&amp;diff=16604</id>
		<title>Mysql</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Mysql&amp;diff=16604"/>
		<updated>2026-04-15T15:11:23Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Uptime */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Introduction=&lt;br /&gt;
&lt;br /&gt;
In the structure of MySQL, there are databases, tables, records, and fields. Databases hold together tables, tables hold together records, records hold together fields, which contain the actual information.&lt;br /&gt;
&lt;br /&gt;
=setup database=&lt;br /&gt;
 mysql_install_db --user=mysql&lt;br /&gt;
=select whithout column names=&lt;br /&gt;
 mysql --skip-column-names&lt;br /&gt;
&lt;br /&gt;
=Create user and grant accsess.=&lt;br /&gt;
mysql 5&lt;br /&gt;
 GRANT [privileges] ON database.* TO &#039;&amp;lt;user&amp;gt;&#039;@&#039;&amp;lt;host&amp;gt;&#039; IDENTIFIED BY &#039;&amp;lt;password&amp;gt;&#039;;&lt;br /&gt;
 mysql -e &amp;quot;grant all privileges on puppetdb.* to puppet@&#039;localhost&#039; identified by &#039;puppet&#039;;FLUSH PRIVILEGES;&amp;quot;&lt;br /&gt;
mysql 8&lt;br /&gt;
 mysql -e &amp;quot;CREATE USER IF NOT EXISTS &#039;&amp;lt;user&amp;gt;&#039;@&#039;%&#039; IDENTIFIED BY &#039;&amp;lt;password&amp;gt;&#039;; GRANT ALL PRIVILEGES ON *.* TO &#039;&amp;lt;user&amp;gt;&#039;@&#039;%&#039;; FLUSH PRIVILEGES;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Change root password=&lt;br /&gt;
 mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
=revoke permissions=&lt;br /&gt;
 mysql -e &amp;quot;REVOKE ALL ON *.* FROM &#039;user&#039;@&#039;%&#039; ; &amp;quot;&lt;br /&gt;
=delete user=&lt;br /&gt;
 mysql -e &amp;quot;DROP USER &#039;user&#039;@&#039;%&#039;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Clear flush MySQL hosts cache dns=&lt;br /&gt;
 # Look at current state.&lt;br /&gt;
 use performance_schema;select host,ip from host_cache;&lt;br /&gt;
 # Clear the cache with below SQL commands then you are all set.&lt;br /&gt;
 flush hosts;&lt;br /&gt;
&lt;br /&gt;
=Change password=&lt;br /&gt;
==Alternative1.==&lt;br /&gt;
 use mysql;SET PASSWORD FOR &#039;user&#039;@&#039;hostname&#039; = PASSWORD(&#039;passwordhere&#039;);&lt;br /&gt;
==Alternative2.==&lt;br /&gt;
 update mysql.user set password = password(&#039;&#039;) where user = &#039;username&#039;;&lt;br /&gt;
==Alternative3.==&lt;br /&gt;
 UPDATE mysql.user SET Password=PASSWORD(&#039;new-password-here&#039;) WHERE User=&#039;user-name-here&#039; AND Host=&#039;host-name-here&#039;;&lt;br /&gt;
&lt;br /&gt;
==Alternative4==&lt;br /&gt;
 mysql&amp;gt; update user_auth set password=md5(&#039;admin&#039;) where username=&#039;admin&#039;;&lt;br /&gt;
==aternative5==&lt;br /&gt;
 UPDATE mysql.user SET authentication_string=password(&#039;$Passw0rd&#039;) WHERE user=&#039;$mysql_user&#039;;&lt;br /&gt;
&lt;br /&gt;
=backup databases=&lt;br /&gt;
==backup all databases==&lt;br /&gt;
 mysqldump --all-databases -p &amp;gt; /temp/mysql&lt;br /&gt;
==backup single table==&lt;br /&gt;
 mysqldump db_name table_name &amp;gt; table_name.sql&lt;br /&gt;
&lt;br /&gt;
==backup certain databases.==&lt;br /&gt;
 mysqldump --opt -uroot -p --databases IPmon IPdiscover IPcollector &amp;gt; all.sql&lt;br /&gt;
&lt;br /&gt;
==backup structure of dabases.==&lt;br /&gt;
 mysqldump --compact --no-data --all-databases &amp;gt; /tmp/database_structure.txt&lt;br /&gt;
&lt;br /&gt;
==dump database in innodb consistent way.==&lt;br /&gt;
 mysqldump --single-transaction -u --all-databases &amp;gt; /temp/alldb_june23.sql&lt;br /&gt;
# example command to backup single database.&lt;br /&gt;
 DATABASE=mediawiki ; mysqldump --database ${DATABASE} --single-transaction | gzip &amp;gt; ${DATABASE}.${HOSTNAME}.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).sql.gz&lt;br /&gt;
&lt;br /&gt;
=restore compressed db=&lt;br /&gt;
 zcat IPadmin.1478001970.sql.gz | mysql&lt;br /&gt;
&lt;br /&gt;
=Create database=&lt;br /&gt;
 create database puppetdb;&lt;br /&gt;
&lt;br /&gt;
=Delete mysql database=&lt;br /&gt;
 drop database puppetdb;&lt;br /&gt;
&lt;br /&gt;
=Delete mysql database table=&lt;br /&gt;
 drop table if exists recipes;&lt;br /&gt;
&lt;br /&gt;
=Delete row=&lt;br /&gt;
 delete FROM user WHERE id IN (2);&lt;br /&gt;
&lt;br /&gt;
=Create table. This creates table with two colums, id with datatype int, and data of the type varchar.=&lt;br /&gt;
 create table testtable (id int, data varchar(100));&lt;br /&gt;
 CREATE TABLE developers ( name VARCHAR(128), email VARCHAR(128), job VARCHAR(128));&lt;br /&gt;
&lt;br /&gt;
*Connect to mysql database.&lt;br /&gt;
 mysql -u root -p password -h mysqlhost&lt;br /&gt;
&lt;br /&gt;
=Show databases.=&lt;br /&gt;
 show databases;&lt;br /&gt;
&lt;br /&gt;
=Choose database to work with.=&lt;br /&gt;
 use puppetdb;&lt;br /&gt;
&lt;br /&gt;
=Show tables=&lt;br /&gt;
 show tables;&lt;br /&gt;
 SHOW TABLES like &#039;catalog_category_product_index_store%&#039;;&lt;br /&gt;
&lt;br /&gt;
=show tables status=&lt;br /&gt;
Show more information about tables.&lt;br /&gt;
 mysql -D jasperserver -e &amp;quot;show table status like &#039;JIContentResource&#039; \\G&amp;quot;&lt;br /&gt;
Show more information about one table.&lt;br /&gt;
 show table status like &#039;tablename&#039; \G&lt;br /&gt;
&lt;br /&gt;
=Show columns in table.=&lt;br /&gt;
 show columns from hosts;&lt;br /&gt;
&lt;br /&gt;
=Show which data is stored in a table in descending order limit to 100=&lt;br /&gt;
Reverse sort order.&lt;br /&gt;
 select * from hosts order by id desc limit 100;&lt;br /&gt;
&lt;br /&gt;
=Show all data from table=&lt;br /&gt;
 mysql&amp;gt; select * from hosts;&lt;br /&gt;
&lt;br /&gt;
=Show all ip in sort ascending order=&lt;br /&gt;
 mysql&amp;gt; select * from hosts order by ip asc;&lt;br /&gt;
&lt;br /&gt;
=Show column where page_counter is max in table page. Other values are min, avg, sum=&lt;br /&gt;
 select max(page_counter) from page;&lt;br /&gt;
Select column with highest value.&lt;br /&gt;
 select * from orderreport where OrderReportId = (select max(OrderReportId) from orderreport)\G&lt;br /&gt;
&lt;br /&gt;
=How many rows are on the table.=&lt;br /&gt;
 select count(*) from database.table;&lt;br /&gt;
 SELECT table_name, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = &#039;${DATABASE}&#039;;&lt;br /&gt;
&lt;br /&gt;
=show value from query=&lt;br /&gt;
 select * from wp_options where option_name=&#039;home&#039;;&lt;br /&gt;
=match multiple strings=&lt;br /&gt;
 select * from database.table where name REGEXP &#039;string1|2string&#039; limit 100;&lt;br /&gt;
 WHERE (im.Status=&#039;open&#039; or im.Status=&#039;new&#039; or im.Status=&#039;resolved&#039;&lt;br /&gt;
&lt;br /&gt;
=change value in database=&lt;br /&gt;
 UPDATE wp_options SET option_value=&#039;http://www.ongamenetwork.com&#039; WHERE option_name=&#039;home&#039;;&lt;br /&gt;
&lt;br /&gt;
=Run sql code. Offen used to setup database.=&lt;br /&gt;
 source /file              &lt;br /&gt;
&lt;br /&gt;
=Run command in system.=&lt;br /&gt;
 system command&lt;br /&gt;
&lt;br /&gt;
=Shows status of database server=&lt;br /&gt;
 status;&lt;br /&gt;
&lt;br /&gt;
=Show information about table=&lt;br /&gt;
 describe table;&lt;br /&gt;
&lt;br /&gt;
=Show more information about table, show constrains on tables=&lt;br /&gt;
 show create table table&lt;br /&gt;
 show create table database.table \G&lt;br /&gt;
=foreign keys to a table or column=&lt;br /&gt;
 SELECT &lt;br /&gt;
  TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME&lt;br /&gt;
 FROM&lt;br /&gt;
  INFORMATION_SCHEMA.KEY_COLUMN_USAGE&lt;br /&gt;
 WHERE&lt;br /&gt;
  REFERENCED_TABLE_SCHEMA = &#039;${DATABASE}&#039; AND&lt;br /&gt;
  REFERENCED_TABLE_NAME = &#039;${TABLE}&#039;;&lt;br /&gt;
=set constrains=&lt;br /&gt;
 mysql -e &#039;ALTER TABLE Database ADD Table `Refstate_execution35` FOREIGN KEY (`state_execution_id`) REFERENCES `state_execution` (`state_execution_id`);&#039;&lt;br /&gt;
&lt;br /&gt;
=get auto_increment=&lt;br /&gt;
 SELECT AUTO_INCREMENT FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = &#039;database&#039; AND TABLE_NAME = &#039;table&#039;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Put some data into a table=&lt;br /&gt;
 INSERT INTO testtable (id,data) VALUES (&#039;66&#039;,&#039;The beast whas here&#039;);&lt;br /&gt;
&lt;br /&gt;
=Change id value 17 to 18 in testtable= &lt;br /&gt;
 UPDATE testtable set id=18 where id=17 ;&lt;br /&gt;
&lt;br /&gt;
=Show master/slave status.=&lt;br /&gt;
 show master status \G&lt;br /&gt;
&lt;br /&gt;
=Show master/slave status.=&lt;br /&gt;
 show slave status \G&lt;br /&gt;
=start slave=&lt;br /&gt;
 START SLAVE;&lt;br /&gt;
=stop slave=&lt;br /&gt;
 stop slave;&lt;br /&gt;
&lt;br /&gt;
=Show permission on database=&lt;br /&gt;
 select * from information_schema.user_privileges;&lt;br /&gt;
 SHOW GRANTS FOR &#039;user&#039;@&#039;%host.com&#039;;&lt;br /&gt;
==Who has access from which machine.==&lt;br /&gt;
 use mysql;SELECT host,user FROM user;&lt;br /&gt;
&lt;br /&gt;
=Import sql script to database.=&lt;br /&gt;
 mysql ongamenetwork &amp;lt; /tmp/ongamenetwork.new.sql&lt;br /&gt;
&lt;br /&gt;
=Delete logs=&lt;br /&gt;
 # List logs.&lt;br /&gt;
 show master logs;&lt;br /&gt;
 # Delete oldest logs.&lt;br /&gt;
 purge master logs to &#039;logfil&#039;;&lt;br /&gt;
=log verbosity before 5.7.2=&lt;br /&gt;
 SELECT @@log_warnings;&lt;br /&gt;
 SET GLOBAL log_warnings=2;&lt;br /&gt;
=log verbosity 5.7.2=&lt;br /&gt;
 SELECT @@log_error_verbosity;&lt;br /&gt;
 SET GLOBAL log_error_verbosity=2&lt;br /&gt;
&lt;br /&gt;
=maxconnections in runtime.=&lt;br /&gt;
 show variables like &#039;%connect%&#039;;&lt;br /&gt;
=set maxconnetions in runtime=&lt;br /&gt;
 mysql -e &amp;quot;SET GLOBAL max_connections = 300;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=information about mysql connection=&lt;br /&gt;
 mysql -u test -e &#039;\s&#039;&lt;br /&gt;
&lt;br /&gt;
=What is happening in database. Who is connected to database=&lt;br /&gt;
 show processlist;&lt;br /&gt;
 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST;&lt;br /&gt;
 mysql -e &#039;SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where NOT COMMAND=&amp;quot;Sleep&amp;quot;;&#039;&lt;br /&gt;
&lt;br /&gt;
=database usage. Is database using myisam or innodb=&lt;br /&gt;
 show table status;&lt;br /&gt;
On all databases&lt;br /&gt;
 mysql --skip-column-names -e &amp;quot;SELECT DISTINCT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE  SCHEMA_NAME NOT IN (&#039;information_schema&#039;, &#039;performance_schema&#039;, &#039;mysql&#039;, &#039;sys&#039;) ORDER BY SCHEMA_NAME;&amp;quot; | while read i ; do echo &#039;***&#039; $i ; mysql -e &amp;quot;use $i ; show table status;&amp;quot; ; done | column_tab | less&lt;br /&gt;
Table status on all databases.&lt;br /&gt;
 SELECT * FROM information_schema.tables WHERE table_schema = DATABASE();&lt;br /&gt;
 SELECT * FROM information_schema.tables WHERE table_schema IN (SELECT DISTINCT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE  SCHEMA_NAME NOT IN (&#039;information_schema&#039;, &#039;performance_schema&#039;, &#039;mysql&#039;, &#039;sys&#039;) ORDER BY SCHEMA_NAME);&lt;br /&gt;
&lt;br /&gt;
=repair myisam table=&lt;br /&gt;
 REPAIR TABLE table USE_FRM;&lt;br /&gt;
&lt;br /&gt;
=show date=&lt;br /&gt;
 select CURRENT_TIMESTAMP;&lt;br /&gt;
&lt;br /&gt;
=show timezone=&lt;br /&gt;
 show variables like &#039;%time%&#039;&lt;br /&gt;
&lt;br /&gt;
=mysql server version=&lt;br /&gt;
 select version ();&lt;br /&gt;
&lt;br /&gt;
=Reset mysql root password=&lt;br /&gt;
 Stop the MySql server.&lt;br /&gt;
 /usr/bin/mysqld_safe --skip-grant-tables &amp;amp;&lt;br /&gt;
 mysql -h localhost&lt;br /&gt;
 use mysql&lt;br /&gt;
 update user set password = password(&#039;.......&#039;) where user = &#039;root&#039; and host=&#039;localhost&#039;;&lt;br /&gt;
 quit&lt;br /&gt;
 Restart the server and run as normal.&lt;br /&gt;
For another version.&lt;br /&gt;
 /usr/bin/mysqld --skip-grant-tables &amp;amp;&lt;br /&gt;
 use mysql ; update user set authentication_string=password(&#039;Sw1LdtkMKnRik&#039;) where user=&#039;root&#039;; quit ;&lt;br /&gt;
 Restart the server and run as normal.&lt;br /&gt;
&lt;br /&gt;
=Data types=&lt;br /&gt;
==Numerical, signed=could be negative,unsigned==&lt;br /&gt;
 type		Maxvalue&lt;br /&gt;
 tinyint		255&lt;br /&gt;
 smallint	65535&lt;br /&gt;
 mediumint	16777215&lt;br /&gt;
 int		4294967295&lt;br /&gt;
 bigint		18446744073709551615&lt;br /&gt;
==Strings==&lt;br /&gt;
 type			Maxvalue&lt;br /&gt;
 varchar			255&lt;br /&gt;
 char			255&lt;br /&gt;
 tinyblob,tinytext	256&lt;br /&gt;
 blob,text		65536&lt;br /&gt;
 mediumblob,mediumtext	16777216&lt;br /&gt;
 longblob,longtext	4294967296&lt;br /&gt;
==Special==&lt;br /&gt;
 date&lt;br /&gt;
 timestamp&lt;br /&gt;
&lt;br /&gt;
=Access types.=&lt;br /&gt;
 ALL 		- Gives the all privilege control for the database&lt;br /&gt;
 CREATE		- Allows users to create tables&lt;br /&gt;
 SELECT		- Allows users to query tables&lt;br /&gt;
 INSERT		- Allows users to insert data into a table&lt;br /&gt;
 SHOW DATABASES	- Allows users to see a list of databases&lt;br /&gt;
 USAGE		- User has no privileges&lt;br /&gt;
 GRANT OPTION	- Allows users to grant privileges&lt;br /&gt;
&lt;br /&gt;
=auto submit password=&lt;br /&gt;
.my.cnf&lt;br /&gt;
 [client]&lt;br /&gt;
 user=user_name&lt;br /&gt;
 pass=password &lt;br /&gt;
&lt;br /&gt;
=replication master slave=&lt;br /&gt;
==Setting the Replication Master Configuration==&lt;br /&gt;
/etc/my.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 log-bin=mysql-bin&lt;br /&gt;
 server-id=1&lt;br /&gt;
&lt;br /&gt;
 To get the master status information, follow these steps:&lt;br /&gt;
 Start the command line client and flush all tables and block write statements by executing the FLUSH TABLES WITH READ LOCK statement:&lt;br /&gt;
 mysql&amp;gt; FLUSH TABLES WITH READ LOCK;&lt;br /&gt;
 Leave the client from which you issued the FLUSH TABLES statement running so that the read lock remains in effect. If you exit the client, the lock is released.&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; SHOW MASTER STATUS;&lt;br /&gt;
 +------------------+----------+--------------+------------------+&lt;br /&gt;
 | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |&lt;br /&gt;
 +------------------+----------+--------------+------------------+&lt;br /&gt;
 | mysql-bin.000001 |       98 |              |                  |&lt;br /&gt;
 +------------------+----------+--------------+------------------+&lt;br /&gt;
 1 row in set (0.00 sec)&lt;br /&gt;
&lt;br /&gt;
 The File column shows the name of the log and Position shows the offset within the file. In this example, the binary log file is mysql-bin.000001 and the offset is 98. Record these values. You need them later when you are setting up the slave. They represent the replication coordinates at which the slave should begin processing new updates from the master.&lt;br /&gt;
&lt;br /&gt;
 If the master has been running previously without binary logging enabled, the log name and position values displayed by SHOW MASTER STATUS or mysqldump --master-data will be empty. In that case, the values that you need to use later when specifying the slave&#039;s log file and position are the empty string (&#039;&#039;) and 4.&lt;br /&gt;
&lt;br /&gt;
 mysqldump --all-databases --lock-all-tables &amp;gt;/tmp/dbdump.db&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; GRANT REPLICATION SLAVE ON *.* TO &#039;replication&#039;@&#039;192.168.7.%&#039; IDENTIFIED BY &#039;slavepass&#039;;&lt;br /&gt;
&lt;br /&gt;
==Setting the Replication Slave Configuration==&lt;br /&gt;
/etc/my.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 server-id=2&lt;br /&gt;
&lt;br /&gt;
Import the dump file:&lt;br /&gt;
 shell&amp;gt; mysql &amp;lt; /tmp/dbdump.db&lt;br /&gt;
&lt;br /&gt;
 mysql&amp;gt; CHANGE MASTER TO MASTER_HOST=&#039;192.168.7.30&#039;, MASTER_USER=&#039;replication&#039;, MASTER_PASSWORD=&#039;slavepass&#039;, MASTER_LOG_FILE=&#039;mysql-bin.000001&#039;,MASTER_LOG_POS=98, MASTER_PORT=&#039;3307&#039;;&lt;br /&gt;
&lt;br /&gt;
Start the slave threads:&lt;br /&gt;
 mysql&amp;gt; START SLAVE;&lt;br /&gt;
&lt;br /&gt;
Once a slave is replicating, you can find in its data directory one file named master.info and another named relay-log.info.&lt;br /&gt;
&lt;br /&gt;
=setup slave xtrabackup=&lt;br /&gt;
https://www.percona.com/doc/percona-xtrabackup/2.3/howtos/setting_up_replication.html&lt;br /&gt;
 # On master.&lt;br /&gt;
 xtrabackup --backup --target-dir=/tmp/xtrabackup_$HOSTNAME&lt;br /&gt;
 xtrabackup --prepare --target-dir=/tmp/xtrabackup_$HOSTNAME&lt;br /&gt;
 SLAVE=slave.inter.net ; rsync -avpP /tmp/xtrabackup_$HOSTNAME $SLAVE:/tmp/xtrabackup_$HOSTNAME&lt;br /&gt;
 GRANT REPLICATION SLAVE ON *.*  TO &#039;repl&#039;@&#039;172.30.145.85&#039; IDENTIFIED BY &#039;P@ssw0rd&#039;; FLUSH PRIVILEGES;&lt;br /&gt;
 # On slave.&lt;br /&gt;
 mysql --host=master.inter.net --user=repl --password=P@ssw0rd&lt;br /&gt;
 systemctl stop mysqld &amp;amp;&amp;amp; mv /var/lib/mysql /var/lib/mysql.$(date_file)&lt;br /&gt;
 xtrabackup --move-back --target-dir=/tmp/xtrabackup_slave/xtrabackup_slave/&lt;br /&gt;
 chown -Rh mysql:mysql /var/lib/mysql&lt;br /&gt;
 restorecon -R -v /var/lib/mysql&lt;br /&gt;
 systemctl start mysql&lt;br /&gt;
 cat /tmp/xtrabackup_*/xtrabackup_binlog_info&lt;br /&gt;
 mysql-bin.000022	476974&lt;br /&gt;
 mysql -e &amp;quot;CHANGE MASTER TO MASTER_HOST=&#039;master.inter.net&#039;, MASTER_USER=&#039;repl&#039;, MASTER_PASSWORD=&#039;P@ssw0rd&#039;, MASTER_LOG_FILE=&#039;mysql-bin.000022&#039;, MASTER_LOG_POS=476974;&amp;quot;&lt;br /&gt;
 mysql -e &amp;quot;START SLAVE;&amp;quot;&lt;br /&gt;
==rebuild slave mysql way==&lt;br /&gt;
 # Stop slave on mysql slave server.&lt;br /&gt;
 mysql -e &amp;quot;STOP SLAVE;&amp;quot;&lt;br /&gt;
 # Dump remote data to database server.&lt;br /&gt;
 mysqldump -h &amp;lt;server&amp;gt; -uroot -p&#039;&amp;lt;password&amp;gt;&#039; --add-drop-database --set-charset --skip-lock-tables --single-transaction --default-character-set=utf8mb4 --flush-logs --hex-blob --master-data=1 --databases &amp;lt;data_base&amp;gt; | mysql&lt;br /&gt;
 # Start slave.&lt;br /&gt;
 START SLAVE; SHOW SLAVE STATUS \G&lt;br /&gt;
&lt;br /&gt;
=stop slave from being slave=&lt;br /&gt;
 RESET SLAVE ALL;&lt;br /&gt;
&lt;br /&gt;
=Test to verify functionality of slave database=&lt;br /&gt;
the existence of these three lines verifies that the slave is functioning well. &lt;br /&gt;
 mysql -e &#039;show slave status\G&#039; |grep -E &#039;Slave_IO_Running:|Slave_SQL_Running:|Seconds_Behind_Master:&#039;&lt;br /&gt;
             Slave_IO_Running: Yes&lt;br /&gt;
            Slave_SQL_Running: Yes&lt;br /&gt;
        Seconds_Behind_Master: 0&lt;br /&gt;
&lt;br /&gt;
=Usage of database files/size=&lt;br /&gt;
This query will output Data_length and Index_length for each table in your database. If you add them all together you can get the size used for your particular database.&lt;br /&gt;
 show table status;&lt;br /&gt;
Usage of database.&lt;br /&gt;
 SELECT table_schema &amp;quot;Data Base Name&amp;quot;, sum( data_length + index_length ) / 1024 / 1024 &amp;quot;Data Base Size in MB&amp;quot; FROM information_schema.TABLES GROUP BY table_schema ;&lt;br /&gt;
Show size of every table in database&lt;br /&gt;
 SELECT &lt;br /&gt;
      table_schema as `Database`, &lt;br /&gt;
      table_name AS `Table`, &lt;br /&gt;
      round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB` &lt;br /&gt;
 FROM information_schema.TABLES &lt;br /&gt;
 ORDER BY (data_length + index_length) DESC;&lt;br /&gt;
&lt;br /&gt;
=pager=&lt;br /&gt;
Put output to file instead standard output.&lt;br /&gt;
 \P cat &amp;gt; /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=fix database/check database=&lt;br /&gt;
All databases.&lt;br /&gt;
 mysqlcheck -c -u root -ppassword --all-databases&lt;br /&gt;
Check one database&lt;br /&gt;
 mysqlcheck -c database -u root -ppassword&lt;br /&gt;
=look at health of slave database=&lt;br /&gt;
 select @@hostname,now();show variables like &#039;read_only&#039;;show slave status\G&lt;br /&gt;
=mysqld man page=&lt;br /&gt;
 /usr/libexec/mysqld  --verbose --help&lt;br /&gt;
=last row=&lt;br /&gt;
 SELECT fields FROM table ORDER BY id DESC LIMIT 1;&lt;br /&gt;
=enable disable full log=&lt;br /&gt;
 # WARNING. generates lot of data and slow down database. Enable general_log_file. Logs each queury against database.&lt;br /&gt;
 mysql -e &amp;quot;SET global log_output = &#039;FILE&#039;; SET global general_log_file=&#039;queries.log&#039;; SET global general_log = 1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # can be turned off with&lt;br /&gt;
 mysql -e &amp;quot;SET global general_log = 0;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 # Look at queries&lt;br /&gt;
 tail -f /apps/mysql/data/queries.log&lt;br /&gt;
&lt;br /&gt;
 # Clean log.&lt;br /&gt;
 :&amp;gt;/apps/mysql/data/queries.log&lt;br /&gt;
&lt;br /&gt;
 # If you dont find logfile do. Has to be enabled at the time.&lt;br /&gt;
 lsof | grep /queries.log&lt;br /&gt;
&lt;br /&gt;
=kill query=&lt;br /&gt;
 KILL QUERY &amp;quot;ID&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
=Fragmentation=&lt;br /&gt;
data_free are the holes in the database.&lt;br /&gt;
 mysql -e &#039;select ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables  where  DATA_FREE &amp;gt; 0;&#039;&lt;br /&gt;
=truncate table=&lt;br /&gt;
Truncate table&lt;br /&gt;
 TRUNCATE TABLE table_name&lt;br /&gt;
When you want to do something that is more effective then truncate.&lt;br /&gt;
 mysql -e &#039;use database;RENAME TABLE sessions TO t1;CREATE TABLE sessions LIKE t1;DROP TABLE t1;&#039;&lt;br /&gt;
&lt;br /&gt;
=explain=&lt;br /&gt;
 EXPLAIN SELECT * FROM categories\G&lt;br /&gt;
Explain described. possible_keys=possible indexes, key=chosen index. rows=rows scanned.&lt;br /&gt;
 +----+-------------+-----------------+--------+--------------------------------------+--------------------------------------+---------+---------------------------------------+------+-------------+&lt;br /&gt;
 | id | select_type | table           | type   | possible_keys                        | key                                  | key_len | ref                                   | rows | Extra       |&lt;br /&gt;
 +----+-------------+-----------------+--------+--------------------------------------+--------------------------------------+---------+---------------------------------------+------+-------------+&lt;br /&gt;
 |  1 | SIMPLE      | activerada0_    | ALL    | NULL                                 | NULL                                 | NULL    | NULL                                  | 8425 | NULL        |&lt;br /&gt;
 |  1 | SIMPLE      | ticketauto1_    | eq_ref | idx_u_ticket_automaton_status_ticket | idx_u_ticket_automaton_status_ticket | 4       | IPradar.activerada0_.ticket_id        |    1 | Using where |&lt;br /&gt;
 |  1 | SIMPLE      | ipmonticke2_    | eq_ref | PRIMARY                              | PRIMARY                              | 8       | IPradar.activerada0_.ticket_id        |    1 | NULL        |&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=innodb tables list=&lt;br /&gt;
list innodb tables&lt;br /&gt;
 SELECT table_schema, table_name FROM INFORMATION_SCHEMA.TABLES WHERE engine = &#039;innodb&#039;;&lt;br /&gt;
=alter table=&lt;br /&gt;
Read fragmented innodb file from disk, Lock table, Store table back on disk without holes&lt;br /&gt;
 ALTER TABLE table ENGINE=INNODB;&lt;br /&gt;
Another alternative.&lt;br /&gt;
 OPTIMIZE TABLE prefilledautomaten.wmsreportedorders_archive;&lt;br /&gt;
&lt;br /&gt;
=optimize execution=&lt;br /&gt;
 SET SESSION optimizer_search_depth = 5;&lt;br /&gt;
&lt;br /&gt;
=mysql_upgrade=&lt;br /&gt;
After updating mysql run the following command to update tables.&lt;br /&gt;
 mysql_upgrade&lt;br /&gt;
=which tables are locked=&lt;br /&gt;
 show open tables where in_use &amp;lt;&amp;gt; 0;&lt;br /&gt;
=unlock tables=&lt;br /&gt;
 UNLOCK TABLES;&lt;br /&gt;
&lt;br /&gt;
=FOREIGN_KEY=&lt;br /&gt;
Disable foreign key constrains temporary&lt;br /&gt;
 SET FOREIGN_KEY_CHECKS=0;&lt;br /&gt;
Enable foreign key contrains.&lt;br /&gt;
 SET FOREIGN_KEY_CHECKS=1;&lt;br /&gt;
=List indexes=&lt;br /&gt;
List index for one table.&lt;br /&gt;
 show index from database.table;&lt;br /&gt;
List all indexes.&lt;br /&gt;
 use information_schema;SELECT * FROM statistics;&lt;br /&gt;
 mysql -e &amp;quot;use information_schema;SELECT * FROM statistics;&amp;quot; | column -t -s $&#039;\t&#039; | less -ISRM&lt;br /&gt;
==how much space does my index take==&lt;br /&gt;
 mysql -e &amp;quot;SELECT table_schema as database_name,table_name,round(index_length/1024/1024,2) as index_size&lt;br /&gt;
 FROM information_schema.tables&lt;br /&gt;
 WHERE table_type = &#039;BASE TABLE&#039;&lt;br /&gt;
      and table_schema not in (&#039;information_schema&#039;, &#039;sys&#039;,&#039;performance_schema&#039;, &#039;mysql&#039;)&lt;br /&gt;
      and table_schema = &#039;$DATABASE&#039;&lt;br /&gt;
  ORDER BY index_size desc;&amp;quot; | column_tab | head -3&lt;br /&gt;
 database_name  table_name                  index_size&lt;br /&gt;
 polar          props                       1094.75&lt;br /&gt;
 polar          changedescriptors           488.83&lt;br /&gt;
&lt;br /&gt;
=delete index=&lt;br /&gt;
 DATABASE=x793 ; TABLE=icommerce_original_price ; mysql -D $DATABASE &amp;quot;DROP INDEX &#039;IDX_ICOMMERCE_ORIGINAL_PRICE_SKU&#039; ON $TABLE;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=password snooping=&lt;br /&gt;
 sudo tcpdump -l -i any -w - src or dst port 3306 | strings&lt;br /&gt;
=get uniq answers=&lt;br /&gt;
 &amp;quot;select DISTINCT table.database from table where conn_data LIKE &#039;%value&#039;;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=match rows with multiple equal columns=&lt;br /&gt;
 select column1, column2, column3, count(*) as NumDuplicates&lt;br /&gt;
  from database_name.table_name&lt;br /&gt;
  group by column1, column2, column3&lt;br /&gt;
  having NumDuplicates &amp;gt; 1;&lt;br /&gt;
=search for values matching null=&lt;br /&gt;
Search for null&lt;br /&gt;
 select column from database.table where column_line IS NULL&lt;br /&gt;
Search for not null&lt;br /&gt;
 select * from datebase.table WHERE column IS NOT NULL limit 1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=select values bigger then=&lt;br /&gt;
 select column from database.table where column &amp;gt;= 14586379;&lt;br /&gt;
&lt;br /&gt;
=load blob data=&lt;br /&gt;
 INSERT INTO table1 VALUES(1, LOAD_FILE(&#039;data.png&#039;));&lt;br /&gt;
=nestled queries=&lt;br /&gt;
Loop through the output of two nestled queries.&lt;br /&gt;
 select * from connection_data where conn_data_id IN (select conn_data_id from connection_data_attribute where conn_id = (select conn_id from IPdiscover.connection where conn_uuid = &amp;quot;F5122&amp;quot;));&lt;br /&gt;
=mysqltuner=&lt;br /&gt;
Download. script to optimize mysql database.&lt;br /&gt;
 wget http://mysqltuner.pl/ -O mysqltuner.pl&lt;br /&gt;
 wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/basic_passwords.txt -O basic_passwords.txt&lt;br /&gt;
 wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/vulnerabilities.csv -O vulnerabilities.csv&lt;br /&gt;
&lt;br /&gt;
=move row between tables=&lt;br /&gt;
A simple INSERT INTO SELECT statement:&lt;br /&gt;
 INSERT INTO persons_table SELECT * FROM customer_table WHERE person_name = &#039;tom&#039;;&lt;br /&gt;
 DELETE FROM customer_table WHERE person_name = &#039;tom&#039;;&lt;br /&gt;
=date younger than=&lt;br /&gt;
 SELECT * FROM FOO&lt;br /&gt;
 WHERE MY_DATE_FIELD &amp;gt;= NOW() - INTERVAL 1 DAY&lt;br /&gt;
=comment=&lt;br /&gt;
 Start with 2 -- and a space/tab.&lt;br /&gt;
 --   select...&lt;br /&gt;
=start transaction/commit/rollback=&lt;br /&gt;
 START TRANSACTION or BEGIN start a new transaction.&lt;br /&gt;
 COMMIT commits the current transaction, making its changes permanent.&lt;br /&gt;
 ROLLBACK &lt;br /&gt;
==slow queries==&lt;br /&gt;
Show status of slow query log.&lt;br /&gt;
 SHOW GLOBAL VARIABLES LIKE &#039;slow\_%&#039;;&lt;br /&gt;
Modify slow query log settings.&lt;br /&gt;
 SET GLOBAL slow_query_log_file = &#039;/path/to/slow_query.log&#039;;&lt;br /&gt;
How long is a slow query.&lt;br /&gt;
 SET GLOBAL long_query_time = 10;&lt;br /&gt;
Enable slow query.&lt;br /&gt;
 SET GLOBAL slow_query_log = &#039;ON&#039;;&lt;br /&gt;
 FLUSH LOGS;&lt;br /&gt;
=whoami=&lt;br /&gt;
 select @@hostname,database(),USER(),now();&lt;br /&gt;
=how do user authenticate=&lt;br /&gt;
 SELECT user, host, plugin FROM mysql.user;&lt;br /&gt;
&lt;br /&gt;
=expire_logs_days/expire_logs_seconds=&lt;br /&gt;
Set value in /etc/my.cnf&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 expire_logs_days=10&lt;br /&gt;
What is value after change.&lt;br /&gt;
 mysql -e &amp;quot;SHOW GLOBAL VARIABLES LIKE &#039;expire_logs_days&#039;;&amp;quot;&lt;br /&gt;
 mysql -e &amp;quot;SHOW VARIABLES LIKE &#039;binlog_expire_logs_seconds&#039;;&amp;quot;&lt;br /&gt;
Purge old binary logs.&lt;br /&gt;
 PURGE BINARY LOGS BEFORE (date(now()) + interval 0 second - interval 10 day);&lt;br /&gt;
Set expire_logs_day&lt;br /&gt;
 SET GLOBAL expire_logs_days = 1;&lt;br /&gt;
 flush binary logs;&lt;br /&gt;
Expire bin logs after 12 hours. Once.&lt;br /&gt;
 FLUSH LOGS;&lt;br /&gt;
 PURGE BINARY LOGS BEFORE NOW() - INTERVAL 12 HOUR;&lt;br /&gt;
&lt;br /&gt;
=queries per second=&lt;br /&gt;
 mysqladmin status&lt;br /&gt;
=find cpu intensive queries=&lt;br /&gt;
https://www.percona.com/blog/2020/04/23/a-simple-approach-to-troubleshooting-high-cpu-in-mysql/&lt;br /&gt;
 pidstat -t -p $(pgrep -f &amp;quot;/mysqld &amp;quot;) | grep -Ev &amp;quot;$HOSTNAME|CPU  Command| mysqld&amp;quot; | sort -k 9 -n | tail -n10 | awk &#039;{print $5 &amp;quot; &amp;quot; $9}&#039; | while read PID CPU ; do echo &#039;***&#039; $PID $CPU ; mysql -e &amp;quot;select * from performance_schema.threads where THREAD_OS_ID = $PID \G&amp;quot; ; done&lt;br /&gt;
=slave stops fix=&lt;br /&gt;
stop slave&lt;br /&gt;
 stop slave;&lt;br /&gt;
Skip troublesome query.&lt;br /&gt;
 set global sql_slave_skip_counter=1;&lt;br /&gt;
 start slave;&lt;br /&gt;
Oneliner&lt;br /&gt;
 mysql -e &amp;quot;show slave status\G&amp;quot; &amp;gt; /tmp/show_slave_status.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
 mysql -e &amp;quot;set global sql_slave_skip_counter=1;start slave;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=join=&lt;br /&gt;
 SELECT column_name(s)&lt;br /&gt;
 FROM table1&lt;br /&gt;
 INNER JOIN table2&lt;br /&gt;
 ON table1.column_name = table2.column_name; &lt;br /&gt;
=mysql_mode=&lt;br /&gt;
 SELECT @@sql_mode;&lt;br /&gt;
=timeout=&lt;br /&gt;
Drop mysql session after. Per session&lt;br /&gt;
 SHOW VARIABLES LIKE &#039;wait_timeout&#039;;&lt;br /&gt;
set timeout per session.&lt;br /&gt;
 SET wait_timeout=31536000;&lt;br /&gt;
Drop mysql session after. Global.&lt;br /&gt;
 select @@GLOBAL.wait_timeout;&lt;br /&gt;
Set timeout globally.&lt;br /&gt;
 SET @@GLOBAL.wait_timeout=31536000;&lt;br /&gt;
&lt;br /&gt;
=show functions=&lt;br /&gt;
 SHOW FUNCTION STATUS;&lt;br /&gt;
=show stored procedures=&lt;br /&gt;
 SHOW PROCEDURE STATUS;&lt;br /&gt;
&lt;br /&gt;
=ssl=&lt;br /&gt;
Is your database configured for ssl.&lt;br /&gt;
 show variables like &#039;have_ssl&#039;;&lt;br /&gt;
=collation/character set=&lt;br /&gt;
 # Available collations&lt;br /&gt;
 mysql -e &#039;SHOW COLLATION;&#039;&lt;br /&gt;
 # Available characters&lt;br /&gt;
 mysql -e &#039;SHOW CHARACTER SET;&#039;&lt;br /&gt;
 # The change.&lt;br /&gt;
 [mysqld]&lt;br /&gt;
 collation-server = utf8mb4_swedish_ci&lt;br /&gt;
 init-connect=&#039;SET NAMES utf8mb4&#039;&lt;br /&gt;
 character-set-server = utf8mb4&lt;br /&gt;
 [mysql]&lt;br /&gt;
 default-character-set=utf8mb4&lt;br /&gt;
 # show setting&lt;br /&gt;
 mysql -e &#039;SELECT @@collation_server, @@character_set_server;&#039;&lt;br /&gt;
=Uptime=&lt;br /&gt;
 &#039;SELECT   VARIABLE_VALUE AS Uptime_seconds,   NOW() AS &amp;quot;Now&amp;quot;,   NOW() - INTERVAL VARIABLE_VALUE SECOND AS &amp;quot;Up since&amp;quot;,   DATEDIFF(NOW(), NOW() - INTERVAL VARIABLE_VALUE SECOND) AS &amp;quot;Uptime_days&amp;quot; FROM performance_schema.session_status WHERE VARIABLE_NAME = &amp;quot;Uptime&amp;quot;;&#039;&lt;br /&gt;
=Show binary data as hex=&lt;br /&gt;
 mysql --binary-as-hex -e &amp;quot;use icingadb; select * from downtime limit 1\G&amp;quot;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16603</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16603"/>
		<updated>2026-04-15T09:21:54Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* stats */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;br /&gt;
==list checks on remote windows machine==&lt;br /&gt;
 gc -tail 10 &amp;quot;C:\Program Files\NSClient++\nsclient.ini&amp;quot;&lt;br /&gt;
 [/settings/external scripts/alias]&lt;br /&gt;
 check_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED&lt;br /&gt;
 check_load = check_cpu filter=none warn=90 crit=95&lt;br /&gt;
 check_io = CheckCounter Counter:DiskIO=\\PhysicalDisk(_Total)\\Disk\ Bytes/sec&lt;br /&gt;
 alias_memory = check_memory warn=99 crit=100&lt;br /&gt;
 ipsec_hypergene = check_ping 10.255.255.1&lt;br /&gt;
 ipsec_sharp = check_ping 192.168.77.1&lt;br /&gt;
 ipsec_telia = check_ping 192.168.20.1&lt;br /&gt;
==list historic events==&lt;br /&gt;
 ls -c1 -rt /var/log/icinga2/icinga2.log* | while read i ; do zcat -f $i | grep &amp;quot;ElKretsenIpsecTelia&amp;quot; | grep information/Notification | grep oncall-notification ; done&lt;br /&gt;
==Custom checks==&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_crash.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_df.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_health.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mgr.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mon.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_osd.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_rgw_sync_status.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_scrub.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_versions.py&lt;br /&gt;
==stats==&lt;br /&gt;
Why does icinga2 use lots of memory. Look at config and sort by resources&lt;br /&gt;
 icinga2 daemon -C | grep information/ConfigItem: | sort -k6 -n | tail -5&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16602</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16602"/>
		<updated>2026-04-15T09:12:19Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Custom checks */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;br /&gt;
==list checks on remote windows machine==&lt;br /&gt;
 gc -tail 10 &amp;quot;C:\Program Files\NSClient++\nsclient.ini&amp;quot;&lt;br /&gt;
 [/settings/external scripts/alias]&lt;br /&gt;
 check_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED&lt;br /&gt;
 check_load = check_cpu filter=none warn=90 crit=95&lt;br /&gt;
 check_io = CheckCounter Counter:DiskIO=\\PhysicalDisk(_Total)\\Disk\ Bytes/sec&lt;br /&gt;
 alias_memory = check_memory warn=99 crit=100&lt;br /&gt;
 ipsec_hypergene = check_ping 10.255.255.1&lt;br /&gt;
 ipsec_sharp = check_ping 192.168.77.1&lt;br /&gt;
 ipsec_telia = check_ping 192.168.20.1&lt;br /&gt;
==list historic events==&lt;br /&gt;
 ls -c1 -rt /var/log/icinga2/icinga2.log* | while read i ; do zcat -f $i | grep &amp;quot;ElKretsenIpsecTelia&amp;quot; | grep information/Notification | grep oncall-notification ; done&lt;br /&gt;
==Custom checks==&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_crash.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_df.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_health.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mgr.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mon.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_osd.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_rgw_sync_status.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_scrub.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_versions.py&lt;br /&gt;
==stats==&lt;br /&gt;
Why does icinga2 use lots of memory&lt;br /&gt;
 icinga2 daemon -C&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16601</id>
		<title>Openstack</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16601"/>
		<updated>2026-04-14T14:32:48Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* query user_data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean=&lt;br /&gt;
 aodh                  Alarming service&lt;br /&gt;
 barbican              REST API designed for the secure storage, provisioning and management of secrets such as passwords, encryption keys and X.509&lt;br /&gt;
 cinder                OpenStack Block Storage&lt;br /&gt;
 gnocchi               Time Series Database as a Service&lt;br /&gt;
 glance                OpenStack Image Service&lt;br /&gt;
 heat                  iac. Deploy instances, volumes and other OpenStack services using YAML based templates.&lt;br /&gt;
 horizon               Openstack’s Dashboard, which provides a web based user interface to OpenStack services&lt;br /&gt;
 ironic                bootstrap&lt;br /&gt;
 keystone              identity service &lt;br /&gt;
 magnum                container orchestration engines&lt;br /&gt;
 mistral               workflow service&lt;br /&gt;
 neutron               networking as a service&lt;br /&gt;
 nfv                   Network functions virtualization&lt;br /&gt;
 nova                  cloud computing instance controller, provision compute instances (aka virtual servers).&lt;br /&gt;
 octavia               Load balancer. Octavia HAProxy Amphora API&lt;br /&gt;
 rhosp                 Red Hat OpenStack Platform&lt;br /&gt;
 swift                 OpenStack Object Storage&lt;br /&gt;
 tacker                NFV Orchestration&lt;br /&gt;
 trove                 Database as a Service&lt;br /&gt;
 Zaqar                 multi-tenant cloud messaging service&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(openstack complete 2&amp;gt;/dev/null )&lt;br /&gt;
=flavor=&lt;br /&gt;
Which machine types exist.&lt;br /&gt;
 gp      &amp;quot;General purpose&amp;quot; Well rounded combination of amount of CPUs and the amount of RAM.&lt;br /&gt;
 hm      &amp;quot;High memory&amp;quot; Optimimzed for applications that need a lot of memory.&lt;br /&gt;
 hp      &amp;quot;High performance&amp;quot; High frequenzy cpu.&lt;br /&gt;
List suitable flavors&lt;br /&gt;
 openstack flavor list -f json -c VCPUs -c RAM -c Disk -c Name | jq -r &#039;.[] | [ .Name, .VCPUs, .RAM, .Disk ] | @tsv&#039; | sort -k 2,2n -k 3,3n | grep -vE &#039;gpu|pinned|nvme&#039; | column_tab&lt;br /&gt;
Change flavor of vm&lt;br /&gt;
 openstack server resize &amp;lt;vm-name-or-id&amp;gt; --flavor &amp;lt;new-flavor-name-or-id&amp;gt; --wait&lt;br /&gt;
 openstack server resize confirm &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Manage multiple projects=&lt;br /&gt;
 export OS_CLIENT_CONFIG_FILE=~/.config/openstack/project1_clouds.yaml&lt;br /&gt;
 export OS_CLOUD=project1&lt;br /&gt;
&lt;br /&gt;
=list volumes=&lt;br /&gt;
 openstack volume list&lt;br /&gt;
==list volume belonging to &amp;lt;server&amp;gt;==&lt;br /&gt;
 openstack server volume list &amp;lt;server&amp;gt;&lt;br /&gt;
==remove volume from server==&lt;br /&gt;
 openstack server remove volume &amp;lt;vm_name_or_id&amp;gt; &amp;lt;volume_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack=&lt;br /&gt;
 dnf install python3-openstackclient&lt;br /&gt;
 dnf -y install $(dnf -q search python3- client |grep -i OpenStack | grep -v -- -tests| awk &#039;{print $1}&#039;)&lt;br /&gt;
&lt;br /&gt;
=get ip addresses of all host=&lt;br /&gt;
 openstack server list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;&lt;br /&gt;
=long output=&lt;br /&gt;
 openstack server list --long&lt;br /&gt;
=select server depending status=&lt;br /&gt;
 openstack server list --status ACTIVE&lt;br /&gt;
&lt;br /&gt;
=output=&lt;br /&gt;
 -f csv,json,table,value,yaml&lt;br /&gt;
Get output without headers.&lt;br /&gt;
 openstack server list -f value&lt;br /&gt;
&lt;br /&gt;
=list all=&lt;br /&gt;
 openstack command list -f yaml | grep - | grep list | sed &#039;s/^  - /openstack /g&#039; |grep -v &amp;quot;openstack command list&amp;quot; | while read i ; do echo &#039;*&#039; $i ; $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039; | while read i ; do echo &#039;*&#039; openstack $i ; openstack $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=How to reach nodes=&lt;br /&gt;
 OPENSTACK=$(openstack server  list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;) ; OPENSTACK_JUMP=$(grep 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; NODES=$(grep -v 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; for NODE in ${NODES} ; do echo ssh -J core@${OPENSTACK_JUMP} core@${NODE} ; done&lt;br /&gt;
=create server=&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image fedora-37-x86_64 --boot-from-volume 100 --network abjorklund-01-5tsbc-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
With setting password.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; user-data&lt;br /&gt;
 #cloud-config&lt;br /&gt;
 password: Password123!&lt;br /&gt;
 chpasswd: {expire: False}&lt;br /&gt;
 ssh_pwauth: True&lt;br /&gt;
 EOF&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file) --user-data user-data&lt;br /&gt;
With existing network port&lt;br /&gt;
 openstack server create --flavor gp.1x2 --block-device source=volume,id=&amp;lt;volume-id&amp;gt;,dest=volume,bootindex=0,delete_on_termination=false --nic port-id=&amp;lt;existing-port-id&amp;gt; --key-name &amp;lt;your-keypair&amp;gt; &amp;lt;new-server-name&lt;br /&gt;
&lt;br /&gt;
=router=&lt;br /&gt;
==List routers==&lt;br /&gt;
 openstack router list&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 openstack router show abjorklund-01-5tsbc-external-router -c external_gateway_info -f json | jq &#039;.external_gateway_info.external_fixed_ips[0].ip_address&#039;&lt;br /&gt;
==Remove subnet from router==&lt;br /&gt;
 openstack router remove subnet &amp;lt;router&amp;gt; &amp;lt;subnet&amp;gt;&lt;br /&gt;
==add route to router==&lt;br /&gt;
openstack router add route --route destination=10.8.1.0/24,gateway=10.111.222.254 &amp;lt;router&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=list available images=&lt;br /&gt;
 openstack image list&lt;br /&gt;
=Download image=&lt;br /&gt;
Get info about image.&lt;br /&gt;
 openstack image list | grep -i nord-ic-&lt;br /&gt;
 | 98c03b69-4ba8-4276-8695-b6c3f006cf20 | nord-ic-bc84t-rhcos            | active |&lt;br /&gt;
 glance image-download --file nord-ic-bc84t-rhcos --progress 98c03b69-4ba8-4276-8695-b6c3f006cf20&lt;br /&gt;
&lt;br /&gt;
=Upload image=&lt;br /&gt;
https://cloud-images.ubuntu.com/focal/current/&lt;br /&gt;
 openstack image create --disk-format qcow2 --container-format bare --file focal-server-cloudimg-amd64.img Focal_Fossa.$(date_file)&lt;br /&gt;
&lt;br /&gt;
=security=&lt;br /&gt;
==Create security group.==&lt;br /&gt;
 openstack security group create &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group create ssh_allow&lt;br /&gt;
&lt;br /&gt;
==Get security groups.==&lt;br /&gt;
 openstack security group list -c Name -f json | jq -r &#039;.[].Name&#039;&lt;br /&gt;
==Get all security groups with rules.==&lt;br /&gt;
 openstack security group list -c Name -f value | while read SECURITY ; do openstack security group show &amp;quot;$SECURITY&amp;quot; ; done &amp;gt; /temp/${OS_CLOUD##*/}}_openstack_security_group_list_openstack_security_group_show.$(date_file).log&lt;br /&gt;
==Get rules from one security group.==&lt;br /&gt;
 openstack security group rule list &amp;lt;group&amp;gt;&lt;br /&gt;
==Add rule to allow traffic from ip.==&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 6443 --remote-ip 185.53.164.10/32 --ingress &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
 openstack security group rule create ssh_allow --remote-ip 0.0.0.0/0 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack security group rule create &amp;lt;rule&amp;gt; --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Allow nfs4 traffic==&lt;br /&gt;
 # List group to add too.&lt;br /&gt;
 openstack security group list | grep rw-core&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 2049 --remote-ip 10.2.0.0/16 rw-core-p9dq6-master&lt;br /&gt;
==Add security group to server==&lt;br /&gt;
 openstack server add security group &amp;lt;server_name_or_id&amp;gt; &amp;lt;security_group_name_or_id&amp;gt;&lt;br /&gt;
Example of adding a group with a rule.&lt;br /&gt;
 openstack security group create ssh-vpn&lt;br /&gt;
 openstack security group rule create ssh-vpn --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack server add security group RW01 ssh-vpn&lt;br /&gt;
&lt;br /&gt;
=create block device=&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
Resize block device.&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
&lt;br /&gt;
=set physical ip on host=&lt;br /&gt;
 openstack port list&lt;br /&gt;
List in different view.&lt;br /&gt;
 openstack port list -f json | jq -r &#039;.[]|[.ID, .Name, .Status, .&amp;quot;Fixed IP Addresses&amp;quot;[].ip_address]| join(&amp;quot;\t&amp;quot;)&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=Change security group on port=&lt;br /&gt;
Remove if existing port does not exist.&lt;br /&gt;
 openstack port set --no-security-group a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
 openstack port set --security-group 3723f737-280f-453e-af0b-50aca4ce1b0d a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
=create port=&lt;br /&gt;
 openstack port create --network abjorklund-01-h4sxm-openshift --fixed-ip subnet=4bb2ab0c-f8f9-4346-b238-5f992f0bcf56,ip-address=10.1.0.5 abjorklund-01-h4sxm-api-port&lt;br /&gt;
&lt;br /&gt;
=manage loadbalancer aurora/haproxy=&lt;br /&gt;
 openstack loadbalancer&lt;br /&gt;
 openstack loadbalancer list&lt;br /&gt;
 openstack loadbalancer show test-lb -c listeners -f value&lt;br /&gt;
=listerners and l7policy=&lt;br /&gt;
Identify listener&lt;br /&gt;
 openstack loadbalancer listener list --loadbalancer test-lb | grep frontend_https&lt;br /&gt;
List l7policy on listener&lt;br /&gt;
 openstack loadbalancer l7policy list --listener cdae695d-04fe-41e7-b927-88b5f32b9ed8 -f json&lt;br /&gt;
Let traffic through&lt;br /&gt;
 openstack loadbalancer l7policy set --disable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
Maintenance mode&lt;br /&gt;
 openstack loadbalancer l7policy set --enable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
&lt;br /&gt;
=view limits=&lt;br /&gt;
If you have problems to create something in openstack it could be worth verifying you are within limits.&lt;br /&gt;
 openstack limits show --absolute -f value | grep -E &#039;RAM|Cores&#039;&lt;br /&gt;
 openstack quota show --usage -c Resource -c Limit -c &amp;quot;In Use&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=count resources=&lt;br /&gt;
 openstack quota show --usage -c Resource -c &amp;quot;In Use&amp;quot; -f json | jq -r &#039;.[] | select(.Resource == &amp;quot;cores&amp;quot; or .Resource == &amp;quot;ram&amp;quot; or .Resource == &amp;quot;gigabytes&amp;quot; )| [.Resource, .&amp;quot;In Use&amp;quot;] | @tsv&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=get project id=&lt;br /&gt;
 openstack project list -f value -c ID&lt;br /&gt;
=manage s3/swift=&lt;br /&gt;
==create s3 credentials==&lt;br /&gt;
 openstack ec2 credentials create&lt;br /&gt;
 openstack ec2 credentials list&lt;br /&gt;
==Create s3 bucket==&lt;br /&gt;
 aws s3api create-bucket --bucket &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift post &amp;lt;bucket&amp;gt;&lt;br /&gt;
 openstack container create &amp;lt;bucket&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list s3 storage==&lt;br /&gt;
 swift list&lt;br /&gt;
 swift list &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift list --long &amp;lt;container&amp;gt;&lt;br /&gt;
 swift stat &amp;lt;bucket&amp;gt;&lt;br /&gt;
 aws s3api list-buckets&lt;br /&gt;
 openstack container list&lt;br /&gt;
==download file==&lt;br /&gt;
 swift download elastic_snapshots elasticsearch-snapshots/snap-symvtlMpRIetTyfCDsHIVg.dat&lt;br /&gt;
&lt;br /&gt;
==mount s3 bucket==&lt;br /&gt;
 export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID ; export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY ; export AWS_DEFAULT_REGION=us-west-2 ; s3fs -f -d openshift-region /mnt/openshift-region/ -o endpoint=europe-se-1 -o &amp;quot;host=https://object-eu-se-1a.binero.cloud&amp;quot; -o use_path_request_style&lt;br /&gt;
==copy file to s3==&lt;br /&gt;
 openstack server show $(openstack server list -f value | head -1 | awk &#039;{print $2}&#039;) -c project_id -f value&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 openstack configuration show -f json | jq -r &#039;.&amp;quot;auth.username&amp;quot;&#039;&lt;br /&gt;
=sort=&lt;br /&gt;
Sort on column name.&lt;br /&gt;
 openstack network list --sort-column Name&lt;br /&gt;
=selected columns=&lt;br /&gt;
Select column name only&lt;br /&gt;
 openstack server list -c Name -c Status -f table&lt;br /&gt;
&lt;br /&gt;
=create ssh public key(keypair)=&lt;br /&gt;
 openstack keypair create --public-key /home/abjorklund/.ssh/id_ed25519.pub abjorklund_id_ed25519&lt;br /&gt;
List keys&lt;br /&gt;
 openstack keypair list&lt;br /&gt;
Delete kaypair&lt;br /&gt;
 openstack keypair delete &amp;lt;keypair&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=create floating ip=&lt;br /&gt;
 openstack floating ip create europe-se-1-1a-net0&lt;br /&gt;
=remove floating ip=&lt;br /&gt;
 openstack floating ip delete 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign floating ip to port=&lt;br /&gt;
 openstack floating ip set --port abjorklund-01-h4sxm-ingress-port 193.93.251.233&lt;br /&gt;
=unassign floating ip to server=&lt;br /&gt;
 openstack server remove floating ip ocp-13-nkvgn-master-0 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign ip to server=&lt;br /&gt;
 openstack server add floating ip abjorklund_dns-lookup 193.93.248.34&lt;br /&gt;
&lt;br /&gt;
=restart server=&lt;br /&gt;
 openstack server reboot &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server reboot --hard &amp;lt;server&amp;gt;&lt;br /&gt;
=view events/log from server=&lt;br /&gt;
 openstack server event list &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server event show &amp;lt;server&amp;gt; &amp;lt;requestid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=recovery of server using iso=&lt;br /&gt;
Upload iso recovery.&lt;br /&gt;
 export ISO=ubuntu-22.04.4-live-server-amd64.iso ; openstack image create $ISO --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi --disk-format iso --file $ISO --private --progress&lt;br /&gt;
If special properties are not set then set them.&lt;br /&gt;
 openstack image set --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi &amp;lt;image&amp;gt;&lt;br /&gt;
Boot server with recovery iso.&lt;br /&gt;
 export SERVER=&amp;lt;server&amp;gt; ISO=&amp;lt;iso&amp;gt;; openstack --os-compute-api-version 2.87 server rescue --image $ISO $SERVER&lt;br /&gt;
When done disable rescue mode.&lt;br /&gt;
 openstack server unrescue SERVER&lt;br /&gt;
&lt;br /&gt;
=subnet=&lt;br /&gt;
List subnets&lt;br /&gt;
 openstack subnet list&lt;br /&gt;
=hypervisor=&lt;br /&gt;
 Which underlying hypervisor is used.&lt;br /&gt;
 Not of your business. Ask worthy person.&lt;br /&gt;
=volume backups=&lt;br /&gt;
 openstack volume backup list&lt;br /&gt;
=create snapshot=&lt;br /&gt;
 SERVER=&amp;lt;server&amp;gt; openstack server image create --name &amp;quot;backup-${SERVER}-$(date_file)&amp;quot; ${SERVER}&lt;br /&gt;
=volume snapshot=&lt;br /&gt;
 openstack volume snapshot list&lt;br /&gt;
 openstack volume snapshot list -c ID -f value | while read SNAPSHOT ; do echo &#039;*&#039; $SNAPSHOT ; openstack volume snapshot delete $SNAPSHOT ; done&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 # openstack dns https://docs.binero.com/dns.html&lt;br /&gt;
 # List zones&lt;br /&gt;
 openstack zone list&lt;br /&gt;
 # Create zone &lt;br /&gt;
 openstack zone create --email anden@halfface.se binero.halfface.se.&lt;br /&gt;
 # Add entries.&lt;br /&gt;
 openstack recordset create --record &amp;lt;ip&amp;gt; --type A &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # list enries.&lt;br /&gt;
 openstack recordset list &amp;lt;zone&amp;gt;&lt;br /&gt;
 # Delete entries.&lt;br /&gt;
 openstack recordset delete &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # show values for one entry&lt;br /&gt;
 openstack recordset show &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Networking explained=&lt;br /&gt;
&lt;br /&gt;
 1. openstack_networking_network_v2&lt;br /&gt;
 - Purpose: Represents a network in OpenStack.&lt;br /&gt;
 - Interaction: This is the top-level network entity. You create a network to provide a layer 2 domain for your instances.&lt;br /&gt;
 &lt;br /&gt;
 2. openstack_networking_subnet_v2&lt;br /&gt;
 - Purpose: Represents a subnet within a network.&lt;br /&gt;
 - Interaction: A subnet is associated with a network. It defines a range of IP addresses, and optionally, DHCP settings.&lt;br /&gt;
 &lt;br /&gt;
 3. openstack_networking_router_v2&lt;br /&gt;
 - Purpose: Represents a virtual router.&lt;br /&gt;
 - Interaction: Routers are used to route traffic between different subnets or networks. They can also be used to provide external network access to instances.&lt;br /&gt;
 &lt;br /&gt;
 4. openstack_networking_router_interface_v2&lt;br /&gt;
 - Purpose: Connects a router to a subnet.&lt;br /&gt;
 - Interaction: This resource is used to add an interface to a router, effectively connecting the router to a subnet, enabling routing between that subnet and others.&lt;br /&gt;
 &lt;br /&gt;
 5. openstack_networking_port_v2&lt;br /&gt;
 - Purpose: Represents a port on a network.&lt;br /&gt;
 - Interaction: Ports are attachment points for devices (like instances) on a network. They have associated IP addresses and MAC addresses.&lt;br /&gt;
 &lt;br /&gt;
 6. openstack_networking_port_secgroup_associate_v2&lt;br /&gt;
 - Purpose: Associates security groups with a port.&lt;br /&gt;
 - Interaction: Security groups define the firewall rules applied to ports. Associating a security group with a port applies the security group&#039;s rules to that port.&lt;br /&gt;
 &lt;br /&gt;
 7. openstack_networking_secgroup_v2&lt;br /&gt;
 - Purpose: Represents a security group.&lt;br /&gt;
 - Interaction: Security groups contain a set of rules that define the allowed ingress and egress traffic to and from ports.&lt;br /&gt;
 &lt;br /&gt;
 8. openstack_networking_secgroup_rule_v2&lt;br /&gt;
 - Purpose: Represents a rule within a security group.&lt;br /&gt;
 - Interaction: Security group rules define specific ingress or egress traffic allowed to the instances associated with ports to which the security group is applied.&lt;br /&gt;
 &lt;br /&gt;
 9. openstack_networking_floatingip_v2&lt;br /&gt;
 - Purpose: Represents a floating IP.&lt;br /&gt;
 - Interaction: Floating IPs are IP addresses that can be dynamically associated with instances. They provide external access to instances.&lt;br /&gt;
 &lt;br /&gt;
 10. openstack_networking_floatingip_associate_v2&lt;br /&gt;
 - Purpose: Associates a floating IP with a port.&lt;br /&gt;
 - Interaction: This resource links a floating IP to a port, providing the instance with an external IP address that is accessible from outside the OpenStack cloud.&lt;br /&gt;
 &lt;br /&gt;
 Interaction Summary&lt;br /&gt;
 1. Network and Subnet Creation:&lt;br /&gt;
   - Create a network using `openstack_networking_network_v2`.&lt;br /&gt;
   - Create a subnet within this network using `openstack_networking_subnet_v2`.&lt;br /&gt;
 &lt;br /&gt;
 2. Router Configuration:&lt;br /&gt;
   - Create a router using `openstack_networking_router_v2`.&lt;br /&gt;
   - Add an interface to this router to connect it to a subnet using `openstack_networking_router_interface_v2`.&lt;br /&gt;
 &lt;br /&gt;
 3. Instance Connectivity:&lt;br /&gt;
   - Create a port on the network using `openstack_networking_port_v2`.&lt;br /&gt;
   - Attach this port to an instance.&lt;br /&gt;
 &lt;br /&gt;
 4. Security:&lt;br /&gt;
   - Create security groups using `openstack_networking_secgroup_v2`.&lt;br /&gt;
   - Define rules for the security group using `openstack_networking_secgroup_rule_v2`.&lt;br /&gt;
   - Associate security groups with the port using `openstack_networking_port_secgroup_associate_v2`.&lt;br /&gt;
 &lt;br /&gt;
 5. External Access:&lt;br /&gt;
   - Create a floating IP using `openstack_networking_floatingip_v2`.&lt;br /&gt;
   - Associate the floating IP with the port attached to the instance using `openstack_networking_floatingip_associate_v2`.&lt;br /&gt;
=Extend disk=&lt;br /&gt;
Look at usage from beginning.&lt;br /&gt;
 df -lh&lt;br /&gt;
Extend partition partprobe&lt;br /&gt;
 openstack volume set --size &amp;lt;new_size&amp;gt; &amp;lt;volume&amp;gt; --os-volume-api-version 3.42&lt;br /&gt;
Grow partition that you intend to grow. This part can be ignored if using disk as raw partion(/dev/sd?)&lt;br /&gt;
 growpart /dev/sdb 1&lt;br /&gt;
Resize filesystem.&lt;br /&gt;
 resize2fs /dev/sdb1&lt;br /&gt;
Look at usage after extend.&lt;br /&gt;
 df -lh&lt;br /&gt;
=affinity=&lt;br /&gt;
 affinity           Put servers on same hypervisor.&lt;br /&gt;
 anti-affinity      Dont put servers on same hypervisor.&lt;br /&gt;
 soft-affinity      Put servers on same hypervisor if possible.&lt;br /&gt;
 soft-anti-affinity Put server on hypervisor if possible&lt;br /&gt;
&lt;br /&gt;
=Are hosts located on same hypervisor=&lt;br /&gt;
 openstack server list -f value -c ID | while read i ; do openstack server show $i -f value -c hostId -c name | xargs ; done | sort -n&lt;br /&gt;
=Define how server should be handled regarding affinity=&lt;br /&gt;
 openstack server group list&lt;br /&gt;
==create server group name with soft affinity==&lt;br /&gt;
 openstack server group create --policy soft-anti-affinity &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack cli on rhel7/8=&lt;br /&gt;
 yum install centos-release-openstack-train.noarch&lt;br /&gt;
 yum install python-openstackclient&lt;br /&gt;
 sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
 sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
=remove network with dependencies=&lt;br /&gt;
 export ROUTER=93b6d9c1-67db-4e04-9aaf-dad208def3c4&lt;br /&gt;
 export NETWORK=9b86febc-f46f-4990-96c8-ef2e4bc8e139&lt;br /&gt;
 openstack router remove subnet ${ROUTER} $(openstack route show ${ROUTER} -f json | jq -r &#039;.interfaces_info[].subnet_id&#039;)&lt;br /&gt;
 openstack router unset --external-gateway ${ROUTER}&lt;br /&gt;
 for port in $(openstack port list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
   openstack port delete &amp;quot;$port&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 for subnet in $(openstack subnet list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
    openstack subnet delete &amp;quot;$subnet&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 openstack network delete ${NETWORK}&lt;br /&gt;
 openstack router delete ${ROUTER}&lt;br /&gt;
=delete nic/network from server=&lt;br /&gt;
 openstack port list --server &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
 openstack server remove port &amp;lt;vm-name-or-id&amp;gt; &amp;lt;port-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=openstack version=&lt;br /&gt;
openstack major miro version.&lt;br /&gt;
 openstack version show&lt;br /&gt;
 openstack version show -f json | jq -r &#039;.[] | select(.Status == &amp;quot;CURRENT&amp;quot;) | [.&amp;quot;Service Type&amp;quot;, .Version, .Endpoint]|@tsv&#039; | column_tab&lt;br /&gt;
=download volume to you where you want=&lt;br /&gt;
Create an image.&lt;br /&gt;
 openstack image create --volume &amp;lt;volume name&amp;gt; --private --progress &amp;lt;image name&amp;gt;&lt;br /&gt;
Download it using.&lt;br /&gt;
 openstack image save --file &amp;lt;local filename&amp;gt; &amp;lt;image name&amp;gt;&lt;br /&gt;
=application credentials=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Login via working cli session. Create application credentials with read permissions. Create config file with output from the command.&lt;br /&gt;
openstack application credential create reader_3 --role reader -c id -c secret -f value | xargs | while read ID SECRET ; do cat &amp;gt; clouds.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
clouds:&lt;br /&gt;
  ${OS_CLOUD}:&lt;br /&gt;
    auth_type: &amp;quot;v3applicationcredential&amp;quot;&lt;br /&gt;
    auth:&lt;br /&gt;
      auth_url: https://auth.binero.cloud:5000&lt;br /&gt;
      application_credential_id: &amp;quot;${ID}&amp;quot;&lt;br /&gt;
      application_credential_secret: &amp;quot;${SECRET}&amp;quot;&lt;br /&gt;
    region_name: europe-se-1&lt;br /&gt;
    interface: public&lt;br /&gt;
    identity_api_version: 3&lt;br /&gt;
    volume_api_version: 3&lt;br /&gt;
EOF&lt;br /&gt;
done&lt;br /&gt;
# To be able to use above config file you have to set OS_CLOUD variable and have the clouds.yaml file in either your working directory or  ~/.config/openstack/clouds.yaml.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=manage certs=&lt;br /&gt;
==List secrets==&lt;br /&gt;
 openstack secret list&lt;br /&gt;
==Add new cert. Content type p12== &lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
 openstack secret store --name star-sulzer-com-lb-cert-2026-10-23 --secret-type opaque --payload-content-type &#039;application/octet-stream&#039; --payload-content-encoding base64 --payload &amp;quot;$(base64 /temp/sulzer.p12)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Download cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429 --payload_content_type &#039;application/octet-stream&#039; --file /tmp/tmp&lt;br /&gt;
==Look at cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429   --payload_content_type &#039;application/octet-stream&#039;   --payload -f value | python3 -c &amp;quot;import sys; sys.stdout.buffer.write(eval(sys.stdin.read()))&amp;quot; | openssl pkcs12 -nodes -info -passin pass:&lt;br /&gt;
==Add cert to listener==&lt;br /&gt;
 openstack loadbalancer listener set &amp;lt;listener_id&amp;gt; --default-tls-container-ref &amp;lt;certificate_secret_id&amp;gt;&lt;br /&gt;
=dhcp options provided by cloud-init=&lt;br /&gt;
 /var/log/cloud-init.log&lt;br /&gt;
=List hypervisor=&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;.[]|select(.State == &amp;quot;up&amp;quot;)|.&amp;quot;Hypervisor Hostname&amp;quot;&#039; | sort -n | while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;[.[] | select(.State == &amp;quot;up&amp;quot;)]  | sort_by(.&amp;quot;Hypervisor Hostname&amp;quot; | match(&amp;quot;([0-9]+)&amp;quot;).captures[0].string | tonumber) | .[].&amp;quot;Hypervisor Hostname&amp;quot;&#039;| while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
=query user_data=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sv http://169.254.169.254/openstack/latest/user_data -o - | cat -v&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16600</id>
		<title>Openstack</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16600"/>
		<updated>2026-04-14T14:31:16Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* List hypervisor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean=&lt;br /&gt;
 aodh                  Alarming service&lt;br /&gt;
 barbican              REST API designed for the secure storage, provisioning and management of secrets such as passwords, encryption keys and X.509&lt;br /&gt;
 cinder                OpenStack Block Storage&lt;br /&gt;
 gnocchi               Time Series Database as a Service&lt;br /&gt;
 glance                OpenStack Image Service&lt;br /&gt;
 heat                  iac. Deploy instances, volumes and other OpenStack services using YAML based templates.&lt;br /&gt;
 horizon               Openstack’s Dashboard, which provides a web based user interface to OpenStack services&lt;br /&gt;
 ironic                bootstrap&lt;br /&gt;
 keystone              identity service &lt;br /&gt;
 magnum                container orchestration engines&lt;br /&gt;
 mistral               workflow service&lt;br /&gt;
 neutron               networking as a service&lt;br /&gt;
 nfv                   Network functions virtualization&lt;br /&gt;
 nova                  cloud computing instance controller, provision compute instances (aka virtual servers).&lt;br /&gt;
 octavia               Load balancer. Octavia HAProxy Amphora API&lt;br /&gt;
 rhosp                 Red Hat OpenStack Platform&lt;br /&gt;
 swift                 OpenStack Object Storage&lt;br /&gt;
 tacker                NFV Orchestration&lt;br /&gt;
 trove                 Database as a Service&lt;br /&gt;
 Zaqar                 multi-tenant cloud messaging service&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(openstack complete 2&amp;gt;/dev/null )&lt;br /&gt;
=flavor=&lt;br /&gt;
Which machine types exist.&lt;br /&gt;
 gp      &amp;quot;General purpose&amp;quot; Well rounded combination of amount of CPUs and the amount of RAM.&lt;br /&gt;
 hm      &amp;quot;High memory&amp;quot; Optimimzed for applications that need a lot of memory.&lt;br /&gt;
 hp      &amp;quot;High performance&amp;quot; High frequenzy cpu.&lt;br /&gt;
List suitable flavors&lt;br /&gt;
 openstack flavor list -f json -c VCPUs -c RAM -c Disk -c Name | jq -r &#039;.[] | [ .Name, .VCPUs, .RAM, .Disk ] | @tsv&#039; | sort -k 2,2n -k 3,3n | grep -vE &#039;gpu|pinned|nvme&#039; | column_tab&lt;br /&gt;
Change flavor of vm&lt;br /&gt;
 openstack server resize &amp;lt;vm-name-or-id&amp;gt; --flavor &amp;lt;new-flavor-name-or-id&amp;gt; --wait&lt;br /&gt;
 openstack server resize confirm &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Manage multiple projects=&lt;br /&gt;
 export OS_CLIENT_CONFIG_FILE=~/.config/openstack/project1_clouds.yaml&lt;br /&gt;
 export OS_CLOUD=project1&lt;br /&gt;
&lt;br /&gt;
=list volumes=&lt;br /&gt;
 openstack volume list&lt;br /&gt;
==list volume belonging to &amp;lt;server&amp;gt;==&lt;br /&gt;
 openstack server volume list &amp;lt;server&amp;gt;&lt;br /&gt;
==remove volume from server==&lt;br /&gt;
 openstack server remove volume &amp;lt;vm_name_or_id&amp;gt; &amp;lt;volume_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack=&lt;br /&gt;
 dnf install python3-openstackclient&lt;br /&gt;
 dnf -y install $(dnf -q search python3- client |grep -i OpenStack | grep -v -- -tests| awk &#039;{print $1}&#039;)&lt;br /&gt;
&lt;br /&gt;
=get ip addresses of all host=&lt;br /&gt;
 openstack server list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;&lt;br /&gt;
=long output=&lt;br /&gt;
 openstack server list --long&lt;br /&gt;
=select server depending status=&lt;br /&gt;
 openstack server list --status ACTIVE&lt;br /&gt;
&lt;br /&gt;
=output=&lt;br /&gt;
 -f csv,json,table,value,yaml&lt;br /&gt;
Get output without headers.&lt;br /&gt;
 openstack server list -f value&lt;br /&gt;
&lt;br /&gt;
=list all=&lt;br /&gt;
 openstack command list -f yaml | grep - | grep list | sed &#039;s/^  - /openstack /g&#039; |grep -v &amp;quot;openstack command list&amp;quot; | while read i ; do echo &#039;*&#039; $i ; $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039; | while read i ; do echo &#039;*&#039; openstack $i ; openstack $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=How to reach nodes=&lt;br /&gt;
 OPENSTACK=$(openstack server  list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;) ; OPENSTACK_JUMP=$(grep 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; NODES=$(grep -v 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; for NODE in ${NODES} ; do echo ssh -J core@${OPENSTACK_JUMP} core@${NODE} ; done&lt;br /&gt;
=create server=&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image fedora-37-x86_64 --boot-from-volume 100 --network abjorklund-01-5tsbc-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
With setting password.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; user-data&lt;br /&gt;
 #cloud-config&lt;br /&gt;
 password: Password123!&lt;br /&gt;
 chpasswd: {expire: False}&lt;br /&gt;
 ssh_pwauth: True&lt;br /&gt;
 EOF&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file) --user-data user-data&lt;br /&gt;
With existing network port&lt;br /&gt;
 openstack server create --flavor gp.1x2 --block-device source=volume,id=&amp;lt;volume-id&amp;gt;,dest=volume,bootindex=0,delete_on_termination=false --nic port-id=&amp;lt;existing-port-id&amp;gt; --key-name &amp;lt;your-keypair&amp;gt; &amp;lt;new-server-name&lt;br /&gt;
&lt;br /&gt;
=router=&lt;br /&gt;
==List routers==&lt;br /&gt;
 openstack router list&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 openstack router show abjorklund-01-5tsbc-external-router -c external_gateway_info -f json | jq &#039;.external_gateway_info.external_fixed_ips[0].ip_address&#039;&lt;br /&gt;
==Remove subnet from router==&lt;br /&gt;
 openstack router remove subnet &amp;lt;router&amp;gt; &amp;lt;subnet&amp;gt;&lt;br /&gt;
==add route to router==&lt;br /&gt;
openstack router add route --route destination=10.8.1.0/24,gateway=10.111.222.254 &amp;lt;router&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=list available images=&lt;br /&gt;
 openstack image list&lt;br /&gt;
=Download image=&lt;br /&gt;
Get info about image.&lt;br /&gt;
 openstack image list | grep -i nord-ic-&lt;br /&gt;
 | 98c03b69-4ba8-4276-8695-b6c3f006cf20 | nord-ic-bc84t-rhcos            | active |&lt;br /&gt;
 glance image-download --file nord-ic-bc84t-rhcos --progress 98c03b69-4ba8-4276-8695-b6c3f006cf20&lt;br /&gt;
&lt;br /&gt;
=Upload image=&lt;br /&gt;
https://cloud-images.ubuntu.com/focal/current/&lt;br /&gt;
 openstack image create --disk-format qcow2 --container-format bare --file focal-server-cloudimg-amd64.img Focal_Fossa.$(date_file)&lt;br /&gt;
&lt;br /&gt;
=security=&lt;br /&gt;
==Create security group.==&lt;br /&gt;
 openstack security group create &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group create ssh_allow&lt;br /&gt;
&lt;br /&gt;
==Get security groups.==&lt;br /&gt;
 openstack security group list -c Name -f json | jq -r &#039;.[].Name&#039;&lt;br /&gt;
==Get all security groups with rules.==&lt;br /&gt;
 openstack security group list -c Name -f value | while read SECURITY ; do openstack security group show &amp;quot;$SECURITY&amp;quot; ; done &amp;gt; /temp/${OS_CLOUD##*/}}_openstack_security_group_list_openstack_security_group_show.$(date_file).log&lt;br /&gt;
==Get rules from one security group.==&lt;br /&gt;
 openstack security group rule list &amp;lt;group&amp;gt;&lt;br /&gt;
==Add rule to allow traffic from ip.==&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 6443 --remote-ip 185.53.164.10/32 --ingress &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
 openstack security group rule create ssh_allow --remote-ip 0.0.0.0/0 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack security group rule create &amp;lt;rule&amp;gt; --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Allow nfs4 traffic==&lt;br /&gt;
 # List group to add too.&lt;br /&gt;
 openstack security group list | grep rw-core&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 2049 --remote-ip 10.2.0.0/16 rw-core-p9dq6-master&lt;br /&gt;
==Add security group to server==&lt;br /&gt;
 openstack server add security group &amp;lt;server_name_or_id&amp;gt; &amp;lt;security_group_name_or_id&amp;gt;&lt;br /&gt;
Example of adding a group with a rule.&lt;br /&gt;
 openstack security group create ssh-vpn&lt;br /&gt;
 openstack security group rule create ssh-vpn --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack server add security group RW01 ssh-vpn&lt;br /&gt;
&lt;br /&gt;
=create block device=&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
Resize block device.&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
&lt;br /&gt;
=set physical ip on host=&lt;br /&gt;
 openstack port list&lt;br /&gt;
List in different view.&lt;br /&gt;
 openstack port list -f json | jq -r &#039;.[]|[.ID, .Name, .Status, .&amp;quot;Fixed IP Addresses&amp;quot;[].ip_address]| join(&amp;quot;\t&amp;quot;)&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=Change security group on port=&lt;br /&gt;
Remove if existing port does not exist.&lt;br /&gt;
 openstack port set --no-security-group a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
 openstack port set --security-group 3723f737-280f-453e-af0b-50aca4ce1b0d a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
=create port=&lt;br /&gt;
 openstack port create --network abjorklund-01-h4sxm-openshift --fixed-ip subnet=4bb2ab0c-f8f9-4346-b238-5f992f0bcf56,ip-address=10.1.0.5 abjorklund-01-h4sxm-api-port&lt;br /&gt;
&lt;br /&gt;
=manage loadbalancer aurora/haproxy=&lt;br /&gt;
 openstack loadbalancer&lt;br /&gt;
 openstack loadbalancer list&lt;br /&gt;
 openstack loadbalancer show test-lb -c listeners -f value&lt;br /&gt;
=listerners and l7policy=&lt;br /&gt;
Identify listener&lt;br /&gt;
 openstack loadbalancer listener list --loadbalancer test-lb | grep frontend_https&lt;br /&gt;
List l7policy on listener&lt;br /&gt;
 openstack loadbalancer l7policy list --listener cdae695d-04fe-41e7-b927-88b5f32b9ed8 -f json&lt;br /&gt;
Let traffic through&lt;br /&gt;
 openstack loadbalancer l7policy set --disable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
Maintenance mode&lt;br /&gt;
 openstack loadbalancer l7policy set --enable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
&lt;br /&gt;
=view limits=&lt;br /&gt;
If you have problems to create something in openstack it could be worth verifying you are within limits.&lt;br /&gt;
 openstack limits show --absolute -f value | grep -E &#039;RAM|Cores&#039;&lt;br /&gt;
 openstack quota show --usage -c Resource -c Limit -c &amp;quot;In Use&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=count resources=&lt;br /&gt;
 openstack quota show --usage -c Resource -c &amp;quot;In Use&amp;quot; -f json | jq -r &#039;.[] | select(.Resource == &amp;quot;cores&amp;quot; or .Resource == &amp;quot;ram&amp;quot; or .Resource == &amp;quot;gigabytes&amp;quot; )| [.Resource, .&amp;quot;In Use&amp;quot;] | @tsv&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=get project id=&lt;br /&gt;
 openstack project list -f value -c ID&lt;br /&gt;
=manage s3/swift=&lt;br /&gt;
==create s3 credentials==&lt;br /&gt;
 openstack ec2 credentials create&lt;br /&gt;
 openstack ec2 credentials list&lt;br /&gt;
==Create s3 bucket==&lt;br /&gt;
 aws s3api create-bucket --bucket &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift post &amp;lt;bucket&amp;gt;&lt;br /&gt;
 openstack container create &amp;lt;bucket&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list s3 storage==&lt;br /&gt;
 swift list&lt;br /&gt;
 swift list &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift list --long &amp;lt;container&amp;gt;&lt;br /&gt;
 swift stat &amp;lt;bucket&amp;gt;&lt;br /&gt;
 aws s3api list-buckets&lt;br /&gt;
 openstack container list&lt;br /&gt;
==download file==&lt;br /&gt;
 swift download elastic_snapshots elasticsearch-snapshots/snap-symvtlMpRIetTyfCDsHIVg.dat&lt;br /&gt;
&lt;br /&gt;
==mount s3 bucket==&lt;br /&gt;
 export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID ; export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY ; export AWS_DEFAULT_REGION=us-west-2 ; s3fs -f -d openshift-region /mnt/openshift-region/ -o endpoint=europe-se-1 -o &amp;quot;host=https://object-eu-se-1a.binero.cloud&amp;quot; -o use_path_request_style&lt;br /&gt;
==copy file to s3==&lt;br /&gt;
 openstack server show $(openstack server list -f value | head -1 | awk &#039;{print $2}&#039;) -c project_id -f value&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 openstack configuration show -f json | jq -r &#039;.&amp;quot;auth.username&amp;quot;&#039;&lt;br /&gt;
=sort=&lt;br /&gt;
Sort on column name.&lt;br /&gt;
 openstack network list --sort-column Name&lt;br /&gt;
=selected columns=&lt;br /&gt;
Select column name only&lt;br /&gt;
 openstack server list -c Name -c Status -f table&lt;br /&gt;
&lt;br /&gt;
=create ssh public key(keypair)=&lt;br /&gt;
 openstack keypair create --public-key /home/abjorklund/.ssh/id_ed25519.pub abjorklund_id_ed25519&lt;br /&gt;
List keys&lt;br /&gt;
 openstack keypair list&lt;br /&gt;
Delete kaypair&lt;br /&gt;
 openstack keypair delete &amp;lt;keypair&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=create floating ip=&lt;br /&gt;
 openstack floating ip create europe-se-1-1a-net0&lt;br /&gt;
=remove floating ip=&lt;br /&gt;
 openstack floating ip delete 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign floating ip to port=&lt;br /&gt;
 openstack floating ip set --port abjorklund-01-h4sxm-ingress-port 193.93.251.233&lt;br /&gt;
=unassign floating ip to server=&lt;br /&gt;
 openstack server remove floating ip ocp-13-nkvgn-master-0 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign ip to server=&lt;br /&gt;
 openstack server add floating ip abjorklund_dns-lookup 193.93.248.34&lt;br /&gt;
&lt;br /&gt;
=restart server=&lt;br /&gt;
 openstack server reboot &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server reboot --hard &amp;lt;server&amp;gt;&lt;br /&gt;
=view events/log from server=&lt;br /&gt;
 openstack server event list &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server event show &amp;lt;server&amp;gt; &amp;lt;requestid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=recovery of server using iso=&lt;br /&gt;
Upload iso recovery.&lt;br /&gt;
 export ISO=ubuntu-22.04.4-live-server-amd64.iso ; openstack image create $ISO --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi --disk-format iso --file $ISO --private --progress&lt;br /&gt;
If special properties are not set then set them.&lt;br /&gt;
 openstack image set --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi &amp;lt;image&amp;gt;&lt;br /&gt;
Boot server with recovery iso.&lt;br /&gt;
 export SERVER=&amp;lt;server&amp;gt; ISO=&amp;lt;iso&amp;gt;; openstack --os-compute-api-version 2.87 server rescue --image $ISO $SERVER&lt;br /&gt;
When done disable rescue mode.&lt;br /&gt;
 openstack server unrescue SERVER&lt;br /&gt;
&lt;br /&gt;
=subnet=&lt;br /&gt;
List subnets&lt;br /&gt;
 openstack subnet list&lt;br /&gt;
=hypervisor=&lt;br /&gt;
 Which underlying hypervisor is used.&lt;br /&gt;
 Not of your business. Ask worthy person.&lt;br /&gt;
=volume backups=&lt;br /&gt;
 openstack volume backup list&lt;br /&gt;
=create snapshot=&lt;br /&gt;
 SERVER=&amp;lt;server&amp;gt; openstack server image create --name &amp;quot;backup-${SERVER}-$(date_file)&amp;quot; ${SERVER}&lt;br /&gt;
=volume snapshot=&lt;br /&gt;
 openstack volume snapshot list&lt;br /&gt;
 openstack volume snapshot list -c ID -f value | while read SNAPSHOT ; do echo &#039;*&#039; $SNAPSHOT ; openstack volume snapshot delete $SNAPSHOT ; done&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 # openstack dns https://docs.binero.com/dns.html&lt;br /&gt;
 # List zones&lt;br /&gt;
 openstack zone list&lt;br /&gt;
 # Create zone &lt;br /&gt;
 openstack zone create --email anden@halfface.se binero.halfface.se.&lt;br /&gt;
 # Add entries.&lt;br /&gt;
 openstack recordset create --record &amp;lt;ip&amp;gt; --type A &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # list enries.&lt;br /&gt;
 openstack recordset list &amp;lt;zone&amp;gt;&lt;br /&gt;
 # Delete entries.&lt;br /&gt;
 openstack recordset delete &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # show values for one entry&lt;br /&gt;
 openstack recordset show &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Networking explained=&lt;br /&gt;
&lt;br /&gt;
 1. openstack_networking_network_v2&lt;br /&gt;
 - Purpose: Represents a network in OpenStack.&lt;br /&gt;
 - Interaction: This is the top-level network entity. You create a network to provide a layer 2 domain for your instances.&lt;br /&gt;
 &lt;br /&gt;
 2. openstack_networking_subnet_v2&lt;br /&gt;
 - Purpose: Represents a subnet within a network.&lt;br /&gt;
 - Interaction: A subnet is associated with a network. It defines a range of IP addresses, and optionally, DHCP settings.&lt;br /&gt;
 &lt;br /&gt;
 3. openstack_networking_router_v2&lt;br /&gt;
 - Purpose: Represents a virtual router.&lt;br /&gt;
 - Interaction: Routers are used to route traffic between different subnets or networks. They can also be used to provide external network access to instances.&lt;br /&gt;
 &lt;br /&gt;
 4. openstack_networking_router_interface_v2&lt;br /&gt;
 - Purpose: Connects a router to a subnet.&lt;br /&gt;
 - Interaction: This resource is used to add an interface to a router, effectively connecting the router to a subnet, enabling routing between that subnet and others.&lt;br /&gt;
 &lt;br /&gt;
 5. openstack_networking_port_v2&lt;br /&gt;
 - Purpose: Represents a port on a network.&lt;br /&gt;
 - Interaction: Ports are attachment points for devices (like instances) on a network. They have associated IP addresses and MAC addresses.&lt;br /&gt;
 &lt;br /&gt;
 6. openstack_networking_port_secgroup_associate_v2&lt;br /&gt;
 - Purpose: Associates security groups with a port.&lt;br /&gt;
 - Interaction: Security groups define the firewall rules applied to ports. Associating a security group with a port applies the security group&#039;s rules to that port.&lt;br /&gt;
 &lt;br /&gt;
 7. openstack_networking_secgroup_v2&lt;br /&gt;
 - Purpose: Represents a security group.&lt;br /&gt;
 - Interaction: Security groups contain a set of rules that define the allowed ingress and egress traffic to and from ports.&lt;br /&gt;
 &lt;br /&gt;
 8. openstack_networking_secgroup_rule_v2&lt;br /&gt;
 - Purpose: Represents a rule within a security group.&lt;br /&gt;
 - Interaction: Security group rules define specific ingress or egress traffic allowed to the instances associated with ports to which the security group is applied.&lt;br /&gt;
 &lt;br /&gt;
 9. openstack_networking_floatingip_v2&lt;br /&gt;
 - Purpose: Represents a floating IP.&lt;br /&gt;
 - Interaction: Floating IPs are IP addresses that can be dynamically associated with instances. They provide external access to instances.&lt;br /&gt;
 &lt;br /&gt;
 10. openstack_networking_floatingip_associate_v2&lt;br /&gt;
 - Purpose: Associates a floating IP with a port.&lt;br /&gt;
 - Interaction: This resource links a floating IP to a port, providing the instance with an external IP address that is accessible from outside the OpenStack cloud.&lt;br /&gt;
 &lt;br /&gt;
 Interaction Summary&lt;br /&gt;
 1. Network and Subnet Creation:&lt;br /&gt;
   - Create a network using `openstack_networking_network_v2`.&lt;br /&gt;
   - Create a subnet within this network using `openstack_networking_subnet_v2`.&lt;br /&gt;
 &lt;br /&gt;
 2. Router Configuration:&lt;br /&gt;
   - Create a router using `openstack_networking_router_v2`.&lt;br /&gt;
   - Add an interface to this router to connect it to a subnet using `openstack_networking_router_interface_v2`.&lt;br /&gt;
 &lt;br /&gt;
 3. Instance Connectivity:&lt;br /&gt;
   - Create a port on the network using `openstack_networking_port_v2`.&lt;br /&gt;
   - Attach this port to an instance.&lt;br /&gt;
 &lt;br /&gt;
 4. Security:&lt;br /&gt;
   - Create security groups using `openstack_networking_secgroup_v2`.&lt;br /&gt;
   - Define rules for the security group using `openstack_networking_secgroup_rule_v2`.&lt;br /&gt;
   - Associate security groups with the port using `openstack_networking_port_secgroup_associate_v2`.&lt;br /&gt;
 &lt;br /&gt;
 5. External Access:&lt;br /&gt;
   - Create a floating IP using `openstack_networking_floatingip_v2`.&lt;br /&gt;
   - Associate the floating IP with the port attached to the instance using `openstack_networking_floatingip_associate_v2`.&lt;br /&gt;
=Extend disk=&lt;br /&gt;
Look at usage from beginning.&lt;br /&gt;
 df -lh&lt;br /&gt;
Extend partition partprobe&lt;br /&gt;
 openstack volume set --size &amp;lt;new_size&amp;gt; &amp;lt;volume&amp;gt; --os-volume-api-version 3.42&lt;br /&gt;
Grow partition that you intend to grow. This part can be ignored if using disk as raw partion(/dev/sd?)&lt;br /&gt;
 growpart /dev/sdb 1&lt;br /&gt;
Resize filesystem.&lt;br /&gt;
 resize2fs /dev/sdb1&lt;br /&gt;
Look at usage after extend.&lt;br /&gt;
 df -lh&lt;br /&gt;
=affinity=&lt;br /&gt;
 affinity           Put servers on same hypervisor.&lt;br /&gt;
 anti-affinity      Dont put servers on same hypervisor.&lt;br /&gt;
 soft-affinity      Put servers on same hypervisor if possible.&lt;br /&gt;
 soft-anti-affinity Put server on hypervisor if possible&lt;br /&gt;
&lt;br /&gt;
=Are hosts located on same hypervisor=&lt;br /&gt;
 openstack server list -f value -c ID | while read i ; do openstack server show $i -f value -c hostId -c name | xargs ; done | sort -n&lt;br /&gt;
=Define how server should be handled regarding affinity=&lt;br /&gt;
 openstack server group list&lt;br /&gt;
==create server group name with soft affinity==&lt;br /&gt;
 openstack server group create --policy soft-anti-affinity &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack cli on rhel7/8=&lt;br /&gt;
 yum install centos-release-openstack-train.noarch&lt;br /&gt;
 yum install python-openstackclient&lt;br /&gt;
 sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
 sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
=remove network with dependencies=&lt;br /&gt;
 export ROUTER=93b6d9c1-67db-4e04-9aaf-dad208def3c4&lt;br /&gt;
 export NETWORK=9b86febc-f46f-4990-96c8-ef2e4bc8e139&lt;br /&gt;
 openstack router remove subnet ${ROUTER} $(openstack route show ${ROUTER} -f json | jq -r &#039;.interfaces_info[].subnet_id&#039;)&lt;br /&gt;
 openstack router unset --external-gateway ${ROUTER}&lt;br /&gt;
 for port in $(openstack port list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
   openstack port delete &amp;quot;$port&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 for subnet in $(openstack subnet list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
    openstack subnet delete &amp;quot;$subnet&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 openstack network delete ${NETWORK}&lt;br /&gt;
 openstack router delete ${ROUTER}&lt;br /&gt;
=delete nic/network from server=&lt;br /&gt;
 openstack port list --server &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
 openstack server remove port &amp;lt;vm-name-or-id&amp;gt; &amp;lt;port-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=openstack version=&lt;br /&gt;
openstack major miro version.&lt;br /&gt;
 openstack version show&lt;br /&gt;
 openstack version show -f json | jq -r &#039;.[] | select(.Status == &amp;quot;CURRENT&amp;quot;) | [.&amp;quot;Service Type&amp;quot;, .Version, .Endpoint]|@tsv&#039; | column_tab&lt;br /&gt;
=download volume to you where you want=&lt;br /&gt;
Create an image.&lt;br /&gt;
 openstack image create --volume &amp;lt;volume name&amp;gt; --private --progress &amp;lt;image name&amp;gt;&lt;br /&gt;
Download it using.&lt;br /&gt;
 openstack image save --file &amp;lt;local filename&amp;gt; &amp;lt;image name&amp;gt;&lt;br /&gt;
=application credentials=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Login via working cli session. Create application credentials with read permissions. Create config file with output from the command.&lt;br /&gt;
openstack application credential create reader_3 --role reader -c id -c secret -f value | xargs | while read ID SECRET ; do cat &amp;gt; clouds.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
clouds:&lt;br /&gt;
  ${OS_CLOUD}:&lt;br /&gt;
    auth_type: &amp;quot;v3applicationcredential&amp;quot;&lt;br /&gt;
    auth:&lt;br /&gt;
      auth_url: https://auth.binero.cloud:5000&lt;br /&gt;
      application_credential_id: &amp;quot;${ID}&amp;quot;&lt;br /&gt;
      application_credential_secret: &amp;quot;${SECRET}&amp;quot;&lt;br /&gt;
    region_name: europe-se-1&lt;br /&gt;
    interface: public&lt;br /&gt;
    identity_api_version: 3&lt;br /&gt;
    volume_api_version: 3&lt;br /&gt;
EOF&lt;br /&gt;
done&lt;br /&gt;
# To be able to use above config file you have to set OS_CLOUD variable and have the clouds.yaml file in either your working directory or  ~/.config/openstack/clouds.yaml.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=manage certs=&lt;br /&gt;
==List secrets==&lt;br /&gt;
 openstack secret list&lt;br /&gt;
==Add new cert. Content type p12== &lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
 openstack secret store --name star-sulzer-com-lb-cert-2026-10-23 --secret-type opaque --payload-content-type &#039;application/octet-stream&#039; --payload-content-encoding base64 --payload &amp;quot;$(base64 /temp/sulzer.p12)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Download cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429 --payload_content_type &#039;application/octet-stream&#039; --file /tmp/tmp&lt;br /&gt;
==Look at cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429   --payload_content_type &#039;application/octet-stream&#039;   --payload -f value | python3 -c &amp;quot;import sys; sys.stdout.buffer.write(eval(sys.stdin.read()))&amp;quot; | openssl pkcs12 -nodes -info -passin pass:&lt;br /&gt;
==Add cert to listener==&lt;br /&gt;
 openstack loadbalancer listener set &amp;lt;listener_id&amp;gt; --default-tls-container-ref &amp;lt;certificate_secret_id&amp;gt;&lt;br /&gt;
=dhcp options provided by cloud-init=&lt;br /&gt;
 /var/log/cloud-init.log&lt;br /&gt;
=List hypervisor=&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;.[]|select(.State == &amp;quot;up&amp;quot;)|.&amp;quot;Hypervisor Hostname&amp;quot;&#039; | sort -n | while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;[.[] | select(.State == &amp;quot;up&amp;quot;)]  | sort_by(.&amp;quot;Hypervisor Hostname&amp;quot; | match(&amp;quot;([0-9]+)&amp;quot;).captures[0].string | tonumber) | .[].&amp;quot;Hypervisor Hostname&amp;quot;&#039;| while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
=query user_data=&lt;br /&gt;
 curl -sv http://169.254.169.254/openstack/latest/user_data -o - | cat -v&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Commands&amp;diff=16599</id>
		<title>Commands</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Commands&amp;diff=16599"/>
		<updated>2026-04-09T15:06:18Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* strace multiple processes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=7za=&lt;br /&gt;
decompress file&lt;br /&gt;
 7za e myfiles.7z&lt;br /&gt;
=ab=&lt;br /&gt;
apache benchmarking&lt;br /&gt;
 ab -n 50 https://www.halfface.se/photos/&lt;br /&gt;
 ab -n 1000 -c 10 https://www.halfface.se/wiki/index.php/Halfface&lt;br /&gt;
&lt;br /&gt;
=abcde=&lt;br /&gt;
Rip cd.&lt;br /&gt;
 abcde&lt;br /&gt;
=adb android=&lt;br /&gt;
 # install adb&lt;br /&gt;
 dnf install android-tools&lt;br /&gt;
 # enable debug. On phone. Settings. about phone. build version. Click until prompted. Enable debug via selector.&lt;br /&gt;
 # Connect phone via usb.&lt;br /&gt;
 # List phones.&lt;br /&gt;
 adb devices&lt;br /&gt;
 # Get shell on phone.&lt;br /&gt;
 adb shell&lt;br /&gt;
 # list installed packages.&lt;br /&gt;
 pm list packages -f&lt;br /&gt;
 adb shell pm list packages -f | grep game&lt;br /&gt;
 # Uninstall&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gos&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gametools&lt;br /&gt;
 adb shell pm disable-user --user 0 com.sec.android.app.samsungapps&lt;br /&gt;
&lt;br /&gt;
=agrep=&lt;br /&gt;
Aproximate grep. 3 differences from andreas&lt;br /&gt;
 agrep -3 andreas /var/log/messages&lt;br /&gt;
=alacritty(Terminal emulator hw accellerated)=&lt;br /&gt;
Terminal copy mode.&lt;br /&gt;
 CTRL + SHIFT + SPACE&lt;br /&gt;
=alsactl=&lt;br /&gt;
Reload alsa drivers&lt;br /&gt;
 systemctl restart alsa-state&lt;br /&gt;
 sudo alsactl restore&lt;br /&gt;
&lt;br /&gt;
=alternatives=&lt;br /&gt;
 alternatives --set mta /usr/sbin/sendmail.postfix&lt;br /&gt;
 sudo alternatives --config java&lt;br /&gt;
&lt;br /&gt;
=antiword=&lt;br /&gt;
 antiword bad.doc &amp;gt; pure.txt&lt;br /&gt;
&lt;br /&gt;
=arecord=&lt;br /&gt;
List soundcards.&lt;br /&gt;
 arecord -l&lt;br /&gt;
Chose source.&lt;br /&gt;
 alsamixer&lt;br /&gt;
Create mp3 from source.&lt;br /&gt;
 arecord -f cd -d 5 -t raw | lame -x -r - out.mp3&lt;br /&gt;
=arp-scan=&lt;br /&gt;
Scan ip addresses on local subnet&lt;br /&gt;
 arp-scan --localnet | sort -n -k4 -t. | grep ^[0-9]&lt;br /&gt;
&lt;br /&gt;
=at=&lt;br /&gt;
Run command at specific time. Look at queue.&lt;br /&gt;
 echo &#039;/usr/bin/espeak -s120 &amp;quot;I will say this only once.&amp;quot;&#039; | at -t $(date +%Y%m%d%H%M --date=&amp;quot;+2 min&amp;quot;)&lt;br /&gt;
 atq&lt;br /&gt;
List at jobs.&lt;br /&gt;
 atq ; atq | awk &#039;{print $1}&#039; | while read i ; do echo &#039;***&#039; $i ; at -c $i 2&amp;gt;&amp;amp;1 | tail -3 | head -1 ; done&lt;br /&gt;
 2       Sun May 17 04:00:00 2020 a root&lt;br /&gt;
 *** 2&lt;br /&gt;
 /usr/bin/systemctl restart springboot_uc_supportrouter.service&lt;br /&gt;
&lt;br /&gt;
=authselect=&lt;br /&gt;
Redhat command to manage connection to underlying services and features.&lt;br /&gt;
 # To change content of nsswitch.conf do to your used profile.&lt;br /&gt;
 vim /usr/share/authselect/default/local/nsswitch.conf&lt;br /&gt;
 authselect select local --force&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
 base64 -d /tmp/html | elinks --dump | less -ISRM&lt;br /&gt;
No wrapping&lt;br /&gt;
 base64 --wrap=0&lt;br /&gt;
 base64 -w 0&lt;br /&gt;
=bash=&lt;br /&gt;
curl&lt;br /&gt;
 exec 3&amp;lt;&amp;gt;/dev/tcp/localhost/8080 ; echo -e &amp;quot;GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n&amp;quot; &amp;gt;&amp;amp;3 ; cat &amp;lt;&amp;amp;3&lt;br /&gt;
&lt;br /&gt;
=bbk_cli_...=&lt;br /&gt;
Bredbandskollen via cli.&lt;br /&gt;
 bbk_cli_linux_amd64-1.0&lt;br /&gt;
&lt;br /&gt;
=bc=&lt;br /&gt;
Simplify using bercerly calculator&lt;br /&gt;
 calc(){ echo -e &amp;quot;scale=8\n${@}\nquit\n&amp;quot; | bc ; }&lt;br /&gt;
To the power of(upphöjt i)&lt;br /&gt;
 2^10 = 1024&lt;br /&gt;
scientific (aka exponential) notation&lt;br /&gt;
 echo 1.6945991213315015e+09 | sed -E &#039;s/([+-]?[0-9.]+)[eE]\+?(-?)([0-9]+)/(\1*10^\2\3)/g&#039; | bc&lt;br /&gt;
=bitwarden=&lt;br /&gt;
 # Install bw.&lt;br /&gt;
 curl -L -o /tmp/bw.zip &#039;https://vault.bitwarden.com/download/?app=cli&amp;amp;platform=linux&#039; ; (cd /usr/local/bin ; sudo unzip -o /tmp/bw.zip)&lt;br /&gt;
 # Remove bitwarden config.&lt;br /&gt;
 unset BW_CLIENTID BW_CLIENTSECRET BW_SESSION&lt;br /&gt;
 \rm -r /home/abjorklund/.config/Bitwarden*&lt;br /&gt;
 # Set bitwarden server.&lt;br /&gt;
 bw config server https://halfface.se/vaultwarden/&lt;br /&gt;
 # api login&lt;br /&gt;
 bw login --apikey&lt;br /&gt;
 # sso login. When web server opens write &amp;quot;Binero SSO&amp;quot;&lt;br /&gt;
 bw login&lt;br /&gt;
 # Unlock&lt;br /&gt;
 bw unlock&lt;br /&gt;
 # Sync from server.&lt;br /&gt;
 bw sync&lt;br /&gt;
 # List items.&lt;br /&gt;
 bw list items | jq -r &#039;.[].name&#039;&lt;br /&gt;
 # get totp&lt;br /&gt;
 bw_halfface get totp ginatricot_user&lt;br /&gt;
 # get login info.&lt;br /&gt;
 bw get item bareos-webui | jq .login&lt;br /&gt;
 # which version&lt;br /&gt;
 curl https://halfface.se/vaultwarden/api/version&lt;br /&gt;
 podman image inspect docker.io/vaultwarden/server | jq -r &#039;.[].Config.Labels.&amp;quot;org.opencontainers.image.version&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=bluetoothctl=&lt;br /&gt;
Enable bluetooth&lt;br /&gt;
 sudo systemctl enable bluetooth --now&lt;br /&gt;
Scan&lt;br /&gt;
 bluetoothctl scan on&lt;br /&gt;
Pair&lt;br /&gt;
 bluetoothctl pair &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Connect&lt;br /&gt;
 bluetoothctl connect &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Trust&lt;br /&gt;
 bluetoothctl trust &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Remove&lt;br /&gt;
 bluetoothctl remove &amp;lt;MAC address&amp;gt;&lt;br /&gt;
List paired devices&lt;br /&gt;
 bluetoothctl devices&lt;br /&gt;
Get info about paired device&lt;br /&gt;
 bluetoothctl info 00:00:00:00:3E:E2&lt;br /&gt;
&lt;br /&gt;
=blkid=&lt;br /&gt;
Get uuid of disk.&lt;br /&gt;
 blkid /dev/sdb1&lt;br /&gt;
 /dev/sdb1: UUID=&amp;quot;64cd54f7-5330-425d-81e5-a0e473a5f5e7&amp;quot; TYPE=&amp;quot;ext4&amp;quot; PARTLABEL=&amp;quot;primary&amp;quot; PARTUUID=&amp;quot;21f38e48-af2d-4fdd-854a-5910f392a6e0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bonnie++=&lt;br /&gt;
Report performance on disk. benchmark&lt;br /&gt;
 bonnie++ -u 0:0&lt;br /&gt;
On machine running out of disk&lt;br /&gt;
 sudo bonnie++ -d ./ -s 400 -r 200 -u root&lt;br /&gt;
Example command.&lt;br /&gt;
 bonnie++ -d /storage/temp/ -s 32G -n 0 -m TEST -f -b -u abjorklund&lt;br /&gt;
&lt;br /&gt;
=boot=&lt;br /&gt;
Booting singe user mode.&lt;br /&gt;
 kernel ... single&lt;br /&gt;
&lt;br /&gt;
=bootchart=&lt;br /&gt;
Analyze startup times.&lt;br /&gt;
&lt;br /&gt;
=bootgraph=&lt;br /&gt;
How to use.&lt;br /&gt;
 Kernel later than 2.6.28&lt;br /&gt;
 kernel option initcall_debug&lt;br /&gt;
 dmesg | /usr/src/linux-headers-2.6.28-11-generic/scripts/bootgraph.pl &amp;gt; /tmp/bootgraph.svg&lt;br /&gt;
=bpftrace=&lt;br /&gt;
run code at each system call&lt;br /&gt;
 #!/usr/bin/bpftrace&lt;br /&gt;
 &lt;br /&gt;
 interval:s:5&lt;br /&gt;
 {&lt;br /&gt;
   exit();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 kprobe:do_sys_open&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;%s %s\n&amp;quot;, comm, str(arg1));&lt;br /&gt;
 }&lt;br /&gt;
=busctl=&lt;br /&gt;
 busctl may be used to introspect and monitor the D-Bus bus.&lt;br /&gt;
&lt;br /&gt;
=bzip2=&lt;br /&gt;
Extract keep original&lt;br /&gt;
 bzip2 -dk /compressed_file.bz2 and extract standard out via tar.&lt;br /&gt;
Extract bunzip2 file and extract via tar from standard out.&lt;br /&gt;
 bzip2 -c /compressed_file.bz2 | tar -xivf -&lt;br /&gt;
&lt;br /&gt;
=cdrecord=&lt;br /&gt;
Blank cd/dvd rw&lt;br /&gt;
 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=all -force&lt;br /&gt;
=certutil=&lt;br /&gt;
Test password. Password should be part of file called by -f&lt;br /&gt;
 certutil -K -d /etc/dirsrv/slapd-halfface -f /tmp/pin.txt&lt;br /&gt;
Remove cert if it already exist.&lt;br /&gt;
 certutil -D -n &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Create new certificate.&lt;br /&gt;
 certutil -S -n Self-Signed-CA -s CN=ssca.389ds.halfface,O=halfface,L=389ds,ST=Stockholm,C=SE -x -t &amp;quot;CT,,&amp;quot; -v 480 -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt&lt;br /&gt;
List certificates&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/&lt;br /&gt;
Look at a specific certificate&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/ -n &amp;quot;Self-Signed-CA&amp;quot;&lt;br /&gt;
Remove orphan key&lt;br /&gt;
 certutil -F -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt -k 27e0fcb7a201cf0f0c3674eae03c8d94b47b4de0&lt;br /&gt;
Generate a new csr&lt;br /&gt;
 certutil -R -s &amp;quot;CN=www.halfface.se,O=halfface,L=389ds,ST=Stockholm,C=SE&amp;quot; -o server.csr -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt --extSAN &amp;quot;dns:www.halfface.se,dns:ldap.halfface.se&amp;quot; -v 240&lt;br /&gt;
sign certificate&lt;br /&gt;
 certutil -C -i server.csr -o server-cert.crt -c &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Import signed cert&lt;br /&gt;
 certutil -A -n &amp;quot;Server-Cert&amp;quot; -t &amp;quot;u,u,u&amp;quot; -i server-cert.crt -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
==Add certs to chrome==&lt;br /&gt;
 for i in $(ls) ; do echo &#039;*&#039; $i ; certutil -d sql:${HOME}/.pki/nssdb -A -t &amp;quot;C,,&amp;quot; -n &amp;quot;vSphere Root CA $i&amp;quot; -i $i ; done&lt;br /&gt;
&lt;br /&gt;
=cfdisk=&lt;br /&gt;
 Disk partitioning via ncurses interface. like fdisk.&lt;br /&gt;
=chage=&lt;br /&gt;
List password properties of user&lt;br /&gt;
 chage -l abjorklund&lt;br /&gt;
Unlimited login&lt;br /&gt;
 chage -I -1 -m 0 -M 99999 -E -1 sftponly&lt;br /&gt;
&lt;br /&gt;
=chattr/lsattr=&lt;br /&gt;
Set extendet attributes of files.&lt;br /&gt;
 # Lock file for most activities.&lt;br /&gt;
 chattr +i file&lt;br /&gt;
 # Unlock file&lt;br /&gt;
 chattr -i file&lt;br /&gt;
 # recursive lsattr looking for imutable.&lt;br /&gt;
 lsattr -aR -- .//. 2&amp;gt;/dev/null | sed -rn &#039;/i.+\.\/\/\./s/\.\/\///p&#039;&lt;br /&gt;
&lt;br /&gt;
=chmod=&lt;br /&gt;
Sticky bit on directory. Only owners of files are able to delete.&lt;br /&gt;
 chmod 1755 /file.&lt;br /&gt;
 -rwxr-xr-t&lt;br /&gt;
GUID on file. binaries started will have the group set to the defined group.&lt;br /&gt;
 chmod 2755 /file&lt;br /&gt;
 -rwxr-sr-x&lt;br /&gt;
SUID on file.&lt;br /&gt;
 chmod 4755 /file&lt;br /&gt;
 -rwsr-xr-x&lt;br /&gt;
Remover permissions for others&lt;br /&gt;
 chmod o-rwx&lt;br /&gt;
&lt;br /&gt;
=chntpw=&lt;br /&gt;
 # Change windows passwords offline&lt;br /&gt;
 mkdir /mnt/disk ; mount /dev/sd1 /mnt/disk; cd /mnt/disk/Windows/System32/config&lt;br /&gt;
 # List local users.&lt;br /&gt;
 chntpw -l SAM&lt;br /&gt;
 # clear password on user.&lt;br /&gt;
 chntpw -u Administrator SAM&lt;br /&gt;
=chrony=&lt;br /&gt;
 # setup time sync via ntp.&lt;br /&gt;
 /etc/chrony.conf&lt;br /&gt;
 # look at status&lt;br /&gt;
 chronyc tracking&lt;br /&gt;
 # List ntp sources.&lt;br /&gt;
 chronyc sources&lt;br /&gt;
   .-- Source mode  &#039;^&#039; = server, &#039;=&#039; = peer, &#039;#&#039; = local clock.&lt;br /&gt;
  / .- Source state &#039;*&#039; = current synced, &#039;+&#039; = combined , &#039;-&#039; = not combined,&lt;br /&gt;
 | /   &#039;?&#039; = unreachable, &#039;x&#039; = time may be in error, &#039;~&#039; = time too variable.&lt;br /&gt;
 ||                                                 .- xxxx [ yyyy ] +/- zzzz&lt;br /&gt;
 ||      Reachability register (octal) -.           |  xxxx = adjusted offset,&lt;br /&gt;
 ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,&lt;br /&gt;
 ||                                \     |          |  zzzz = estimated error.&lt;br /&gt;
 ||                                 |    |           \&lt;br /&gt;
 MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
 ===============================================================================&lt;br /&gt;
 #? PHC0                          0   3     0   19d    +41ns[ +349ns] +/-  104ns&lt;br /&gt;
Force syncronize&lt;br /&gt;
 sudo chronyc -a &#039;burst 4/4&#039;&lt;br /&gt;
Make a big step. Did not work for me.&lt;br /&gt;
 chronyc -a makestep&lt;br /&gt;
Verify clock&lt;br /&gt;
 chronyd -q &#039;server pool.ntp.org iburst&#039;&lt;br /&gt;
&lt;br /&gt;
=chvt=&lt;br /&gt;
From a script change to a virtual interface and connect script to that terminal.&lt;br /&gt;
chvt 3 exec &amp;lt; /dev/tty3 &amp;gt; /dev/tty3&lt;br /&gt;
&lt;br /&gt;
=cacafire=&lt;br /&gt;
 View some fire in ascii.&lt;br /&gt;
&lt;br /&gt;
=clean=&lt;br /&gt;
Clean file from comments and blank lines.&lt;br /&gt;
 sed &#039;/ *#/d; /^ *$/d&#039;&lt;br /&gt;
&lt;br /&gt;
=codepage=&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 convmv -f cp850 -t iso-8859-1 --notest *&lt;br /&gt;
 convmv -f utf8 -t iso8859-1 -r --notest *&lt;br /&gt;
 convmv -f iso8859-1 -t en_US.UTF-8 -r --notest .&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 iconv --from-code=ISO-8859-15 --to-code=UTF-8 document.csv &amp;gt; document_iconv.csv&lt;br /&gt;
View nfo files&lt;br /&gt;
 iconv -f CP437 -t UTF-8 KaOs.nfo&lt;br /&gt;
&lt;br /&gt;
=column=&lt;br /&gt;
Create nice column. Use tab as delimiter.&lt;br /&gt;
 column -t -s $&#039;\t&#039; /file.tsv&lt;br /&gt;
=compgen=&lt;br /&gt;
List all commands &lt;br /&gt;
 compgen -A function -abck&lt;br /&gt;
&lt;br /&gt;
=convert=&lt;br /&gt;
Convert Image to 8 bit grey with threshold for white.&lt;br /&gt;
 for tif in *.tif; do convert -depth 8 -white-threshold 70% ${tif} ${tif%%.*}.png;done&lt;br /&gt;
Resize image&lt;br /&gt;
 convert -resize 25% -gamma 1.5 2011-08-03_11-09-43.jpg 2011-08-03_11-09-43_new.jpg&lt;br /&gt;
Multipage pdf.&lt;br /&gt;
 convert -adjoin -page A4 -compress jpeg Infineon1.tif Infineon2.tif Infineon.pdf&lt;br /&gt;
 pdfunite RegionUppsala01.pdf RegionUppsala02.pdf RegionUppsala03.pdf RegionUppsala04.pdf RegionUppsala.pdf&lt;br /&gt;
Prepare photos for printing.&lt;br /&gt;
 convert -rotate 90 -gamma 1.5 -resize 25% -compress jpeg -quality 80 -adjoin -page A4 * print.pdf&lt;br /&gt;
Resize change aspect.&lt;br /&gt;
 convert Slide1.PNG -resize 1920x1080\! slide01.png&lt;br /&gt;
animated gif&lt;br /&gt;
 convert -delay 100 -loop 0 *.jpg animation.gif&lt;br /&gt;
Create multipage pdf of photos.&lt;br /&gt;
 convert -resize 25% -adjoin -page A4 -rotate 90 -compress jpeg *.jpg test.pdf ; pdfjam test.pdf --no-landscape --frame true --nup 2x2 --suffix 4up --outfile /temp/photos/Alva/test_2x2.pdf&lt;br /&gt;
For vertical stacking (top to bottom):&lt;br /&gt;
 convert -append 1.jpg 2.jpg out.jpg&lt;br /&gt;
For horizontal stacking (left to right):&lt;br /&gt;
 convert +append 1.jpg 2.jpg out.jpg&lt;br /&gt;
Remove transparancy&lt;br /&gt;
 convert image.png -background white -flatten image.jpg&lt;br /&gt;
&lt;br /&gt;
=cpio=&lt;br /&gt;
Copy wanted partitions.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd /boot/ ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc )&amp;quot; | (cd /mnt/sysimage/boot ; cpio -idvuma )&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd / ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc)&amp;quot; | (cd /mnt/sysimage ; cpio -idvuma )&lt;br /&gt;
 # -o copy out mode.&lt;br /&gt;
 # -0 terminated by null character.&lt;br /&gt;
 # -Hnewc som storing format.&lt;br /&gt;
 # -i extract copy in mode.&lt;br /&gt;
 # -d make directories.&lt;br /&gt;
 # -v verbose.&lt;br /&gt;
 # -V print dot.&lt;br /&gt;
 # -u replace all files.&lt;br /&gt;
 # -m preserve modification time.&lt;br /&gt;
 # -a preserve access time.&lt;br /&gt;
=cpulimit=&lt;br /&gt;
Limit application cpu usage to 25% cpu utilization. Inherit limit to spawned processes.&lt;br /&gt;
 cpulimit -i -l 25 /apps&lt;br /&gt;
&lt;br /&gt;
=crash=&lt;br /&gt;
Troubleshoot hung Redhat vm.&lt;br /&gt;
Dump vm.&lt;br /&gt;
 virsh dump &amp;lt;vm&amp;gt; --memory-only --verbose /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Login to machine you dump:ed and rebooted. Verify kernel version. uname -r&lt;br /&gt;
Setup vm similar to the one you dumped.&lt;br /&gt;
Install rpm:s to be able to debug.&lt;br /&gt;
 export UNAME_R=5.14.0-554.el9.x86_64&lt;br /&gt;
 dnf install --enablerepo=* crash kernel-modules-${UNAME_R} kernel-core-${UNAME_R} kernel-${UNAME_R} kernel-modules-core-${UNAME_R} kernel-debuginfo-common-x86_64-${UNAME_R} kernel-debuginfo-${UNAME_R}&lt;br /&gt;
Tips to find rpm:s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://kojihub.stream.centos.org/koji/builds -&amp;gt; Dropdown: builds -&amp;gt; Search: kernel-5.14.0-554.el9&lt;br /&gt;
https://kojihub.stream.centos.org/kojifiles/packages/kernel/ -&amp;gt; find your way down the tree.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start crash. Write help to give advice. LLMS are quite useful for troubleshooting advice.&lt;br /&gt;
 crash /usr/lib/debug/lib/modules/${UNAME_R}/vmlinux /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Scripting with crash&lt;br /&gt;
 cd /temp/ ;cat commands.txt ; for i in $(ls instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04*) ; do crash -i commands.txt /usr/lib/debug/lib/modules/5.14.0-554.el9.x86_64/vmlinux /temp/instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04.core &amp;gt; $i.log &amp;lt;/dev/null ; done&lt;br /&gt;
 ps&lt;br /&gt;
 runq&lt;br /&gt;
&lt;br /&gt;
=cronie=&lt;br /&gt;
Start cronie in foreground. Write what it is doing.&lt;br /&gt;
 /usr/sbin/crond -n -x sch&lt;br /&gt;
&lt;br /&gt;
=crontab/cron=&lt;br /&gt;
crontab.&lt;br /&gt;
 * * * * *  command to be executed&lt;br /&gt;
 - - - - -&lt;br /&gt;
 | | | | |&lt;br /&gt;
 | | | | +----- day of week (0 - 6) (Sunday=0)&lt;br /&gt;
 | | | +------- month (1 - 12)&lt;br /&gt;
 | | +--------- day of month (1 - 31)&lt;br /&gt;
 | +----------- hour (0 - 23)&lt;br /&gt;
 +------------- min (0 - 59)&lt;br /&gt;
 0 Sunday&lt;br /&gt;
 1 Monday&lt;br /&gt;
 2 Tuesday&lt;br /&gt;
 3 Wednesday&lt;br /&gt;
 4 Thursday&lt;br /&gt;
 5 Friday&lt;br /&gt;
 6 Saturday&lt;br /&gt;
 @reboot &amp;quot;run command at reboot&amp;quot;&lt;br /&gt;
 If you need % in crontab escape it. \%&lt;br /&gt;
&lt;br /&gt;
Run command every 10 minutes.&lt;br /&gt;
 */10 * * * * command&lt;br /&gt;
&lt;br /&gt;
Run command at 12:00 and 24:00 hours.&lt;br /&gt;
 00 0,12 * * *      command&lt;br /&gt;
&lt;br /&gt;
Run command between 8-17 every 2 hours.&lt;br /&gt;
 0 8-17/2 * * * /path/command&lt;br /&gt;
 0 8,10,12,14,16 * * * /path/command&lt;br /&gt;
&lt;br /&gt;
Start program under crontab.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 COMMAND=&amp;quot;screen -L -d -m ping www.dn.se&amp;quot;&lt;br /&gt;
 if [ &amp;quot;$(ps -ef | grep -i ping | grep -v grep)&amp;quot; ]&lt;br /&gt;
 then&lt;br /&gt;
   echo &amp;quot;\&amp;quot;${COMMAND}\&amp;quot; already running.&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;Starting \&amp;quot;${COMMAND}\&amp;quot;.&amp;quot;&lt;br /&gt;
   cd /tmp&lt;br /&gt;
   ${COMMAND}&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=crudini=&lt;br /&gt;
Edit ini files och cli.&lt;br /&gt;
 crudini --set /lib/systemd/system/icinga2.service Service Nice -10 ; systemctl daemon-reload ; systemctl restart icinga2.service&lt;br /&gt;
&lt;br /&gt;
=cryptsetup=&lt;br /&gt;
luks. Process to unlock disk. Mount it and unmount and encrypt.&lt;br /&gt;
 cryptsetup luksOpen /dev/nvme0n1p3 secure&lt;br /&gt;
 mount /dev/mapper/secure /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 cryptsetup luksClose secure&lt;br /&gt;
==create luks encrypted disk==&lt;br /&gt;
 # Add block device and add gpt label. Create partition.&lt;br /&gt;
 cfdisk /dev/sde&lt;br /&gt;
 # Encypt partition&lt;br /&gt;
 sudo cryptsetup luksFormat /dev/vdb1&lt;br /&gt;
 # open encrypted disk&lt;br /&gt;
 sudo cryptsetup open /dev/vdb1 encrypted-disk&lt;br /&gt;
 # Format disk&lt;br /&gt;
 sudo mkfs.ext4 /dev/mapper/encrypted-disk&lt;br /&gt;
 # Info about partition&lt;br /&gt;
 sudo blkid /dev/vdb1 &lt;br /&gt;
 /dev/vdb1: UUID=&amp;quot;cb2e7238-8245-41cb-9811-6804f602e5e8&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot; PARTUUID=&amp;quot;56b829b6-8295-4963-9562-29e8937819a8&amp;quot;&lt;br /&gt;
 # Setup crypttab if you want to decrypt at boot splash&lt;br /&gt;
 echo &#039;encrypted-disk UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 none luks&#039; | sudo tee -a /etc/crypttab&lt;br /&gt;
 # Manually unlock luks partition&lt;br /&gt;
 sudo cryptsetup luksOpen UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 encrypted-disk&lt;br /&gt;
 # Manuall lock luks partition&lt;br /&gt;
 sudo cryptsetup luksClose encrypted-disk&lt;br /&gt;
 # Add disk to fstab&lt;br /&gt;
 echo &#039;/dev/mapper/encrypted-disk /mnt/encrypted-disk ext4 noauto 0 2&#039; | sudo tee -a /etc/fstab&lt;br /&gt;
 # Create mount point&lt;br /&gt;
 sudo mkdir /mnt/encrypted-disk ; sudo chmod 777 /mnt/encrypted-disk&lt;br /&gt;
 # mount disk&lt;br /&gt;
 sudo umount /mnt/encrypted-disk&lt;br /&gt;
 # Change password of luks partition&lt;br /&gt;
 sudo cryptsetup luksAddKey UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup --test-passphrase -v open UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup luksRemoveKey UUID=cb2e7238-8245-4&lt;br /&gt;
&lt;br /&gt;
=cups=&lt;br /&gt;
Install cups&lt;br /&gt;
 dnf install cups&lt;br /&gt;
enable cups&lt;br /&gt;
 systemctl enable cups.service --now&lt;br /&gt;
Configure printer in cups.&lt;br /&gt;
 http://localhost:631/&lt;br /&gt;
&lt;br /&gt;
=cut=&lt;br /&gt;
Cuf everything from field 5.&lt;br /&gt;
 cut -f5- -d &#039; &#039;&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
==Get http return code.==&lt;br /&gt;
 curl --connect-timeout 3 --max-time 9 -ksL -w &#039;%{http_code}\n&#039; &#039;http://www.dn.se&#039; -o /dev/null&lt;br /&gt;
==get external ip. what is my ip==&lt;br /&gt;
 curl ifconfig.me &lt;br /&gt;
==get external ip and all related browser information.==&lt;br /&gt;
 curl ifconfig.me/all &lt;br /&gt;
==Alternative address for domain.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -sk --resolve www.halfface.se:80:127.0.0.1 http://www.halfface.se&lt;br /&gt;
 curl http://127.0.0.1/ -H &amp;quot;Host: halfface.se&amp;quot; -H &amp;quot;X-Forwarded-Proto: https&amp;quot; -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get header / mime type==&lt;br /&gt;
 curl -I http://url.se&lt;br /&gt;
==post file==&lt;br /&gt;
 curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult&lt;br /&gt;
==post file via ftp using proxy==&lt;br /&gt;
 curl -p --proxy http://proxy.example.se:3128 -v -T backup.tar ftp://user:password@ftp.example.se/directory/&lt;br /&gt;
&lt;br /&gt;
==cookie format. tab delimited.==&lt;br /&gt;
 domain     - The domain that created AND that can read the variable. .halfface.se&lt;br /&gt;
 flag       - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain.&lt;br /&gt;
 path       - The path within the domain that the variable is valid for.&lt;br /&gt;
 secure     - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.&lt;br /&gt;
 expiration - The UNIX time that the variable will expire on. UNIX time is defined as the number of seconds since Jan 1, 1970 0:00:00 GMT.&lt;br /&gt;
 name       - The name of the variable.&lt;br /&gt;
 value      - The value of the variable.&lt;br /&gt;
&lt;br /&gt;
==add certificate authority to openssl==&lt;br /&gt;
Redhat based os:es this file gets updated. /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt&lt;br /&gt;
 cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/&lt;br /&gt;
 update-ca-trust&lt;br /&gt;
Debian based&lt;br /&gt;
 cp /tmp/ca.crt /usr/share/ca-certificates/extra&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
Debian 2 &lt;br /&gt;
 cp foo.crt /usr/local/share/ca-certificates/foo.crt&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
==curl ipv6==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -6 -g &amp;quot;http://[::1]:80/&amp;quot;&lt;br /&gt;
curl -g &amp;quot;http://[2001:9b1:402d:0:ffff:f038:ec3e:b5d4]/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==proxy==&lt;br /&gt;
 curl  --proxy http://proxy.se:3128 -sk &amp;quot;http://mirrorlist.centos.org&amp;quot;&lt;br /&gt;
===no_proxy===&lt;br /&gt;
 export https_proxy=http://proxy.se:3128 ; export http_proxy=$https_proxy ; export HTTPS_PROXY=$https_proxy ; export HTTP_PROXY=$https_proxy ; export no_proxy=localhost,127.0.0.1,.inter.net,$(echo 10.217.{4..5}.{1..254}, 10.217.5.255) ; export NO_PROXY=$no_proxy&lt;br /&gt;
===time spent===&lt;br /&gt;
 -w &amp;quot;time_namelookup: %{time_namelookup}, time_connect: %{time_connect}, time_appconnect: %{time_appconnect}, time_pretransfer: %{time_pretransfer}, time_redirect: %{time_redirect}, time_starttransfer: %{time_starttransfer}, time_total: %{time_total}\n&amp;quot;&lt;br /&gt;
==which isp==&lt;br /&gt;
 curl -s http://ip-api.com/json/${IP} | grep -o &#039;&amp;quot;isp&amp;quot;:&amp;quot;[^&amp;quot;]*&amp;quot;&#039; | cut -d &#039;&amp;quot;&#039; -f4&lt;br /&gt;
&lt;br /&gt;
=Is it a free day?=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sk https://sholiday.faboul.se/dagar/v2.1/2023 | jq -r &#039;.dagar[] |select(.&amp;quot;arbetsfri dag&amp;quot;==&amp;quot;Ja&amp;quot;)|.datum&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=qr code=&lt;br /&gt;
encode&lt;br /&gt;
 qrencode &amp;quot;Andreas&amp;quot; -o /tmp/qr_Andreas.png&lt;br /&gt;
decode&lt;br /&gt;
 zbarimg /tmp/qr_Andreas.png&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
Get date in requested format.&lt;br /&gt;
 date &#039;+%Y-%m-%d %H:%M&#039;&lt;br /&gt;
 date +%Y-%m-%d-%H%M&lt;br /&gt;
 date &amp;quot;+%F_%T&amp;quot; # 2017-01-16_19:41:41&lt;br /&gt;
&lt;br /&gt;
date 033121422003.55&lt;br /&gt;
 Mon Mar 31 21:42:55 PST 2003&lt;br /&gt;
 date MMDDhhmmCCYY.ss&lt;br /&gt;
&lt;br /&gt;
Whats the date in 1000 years. Or any other increment.&lt;br /&gt;
 date --date=&amp;quot;+1000 years&amp;quot; +%C%y-%m-%d&lt;br /&gt;
 date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
 TZ=CEST date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
&lt;br /&gt;
What is the time in other timezone given in unixtime/epoch.&lt;br /&gt;
 TZ=GMT date -d &#039;@1345064585&#039;&lt;br /&gt;
 Wed Aug 15 21:03:05 GMT 2012&lt;br /&gt;
&lt;br /&gt;
Unix time.&lt;br /&gt;
 date +%s&lt;br /&gt;
Unix to normal&lt;br /&gt;
 date -d @1234567890&lt;br /&gt;
&lt;br /&gt;
scew clock by a second.&lt;br /&gt;
 DATE_OFF=$(date --date=&amp;quot;-5 second&amp;quot; +%C%y-%m-%d\ %H:%M:%S\ %Z) ; date --set=&amp;quot;${DATE_OFF}&amp;quot;&lt;br /&gt;
Set clock&lt;br /&gt;
 date &#039;+%Y-%m-%d %T %Z&#039; -s &amp;quot;2008-11-28 08:08:08 UTC&amp;quot;&lt;br /&gt;
=datefudge=&lt;br /&gt;
Fake date for command.&lt;br /&gt;
 datefudge &amp;quot;2020-04-01 10:23&amp;quot; date&lt;br /&gt;
&lt;br /&gt;
=dateseq=&lt;br /&gt;
Create date sequense.&lt;br /&gt;
 dateseq 2017-04-01 2017-04-05&lt;br /&gt;
&lt;br /&gt;
=db2=&lt;br /&gt;
Empty catalog remove node&lt;br /&gt;
 for DB2 in $(db2 list node directory | grep &amp;quot;Node name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog node $DB2;done&lt;br /&gt;
Empty catalog remove db&lt;br /&gt;
 for DB2 in $(db2 list db directory | grep &amp;quot;Database name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog db $DB2;done&lt;br /&gt;
# Load db2 environment.&lt;br /&gt;
 . /home/db2/sqllib/db2profile&lt;br /&gt;
&lt;br /&gt;
# Connect to database.&lt;br /&gt;
 db2 connect to ${database_name} user ${user} using ${password}&lt;br /&gt;
&lt;br /&gt;
# Test query.&lt;br /&gt;
 SELECT service_level, fixpack_num, bld_level FROM TABLE (sysproc.env_get_inst_info()) as A;&lt;br /&gt;
&lt;br /&gt;
# System Database Directory&lt;br /&gt;
 db2 list db directory&lt;br /&gt;
&lt;br /&gt;
# Node Directory&lt;br /&gt;
 db2 list node directory&lt;br /&gt;
&lt;br /&gt;
# setup directory&lt;br /&gt;
 db2 &amp;quot;catalog tcpip node db2datan remote 1.2.3.4 server 5000&amp;quot;&lt;br /&gt;
 db2 &amp;quot;catalog db db2datadb as db2datadb at node db2datan&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Drop connection.&lt;br /&gt;
 db2 terminate&lt;br /&gt;
&lt;br /&gt;
=dbus-monitor=&lt;br /&gt;
 dbus-monitor   # Monitor activity on the dbus to see what system and sessions are doing.&lt;br /&gt;
&lt;br /&gt;
=dd=&lt;br /&gt;
output your microphone to a remote computer&#039;s speaker&lt;br /&gt;
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp&lt;br /&gt;
Add 2GB to disk image.&lt;br /&gt;
 dd if=/dev/zero of=/system_image.img bs=1M oflag=append conv=notrunc count=2000&lt;br /&gt;
dd with progress bar.&lt;br /&gt;
 dd if=kali.iso of=/dev/sdc status=progress&lt;br /&gt;
 pv -ptre /install/backup/machine/raspberry/ipcenter_view.img | sudo dd of=/dev/mmcblk0 bs=1M&lt;br /&gt;
dd to position on disk&lt;br /&gt;
 dd of=/dev/disk1 if=/dev/urandom obs=500000 seek=1 bs=1MB count=1 conv=notrunc&lt;br /&gt;
==consume 100GB ram==&lt;br /&gt;
 mount -o remount,size=300G /dev/shm&lt;br /&gt;
 dd if=/dev/zero of=/dev/shm/$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) bs=1073741824 count=100 status=progress&lt;br /&gt;
&lt;br /&gt;
=debugfs=&lt;br /&gt;
 ctime:  Shows file change time.&lt;br /&gt;
 atime:  Shows file access time.&lt;br /&gt;
 mtime:  Shows file modification time.&lt;br /&gt;
 crtime: Shows file creation time. Birth.&lt;br /&gt;
Example&lt;br /&gt;
 debugfs -R &#039;stat /etc/exports.bkp-2021-11-17_10-07-46&#039; /dev/mapper/vg_rbnetstorage0-lv_root&lt;br /&gt;
 debugfs 1.41.12 (17-May-2010)&lt;br /&gt;
 Inode: 924905   Type: regular    Mode:  0644   Flags: 0x80000&lt;br /&gt;
 Generation: 2068409071    Version: 0x00000000:00000001&lt;br /&gt;
 User:     0   Group:     0   Size: 4775&lt;br /&gt;
 File ACL: 0    Directory ACL: 0&lt;br /&gt;
 Links: 1   Blockcount: 16&lt;br /&gt;
 Fragment:  Address: 0    Number: 0    Size: 0&lt;br /&gt;
  ctime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
  atime: 0x6193bd7f:c4faf658 -- Tue Nov 16 15:17:35 2021&lt;br /&gt;
  mtime: 0x61925419:34c06f18 -- Mon Nov 15 13:35:37 2021&lt;br /&gt;
 crtime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
 Size of extra inode fields: 28&lt;br /&gt;
 Extended attributes stored in inode body: &lt;br /&gt;
   selinux = &amp;quot;unconfined_u:object_r:etc_t:s0\000&amp;quot; (31)&lt;br /&gt;
 EXTENTS:&lt;br /&gt;
 (0-1): 3718194-3718195&lt;br /&gt;
=ddclient=&lt;br /&gt;
Debug&lt;br /&gt;
 ddclient -daemon=0 -debug -verbose -noquiet&lt;br /&gt;
&lt;br /&gt;
=df=&lt;br /&gt;
df output one per line. Without header.&lt;br /&gt;
 df -Plk / /apps | tail -n+2&lt;br /&gt;
&lt;br /&gt;
=dhclient=&lt;br /&gt;
[root@wall sysconfig]# cat /etc/dhclient.conf&lt;br /&gt;
 interface &amp;quot;eth0&amp;quot; {&lt;br /&gt;
          prepend domain-name-servers 127.0.0.1;&lt;br /&gt;
          supersede domain-name &amp;quot;bltprojektering.se&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=dialog=&lt;br /&gt;
Create dialog in terminal. Example a progressbar.&lt;br /&gt;
 for i in {0..100} ; do echo $i | dialog --gauge &amp;quot;Please wait&amp;quot; 7 70 1 ; sleep .1 ; done&lt;br /&gt;
=diff=&lt;br /&gt;
 sdiff &amp;lt;(echo -e &#039;hej\nda\nvi\nses\ni\nmorgon&#039;) &amp;lt;(echo -e &#039;hej\ndå\nvi\nSES\ni\nmorgon&#039;)&lt;br /&gt;
Only show files that differ.&lt;br /&gt;
 -q  --brief&lt;br /&gt;
Only show change between files.&lt;br /&gt;
 diff -u file1.txt file2.txt | grep -vE &#039;^(---|\+\+\+|@@|\+|-)&#039;&lt;br /&gt;
&lt;br /&gt;
=dig=&lt;br /&gt;
==Get all dns information about host.==&lt;br /&gt;
 dig any www.halfface.se&lt;br /&gt;
==Trace dns lookups from root dns. Use 8.8.8.8 for lookups.==&lt;br /&gt;
 dig +trace @8.8.8.8 www.halfface.se&lt;br /&gt;
==Recursive lookup.==&lt;br /&gt;
 dig -tAXFR halfface.se&lt;br /&gt;
==backward resolve==&lt;br /&gt;
 dig -x 89.253.75.84&lt;br /&gt;
==get ttl==&lt;br /&gt;
 dig +nocmd +multiline +noall +answer any halfface.se&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
==Get txt record.==&lt;br /&gt;
 dig google.com txt&lt;br /&gt;
==You can find the authoritative servers by asking for the NS records for a domain==&lt;br /&gt;
 dig example.com NS&lt;br /&gt;
==dig using alternative port==&lt;br /&gt;
 dig +short -p 5353 halfface.se @10.130.0.35&lt;br /&gt;
&lt;br /&gt;
=digitemp=&lt;br /&gt;
 digitemp_DS9097 -c /etc/.digitemprc -t0&lt;br /&gt;
&lt;br /&gt;
=disk=&lt;br /&gt;
disk usage&lt;br /&gt;
 baobab&lt;br /&gt;
foremost&lt;br /&gt;
 recover deleted files.&lt;br /&gt;
=disown=&lt;br /&gt;
Disconnect process(pid) so that is survives a logout.&lt;br /&gt;
 disown %2&lt;br /&gt;
&lt;br /&gt;
=display=&lt;br /&gt;
Change resolution&lt;br /&gt;
 xrandr --output LVDS --mode 1280x800&lt;br /&gt;
 xrandr --output default --mode 1280x1024&lt;br /&gt;
Query graphics card capabilities.&lt;br /&gt;
 xrandr -q&lt;br /&gt;
Change dpi&lt;br /&gt;
 xrandr --dpi 138/eDP1&lt;br /&gt;
=du=&lt;br /&gt;
 du -amx / | sort -n | tail -5&lt;br /&gt;
=duplicity=&lt;br /&gt;
Encrypted backups over rsync&lt;br /&gt;
&lt;br /&gt;
=dmesg=&lt;br /&gt;
dmesg with iso time format&lt;br /&gt;
 dmesg --ctime --time-format iso&lt;br /&gt;
Write to dmesg&lt;br /&gt;
 echo &amp;quot;$USER $(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;)&amp;quot; | sudo tee /dev/kmsg&lt;br /&gt;
&lt;br /&gt;
=dmidecode=&lt;br /&gt;
List memory banks&lt;br /&gt;
 sudo dmidecode -t 17&lt;br /&gt;
&lt;br /&gt;
=dnf=&lt;br /&gt;
install skip if not exist&lt;br /&gt;
 sudo dnf install --setopt=strict=0 $(sort -u /temp/other_machine_rpm)&lt;br /&gt;
==update system==&lt;br /&gt;
 dnf -y upgrade --refresh&lt;br /&gt;
 reboot&lt;br /&gt;
 dnf -y install dnf-plugin-system-upgrade&lt;br /&gt;
 dnf -y system-upgrade download --refresh --allowerasing --releasever=43&lt;br /&gt;
 # Before 42:&lt;br /&gt;
 dnf -y system-upgrade reboot&lt;br /&gt;
 # From 42 and onward&lt;br /&gt;
 dnf5 offline reboot&lt;br /&gt;
 # broken deps.&lt;br /&gt;
 dnf repoquery --unsatisfied&lt;br /&gt;
 # look for duplicates&lt;br /&gt;
 dnf repoquery --duplicated&lt;br /&gt;
 # which rpms do not exit in repo.&lt;br /&gt;
 dnf list extras&lt;br /&gt;
 # remove no longer used.&lt;br /&gt;
 dnf autoremove&lt;br /&gt;
 dnf remove $(rpm -qa| grep \.fc23)&lt;br /&gt;
 # reinstall rpm&lt;br /&gt;
 dnf reinstall sssd-common&lt;br /&gt;
&lt;br /&gt;
==auto update==&lt;br /&gt;
 # Install auto updates.&lt;br /&gt;
 dnf install dnf-automatic&lt;br /&gt;
 # Enable auto update.&lt;br /&gt;
 sed -i &amp;quot;s/apply_updates = no/apply_updates = yes/g;s/email_from = root@example.com/email_from = root@${HOSTNAME}/g;s/email_to = root/email_to = anden@halfface.se/g&amp;quot; /etc/dnf/automatic.conf&lt;br /&gt;
 # Enable timer.&lt;br /&gt;
 systemctl enable dnf-automatic.timer &amp;amp;&amp;amp; systemctl start dnf-automatic.timer&lt;br /&gt;
 # Trigger timer.&lt;br /&gt;
 systemctl start  dnf-automatic.timer&lt;br /&gt;
 # Check status of dnf-automatic:&lt;br /&gt;
 systemctl list-timers *dnf-*&lt;br /&gt;
==build environment==&lt;br /&gt;
 dnf group install &amp;quot;C Development Tools and Libraries&amp;quot;&lt;br /&gt;
==update to specific version==&lt;br /&gt;
View available version.&lt;br /&gt;
 dnf --showduplicates list  gitlab-ee&lt;br /&gt;
Update to specific version&lt;br /&gt;
 dnf install gitlab-ee-13.12.15-ee.0.el8&lt;br /&gt;
&lt;br /&gt;
=Setup dnsmasq on ubuntu=&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
# Install dnsmasq&lt;br /&gt;
apt install dnsmasq&lt;br /&gt;
systemctl enable dnsmasq --now&lt;br /&gt;
# Disable systemd-resolved.&lt;br /&gt;
sudo systemctl disable --now systemd-resolved&lt;br /&gt;
# Make NetworkManager ignore dns.&lt;br /&gt;
sudo tee /etc/NetworkManager/conf.d/no-dns.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
[main]&lt;br /&gt;
dns=none&lt;br /&gt;
EOF&lt;br /&gt;
systemctl restart NetworkManager&lt;br /&gt;
# Fix /etc/resolv.conf&lt;br /&gt;
sudo \rm /etc/resolv.conf&lt;br /&gt;
sudo tee /etc/resolv.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
search int.redbridge.se halfface.se cloud.binero.net&lt;br /&gt;
options timeout:1 attempts:1&lt;br /&gt;
EOF&lt;br /&gt;
# Create config&lt;br /&gt;
sudo tee /etc/dnsmasq.d/custom.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
listen-address=127.0.0.1&lt;br /&gt;
bind-interfaces&lt;br /&gt;
server=/redbridge.se/185.53.164.25&lt;br /&gt;
#server=/halfface.se/10.111.222.2&lt;br /&gt;
server=8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
# Restart dnsmasq&lt;br /&gt;
systemctl restart dnsmasq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dracut=&lt;br /&gt;
Dracut is a tool used to create an initial RAM filesystem (initramfs) for Linux systems.&lt;br /&gt;
&lt;br /&gt;
=dvgrab=&lt;br /&gt;
Capture dv material&lt;br /&gt;
 dvgrab -f dv2 -i -showstatus -s 0 -timestamp California-2&lt;br /&gt;
&lt;br /&gt;
=e2fsck=&lt;br /&gt;
Scan for bad blocks.&lt;br /&gt;
 e2fsck -ycv /dev/VolGroup00/LogVol00&lt;br /&gt;
&lt;br /&gt;
=edid/ddc=&lt;br /&gt;
 startx -- -logverbose 5.&lt;br /&gt;
 The EDID information turns up in /var/log/Xorg.0.log.&lt;br /&gt;
=enca=&lt;br /&gt;
detect and convert encoding of text files. (codepage utf)&lt;br /&gt;
 enca -L none /temp/locale2&lt;br /&gt;
=esmtp=&lt;br /&gt;
 # Install dependency&lt;br /&gt;
 dnf install procmail&lt;br /&gt;
 # Put the following config in either /etc/esmtprc or more specific ~/.esmtprc. chmod 644.&lt;br /&gt;
 SMTP_SERVER=halfface.se&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; ~/.esmtprc&lt;br /&gt;
 hostname = $SMTP_SERVER:25&lt;br /&gt;
 # Set the Mail Delivery Agent (MDA)&lt;br /&gt;
 mda = &amp;quot;/usr/bin/procmail -d %T&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 chmod 0710 ~/.esmtprc&lt;br /&gt;
&lt;br /&gt;
=etckeeper=&lt;br /&gt;
 Keep your /etc/ directory under git revision control.&lt;br /&gt;
What has happened.&lt;br /&gt;
 git log -p /etc/resolv.conf&lt;br /&gt;
Wipe /etc/.git&lt;br /&gt;
 etckeeper uninit &lt;br /&gt;
 etckeeper init&lt;br /&gt;
&lt;br /&gt;
=ethtool=&lt;br /&gt;
show-features&lt;br /&gt;
 ethtool -k &amp;lt;device&amp;gt;&lt;br /&gt;
 generic-segmentation-offload = gso&lt;br /&gt;
 tcp-segmentation-offload     = tso&lt;br /&gt;
 ...&lt;br /&gt;
Enable wake on lan magic package.&lt;br /&gt;
 ethtool --change &amp;lt;interface&amp;gt; wol g&lt;br /&gt;
Permanently add wol&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039; | while read i ; do INTERFACE_INFO=$(ip address show $i) ; MAC=$(grep link/ether  &amp;lt;&amp;lt;&amp;lt; &amp;quot;${INTERFACE_INFO}&amp;quot; | awk &#039;{print $2}&#039;) ; echo &amp;quot;# /etc/systemd/network/50-wired.link&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=$MAC&lt;br /&gt;
 &lt;br /&gt;
 [Link]&lt;br /&gt;
 NamePolicy=kernel database onboard slot path&lt;br /&gt;
 MACAddressPolicy=persistent&lt;br /&gt;
 WakeOnLan=magic&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=exiftool=&lt;br /&gt;
Change meta data for files, exif, jpg, mp3...&lt;br /&gt;
Get info from file.&lt;br /&gt;
 exiftool $file.mp4&lt;br /&gt;
gps format&lt;br /&gt;
 41°24&#039;12.2&amp;quot;N 2°10&#039;26.5&amp;quot;E&lt;br /&gt;
gps format known to maps.google.com&lt;br /&gt;
 exiftool -c &amp;quot;%.6f&amp;quot; 2022-03-06_10-39-40.mp4 | grep -i gps&lt;br /&gt;
&lt;br /&gt;
=exportfs=&lt;br /&gt;
Install server&lt;br /&gt;
 dnf install nfs-utils&lt;br /&gt;
Start nfs server&lt;br /&gt;
 systemctl enable nfs-server --now&lt;br /&gt;
Reexport everything.&lt;br /&gt;
 exportfs -avr&lt;br /&gt;
Example export.&lt;br /&gt;
 *(rw,no_root_squash,async,insecure)&lt;br /&gt;
 rw              rewritable&lt;br /&gt;
 no_root_squash  Allow root on remote machine same permissions as local root&lt;br /&gt;
 async&lt;br /&gt;
 insecure        NFS version 2 and 3 servers only provide (insecure) host-based authentication: Hosts are allowed/denied based on hostnames and/or IP addresses. Authorization of users is controlled on the clients using the permissions of the files based on user/group IDs. allows clients with NFS implementations that don&#039;t use a reserved port for NFS&lt;br /&gt;
&lt;br /&gt;
=fdupes=&lt;br /&gt;
Find duplicate files.&lt;br /&gt;
 fdupes -r /home&lt;br /&gt;
=feh=&lt;br /&gt;
Image viewer&lt;br /&gt;
&lt;br /&gt;
=ffmpeg=&lt;br /&gt;
ffmpeg&lt;br /&gt;
 ffmpeg -y -deinterlace -aspect 16:9 -author &amp;quot;Andreas Bjorklund&amp;quot; -title &amp;quot;Tanzania&amp;quot; -year 2007 -i Tanzania.m2t -acodec mp3 -vcodec mpeg4 -b 3000k -s 720x540 test.avi&lt;br /&gt;
Create swf/flv from mpeg2 stream&lt;br /&gt;
 ffmpeg -deinterlace -i VTS_01_1.VOB -ab 56 -ar 22050 -b 500000 -r 15 -s 360x288  sisyfos.swf&lt;br /&gt;
Create horse movie.&lt;br /&gt;
 ffmpeg -deinterlace -i /temp/VTS_01_1.VOB -ab 100 -ar 22050 -b 1200000 -r 25 -s 360x288 3horses.swf&lt;br /&gt;
Cut video from command prompt.&lt;br /&gt;
 ffmpeg -i video.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:00:04 trimmed_video.avi&lt;br /&gt;
Record desktop.&lt;br /&gt;
 ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 5 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 -threads 0 -y output.mkv&lt;br /&gt;
 ffmpeg -f x11grab -s $(xrandr | grep \*+|awk &#039;{print $1}&#039;) -r 25 -i :0.0 -sameq /tmp/out.mpg&lt;br /&gt;
Change container.&lt;br /&gt;
  ffmpeg -i film.mov -vcodec copy -acodec copy film.mp4&lt;br /&gt;
Transcode to h264 aac&lt;br /&gt;
 ffmpeg -i original.avi -vcodec libx264 -acodec aac -strict experimental new_file.mp4&lt;br /&gt;
Transcode mp3 to ogg vorbis&lt;br /&gt;
 for file in *.mp3;   do ffmpeg -i &amp;quot;${file}&amp;quot; -acodec libvorbis &amp;quot;${file/%mp3/ogg}&amp;quot;;done&lt;br /&gt;
Take one photo from video stream.&lt;br /&gt;
 ffmpeg -ss 00:00:01 -i &amp;lt;video input&amp;gt; -frames:v 1 -q:v 2 &amp;lt;photo created&amp;gt;&lt;br /&gt;
Take photo&lt;br /&gt;
 ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f image2 snapshot.jpg&lt;br /&gt;
 ls /dev/video* | while read i ; do echo $i ; ffmpeg -f video4linux2 -i $i -vframes 1 -q:v 2 /tmp/${i//\//%}.$(date +%F_%H-%M-%S).jpg ; done ; ls -la /tmp/%*&lt;br /&gt;
Take a photo from a video steam every 10 seconds.&lt;br /&gt;
 ffmpeg -i video.mp4 -r 0.1 -f image2 %03dandreas.jpg&lt;br /&gt;
Take a photo every 1 put it in a file.&lt;br /&gt;
 ffmpeg -y -i http://balcony.halfface.se:8080 -r 1 -f image2 -update 1 stream_image.jpg -probesize 5e+07&lt;br /&gt;
Rotate 180 degrees.&lt;br /&gt;
 ffmpeg -i input.mp4 -filter:v &amp;quot;transpose=1,transpose=1&amp;quot; output.mp4&lt;br /&gt;
Change rotation without transcoding.&lt;br /&gt;
 ffmpeg -i IMG_0703.MOV -metadata:s:v rotate=&amp;quot;&amp;quot; -codec copy rotate_IMG_0703.MOV&lt;br /&gt;
Concaternate videos.&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output&lt;br /&gt;
&lt;br /&gt;
=find=&lt;br /&gt;
==Find exluding directory==&lt;br /&gt;
 find . -wholename &#039;/var/&#039; -prune -o -ls&lt;br /&gt;
==Find text file in directoy execpt directory. Grep for text in that file and show it with colours in less==&lt;br /&gt;
 find /opt/ongame/ -wholename &#039;/opt/ongame/napsjb/server/naps/tmp&#039; -prune -o -type f -exec grep --color=always -r &#039;/fraud&#039; /dev/null {} \; | less -SR&lt;br /&gt;
==Find excluding several directories==&lt;br /&gt;
 find / -type d \( -path /proc -o -path /dev -o -path /net \) -prune -o -gid 1002 -exec chgrp -h 1001 {} \;&lt;br /&gt;
==Find excluding svn==&lt;br /&gt;
 find . -path &#039;*/.svn&#039; -prune -o -type f -print&lt;br /&gt;
==Searches for files modified up to 4 days ago==&lt;br /&gt;
 find ./ -type f -mtime -4&lt;br /&gt;
==Searches for files modified between certain dates. Here for files older than 30 days but younger than 60 (penultimate month)==&lt;br /&gt;
 find ./ -type f -mtime -60 ! -mtime -30&lt;br /&gt;
 sudo find . -newermt &amp;quot;2014-10-19 09:30&amp;quot; ! -newermt &amp;quot;2014-10-19 09:35&amp;quot;&lt;br /&gt;
==Find which dir is consuming inodes==&lt;br /&gt;
 find /var -xdev -printf &#039;%h\n&#039; | sort | uniq -c | sort -k 1 -n&lt;br /&gt;
 for i in $(ls) ; do echo $(find $i | wc -l) $i ; done | sort -n&lt;br /&gt;
==How much data is consumed by pattern==&lt;br /&gt;
 export NFS_DIR=/netstorage/cam/ocp-01 ; find ${NFS_DIR} -maxdepth 1 | grep ^${NFS_DIR}/archived- | while read NFS_DIR_REMOVE ; do du -sk &amp;quot;${NFS_DIR_REMOVE}&amp;quot; ; done | awk &#039;{ SUM +=  $1} END { print SUM &amp;quot;KiB&amp;quot; }&#039; | numfmt --from=auto --to=iec-i --suffix=B&lt;br /&gt;
==find search small files==&lt;br /&gt;
 find . -type f -size -1M -exec grep -H &#039;your_search_pattern&#039; {} +&lt;br /&gt;
=find physical network interfaces=&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039;&lt;br /&gt;
&lt;br /&gt;
=findmnt=&lt;br /&gt;
view the mount tree&lt;br /&gt;
 findmnt&lt;br /&gt;
&lt;br /&gt;
=flash=&lt;br /&gt;
When firefox is complaining about outdated flash plugin&lt;br /&gt;
 rm pluginreg.dat&lt;br /&gt;
=flatpak=&lt;br /&gt;
=Install flatpak=&lt;br /&gt;
 sudo apt install -y flatpak gnome-software-plugin-flatpak&lt;br /&gt;
 sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
=Install flatpak application and replace system binary=&lt;br /&gt;
 sudo flatpak install -y flathub com.freerdp.FreeRDP&lt;br /&gt;
 cat &amp;lt;&amp;lt;&#039;EOF&#039; | sudo tee /usr/local/bin/xfreerdp&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 flatpak run com.freerdp.FreeRDP &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 sudo chmod 755 /usr/local/bin/xfreerdp&lt;br /&gt;
 hash -r&lt;br /&gt;
=Run other binary from flatpack=&lt;br /&gt;
 flatpak run --command=xfreerdp com.freerdp.FreeRDP&lt;br /&gt;
&lt;br /&gt;
=List installed applications.=&lt;br /&gt;
 flatpak list --app&lt;br /&gt;
&lt;br /&gt;
=flock=&lt;br /&gt;
used to use cript that only used 1 time concurrently.&lt;br /&gt;
 flock&lt;br /&gt;
&lt;br /&gt;
=fmt=&lt;br /&gt;
Join lines&lt;br /&gt;
 ifconfig -a | fmt -w 300&lt;br /&gt;
&lt;br /&gt;
=fold=&lt;br /&gt;
Fold long lines. Break at 80 and blank spaces.&lt;br /&gt;
 fold -w 80 -s text.txt&lt;br /&gt;
=forward traffic=&lt;br /&gt;
 service x11&lt;br /&gt;
 {&lt;br /&gt;
         disable = no&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         wait = no&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /usr/bin/nc&lt;br /&gt;
         server_args = 172.28.37.152 6000&lt;br /&gt;
 }&lt;br /&gt;
=fping=&lt;br /&gt;
 fping --timeout=10 --elapsed --netdata &amp;lt;fqdn&amp;gt;&lt;br /&gt;
Example of testing connectivity.&lt;br /&gt;
 for i in $(grep -E &#039;ocp-[0-9]{2}-&#039; /etc/hosts | awk &#039;{print $2}&#039;) ; do echo -e &amp;quot;$(fping --timeout=10 --elapsed $i)\t$(nc -v -w1 $i 22 &amp;lt;/dev/null 2&amp;gt;&amp;amp;1 | strings | xargs)&amp;quot; ; done | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=free=&lt;br /&gt;
You have 15956MB physical ram. 9033MB is used by applications. 6922MB is free.&lt;br /&gt;
 free -m&lt;br /&gt;
              total       used       free     shared    buffers     cached&lt;br /&gt;
 Mem:         15956      15755        200          0        300       6421&lt;br /&gt;
 -/+ buffers/cache:       9033       6922&lt;br /&gt;
 Swap:        19998       2405      17593&lt;br /&gt;
&lt;br /&gt;
=free new=&lt;br /&gt;
Total memory 8076624k and 5169152 free.&lt;br /&gt;
              total        used        free      shared  buff/cache   available&lt;br /&gt;
 Mem:        8076624     2536328     1069132      284152     4471164     5169152&lt;br /&gt;
 Swap:       7815164     2809244     5005920&lt;br /&gt;
&lt;br /&gt;
Free memory usage from /proc/zoneinfo and /proc/meminfo&lt;br /&gt;
 awk -v low=$(grep low /proc/zoneinfo | awk &#039;{k+=$2}END{print k}&#039;)  &#039;{a[$1]=$2} END{print a[&amp;quot;MemFree:&amp;quot;]+a[&amp;quot;Active(file):&amp;quot;]+a[&amp;quot;Inactive(file):&amp;quot;]+a[&amp;quot;SReclaimable:&amp;quot;]-(12*low);}&#039; /proc/meminfo&lt;br /&gt;
 5168456&lt;br /&gt;
==physical memory==&lt;br /&gt;
Show physical memory in machine. Consider points below.&lt;br /&gt;
 grep MemTotal /proc/meminfo&lt;br /&gt;
meminfo:&lt;br /&gt;
 Provides information about distribution and utilisation of memory. This varies by architecture and compile options...&lt;br /&gt;
MemTotal: &lt;br /&gt;
 Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)&lt;br /&gt;
Gives more information not really sure how.&lt;br /&gt;
 dmesg|grep Memory:&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 dmidecode -t memory&lt;br /&gt;
 lshw -class memory&lt;br /&gt;
&lt;br /&gt;
=fstab=&lt;br /&gt;
Use ram for some logfiles.&lt;br /&gt;
 none             /var/log/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /tmp/                  tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/tmp/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/spool/            tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
&lt;br /&gt;
=fswebcam=&lt;br /&gt;
Capture photo.&lt;br /&gt;
 fswebcam -r 1920x1080 --jpeg 85 -D 1 --quiet --no-banner shot.jpg&lt;br /&gt;
 fswebcam -d /dev/video0 -i 0 -r 2592x1944 -p YUYV /net/10.111.222.1/storage/temp/logitech.jpg&lt;br /&gt;
=fwupdmgr=&lt;br /&gt;
 fwupdmgr get-devices --show-all-devices&lt;br /&gt;
 fwupdmgr get-upgrades&lt;br /&gt;
 fwupdmgr update $device_id&lt;br /&gt;
&lt;br /&gt;
=genisoimage=&lt;br /&gt;
 genisoimage -o nuc.iso nuc&lt;br /&gt;
=gnome-font-viewer=&lt;br /&gt;
view fonts&lt;br /&gt;
 gnome-font-viewer /file.woff2&lt;br /&gt;
=gnome-monitor-config=&lt;br /&gt;
Set one monitor. Disable all others.&lt;br /&gt;
 gnome-monitor-config set -LpM HDMI-2&lt;br /&gt;
Get monitor settings&lt;br /&gt;
 WINDOWS + p&lt;br /&gt;
&lt;br /&gt;
=gpg=&lt;br /&gt;
Password encryption decryption with gnupg.&lt;br /&gt;
 gpg -c --force-mdc /temp/shadow&lt;br /&gt;
 echo &amp;quot;$(gpg -qd /temp/shadow.gpg)&amp;quot;&lt;br /&gt;
==create keys==&lt;br /&gt;
 gpg --full-generate-key&lt;br /&gt;
==list secret keys==&lt;br /&gt;
 gpg --list-secret-keys --keyid-format LONG&lt;br /&gt;
==delete secret keys==&lt;br /&gt;
 gpg --delete-secret-key liza&lt;br /&gt;
&lt;br /&gt;
==list public keys==&lt;br /&gt;
 gpg --list-public-keys --keyid-format LONG&lt;br /&gt;
&lt;br /&gt;
==export public key==&lt;br /&gt;
 gpg --armor --export 3AA5C34371567BD2&lt;br /&gt;
==export private key==&lt;br /&gt;
 gpg --armor --export-secret-keys 3AA5C34371567BD2&lt;br /&gt;
==export secret subkey==&lt;br /&gt;
 gpg --armor --export-secret-subkeys 3AA5C34371567BD2&lt;br /&gt;
==import keys==&lt;br /&gt;
 gpg --import pub.key&lt;br /&gt;
 gpg --import sec.key&lt;br /&gt;
 gpg --import sub.key&lt;br /&gt;
==add trust to private key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669 trust quit # 5 y&lt;br /&gt;
&lt;br /&gt;
==edit gpg key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669&lt;br /&gt;
==send gpg key==&lt;br /&gt;
 gpg --send-key 6252FC9A029A2669&lt;br /&gt;
==delete public key==&lt;br /&gt;
 gpg --delete-key &amp;quot;User Name&amp;quot;&lt;br /&gt;
==change trust level on  all keys==&lt;br /&gt;
 gpg --list-keys --fingerprint |grep pub -A 1|egrep -Ev &amp;quot;pub|--&amp;quot;|tr -d &#039; &#039;  | awk &#039;BEGIN { FS = &amp;quot;\n&amp;quot; } ; { print $1&amp;quot;:6:&amp;quot; } &#039; | gpg --import-ownertrust&lt;br /&gt;
==get info about gpg encrypted file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp&lt;br /&gt;
==list keys in gpg file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp # | grep keyid&lt;br /&gt;
==get public key from command above==&lt;br /&gt;
 gpg --recv-keys 754817487F42735A&lt;br /&gt;
==encrypt file==&lt;br /&gt;
 gpg --encrypt --recipient user1@inter.net --recipient user2@inter.net --recipient user3@inter.net file.txt&lt;br /&gt;
&lt;br /&gt;
==decrypt gpg file==&lt;br /&gt;
 gpg --decrypt vpn-0ea602e33ab9c49fd.txt.gpg&lt;br /&gt;
&lt;br /&gt;
==who has encrypted file==&lt;br /&gt;
 gpg --pinentry-mode cancel --list-packets file.gpg&lt;br /&gt;
==remove expired public keys==&lt;br /&gt;
 for i in $(gpg --list-public-keys --keyid-format LONG 2&amp;gt;&amp;amp;1 | grep -A1 -B1 expired | grep -Ev &#039;^$|^pub|^uid&#039;) ; do gpg --delete-key $i ; done&lt;br /&gt;
&lt;br /&gt;
=pgpdump=&lt;br /&gt;
 pgpdump &amp;lt;(curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg)&lt;br /&gt;
=gphoto2=&lt;br /&gt;
Capture photo from the command line linux.&lt;br /&gt;
 gphoto2 --camera=&#039;Canon EOS 40D (PTP mode)&#039; --port=usb: --capture-image-and-download&lt;br /&gt;
&lt;br /&gt;
=graphviz=&lt;br /&gt;
Create graph.&lt;br /&gt;
 dot -Tps /flow -o /tmp/flow.ps&lt;br /&gt;
&lt;br /&gt;
=grep=&lt;br /&gt;
Colorize grep output.&lt;br /&gt;
 grep --color=always -r &#039;10\.7\.&#039; /opt/ongame/&lt;br /&gt;
Show non comment lines ending with a blank.&lt;br /&gt;
 find . -name &#039;*.properties&#039; -exec grep --color=always -E &#039;^[^#].*\ $&#039; {} \; | less -SR&lt;br /&gt;
grep ipaddress from message file.&lt;br /&gt;
 sudo grep DHCP /var/log/messages | grep -oir --color=always &#039;192\.168\.[0-9]*\.[0-9]*&#039; | sort -u&lt;br /&gt;
 grep -E &#039;([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))&#039;&lt;br /&gt;
grep ipaddress from file&lt;br /&gt;
 grep -E &#039;[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}&#039;&lt;br /&gt;
grep for tab&lt;br /&gt;
 grep 10.199.2.1$&#039;\t&#039; /etc/hosts&lt;br /&gt;
grep from word containing regex space separated.&lt;br /&gt;
 grep -oE &#039;\S*regex\S*&#039; /file&lt;br /&gt;
When grep start to complain about file being binary run the following command to define where.&lt;br /&gt;
 grep -Pa &#039;\x00&#039; /temp/file_name&lt;br /&gt;
Remove binary part of file.&lt;br /&gt;
 sed -i &#039;s/\x00//g&#039; /temp/file_name&lt;br /&gt;
Grep email addresses.&lt;br /&gt;
 grep -E -o &amp;quot;\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b&amp;quot; filename.txt&lt;br /&gt;
Grep for exact string like \&lt;br /&gt;
 grep -F \\ blabla.json&lt;br /&gt;
=grepcidr=&lt;br /&gt;
 grepcidr -v 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&lt;br /&gt;
&lt;br /&gt;
=growpart=&lt;br /&gt;
 growpart /dev/vda 5&lt;br /&gt;
 btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
=gsettings=&lt;br /&gt;
Emulate 3 button mouse&lt;br /&gt;
 gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true&lt;br /&gt;
Blinking cursor disable&lt;br /&gt;
 gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \&#039;)/ cursor-blink-mode off&lt;br /&gt;
List settings&lt;br /&gt;
 gsettings list-recursively&lt;br /&gt;
&lt;br /&gt;
=gsync=&lt;br /&gt;
Install gsync&lt;br /&gt;
 git clone https://github.com/iwonbigbro/gsync.git&lt;br /&gt;
 cd gsync/&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
Download data.&lt;br /&gt;
 gsync -u -r -t -v --progress --delete -l -s drive://motion/ /temp/motion2/&lt;br /&gt;
&lt;br /&gt;
=gzip=&lt;br /&gt;
Compress a stream.&lt;br /&gt;
 find . | gzip -9 &amp;gt; /tmp/file_list.gz&lt;br /&gt;
&lt;br /&gt;
=gscan2pdf=&lt;br /&gt;
Scan and ocr pdf dokuments&lt;br /&gt;
&lt;br /&gt;
=Handbrake=&lt;br /&gt;
Compress dvd&lt;br /&gt;
#Rip dvd.&lt;br /&gt;
 sudo vobcopy -o /storage/temp/ -v -x -l&lt;br /&gt;
#compress video.&lt;br /&gt;
 HandBrakeCLI -e x264 -Z Normal -i source.vob -o destination.mkv -a 2 -r 25 -E faac -f mkv -d -S 600 --crop 0:0:0:0&lt;br /&gt;
#Create film for android.&lt;br /&gt;
 HandBrakeCLI -i 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.vob -o 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.mp4 -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1 -e x264 --vb 300 -E faac --ab 128 --maxWidth 320 -2 -T -d&lt;br /&gt;
# Compress.&lt;br /&gt;
 SOURCE=/ssd/temp ; DESTINATION=/temp ; for FILM in $(cd ${SOURCE}; ls *.mov | sed &#039;s/\.mov$//g&#039;); do HandBrakeCLI -e x264 -q 20 -B 160 -i ${SOURCE}/${FILM}.mov -o ${DESTINATION}/${FILM}.mp4 ;done&lt;br /&gt;
# High profile&lt;br /&gt;
 HandBrakeCLI -i DVD -o ~/Movies/movie.mp4  -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --strict-anamorphic -m -x ref=2:bframes=2:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0&lt;br /&gt;
=hashid=&lt;br /&gt;
Identify hash strings.&lt;br /&gt;
 hashid&lt;br /&gt;
&lt;br /&gt;
=heif-convert=&lt;br /&gt;
 heif-convert image.HEIC new-image.jpg&lt;br /&gt;
=hostnamectl=&lt;br /&gt;
 hostnamectl set-hostname rocky_8_1&lt;br /&gt;
&lt;br /&gt;
=htmldoc=&lt;br /&gt;
Convert html document to pdf&lt;br /&gt;
 htmldoc --webpage -f php_html_doc.pdf /home/andreasbj/php_manual_en.html 2&amp;gt;/tmp/htmldoc&lt;br /&gt;
=htpasswd=&lt;br /&gt;
Add user to htpasswd file.&lt;br /&gt;
 htpasswd -b /etc/httpd/conf/htpasswd &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=hunspell=&lt;br /&gt;
 hunspell -d sv_SE swedish.txt&lt;br /&gt;
=hydra=&lt;br /&gt;
Password checking.&lt;br /&gt;
 hydra -l root -P /etc/passwdknown -t 5 192.168.29.62 ssh2&lt;br /&gt;
&lt;br /&gt;
=ifconfig=&lt;br /&gt;
Configure network.&lt;br /&gt;
 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up&lt;br /&gt;
ip address alias&lt;br /&gt;
 ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0&lt;br /&gt;
Network configuration Full config.&lt;br /&gt;
 echo -e &amp;quot;options timeout:1 attempts:1&lt;br /&gt;
 domain halfface.se&lt;br /&gt;
 nameserver 84.246.88.10&lt;br /&gt;
 nameserver 84.246.88.20&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
 ifconfig eth0 89.253.75.84 netmask 255.255.255.224 up&lt;br /&gt;
 route add default gw 89.253.75.65 eth0&lt;br /&gt;
Vip on loopback /etc/sysconfig/network-scripts/ifcfg-lo:ipdbm&lt;br /&gt;
 DEVICE=lo:ipdbm&lt;br /&gt;
 IPADDR=192.168.122.2&lt;br /&gt;
 NETMASK=255.255.255.255&lt;br /&gt;
 NETWORK=192.168.122.0&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
Setting up multiple addresses. ifcfg-eth0-range0 &lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR_START=192.168.122.3&lt;br /&gt;
 IPADDR_END=192.168.122.15&lt;br /&gt;
ifcfg-eth0&lt;br /&gt;
 DEVICE=eth0&lt;br /&gt;
 BOOTPROTO=static&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR=10.111.222.2&lt;br /&gt;
 NETMASK=255.255.255.0&lt;br /&gt;
 GATEWAY=10.111.222.1&lt;br /&gt;
 DNS1=10.111.222.253&lt;br /&gt;
 DNS2=10.111.222.254&lt;br /&gt;
 DOMAIN=&amp;quot;halfface.se subdomain.halfface.se&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=imv=&lt;br /&gt;
Image viewer for wayland&lt;br /&gt;
 imv . -f -s full&lt;br /&gt;
&lt;br /&gt;
=ilo=&lt;br /&gt;
log in to ilo&lt;br /&gt;
 env -u LANG ssh -v Ongame@10.1.1.94&lt;br /&gt;
restart ilo&lt;br /&gt;
 reset map1&lt;br /&gt;
start system&lt;br /&gt;
 start system1&lt;br /&gt;
&lt;br /&gt;
=install=&lt;br /&gt;
Crete directory&lt;br /&gt;
 install -d --mode=755 --owner=user --group=group /apps/IP/IPim/var/log&lt;br /&gt;
Create empty file&lt;br /&gt;
 install -o 0664 -o user -g group /dev/null ${ALFRESCO_DIR}/logs/catalina.out&lt;br /&gt;
=inotifywathc=&lt;br /&gt;
Se what access /dev/random&lt;br /&gt;
 inotifywatch -v -t 60 /dev/random&lt;br /&gt;
&lt;br /&gt;
=inxi=&lt;br /&gt;
inventory report.&lt;br /&gt;
 inxi -Frmxx&lt;br /&gt;
=iostat=&lt;br /&gt;
 iostat -xtc 5&lt;br /&gt;
 -x extended statistics.&lt;br /&gt;
 -t print time for each report.&lt;br /&gt;
 -c display the cpu utalization report.&lt;br /&gt;
 -y Omit first report with statistics since the system boot&lt;br /&gt;
==iostat -xty 5 1 dm-3==&lt;br /&gt;
 Linux 2.6.32-573.7.1.el6.x86_64 (machine.se)      12/30/2021      _x86_64_        (12 CPU)&lt;br /&gt;
 12/30/2021 11:47:42 AM&lt;br /&gt;
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle&lt;br /&gt;
            0.12    0.00    2.01    4.23    0.00   93.65&lt;br /&gt;
 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util&lt;br /&gt;
 dm-3              0.00     0.00 5806.20    0.00 1485056.00     0.00   255.77     1.54    0.27   0.17  97.44&lt;br /&gt;
&lt;br /&gt;
 # Explained.&lt;br /&gt;
 rrqm/s   The number of read requests merged per second that were queued to the device.&lt;br /&gt;
 wrqm/s   The number of write requests merged per second that were queued to the device.&lt;br /&gt;
 r/s      The number of read requests that were issued to the device per second.&lt;br /&gt;
 w/s      The number of write requests that were issued to the device per second.&lt;br /&gt;
 rsec/s   The number of sectors read from the device per second.&lt;br /&gt;
 wsec/s   The number of sectors written to the device per second.&lt;br /&gt;
 avgrq-sz The average size (in sectors) of the requests that were issued to the device.&lt;br /&gt;
 avgqu-sz The average queue length of the requests that were issued to the device.&lt;br /&gt;
 await    The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.&lt;br /&gt;
 svctm    The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future sysstat version.&lt;br /&gt;
 %util    Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.&lt;br /&gt;
&lt;br /&gt;
=iotop=&lt;br /&gt;
iotop with dates for output to logfile.&lt;br /&gt;
 DATE=$(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;) ; sudo iotop -kbon1 | head -2 | while read i ; do echo $DATE $i ; done&lt;br /&gt;
&lt;br /&gt;
=ip=&lt;br /&gt;
==Add vlan 23==&lt;br /&gt;
 ip link add link eno1 name eno1.23 type vlan id 23&lt;br /&gt;
==View vlan protocol==&lt;br /&gt;
 ip -d link show eno1.23&lt;br /&gt;
==Configure vlan==&lt;br /&gt;
 ip addr add 10.151.23.101/24 brd 10.151.23.255 dev eno1.23&lt;br /&gt;
 ip link set dev eno1.23 up&lt;br /&gt;
==create default route==&lt;br /&gt;
 ip route add default via 192.168.1.254&lt;br /&gt;
==show routing==&lt;br /&gt;
 ip route show&lt;br /&gt;
more info&lt;br /&gt;
 ip route show table all&lt;br /&gt;
==Add static route==&lt;br /&gt;
 ip route add 10.10.20.0/24 via 192.168.50.100 dev eth0&lt;br /&gt;
==Remove static route.==&lt;br /&gt;
 ip route del 10.10.20.0/24&lt;br /&gt;
==which outgoing interfaces are available.==&lt;br /&gt;
 ip r l| awk &#039;/src/{print $9}&#039;&lt;br /&gt;
==Which route is used for ip.==&lt;br /&gt;
 ip route get 192.168.122.252&lt;br /&gt;
==route subnet over interface.==&lt;br /&gt;
 sudo ip route add 145.251.242.0/24 dev tun0&lt;br /&gt;
==Show ipaddress on interface tun0==&lt;br /&gt;
 ip address show tun0&lt;br /&gt;
==vlan tag interface.==&lt;br /&gt;
 ip link add link eth0 name eth0.8 type vlan id 8&lt;br /&gt;
==set ip on interface.==&lt;br /&gt;
 ip addr add 192.168.50.5 dev eth1&lt;br /&gt;
 ip addr add 192.168.50.5/24 dev eth1&lt;br /&gt;
==set secondary ip on interface==&lt;br /&gt;
 ip addr add 192.168.1.2/24 dev eth0&lt;br /&gt;
==remove ip address.==&lt;br /&gt;
 ip addr del 192.168.50.5/24 dev eth1&lt;br /&gt;
==enable interface==&lt;br /&gt;
 ip link set eth1 up&lt;br /&gt;
==disable interface==&lt;br /&gt;
 ip link set eth1 down&lt;br /&gt;
==list arp entries.==&lt;br /&gt;
 ip neigh show&lt;br /&gt;
==local routing table==&lt;br /&gt;
 ip route list table local&lt;br /&gt;
==rule base routing. List rules==&lt;br /&gt;
 ip rule show&lt;br /&gt;
==show multicast networks==&lt;br /&gt;
 ip maddr show&lt;br /&gt;
==Disable traffic to an ipaddress.==&lt;br /&gt;
 ip route add blackhole 10.151.19.151&lt;br /&gt;
==dynamic/random mac wifi disable==&lt;br /&gt;
 MAC=$(ip link show | grep link/ | grep -v 00:00:00:00:00:00 | awk &#039;{print $2}&#039;) ; nmcli -f TYPE,NAME connection show | grep ^wifi | sed &#039;s/^wifi *//g&#039; | while read i ; do echo &#039;*&#039; $i ; nmcli connection modify &amp;quot;${i}&amp;quot; 802-11-wireless.cloned-mac-address $MAC ; done&lt;br /&gt;
==change mtu==&lt;br /&gt;
 sudo ip link set dev ens3 mtu 1400&lt;br /&gt;
==network namespaces==&lt;br /&gt;
 ip netns list&lt;br /&gt;
&lt;br /&gt;
=ip2location=&lt;br /&gt;
 ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB&lt;br /&gt;
 sed &#039;s/ \+/\t/g&#039; haproxy.log | cut -f 9 | sort -u | while read IP ; do ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB | tail -n1 ; done | column_tab | sort&lt;br /&gt;
=ipcalc=&lt;br /&gt;
 ipcalc -n 192.121.85.96/27 -m&lt;br /&gt;
&lt;br /&gt;
=iperf=&lt;br /&gt;
start server on client A.&lt;br /&gt;
 iperf -s&lt;br /&gt;
start measure from the other host. Limit bandwidth to 10k.&lt;br /&gt;
 iperf -c 10.20.30.40 --bandwidth 10K&lt;br /&gt;
==Multicast test.==&lt;br /&gt;
On the listener side:&lt;br /&gt;
 iperf -s -u -B 224.1.1.1 -i 1&lt;br /&gt;
On sender&lt;br /&gt;
 iperf -c 224.1.1.1 -u -T 32 -t 3 -i 1&lt;br /&gt;
&lt;br /&gt;
=ipmitool=&lt;br /&gt;
What is the power consumtion of dell server.&lt;br /&gt;
 ipmitool -I lanplus -H 127.0.0.1 -U root -P calvin delloem powermonitor&lt;br /&gt;
 ipmitool lan print&lt;br /&gt;
 ipmitool sdr list&lt;br /&gt;
&lt;br /&gt;
=iptables=&lt;br /&gt;
==Show iptables OUTPUT, PREROUTING and POSTROUTING==&lt;br /&gt;
 iptables --table nat --list --exact --verbose --numeric --line-number&lt;br /&gt;
==Show config==&lt;br /&gt;
 iptables -L -t nat -n&lt;br /&gt;
==Dnat to localhost.==&lt;br /&gt;
 iptables -t nat -I PREROUTING --source 131.115.115.53 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
 iptables -t nat -I OUTPUT --source 131.115.115.53 --destination 127.0.0.1 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
==Flush all rules.==&lt;br /&gt;
 &lt;br /&gt;
 iptables -F&lt;br /&gt;
 iptables -X&lt;br /&gt;
 iptables -t nat -F&lt;br /&gt;
 iptables -t nat -X&lt;br /&gt;
 iptables -t mangle -F&lt;br /&gt;
 iptables -t mangle -X&lt;br /&gt;
 iptables -P INPUT ACCEPT&lt;br /&gt;
 iptables -P FORWARD ACCEPT&lt;br /&gt;
 iptables -P OUTPUT ACCEPT&lt;br /&gt;
&lt;br /&gt;
==Block==&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j DROP&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block outgoing mail==&lt;br /&gt;
 iptables -A OUTPUT -p tcp --dport 25 -o $INTERFACE -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block all traffic except ssh in/out log to syslog.==&lt;br /&gt;
 iptables -P INPUT DROP&lt;br /&gt;
 iptables -P OUTPUT DROP&lt;br /&gt;
 iptables -P FORWARD DROP&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A INPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-in&amp;quot;&lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Block traffic on certain port.==&lt;br /&gt;
 iptables -A INPUT -p tcp --dport 7009 -j REJECT&lt;br /&gt;
==Fake source==&lt;br /&gt;
 iptables -t nat -A POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot; &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
 # Remove the current rules&lt;br /&gt;
 iptables -t nat -D POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot;&lt;br /&gt;
==redirect ip==&lt;br /&gt;
Send traffic destined for one ip and port to another ip and port.&lt;br /&gt;
 iptables -t nat -A OUTPUT -p tcp -d 146.213.6.7 --dport 1023 -j DNAT --to-destination 10.199.150.111:1023&lt;br /&gt;
 iptables -t nat -A OUTPUT -p icmp -d 146.213.6.7 -j DNAT --to-destination 10.199.150.111&lt;br /&gt;
==allow trafic from subnet==&lt;br /&gt;
 iptables -A INPUT -s 172.16.27.0/24 -j ACCEPT&lt;br /&gt;
==allow ssh from all==&lt;br /&gt;
 iptables -A INPUT -p tcp -dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -p tcp -dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT&lt;br /&gt;
or&lt;br /&gt;
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
 -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
==find which rule is blocking by removing one at a time. Better way is to enable logging==&lt;br /&gt;
 iptables -L -n --line-numbers&lt;br /&gt;
 iptables -D &amp;lt;line-number&amp;gt;&lt;br /&gt;
==List rules from OUTPUT chain with line number==&lt;br /&gt;
 iptables -t filter -L OUTPUT --line-numbers -n&lt;br /&gt;
&lt;br /&gt;
==Add rule to specific row number==&lt;br /&gt;
 iptables -I OUTPUT $ROW_NUMBER -d 54.72.175.186/32 -p tcp -m tcp --dport 443 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=irc=&lt;br /&gt;
Close private messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close public messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close a query&lt;br /&gt;
 /q&lt;br /&gt;
=jmtpfs=&lt;br /&gt;
Mount disk&lt;br /&gt;
 jmtpfs /mnt/mtp&lt;br /&gt;
Umount disk&lt;br /&gt;
 fusermount -u /mnt/mtp&lt;br /&gt;
&lt;br /&gt;
=john=&lt;br /&gt;
Test performance&lt;br /&gt;
 john -test&lt;br /&gt;
Recover passwords with password list.&lt;br /&gt;
 john -wordlist:password.lst passfile.txt&lt;br /&gt;
=journalctl=&lt;br /&gt;
==View log from last day.==&lt;br /&gt;
 journalctl --since yesterday&lt;br /&gt;
==List all units.==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==Current disk usage.==&lt;br /&gt;
 journalctl --disk-usage&lt;br /&gt;
==Show only certain error level. (err crit)==&lt;br /&gt;
 journalctl -p err&lt;br /&gt;
==List boots==&lt;br /&gt;
 journalctl --list-boots&lt;br /&gt;
==Show events between two time stamps.==&lt;br /&gt;
 journalctl --since &amp;quot;2017-01-23 05:56:42&amp;quot; --until &amp;quot;2017-01-23 07:56:42&amp;quot;&lt;br /&gt;
==show entries for one unit.==&lt;br /&gt;
 journalctl -u openvpn-server@server&lt;br /&gt;
 journalctl -u sshd  -f&lt;br /&gt;
==iptables logs==&lt;br /&gt;
 journalctl -k -f | grep -i iptables&lt;br /&gt;
==wipe logs==&lt;br /&gt;
 journalctl --vacuum-time=1h&lt;br /&gt;
==compare two different boots==&lt;br /&gt;
 journalctl --since &amp;quot;$(date &#039;+%F %H:%M:%S&#039; --date &#039;-10 hour&#039;)&amp;quot; -u NetworkManager -b -1  -o cat | sed &#039;s/\[[0-9.]*\]//g&#039;&lt;br /&gt;
&lt;br /&gt;
==persistent logging==&lt;br /&gt;
Enable persistent logging in systemd-journald. grep journal /usr/lib/tmpfiles.d/systemd.conf. Install syslog instead.&lt;br /&gt;
 mkdir /var/log/journal &lt;br /&gt;
 chmod 2755 /var/log/journal&lt;br /&gt;
 chown root:systemd-journal /var/log/journal&lt;br /&gt;
 killall -USR1 systemd-journald&lt;br /&gt;
&lt;br /&gt;
=jpegtran=&lt;br /&gt;
 # to lossless cut a file.&lt;br /&gt;
 jpegtran -crop 700x400+2150+1500 2012-05-19_20-39-35.jpg &amp;gt; /photos/Sweden/2012/2012-05-19/2012-05-19_20-39-35.jpg&lt;br /&gt;
 # Rotate counter clockwise.&lt;br /&gt;
 jpegtran  -copy all -rotate 270 2012-08-18_15-06-43.jpg &amp;gt; 2012-08-18_15-06-43_270.jpg&lt;br /&gt;
=kdump=&lt;br /&gt;
Change action to dump memory.&lt;br /&gt;
 /etc/kdump.conf&lt;br /&gt;
 core_collector true&lt;br /&gt;
Reload config.&lt;br /&gt;
 systemctl restart kdump&lt;br /&gt;
=keepass=&lt;br /&gt;
Create database&lt;br /&gt;
 printf &#039;%s\n&#039; &#039;P@55Word&#039;{,} | keepassxc-cli db-create -p -q keepassxc_abjorklund.kdbx&lt;br /&gt;
Add entry to database.&lt;br /&gt;
 keepassxc-cli add keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
Copy password from password entry&lt;br /&gt;
 keepassxc-cli clip keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
&lt;br /&gt;
=keyboard=&lt;br /&gt;
 keymaps &lt;br /&gt;
 dumpkeys&lt;br /&gt;
 loadkeys sv-latin1&lt;br /&gt;
 loadkeys us&lt;br /&gt;
 setxkbmap en&lt;br /&gt;
 setxkbmap -layout se -variant nodeadkeys&lt;br /&gt;
reset corrupt keyboard after using vmware.&lt;br /&gt;
 setxkbmap&lt;br /&gt;
&lt;br /&gt;
=kill=&lt;br /&gt;
suspend/resume a jobb.&lt;br /&gt;
 # kill -STOP PID&lt;br /&gt;
 # kill -CONT PID&lt;br /&gt;
=kpartx=&lt;br /&gt;
 # Create device files from disk image.&lt;br /&gt;
 sudo kpartx -av disk_image.raw &lt;br /&gt;
 # Remove device files.&lt;br /&gt;
 sudo kpartx -d disk_image.raw&lt;br /&gt;
&lt;br /&gt;
=lastb=&lt;br /&gt;
Show failed ssh logins.&lt;br /&gt;
 lastb&lt;br /&gt;
=less=&lt;br /&gt;
Toggle line wrap&lt;br /&gt;
 - -&amp;gt; S&lt;br /&gt;
tail with less. CTRL + c = scroll around. SHIFT + f = to tail again.&lt;br /&gt;
 less +F -B /tmp/tmp&lt;br /&gt;
=lftp=&lt;br /&gt;
 lftp -u &amp;lt;user&amp;gt;,&amp;lt;password&amp;gt; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
With proxy.&lt;br /&gt;
 lftp -e &amp;quot;set ftp:proxy http://&amp;lt;url&amp;gt;:3128 ; set ssl:verify-certificate no; open -u user,password ftp://ftp.example.se/&amp;quot;&lt;br /&gt;
Workaround.&lt;br /&gt;
 lftp -e &#039;set ftp:use-feat false; set ftp:ssl-allow false&#039; -u user,passwor ftp.example.se&lt;br /&gt;
Run commands from cli.&lt;br /&gt;
 lftp -u &#039;&amp;lt;user&amp;gt;,&amp;lt;password&amp;gt;&#039; -e &#039;set ssl:verify-certificate no ; ls -la ; quit&#039; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=ln=&lt;br /&gt;
Create link even if it exists.&lt;br /&gt;
 ln -sfT /destination link&lt;br /&gt;
&lt;br /&gt;
=locale=&lt;br /&gt;
To show 24 hour format.&lt;br /&gt;
 LC_ALL=C&lt;br /&gt;
=localectl=&lt;br /&gt;
Change keyboard.&lt;br /&gt;
 localectl list-keymaps&lt;br /&gt;
 localectl set-keymap se-nodeadkeys&lt;br /&gt;
 localectl set-x11-keymap se-nodeadkeys&lt;br /&gt;
&lt;br /&gt;
=lock=&lt;br /&gt;
locking keyboard under linux.&lt;br /&gt;
 lock-keyboard-for-baby&lt;br /&gt;
=logging=&lt;br /&gt;
bash create log.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 exec &amp;gt; /logfile&lt;br /&gt;
alternative&lt;br /&gt;
 exec 2&amp;gt;/tmp/log&lt;br /&gt;
Read logs on system.&lt;br /&gt;
 tail -f $(lsof | grep log$ |awk &#039;{ print $NF }&#039; | sort -u |xargs)&lt;br /&gt;
=logrotate=&lt;br /&gt;
Test dry run logrotate file. -d=debug -f=force&lt;br /&gt;
 logrotate -d -f /etc/logrotate.conf&lt;br /&gt;
Force logrotate in verbose mode.&lt;br /&gt;
 logrotate -v -f /etc/logrotate.conf&lt;br /&gt;
Create logrotate config entry.&lt;br /&gt;
 # Configure log rotation.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/logrotate.d/ipmonperfj_cleanupdaemon&lt;br /&gt;
 /directory/logs/cleanupdaemon.log {&lt;br /&gt;
    copytruncate&lt;br /&gt;
    size 100M&lt;br /&gt;
    rotate 60&lt;br /&gt;
    compress&lt;br /&gt;
    missingok&lt;br /&gt;
    olddir old&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
Disable logrotate. Look for file extension to ignore.&lt;br /&gt;
 man logrotate.conf, you can read find tabooext&lt;br /&gt;
 Ex. mv /etc/logrotate.d/mysql{,.rpmsave}&lt;br /&gt;
&lt;br /&gt;
=losetup=&lt;br /&gt;
Create loopback devices for partitions in image. Force the kernel to scan the partition table on a newly created loop device&lt;br /&gt;
 losetup -P /dev/loop2 harddrive.img&lt;br /&gt;
Set up next available device read only.&lt;br /&gt;
 losetup -f -r /temp/rb-slog05/sda6&lt;br /&gt;
Show all&lt;br /&gt;
 losetup -a&lt;br /&gt;
detatach&lt;br /&gt;
 losetup -d /dev/loop2&lt;br /&gt;
&lt;br /&gt;
=ls=&lt;br /&gt;
 ls -la --time-style=&amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; *.3gp&lt;br /&gt;
List processes in epoch date&lt;br /&gt;
 ( cd /proc; ls -rtd --full-time --time-style=+%s [0123456789]*; )&lt;br /&gt;
=lsblk=&lt;br /&gt;
 lsblk -d -o NAME,ROTA,MODEL&lt;br /&gt;
=lshw=&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 lshw -C memory&lt;br /&gt;
&lt;br /&gt;
==Is cpu 32 or 64bit.==&lt;br /&gt;
 lshw -class processor&lt;br /&gt;
&lt;br /&gt;
=lsof=&lt;br /&gt;
List recurivly all process that have a path open.&lt;br /&gt;
 lsof +D /apps/&lt;br /&gt;
which ports has a process opened?&lt;br /&gt;
 lsof -Pan -p 13354 -i&lt;br /&gt;
=lspci=&lt;br /&gt;
List devices without drivers.&lt;br /&gt;
 lspci -nnk&lt;br /&gt;
&lt;br /&gt;
=which process listen to port=&lt;br /&gt;
 lsof -i :443&lt;br /&gt;
&lt;br /&gt;
=mail=&lt;br /&gt;
command line mail with changed from&lt;br /&gt;
 echo message$(date +%F_%H-%M-%S) | mail -s Subject$(date +%F_%H-%M-%S) -r from@inter.net reciever@inter.net&lt;br /&gt;
command line mail with changed from with attachment&lt;br /&gt;
 echo message | mail -s Subject -r from@inter.net -a /attach.ment reciever@inter.net&lt;br /&gt;
Change default sender.&lt;br /&gt;
 # ~/.mailrc &lt;br /&gt;
 # From address for mailx.&lt;br /&gt;
 set from=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot; &lt;br /&gt;
 set replyto=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=man=&lt;br /&gt;
man correct caracters.&lt;br /&gt;
 LANG=C man passwd&lt;br /&gt;
&lt;br /&gt;
man clean for output to file.&lt;br /&gt;
 man [manual] | col -b &amp;gt; file.txt&lt;br /&gt;
Read from section 5&lt;br /&gt;
 man man.5&lt;br /&gt;
&lt;br /&gt;
=mbr=&lt;br /&gt;
backup mbr.&lt;br /&gt;
 # dd if=/dev/sdX of=/temp/sdx-mbr bs=512 count=1&lt;br /&gt;
&lt;br /&gt;
restore mbr&lt;br /&gt;
 # dd if=/temp/sdx-mbr of=/dev/sdX bs=446 count=1&lt;br /&gt;
=mdadm=&lt;br /&gt;
Add disk that was lost&lt;br /&gt;
 mdadm /dev/md125 -a /dev/vda1&lt;br /&gt;
&lt;br /&gt;
=minimodem=&lt;br /&gt;
Transmit file via audio.&lt;br /&gt;
 minimodem -t 200 &lt;br /&gt;
Recieve file via audio&lt;br /&gt;
 minimodem -r 200&lt;br /&gt;
&lt;br /&gt;
=mkfs=&lt;br /&gt;
Create fat32 file system.&lt;br /&gt;
 dd if=/dev/zero of=/tmp/sdb bs=32M status=progress conv=fdatasync count=10&lt;br /&gt;
 fdisk /tmp/sdb&lt;br /&gt;
 n&lt;br /&gt;
 &amp;lt;accept all defaults&amp;gt;&lt;br /&gt;
 t&lt;br /&gt;
 b&lt;br /&gt;
 p&lt;br /&gt;
 w&lt;br /&gt;
 mkfs.vfat -F 32 -n MYDRIVE /tmp/sdb1&lt;br /&gt;
==mkfs.ext4==&lt;br /&gt;
Create ext4 filesystem. Overwrite. Label and root reserved to 0.&lt;br /&gt;
 mkfs.ext4 -F -L looted_storage -m 0 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
=mkpasswd=&lt;br /&gt;
Create a password hash&lt;br /&gt;
 echo password | mkpasswd -m sha-512 -s&lt;br /&gt;
&lt;br /&gt;
=mogrify=&lt;br /&gt;
Resize, crop... a file. Removes original.&lt;br /&gt;
 mogrify -resize 800 *.jpg&lt;br /&gt;
=mokutil(secure boot/secureboot=&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
=mount=&lt;br /&gt;
Mount a temporary ram partition&lt;br /&gt;
 mount -t tmpfs tmpfs /mnt -o size=1024&lt;br /&gt;
Mount a cifs filesystem and change owner on mountpoint.&lt;br /&gt;
 mount.cifs -o credentials=/home/user/cifs.credentials,gid=1004,uid=1004 //server/c$ /mnt/cifs&lt;br /&gt;
Disallow normal user to ps. If not belonging to gid 1001.&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
 proc                    /proc                   proc    defaults,hidepid=2,gid=1001        0 0&lt;br /&gt;
&lt;br /&gt;
=movgrab=&lt;br /&gt;
List available formats&lt;br /&gt;
 movgrab -T http://youtu.be/ucivXRBrP_0&lt;br /&gt;
Get version listed.&lt;br /&gt;
 movgrab -f mp4:1920x1080 http://www.youtube.com/v/ucivXRBrP_0&lt;br /&gt;
&lt;br /&gt;
=mplayer=&lt;br /&gt;
mplayer in ascii mode.&lt;br /&gt;
 mplayer -monitoraspect 4:3 -vo aa LinaFreestyler.avi&lt;br /&gt;
 mplayer -vo aa -monitorpixelaspect 0.5 *.mp4&lt;br /&gt;
mplayer on second soundcard.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=0.0 *.mp3&lt;br /&gt;
Or, to specify a non-default (secondary) device either of the following commands can be used.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp1 *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=1.0 *.mp3&lt;br /&gt;
play from v4l&lt;br /&gt;
 mplayer -tv device=/dev/video:driver=v4l:input=1:width=640:height=480:norm=ntsc:adevice=/dev/dsp tv://1 -zoom -aspect 4:3&lt;br /&gt;
 mplayer -fps 15 tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0play hdv material.&lt;br /&gt;
 mplayer -monitoraspect 16:9 -vf pp=lb&lt;br /&gt;
play dvd image.&lt;br /&gt;
 mplayer dvd://1 -dvd-device DVD.iso&lt;br /&gt;
play h264 webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0:outfmt=0x34363248 -aspect 16:10 -fs&lt;br /&gt;
play mjpeg webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:outfmt=mjpeg:width=1920:height=1080:device=/dev/video0 -aspect 16:10 -fs&lt;br /&gt;
play mp3 in different speed keep pitch.&lt;br /&gt;
 mplayer -speed 1.5 -af scaletempo /mp3/music.mp3&lt;br /&gt;
 # list chapters.&lt;br /&gt;
 mplayer dvd://1 -dvd-device /dev/sr0 -identify -novideo -nosound &lt;br /&gt;
 # dump chapters.&lt;br /&gt;
 mplayer -dvd-device /dev/sr0 dvd://3 -dumpstream -dumpfile 3.vob&lt;br /&gt;
&lt;br /&gt;
=MP4Box=&lt;br /&gt;
Combine mp4 files&lt;br /&gt;
 MP4Box -add file1.mp4 -add file2.mp4 output.mp4&lt;br /&gt;
=mpv=&lt;br /&gt;
Video player. Enable hardware accelleration.&lt;br /&gt;
 # Install packages.&lt;br /&gt;
 dnf install intel-media-driver libva libva-utils gstreamer1-vaapi ffmpeg intel-gpu-tools mesa-dri-drivers mpv&lt;br /&gt;
 # Top for intel gpu&lt;br /&gt;
 sudo intel_gpu_top&lt;br /&gt;
 # Enable hardware accelleration for mpv.&lt;br /&gt;
 CONFIG_FILE=~/.config/mpv/mpv.conf ; if ! grep -q ^hwdec=auto ${CONFIG_FILE} ; then echo hwdec=auto ${CONFIG_FILE} ; fi&lt;br /&gt;
 # Create new initramfs&lt;br /&gt;
 sudo dracut --force&lt;br /&gt;
 # Look at browser.&lt;br /&gt;
 chrome://gpu/&lt;br /&gt;
&lt;br /&gt;
=mpstat=&lt;br /&gt;
top like output of system usage&lt;br /&gt;
 mpstat 5 5&lt;br /&gt;
&lt;br /&gt;
=mtr=&lt;br /&gt;
ping and traceroute combined.&lt;br /&gt;
 mtr -rc 10 8.8.8.8&lt;br /&gt;
&lt;br /&gt;
=mutt=&lt;br /&gt;
Put the followin in .muttrc to change From.&lt;br /&gt;
 set realname=&amp;quot;Joe User&amp;quot;&lt;br /&gt;
 set from=&amp;quot;user@host&amp;quot;&lt;br /&gt;
 set use_from=yes&lt;br /&gt;
command line mail with attachment&lt;br /&gt;
 mutt -s subject -a syslogs.tar.gz admin@domain.org &amp;lt; /dev/null&lt;br /&gt;
Change sender from command line.&lt;br /&gt;
 export EMAIL=address@inter.net &amp;amp;&amp;amp; mutt -s &amp;quot;Subject Test&amp;quot; anden@halfface.se &amp;lt; /dev/null&lt;br /&gt;
 echo &amp;quot;Test message&amp;quot; | mutt -s &amp;quot;Subject test&amp;quot; -e &amp;quot;set realname=\&amp;quot;Real Name\&amp;quot;&amp;quot; -e &amp;quot;set from=\&amp;quot;anden@halfface.se\&amp;quot;&amp;quot; -e &amp;quot;set use_from=yes&amp;quot; anden@halfface.se&lt;br /&gt;
Change envolope from&lt;br /&gt;
 export REPLYTO=email@inter.net&lt;br /&gt;
 export EMAIL=email@inter.net&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment&lt;br /&gt;
oneliner&lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment &lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; -s &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; &amp;quot;${EMAIL}&amp;quot;&lt;br /&gt;
Dont trigger out of Out Of Office reply.&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;unignore list-id&amp;quot; email@inter.net&lt;br /&gt;
=multilog=&lt;br /&gt;
split standard output to logfiles. In this case keep specific size. t means to prepend a TAI timestamp on each line. 10000B. 5 logfiles. tai64nlocal program simply reads stdin and replaces TAI timestamps with human-readable ones. http://blog.teksol.info/pages/daemontools/best-practices. Compress rotated logfiles.&lt;br /&gt;
 mkdir /tmp/myapp ; ./myapp | multilog t s10000 n5 &#039;!tai64nlocal&#039; &#039;!gzip&#039; /tmp/myapp 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
=nc (netcat)=&lt;br /&gt;
==Check communication.==&lt;br /&gt;
listen on port 3333.&lt;br /&gt;
 nc -kl 3333&lt;br /&gt;
talk to port 3333.&lt;br /&gt;
 nc 192.168.0.1 3333&lt;br /&gt;
&lt;br /&gt;
==Transfer data==&lt;br /&gt;
Cat file, calculate size listen on port 3333.&lt;br /&gt;
 cat backup.iso | pv -b | nc -l 3333&lt;br /&gt;
Receive file.&lt;br /&gt;
 nc 192.168.0.1 3333 | pv -b &amp;gt; backup.iso&lt;br /&gt;
&lt;br /&gt;
==Setup telnet server==&lt;br /&gt;
 nc -L -l -p1234 -d -e cmd.exe&lt;br /&gt;
&lt;br /&gt;
==Test connection.==&lt;br /&gt;
 nc -w2 -znv 10.1.22.31 7222&lt;br /&gt;
&lt;br /&gt;
==tunnel==&lt;br /&gt;
On the server, we open a listener on the TCP port 6667 which will      forward data to UDP port 53 of a specified IP. If you want to do      DNS forwarding like me, you can take the first nameserver&#039;s IP      you will find in /etc/resolv.conf - in this      example, this is 192.168.1.1. But first, we need to      create a fifo. The fifo is necessary to have two-way      communication between the two channels. A simple shell pipe      would only communicate left process&#039; standard output to right      process&#039; standard input.&lt;br /&gt;
&lt;br /&gt;
 mkfifo /tmp/fifo&lt;br /&gt;
 nc -l -p 6667 &amp;lt; /tmp/fifo | nc -u 192.168.1.1 53 &amp;gt; /tmp/fifo&lt;br /&gt;
&lt;br /&gt;
==Dont eat up standard output.==&lt;br /&gt;
 nc -v --send-only --recv-only localhost 22&lt;br /&gt;
&lt;br /&gt;
==Talk to pop3 server over ssl.==&lt;br /&gt;
 nc --ssl mail.tele2.se 995&lt;br /&gt;
==Talk to pop server==&lt;br /&gt;
 nc -C mail.tele2.se 25&lt;br /&gt;
&lt;br /&gt;
==Talk to web server==&lt;br /&gt;
 URL_SSL=halfface.se ; echo -e &amp;quot;HEAD / HTTP/1.1\nHost: ${URL_SSL}\n\n&amp;quot; | nc --ssl ${URL_SSL} 443&lt;br /&gt;
 echo -e &#039;GET /users/password/new HTTP/1.1\r\nHost: localhost\r\nConnection: Close\r\n\r\n&#039; | nc localhost 80 | head&lt;br /&gt;
To overcome problems with nc closing connection too fast.&lt;br /&gt;
 (echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;; sleep .1) | nc 172.30.156.15 80 | head -30&lt;br /&gt;
 nc --no-shutdown -v 172.30.156.15 80 &amp;lt;&amp;lt;&amp;lt;$(echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;)&lt;br /&gt;
&lt;br /&gt;
=ncdu=&lt;br /&gt;
disk usage. Stay in one filesystem.&lt;br /&gt;
 ncdu -x /&lt;br /&gt;
=net=&lt;br /&gt;
Start service via samba.&lt;br /&gt;
 net rpc service start ipremote -I 172.17.255.99 -U &#039;domain/user%password&#039;&lt;br /&gt;
&lt;br /&gt;
=netstat=&lt;br /&gt;
Look at network connections. tcp/ip4.&lt;br /&gt;
 netstat -4anpt&lt;br /&gt;
Look at multicast groups&lt;br /&gt;
 netstat -g&lt;br /&gt;
What does it mean?=&lt;br /&gt;
   ESTABLISHED&lt;br /&gt;
          The socket has an established connection.&lt;br /&gt;
   SYN_SENT&lt;br /&gt;
          The socket is actively attempting to establish a connection.&lt;br /&gt;
   SYN_RECV&lt;br /&gt;
          A connection request has been received from the network.&lt;br /&gt;
   FIN_WAIT1&lt;br /&gt;
          The socket is closed, and the connection is shutting down.&lt;br /&gt;
   FIN_WAIT2&lt;br /&gt;
          Connection is closed, and the socket is waiting for  a  shutdown&lt;br /&gt;
          from the remote end.&lt;br /&gt;
   TIME_WAIT&lt;br /&gt;
          The socket is waiting after close to handle packets still in the&lt;br /&gt;
          network.&lt;br /&gt;
   CLOSE  The socket is not being used.&lt;br /&gt;
   CLOSE_WAIT&lt;br /&gt;
          The remote end has shut down, waiting for the socket to close.&lt;br /&gt;
   LAST_ACK&lt;br /&gt;
          The remote end has shut down, and the socket is closed.  Waiting&lt;br /&gt;
          for acknowledgement.&lt;br /&gt;
   LISTEN The  socket is listening for incoming connections.  Such sockets&lt;br /&gt;
          are  not  included  in  the  output  unless  you   specify   the&lt;br /&gt;
          --listening (-l) or --all (-a) option.&lt;br /&gt;
   CLOSING&lt;br /&gt;
          Both  sockets are shut down but we still don&#039;t have all our data&lt;br /&gt;
          sent.&lt;br /&gt;
   UNKNOWN&lt;br /&gt;
          The state of the socket is unknown.&lt;br /&gt;
==statistics==&lt;br /&gt;
 netstat -s&lt;br /&gt;
 netstat -s | retransmit&lt;br /&gt;
&lt;br /&gt;
=nft=&lt;br /&gt;
nftables list config&lt;br /&gt;
 nft -j list ruleset | jq . &lt;br /&gt;
=nmap=&lt;br /&gt;
Scan for open ssh ports.&lt;br /&gt;
 nmap -p 22 --open -sV 10.0.0.*&lt;br /&gt;
 nmap -p 22 -sV --open -oG - $(ip -4 a s $(ip route show default | awk &#039;{print $5}&#039;) | grep inet | awk &#039;{print $2}&#039;) | awk &#039;/\/open\// {print $2,$3}&#039;&lt;br /&gt;
Syn scan.&lt;br /&gt;
 nmap -P0 -sS -p1023 www.halfface.se&lt;br /&gt;
Ping scan. Do not resolve.&lt;br /&gt;
 nmap -sn -n 10.127.254.1-254&lt;br /&gt;
Which ciphers are allowed.&lt;br /&gt;
 nmap --script ssl-enum-ciphers -p 465 www.halfface.se&lt;br /&gt;
arp scan.&lt;br /&gt;
 nmap -PR 192.168.0.0/24&lt;br /&gt;
which kex_algorithms server_host_key_algorithms encryption_algorithms compression_algorithms&lt;br /&gt;
 nmap --script ssh2-enum-algos -sV -p 22 ssh.server.inter.net&lt;br /&gt;
Which manufacturer.&lt;br /&gt;
 nmap -sn 10.111.222.0/24&lt;br /&gt;
&lt;br /&gt;
=nmcli=&lt;br /&gt;
==List connections==&lt;br /&gt;
 nmcli con&lt;br /&gt;
==rename connection==&lt;br /&gt;
 nmcli connection modify &amp;lt;old_name&amp;gt; con-name &amp;lt;new_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==manage network from cli==&lt;br /&gt;
 http://fedoraproject.org/wiki/Networking/CLI&lt;br /&gt;
==Connect to a configured connection by name==&lt;br /&gt;
 nmcli connection up WireLess&lt;br /&gt;
==Disconnection by name==&lt;br /&gt;
 nmcli connection down Wireless&lt;br /&gt;
==Connect to remembered network.==&lt;br /&gt;
 nmcli con up &#039;[-_-] halfface 5&#039; &lt;br /&gt;
==List available wireless networks.==&lt;br /&gt;
 nmcli device wifi list&lt;br /&gt;
==Generate list of available wireless networks.==&lt;br /&gt;
 nmcli device wifi rescan&lt;br /&gt;
 sudo nmcli device wifi list --rescan yes&lt;br /&gt;
&lt;br /&gt;
==Create connection for wireless network.==&lt;br /&gt;
 nmcli device wifi connect Bredband password P4ssM0rd&lt;br /&gt;
==Connect to specific bssid==&lt;br /&gt;
 nmcli connection modify MyWifiConnection 802-11-wireless.bssid 00:11:22:33:44:55&lt;br /&gt;
&lt;br /&gt;
==List networks on specific interface.==&lt;br /&gt;
 nmcli device wifi list ifname wlp0s18f2u4&lt;br /&gt;
==Disconnect network interface.==&lt;br /&gt;
 nmcli device disconnect wlp0s18f2u4&lt;br /&gt;
==Manually setup interface.==&lt;br /&gt;
 nmcli con add con-name &amp;quot;static-ens32&amp;quot; ifname ens32 type ethernet ip4 xxx.xxx.120.44/24 gw4 xxx.xxx.120.1&lt;br /&gt;
 nmcli con mod &amp;quot;static-ens32&amp;quot; ipv4.dns &amp;quot;xxx.xxx.120.1,8.8.8.8&amp;quot;&lt;br /&gt;
 nmcli con up &amp;quot;static-ens32&amp;quot; iface ens32&lt;br /&gt;
==list devices.==&lt;br /&gt;
 nmcli device status&lt;br /&gt;
==list connections.==&lt;br /&gt;
 nmcli connection show&lt;br /&gt;
==delete connection==&lt;br /&gt;
 nmcli con delete &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
==add connection with static ip.==&lt;br /&gt;
 nmcli con add con-name ens224 ifname ens224 type ethernet ip4 172.30.109.16/24&lt;br /&gt;
==show properties for connection==&lt;br /&gt;
 nmcli dev show ens224&lt;br /&gt;
==set dns server==&lt;br /&gt;
 nmcli connection modify enp1s0 ipv4.dns &amp;quot;10.111.222.2,8.8.8.8&amp;quot;&lt;br /&gt;
==edit==&lt;br /&gt;
 nmcli con edit $connection&lt;br /&gt;
 print all&lt;br /&gt;
==autostart==&lt;br /&gt;
 nmcli connection modify IFNAME connection.autoconnect yes|no&lt;br /&gt;
==dhcp option==&lt;br /&gt;
 ip -4 addr show | grep -Ev &amp;quot;127.0.0.1|LOOPBACK&amp;quot; | awk &#039;/^[0-9]+:/ {sub(/:/,&amp;quot;&amp;quot;,$2); print $2}&#039; | sort -u | while read NIC ; do echo &#039;*&#039; $NIC ; nmcli -f DHCP4 device show $NIC ; done&lt;br /&gt;
&lt;br /&gt;
==Make network a bridge interface==&lt;br /&gt;
 sudo nmcli con add ifname br0 type bridge con-name br0&lt;br /&gt;
 sudo nmcli con add type bridge-slave ifname &amp;lt;network_card&amp;gt; master br0&lt;br /&gt;
 sudo nmcli con modify br0 bridge.stp no&lt;br /&gt;
 sudo nmcli con down &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
 sudo nmcli con up br0&lt;br /&gt;
==modify(change) vlan id==&lt;br /&gt;
 nmcli connection modify &amp;lt;connection_name&amp;gt; vlan.id &amp;lt;new_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=nohup=&lt;br /&gt;
Start binary under nohup and tail log.&lt;br /&gt;
 nohup ./run.sh &amp;amp; sleep 1 ; tail -1000f nohup.out&lt;br /&gt;
Start process and log to specified file.&lt;br /&gt;
 nohup daemon &amp;gt; /path/daemon.log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=nping=&lt;br /&gt;
 nping -c 1 --tcp -p 80 www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=nth=&lt;br /&gt;
Name That Hash&lt;br /&gt;
 nth --text &#039;$y$j9T$jogs61gwDHB6L1oEwHeR00$L4cfYqkxKzS8dtkC5hPXFRMOIcEl6q5VKIkngrRGFM0&#039;&lt;br /&gt;
=ntfs-3g=&lt;br /&gt;
mount ntfs filesystem. read and write.&lt;br /&gt;
 yum install fuse fuse-libs ntfs-3g&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -r -o umask=0222,locale=en_US&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -rw -o umask=0000,locale=en_US&lt;br /&gt;
 fstab read and write.&lt;br /&gt;
 /dev/sda3   /media/e_drive     ntfs-3g    ro,defaults,umask=0222 0 0&lt;br /&gt;
 /dev/sda1   /media/c_drive     ntfs-3g    rw,defaults,umask=0000 0 0&lt;br /&gt;
Create ntfs partition.&lt;br /&gt;
 fdisk 7/gdisk 0700&lt;br /&gt;
 mkfs.ntfs /dev/sdx1 -Q&lt;br /&gt;
&lt;br /&gt;
=numbers=&lt;br /&gt;
series of numbers&lt;br /&gt;
 bash:&lt;br /&gt;
 echo {1..10}&lt;br /&gt;
=numfmt=&lt;br /&gt;
iec=accept optional single letter suffix. No output suffix. Remove B from input. change format of output, mb ,gb and so on.&lt;br /&gt;
 numfmt --from=iec --to=none --suffix=B 8.7KB&lt;br /&gt;
&lt;br /&gt;
=nwipe (dban)=&lt;br /&gt;
Wipe your disk&lt;br /&gt;
 nwipe --nogui --nowait --autonuke /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=omping=&lt;br /&gt;
multicast ping&lt;br /&gt;
  omping -c10 10.111.222.118 10.111.222.121&lt;br /&gt;
=openvpn3=&lt;br /&gt;
==Install openvpn fedora 38+ /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:dsommers\:openvpn3-devsnapshots.repo==&lt;br /&gt;
 [copr:copr.fedorainfracloud.org:dsommers:openvpn3-devsnapshots]&lt;br /&gt;
 name=Copr repo for openvpn3-devsnapshots owned by dsommers&lt;br /&gt;
 baseurl=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/fedora-$releasever-$basearch/&lt;br /&gt;
 type=rpm-md&lt;br /&gt;
 skip_if_unavailable=True&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 gpgkey=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/pubkey.gpg&lt;br /&gt;
 repo_gpgcheck=0&lt;br /&gt;
 enabled=1&lt;br /&gt;
 enabled_metadata=1&lt;br /&gt;
==Install package from above.==&lt;br /&gt;
 dnf install openvpn3-client&lt;br /&gt;
==Add configuration==&lt;br /&gt;
 OPENVPN_CONFIG=&amp;lt;name&amp;gt; ; openvpn3 config-import --name &amp;quot;$OPENVPN_CONFIG&amp;quot; --persistent --config &amp;quot;$OPENVPN_CONFIG&amp;quot;.ovpn&lt;br /&gt;
==List configs==&lt;br /&gt;
 openvpn3 configs-list&lt;br /&gt;
 openvpn3 configs-list --verbose&lt;br /&gt;
&lt;br /&gt;
==Remove config==&lt;br /&gt;
 openvpn3 config-remove --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==show full config==&lt;br /&gt;
 openvpn3 config-dump --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect==&lt;br /&gt;
 openvpn3 session-start --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Disconnect==&lt;br /&gt;
 openvpn3 session-manage --config &amp;lt;config-name&amp;gt; --disconnect&lt;br /&gt;
==Connect to the log with debug enabled. This can be run in a different terminal window after the connection has been started.==&lt;br /&gt;
 openvpn3 log --config &amp;lt;config-name&amp;gt; --log-level 6&lt;br /&gt;
==Show active sessions==&lt;br /&gt;
 openvpn3 sessions-list&lt;br /&gt;
==Show statistics for an active session==&lt;br /&gt;
 openvpn3 session-stats --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Show configuration settings==&lt;br /&gt;
 openvpn3 config-manage --config &amp;lt;config-name&amp;gt; --show&lt;br /&gt;
==sessions disconnect==&lt;br /&gt;
 openvpn3 sessions-list | grep Path | awk &#039;{print $2}&#039; | while read OPENVPN_PATH ; do echo $OPENVPN_PATH ; openvpn3 session-manage --session-path $OPENVPN_PATH --disconnect ; done&lt;br /&gt;
==View config files==&lt;br /&gt;
 sudo find /var/lib/openvpn3/configs/ -type f&lt;br /&gt;
&lt;br /&gt;
=openssl=&lt;br /&gt;
==Grab the public key.==&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443 &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -ne &#039;/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p&#039;&lt;br /&gt;
==What does the ssl cert look like.==&lt;br /&gt;
 HOST=www.halfface.se ; PORT=443 ; echo | openssl s_client -connect ${HOST}:${PORT} -servername ${HOST}| openssl x509 -ext subjectAltName -noout -startdate -enddate -subject -issuer -nameopt RFC2253,sep_comma_plus_space&lt;br /&gt;
&lt;br /&gt;
==What does crl look like. (Certificate Revocation List)==&lt;br /&gt;
 openssl crl -inform PEM -text -noout -in crl.pem&lt;br /&gt;
&lt;br /&gt;
==Connect to ssl server==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect to ssl server -cipher NULL,LOW==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect with openssl v3==&lt;br /&gt;
 openssl s_client -ssl3 -connect ipmon01.dupont:443&lt;br /&gt;
==Connect with low security cipher==&lt;br /&gt;
 echo X | openssl s_client -cipher NULL,LOW -connect www.halfface.se:8140&lt;br /&gt;
==PEM convert to DER==&lt;br /&gt;
 openssl x509 -inform PEM -in /file.pem -outform DER file.der&lt;br /&gt;
==p12 to cer==&lt;br /&gt;
 openssl pkcs12 -in infile.p12 -out outfile.cer -nodes&lt;br /&gt;
Export public&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.pem -clcerts -nokeys -passin pass:${PASS}&lt;br /&gt;
Export private&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.key -clcerts -nodes -passin pass:${PASS}&lt;br /&gt;
==p7b to pem==&lt;br /&gt;
 openssl pkcs7 -print_certs -in &amp;lt;certificate&amp;gt;.p7b -out certificate.pem&lt;br /&gt;
==pem to p12==&lt;br /&gt;
Using file containing private, public and chain.&lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
&lt;br /&gt;
==pfx to pem==&lt;br /&gt;
 env FILE=&amp;quot;&amp;lt;file&amp;gt;&amp;quot; PASSWORD=&amp;quot;&amp;lt;password&amp;gt;&amp;quot; bash -c &#039;openssl pkcs12 -in &amp;quot;$FILE&amp;quot; -out &amp;quot;${FILE//\//_}.pem&amp;quot; -nodes -password pass:&amp;quot;$PASSWORD&amp;quot;&#039;&lt;br /&gt;
Complete file.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -out cert.pem -nodes&lt;br /&gt;
Get private cert. Then remove password. Decrypt&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -nocerts -out key.pem&lt;br /&gt;
 openssl rsa -in key.pem -out server.key&lt;br /&gt;
Get public cert.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem&lt;br /&gt;
&lt;br /&gt;
==Extract p12 password protected keys in==&lt;br /&gt;
 openssl pkcs12 -in /file.p12 -passin file:/password -nokey -nodes -out /file.nokeys&lt;br /&gt;
 openssl pkcs12 -info -in &amp;lt;/path/to/file.pfx&amp;gt; -passin pass:&amp;lt;pfx&#039;s password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Encrypt file==&lt;br /&gt;
 openssl aes-256-cbc -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Decrypte file==&lt;br /&gt;
 openssl aes-256-cbc -d -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Install new root ca==&lt;br /&gt;
 # Change to the directory:&lt;br /&gt;
 cd /etc/pki/tls/certs&lt;br /&gt;
 # Next download the College root certificate:&lt;br /&gt;
 wget https://icca2.ic.ac.uk/certenroll/ic-root.crt&lt;br /&gt;
 # Convert the certificate to PEM format:&lt;br /&gt;
 openssl x509 -inform der -in ic-root.crt -out ic-root.pem&lt;br /&gt;
 # Create a link with the certificate hash:&lt;br /&gt;
 ln -s ic-root.pem `openssl x509 -hash -noout -in ic-root.pem`.0&lt;br /&gt;
 # Create sha256 base64 encoded hash&lt;br /&gt;
 openssl dgst -binary -sha256 | openssl base64&lt;br /&gt;
 # Verify root ca.&lt;br /&gt;
 openssl verify -CApath /etc/pki/tls/certs ic-inter-root.pem&lt;br /&gt;
 icrootca.cer: OK&lt;br /&gt;
The server certificate is the first certificate returned, and will be PEM formatted. The CA certificate is the final certificate returned, and is also PEM formatted.&lt;br /&gt;
 openssl&#039;: echo | openssl s_client -connect www.sslsite.com:443 -showcerts&lt;br /&gt;
Check ca store files.&lt;br /&gt;
 find . -name &#039;*.pem&#039; | while read PEM ; do echo &#039;###&#039; ${PEM} &#039;###&#039;;ls -la &amp;quot;${PEM}&amp;quot; ; set -x ; curl --cacert &amp;quot;${PEM}&amp;quot; https://site.test.net/index.htm.&lt;br /&gt;
==Verify pop3 connectivity.==&lt;br /&gt;
 openssl s_client -crlf -connect mail.tele2.se:110 -starttls pop3&lt;br /&gt;
 USER yiming&lt;br /&gt;
 PASS foobar&lt;br /&gt;
 LIST – lists the messages available in the user’s account, returning a status message and list with each row containing a message number and the size of that message in bytes&lt;br /&gt;
 STAT – returns a status message, the number of messages in the mailbox, and the size of the mailbox in bytes&lt;br /&gt;
 RETR [message_num] – returns the message identified by the message number, which is the same as the message number shown in the LIST command output&lt;br /&gt;
 TOP [message_num] [n] – returns the top n lines of the message denoted by message number.&lt;br /&gt;
 QUIT command will end the session.&lt;br /&gt;
==Create wildcard self signed certificate.==&lt;br /&gt;
 openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout wildcard.test.internal.zone.key -out wildcard.test.internal.zone.crt&lt;br /&gt;
 Common Name (eg, your name or your server&#039;s hostname) []:*.test.internal.zone&lt;br /&gt;
==Verify certificate chain==&lt;br /&gt;
 openssl verify -CAfile Thawte_Primary_Root_CA.pem -untrusted thawte_SSL_CA_G2.cer www.halfface.se.pem&lt;br /&gt;
Look at certificate chain.&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443&lt;br /&gt;
 CONNECTED(00000003)&lt;br /&gt;
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=1 C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=0 CN = www.halfface.se&lt;br /&gt;
 verify return:1&lt;br /&gt;
 ---&lt;br /&gt;
 Certificate chain&lt;br /&gt;
  0 s:CN = www.halfface.se&lt;br /&gt;
    i:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
  1 s:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
    i:O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 ---&lt;br /&gt;
Verify chain.&lt;br /&gt;
 openssl s_client -showcerts -verify 5 -connect www.halfface.se:443 &amp;lt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
==Connect to smtp server via ssl.==&lt;br /&gt;
 openssl s_client -crlf -ign_eof -connect www.halfface.se:25 -starttls smtp -quiet&lt;br /&gt;
 EHLO halfface.se&lt;br /&gt;
 AUTH LOGIN&lt;br /&gt;
 $(echo -n &amp;quot;username&amp;quot; | base64)&lt;br /&gt;
 $(echo -n &amp;quot;password&amp;quot; | base64)&lt;br /&gt;
 MAIL FROM:anden@halfface.se&lt;br /&gt;
 RCPT TO:&amp;lt;anden@halfface.se&amp;gt;&lt;br /&gt;
 DATA&lt;br /&gt;
 Subject: Test from cli. &lt;br /&gt;
 &lt;br /&gt;
 This is a test email.&lt;br /&gt;
 .&lt;br /&gt;
 QUIT&lt;br /&gt;
&lt;br /&gt;
==Connect to imap==&lt;br /&gt;
 openssl s_client -crlf -connect www.halfface.se:993&lt;br /&gt;
 openssl s_client -showcerts -connect www.halfface.se:143 -starttls imap&lt;br /&gt;
Login&lt;br /&gt;
 tag login abjorklund ${PASSWORD}&lt;br /&gt;
List mailboxes&lt;br /&gt;
 tag LIST &amp;quot;&amp;quot; &amp;quot;*&amp;quot;&lt;br /&gt;
Log out&lt;br /&gt;
 tag LOGOUT&lt;br /&gt;
&lt;br /&gt;
==compare two certifactes==&lt;br /&gt;
Compare the use case for the certificate.&lt;br /&gt;
  sdiff &amp;lt;(openssl x509 -in server.crt -noout -issuer -subject -enddate -purpose) &amp;lt;(openssl x509 -in uc_activemq.crt -noout -issuer -subject -enddate -purpose)| less&lt;br /&gt;
==create a csr==&lt;br /&gt;
 openssl req -new -sha256 -nodes -out www.halfface.se.csr -newkey rsa:2048 -keyout www.halfface.se.key -config &amp;lt;(&lt;br /&gt;
 cat &amp;lt;&amp;lt;-EOF&lt;br /&gt;
 [req]&lt;br /&gt;
 default_bits = 2048&lt;br /&gt;
 prompt = no&lt;br /&gt;
 default_md = sha256&lt;br /&gt;
 req_extensions = req_ext&lt;br /&gt;
 distinguished_name = dn&lt;br /&gt;
 [ dn ]&lt;br /&gt;
 O=Organisation: halfface&lt;br /&gt;
 C=SE&lt;br /&gt;
 ST=Stockholm&lt;br /&gt;
 L=Stockholm&lt;br /&gt;
 CN = www.halfface.se&lt;br /&gt;
 [ req_ext ]&lt;br /&gt;
 subjectAltName = @alt_names&lt;br /&gt;
 [ alt_names ]&lt;br /&gt;
 DNS.1 = halfface.se&lt;br /&gt;
 DNS.2 = ldap.halfface.se&lt;br /&gt;
 DNS.3 = mqtt.halfface.se&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
==csr information==&lt;br /&gt;
 openssl req -noout -text -in file.csr | grep -vE &#039;  [0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:&#039;&lt;br /&gt;
&lt;br /&gt;
==look at content of private key==&lt;br /&gt;
 openssl rsa -text -noout -in key.pem&lt;br /&gt;
&lt;br /&gt;
==confirm that public private and csr match==&lt;br /&gt;
 # For your SSL certificate: &lt;br /&gt;
 CERT_PUBLIC=$(ls *.crt)&lt;br /&gt;
 echo $(openssl x509 -noout -modulus -in &amp;quot;${CERT_PUBLIC}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PUBLIC}&amp;quot;,public cert.&lt;br /&gt;
 # For your RSA private key: &lt;br /&gt;
 CERT_PRIVATE=$(ls *.key)&lt;br /&gt;
 echo $(openssl rsa -noout -modulus -in &amp;quot;${CERT_PRIVATE}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PRIVATE}&amp;quot;,private key&lt;br /&gt;
 # For your CSR: &lt;br /&gt;
 CERT_CSR=$(ls *.csr)&lt;br /&gt;
 echo $(openssl req -noout -modulus -in &amp;quot;${CERT_CSR}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_CSR}&amp;quot;,certificate signing request&lt;br /&gt;
&lt;br /&gt;
==connect with ca private and public key==&lt;br /&gt;
 openssl s_client -CAfile ca.pem -cert public.crt -key private.key -connect 10.12.118.184:1023 -tls1_2&lt;br /&gt;
==create a ca==&lt;br /&gt;
===Create ca and certificates.===&lt;br /&gt;
 # Create folder structure.&lt;br /&gt;
 mkdir /root/ca/&lt;br /&gt;
 mkdir /root/ca/certs/&lt;br /&gt;
 mkdir /root/ca/crl/&lt;br /&gt;
 mkdir /root/ca/newcerts/&lt;br /&gt;
 mkdir /root/ca/private/&lt;br /&gt;
 mkdir /root/ca/requests/&lt;br /&gt;
 touch /root/ca/index.txt&lt;br /&gt;
 echo 1000 &amp;gt; /root/ca/serial&lt;br /&gt;
 chmod 600 /root/ca&lt;br /&gt;
 # Create private key for the CA certificate. pass phrase: $(pwgen 15)&lt;br /&gt;
 cd /root/ca/&lt;br /&gt;
 openssl genrsa -aes256 -out private/cakey.pem 4096&lt;br /&gt;
 # Create a public certificate for the CA.&lt;br /&gt;
 openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 36525&lt;br /&gt;
&lt;br /&gt;
 Country Name (2 letter code) [AU]:SE&lt;br /&gt;
 State or Province Name (full name) [Some-State]:Stockholm&lt;br /&gt;
 Locality Name (eg, city) []:Stockholm&lt;br /&gt;
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company&lt;br /&gt;
 Organizational Unit Name (eg, section) []:Company&lt;br /&gt;
 Common Name (e.g. server FQDN or YOUR name) []:Certificate Authority&lt;br /&gt;
 Email Address []:anden@halfface.se&lt;br /&gt;
&lt;br /&gt;
 # Copy system openssl.cnf to /root/ca dir. Then change dir in config.&lt;br /&gt;
 vim openssl.cnf&lt;br /&gt;
 [ CA_default ]&lt;br /&gt;
 dir = /root/ca # Where everything is kept&lt;br /&gt;
&lt;br /&gt;
===Create signed certificate keypair===&lt;br /&gt;
 cd requests/&lt;br /&gt;
 # Create csr&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -nodes -keyout &amp;lt;client&amp;gt;.key -out &amp;lt;client&amp;gt;.csr -config ../openssl.cnf&lt;br /&gt;
 # Issue certificate for csr.&lt;br /&gt;
 openssl ca -in &amp;lt;client&amp;gt;.csr -out &amp;lt;client&amp;gt;.crt -config ../openssl.cnf -days 36525&lt;br /&gt;
&lt;br /&gt;
==talk http via openssl==&lt;br /&gt;
 openssl s_client -crlf -quiet -connect www.halfface.se:443 &amp;lt;&amp;lt;EOF&lt;br /&gt;
 GET / HTTP/2.0&lt;br /&gt;
 Host: www.halfface.se&lt;br /&gt;
 &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==look at cert==&lt;br /&gt;
 openssl asn1parse -in rb-ca.crt.2021-02-28&lt;br /&gt;
==performance testing==&lt;br /&gt;
 openssl speed -evp aes-256-ecb&lt;br /&gt;
==confirm that ca is correct==&lt;br /&gt;
 echo | openssl s_client -CAfile Sectigo_RSA_Domain_Validation_Secure_Server_CA.pem -no-CAfile -no-CApath -tls1_2 -connect 172.30.32.141:5044 2&amp;gt;&amp;amp;1 | grep Verification&lt;br /&gt;
 Verification: OK&lt;br /&gt;
==openssl s_server==&lt;br /&gt;
Setup server listening as http server.&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert host.inter.net.crt -key host.inter.net.key&lt;br /&gt;
Setup https server listening on https on port 4433 providing complete chain&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert halfface.se.pem -cert_chain halfface.se.intermediate.pem -key halfface.se.key -accept 4433&lt;br /&gt;
&lt;br /&gt;
==othername:&amp;lt;unsupported&amp;gt;==&lt;br /&gt;
You will have to locate the &amp;quot;OCTET STRING&amp;quot; line just below the &amp;quot;OBJECT :X509v3 Subject Alternative Name&amp;quot; line then strpars&lt;br /&gt;
 # print section offset via&lt;br /&gt;
 openssl asn1parse -in yourcert.pem&lt;br /&gt;
 # parse otherName from &amp;quot;OCTET STRING&amp;quot; &amp;lt;offset&amp;gt; is the value in the beginning of the line.&lt;br /&gt;
 openssl asn1parse -in yourcert.pem -strparse &amp;lt;offset&amp;gt;&lt;br /&gt;
Another way of seeing same data is through &lt;br /&gt;
 openssl asn1parse -in /tmp/tmp -dump -strictpem&lt;br /&gt;
&lt;br /&gt;
=create password string=&lt;br /&gt;
 openssl passwd -6 -salt $RANDOM $PASSWORD&lt;br /&gt;
&lt;br /&gt;
=pactl=&lt;br /&gt;
Pulse Audio cli tool.&lt;br /&gt;
List output devices.&lt;br /&gt;
 pactl list short sinks&lt;br /&gt;
Set default output device&lt;br /&gt;
 pactl set-default-sink $i&lt;br /&gt;
List where applications send output.&lt;br /&gt;
 pactl list short sink-inputs&lt;br /&gt;
Move application to other output device.&lt;br /&gt;
 pactl move-sink-input $applicaiton $sink&lt;br /&gt;
&lt;br /&gt;
=pam=&lt;br /&gt;
Troubleshooting pam.&lt;br /&gt;
 /etc/syslog.conf&lt;br /&gt;
 # Get debugging data.&lt;br /&gt;
 *.debug     /var/log/debug.log&lt;br /&gt;
Create logfile and restart *syslog.&lt;br /&gt;
 touch /var/log/debug.log&lt;br /&gt;
 service syslog restart&lt;br /&gt;
Put pam in debug mode.&lt;br /&gt;
 touch /etc/pam_debug&lt;br /&gt;
OR you can enable debugging only for the modules you&#039;re interested in by adding &amp;quot;debug&amp;quot; to the end of the relevant lines in /etc/pam.d/system-auth or the other /etc/pam.d/* files:&lt;br /&gt;
 login   auth    required    pam_unix.so debug&lt;br /&gt;
Debugging is found in /var/log/debug.log.&lt;br /&gt;
&lt;br /&gt;
=pam_tally2=&lt;br /&gt;
Configured here.&lt;br /&gt;
 /etc/pam.d/password-auth:auth        required      pam_tally2.so file=/var/log/tallylog onerr=fail per_user deny=6 no_magic_root&lt;br /&gt;
What is status from account?&lt;br /&gt;
 pam_tally2 --user=user1&lt;br /&gt;
 Login           Failures Latest failure     From&lt;br /&gt;
 user1             8    04/20/15 11:39:54  192.168.1.1&lt;br /&gt;
&lt;br /&gt;
=parallel=&lt;br /&gt;
Run command 10 times in parallel.&lt;br /&gt;
 seq 10 | parallel -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Run command 10 times in parallel dryrun.&lt;br /&gt;
 seq 10 | parallel --dry-run -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Compress logfiles in parallel.&lt;br /&gt;
 parallel gzip ::: *.log&lt;br /&gt;
=partprobe=&lt;br /&gt;
Rescan block device to setup device files&lt;br /&gt;
 partprobe /dev/sde&lt;br /&gt;
=partx=&lt;br /&gt;
 partx /dev/sda -l ; partx /dev/sda -u ; partx /dev/sda -l&lt;br /&gt;
&lt;br /&gt;
=paste=&lt;br /&gt;
Combine to files to one in multiple column. Replace tab with spaces.&lt;br /&gt;
 paste /tmp/check_name_nagios /tmp/filename | column -t -s $&#039;\t&#039;&lt;br /&gt;
Combine every second line with a space in between.&lt;br /&gt;
 paste -d&#039; &#039; - -&lt;br /&gt;
&lt;br /&gt;
=pcregrep=&lt;br /&gt;
Multiline grep&lt;br /&gt;
 pcregrep -M &#039;pattern: line1\nPattern lin2&#039; /temp/files_*&lt;br /&gt;
=pdftotext=&lt;br /&gt;
grab text from pdf document.&lt;br /&gt;
 pdftotext document.pdf&lt;br /&gt;
=pdftk=&lt;br /&gt;
Rotate clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endwest output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Rotate counter clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endeast output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Create one pdf from others.&lt;br /&gt;
 pdftk &amp;lt;file.pdf&amp;gt;* cat output &amp;lt;file_combo.pdf&amp;gt;&lt;br /&gt;
Extract one page from pdf.&lt;br /&gt;
 pdftk input.pdf cat 11 output page11.pdf&lt;br /&gt;
Extract series of pages from pdf&lt;br /&gt;
 pdftk input.pdf cat 3-7 output pages_3-7.pdf&lt;br /&gt;
&lt;br /&gt;
=pidof=&lt;br /&gt;
which pids has a program stared. Find pid.&lt;br /&gt;
&lt;br /&gt;
=ping=&lt;br /&gt;
Ping ipv6 loopback&lt;br /&gt;
 ping6 ::1 -c1&lt;br /&gt;
Ping ipv6 broadcast&lt;br /&gt;
 ping6 ff02::1%2 | cut -d\  -f4&lt;br /&gt;
Ping short output&lt;br /&gt;
 export ADDRESS=2001:4860:4860::8888 ; PING=$(ping6 -w1 -q -c1 -i10 ${ADDRESS} 2&amp;gt;&amp;amp;1) ; RTT=$( grep rtt &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot; | awk -F/ &#039;{print $6}&#039;) ; RECEIVED=$(grep received &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot;) ; echo $ADDRESS $RECEIVED, rtt=${RTT}&lt;br /&gt;
Ping to discover mtu. 1460, 1450. When reply increase with 2. when found highest value increase with 28 to get mtu.&lt;br /&gt;
 ping -M do -s 1472 123.45.56.78&lt;br /&gt;
&lt;br /&gt;
=pip=&lt;br /&gt;
==which versions of django exist==&lt;br /&gt;
 pip install pylibmc&lt;br /&gt;
==which versions are installed==&lt;br /&gt;
 pip list&lt;br /&gt;
&lt;br /&gt;
==which files does pip package provide.==&lt;br /&gt;
 pip show -f $package&lt;br /&gt;
==Uppgrade package.==&lt;br /&gt;
 pip install $package --upgrade&lt;br /&gt;
==where your own packages might end up==&lt;br /&gt;
 /usr/local/lib/python3.9&lt;br /&gt;
 /usr/lib/python2.7/site-packages/&lt;br /&gt;
==upgrade pip==&lt;br /&gt;
 ls -la /usr/lib64/libldap_r.so /usr/lib64/libldap.so&lt;br /&gt;
==do not use cache==&lt;br /&gt;
 pip3 install -r requirements.txt --no-cache-dir&lt;br /&gt;
&lt;br /&gt;
=pgrep=&lt;br /&gt;
Grep any processlines including 1066&lt;br /&gt;
 pgrep -lf 1066&lt;br /&gt;
=pmap=&lt;br /&gt;
Look at memory usage of process.&lt;br /&gt;
 sudo pmap 2258&lt;br /&gt;
&lt;br /&gt;
=postfix=&lt;br /&gt;
remove mails in queue.&lt;br /&gt;
 mailq | grep ^[A-F0-9] | awk &#039;{print $1}&#039; | postsuper -d -&lt;br /&gt;
list mails in queue&lt;br /&gt;
 mailq | grep &amp;quot;^[A-F0-9]&amp;quot;&lt;br /&gt;
Get mails in better output to better decide what to do with mails.&lt;br /&gt;
 mailq | grep -v -- &amp;quot;-Queue ID-&amp;quot; |  sed &#039;s/^$/\x0/g&#039; | tr -d &#039;\n&#039; | sed &#039;s/\x0/\n/g&#039;&lt;br /&gt;
Remove stuck emails.&lt;br /&gt;
 postsuper -d ALL deferred&lt;br /&gt;
List email&lt;br /&gt;
 postcat -q E55692442F&lt;br /&gt;
Read mail&lt;br /&gt;
 postcat -vq [message-id]&lt;br /&gt;
&lt;br /&gt;
=pr=&lt;br /&gt;
Print two files between each other.&lt;br /&gt;
 pr -w200 -m -t /tmp/1 /tmp/2&lt;br /&gt;
=printf=&lt;br /&gt;
Convert octal to utf-8&lt;br /&gt;
 printf &#039;\360\237\222\200&#039;&lt;br /&gt;
decimal to integral&lt;br /&gt;
 printf &amp;quot;%.0f&amp;quot; &amp;lt;decimal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=printscreen=&lt;br /&gt;
 import -window root test.png&lt;br /&gt;
Gnome copy graphics to paste buffer. Copy selected portion of screen.&lt;br /&gt;
 gnome-screenshot -a&lt;br /&gt;
&lt;br /&gt;
=/proc=&lt;br /&gt;
*/proc/meminfo&lt;br /&gt;
MemTotal — Total amount of physical RAM, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
MemFree — The amount of physical RAM, in kilobytes, left unused by the system.&lt;br /&gt;
&lt;br /&gt;
Buffers — The amount of physical RAM, in kilobytes, used for file buffers.&lt;br /&gt;
&lt;br /&gt;
Cached — The amount of physical RAM, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
SwapCached — The amount of swap, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
Active — The total amount of buffer or page cache memory, in kilobytes, that is in active use. This is memory that has been recently used and is usually not reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
Inactive — The total amount of buffer or page cache memory, in kilobytes, that are free and available. This is memory that has not been recently used and can be reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
HighTotal and HighFree — The total and free amount of memory, in kilobytes, that is not directly mapped into kernel space. The HighTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
LowTotal and LowFree — The total and free amount of memory, in kilobytes, that is directly mapped into kernel space. The LowTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
SwapTotal — The total amount of swap available, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
SwapFree — The total amount of swap free, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
Dirty — The total amount of memory, in kilobytes, waiting to be written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Writeback — The total amount of memory, in kilobytes, actively being written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Mapped — The total amount of memory, in kilobytes, which have been used to map devices, files, or libraries using the mmap command.&lt;br /&gt;
&lt;br /&gt;
Slab — The total amount of memory, in kilobytes, used by the kernel to cache data structures for its own use.&lt;br /&gt;
&lt;br /&gt;
Committed_AS — The total amount of memory, in kilobytes, estimated to complete the workload. This value represents the worst case scenario value, and also includes swap memory.&lt;br /&gt;
&lt;br /&gt;
PageTables — The total amount of memory, in kilobytes, dedicated to the lowest page table level.&lt;br /&gt;
&lt;br /&gt;
VMallocTotal — The total amount of memory, in kilobytes, of total allocated virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocUsed — The total amount of memory, in kilobytes, of used virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocChunk — The largest contiguous block of memory, in kilobytes, of available virtual address space.&lt;br /&gt;
&lt;br /&gt;
HugePages_Total — The total number of hugepages for the system. The number is derived by dividing Hugepagesize by the megabytes set aside for hugepages specified in /proc/sys/vm/hugetlb_pool. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
HugePages_Free — The total number of hugepages available for the system. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
Hugepagesize — The size for each hugepages unit in kilobytes. By default, the value is 4096 KB on uniprocessor kernels for 32 bit architectures. For SMP, hugemem kernels, and AMD64, the default is 2048 KB. For Itanium architectures, the default is 262144 KB. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
=ps=&lt;br /&gt;
==Process list in tree view.==&lt;br /&gt;
 ps axfww&lt;br /&gt;
==Process sort by cpu usage.==&lt;br /&gt;
 ps auxwww --sort -%cpu | head&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 ps -p 1 -o etime=&lt;br /&gt;
==Process list sorted after memory usage.==&lt;br /&gt;
 ps aux --sort=size&lt;br /&gt;
==Process show memory usage... sort...==&lt;br /&gt;
 ps axo rss,%cpu,pid,euser,cmd | sort -nr | head -n 10 | less -ISRM&lt;br /&gt;
==Process sort by mem usage.==&lt;br /&gt;
 ps auxwww --sort -rss | head&lt;br /&gt;
==Processes sorted by time running.==&lt;br /&gt;
 ps aux --sort -time&lt;br /&gt;
==Processes sorted by time started==&lt;br /&gt;
 ps -auxwww --sort=start_time&lt;br /&gt;
==ps showing threads.==&lt;br /&gt;
 ps -efL&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 echo -n $(( ($(date +%s) - $( stat -c%X /proc/$(pgrep -f [a]ctivemq.jar))) / 3600 ))&lt;br /&gt;
==ps long usernames==&lt;br /&gt;
 ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm&lt;br /&gt;
==ps including nice==&lt;br /&gt;
 ps -eo pid,user,ni,comm&lt;br /&gt;
&lt;br /&gt;
=pstack=&lt;br /&gt;
 print a stack trace of a running process&lt;br /&gt;
&lt;br /&gt;
=pulseaudio=&lt;br /&gt;
# Is pulseaudio running?&lt;br /&gt;
 ps uxawww| grep -E pulseaudi[o]&lt;br /&gt;
# stop pulseaudio&lt;br /&gt;
 pulseaudio -k&lt;br /&gt;
# start pulseaudio as found by ps | grep pulseaudio&lt;br /&gt;
 /usr/bin/pulseaudio --start --log-target=syslog&lt;br /&gt;
&lt;br /&gt;
=putty=&lt;br /&gt;
Run putty from cli with login&lt;br /&gt;
 &amp;quot;C:\Program Files\PuTTY\putty.exe&amp;quot; -l &amp;lt;username&amp;gt; -pw &amp;lt;password&amp;gt; &amp;lt;host_url&amp;gt;&lt;br /&gt;
Always setup stay alive.&lt;br /&gt;
 connection -&amp;gt; keepalive -&amp;gt; 60&lt;br /&gt;
set up tunnel&lt;br /&gt;
 putty -load blt.homeip.net -l bjorklun -pw password -L 19242:192.168.0.42:3389 blt.homeip.net&lt;br /&gt;
putty without taking tty.&lt;br /&gt;
 plink -load www.halfface.se -l user_name -pw password -R *:3389:localhost:3389 -2 -4 -N&lt;br /&gt;
reverse tunnel. Connect remote host 3400 to machine running putty localhost:3389.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; &amp;quot;Source Port&amp;quot; = 3400 -&amp;gt; destination = localhost:3389 -&amp;gt; remote.&lt;br /&gt;
socks server.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; Source port: 3128 , Destination: localhost:3128, Dynamic:true -&amp;gt; add -&amp;gt; apply.&lt;br /&gt;
Change font size&lt;br /&gt;
 echo Windows Registry Editor Version 5.00 &amp;gt; putty.reg &amp;amp;&amp;amp; echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings] &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;Font&amp;quot;=&amp;quot;Courier New&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;FontHeight&amp;quot;=&amp;quot;12&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; reg import putty.reg&lt;br /&gt;
&lt;br /&gt;
=pv=&lt;br /&gt;
throughput in pipe. speed.&lt;br /&gt;
 pv&lt;br /&gt;
 pv -cN&lt;br /&gt;
make a dd and limit througput to 20MB/s.&lt;br /&gt;
 dd if=${HOST}.qcow2 bs=4k conv=noerror,sync | pv -L 20M | dd of=${HOST}.dd_noerror.qcow2&lt;br /&gt;
=pwgen=&lt;br /&gt;
Create less complicated password.&lt;br /&gt;
 pwgen -sy 15 -r \&#039;\&amp;quot;\^\(\)\`\~\;\[\]\{\}\,&lt;br /&gt;
&lt;br /&gt;
=qalculate=&lt;br /&gt;
 qalc&lt;br /&gt;
 &amp;gt; 40 euro to SEK&lt;br /&gt;
 40 * euro = approx. SEK 417.36&lt;br /&gt;
=readpst=&lt;br /&gt;
output pst file in separate files in out directory&lt;br /&gt;
 readpst -S -o out/ outlook.pst&lt;br /&gt;
=reboot=&lt;br /&gt;
 Hard reboot mean that shutdown scripts will not run and machine reboot immediately without syncing hard disk drives.&lt;br /&gt;
 This commands enable sysrq and after this call fast reboot. &lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq&lt;br /&gt;
 echo b &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Force shutdown&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq &lt;br /&gt;
 echo o &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Kernel panic&lt;br /&gt;
 echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
==List last reboots==&lt;br /&gt;
 last --time-format iso reboot&lt;br /&gt;
&lt;br /&gt;
=rename=&lt;br /&gt;
Recursive lowercase to uppercase&lt;br /&gt;
 for i in $(find * -depth); do (mv $i $(echo $i | sed &#039;s%[^/][^/]*$%%&#039;)$(echo $i | sed &#039;s!.*/!!&#039; | tr [:upper:] [:lower:])); done&lt;br /&gt;
Upper to lower case&lt;br /&gt;
 for f in `find .`; do mv -v &amp;quot;$f&amp;quot; &amp;quot;`echo $f | tr &#039;[A-Z]&#039; &#039;[a-z]&#039;`&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
=reposync=&lt;br /&gt;
 reposync -n -c /etc/yum/yum.conf -p /repos/centos6 -d -r base -r updates -r extras -r centosplus -r contrib&lt;br /&gt;
 createrepo -g /repos/centos6/base/repodata/comps.xml /repos/centos6/base&lt;br /&gt;
 createrepo /repos/centos6/updates&lt;br /&gt;
 createrepo /repos/centos6/extras&lt;br /&gt;
 createrepo /repos/centos6/centosplus&lt;br /&gt;
halfface -&amp;gt; sync repo. -d delete what is not on remote, -n only newest version, -p store here, -r which repos to sync&lt;br /&gt;
 reposync -d -n -p /install/system/linux/fedora/24/repo/ -r updates -r fedora -r rpmfusion-free -r rpmfusion-free-updates -r rpmfusion-nonfree -r rpmfusion-nonfree-updates&lt;br /&gt;
halfface -&amp;gt; create repository&lt;br /&gt;
 REPODIR=/install/system/linux/fedora/24/repo ; for REPO in $(cd $REPODIR; ls) ; do echo $REPO ; createrepo_c ${REPODIR}/${REPO} ;done&lt;br /&gt;
=reptyr=&lt;br /&gt;
 Reparent a running program to a new terminal. (move tty)&lt;br /&gt;
&lt;br /&gt;
=rfcomm=&lt;br /&gt;
list usb devices&lt;br /&gt;
 hcitool scan&lt;br /&gt;
What properties does the device have.&lt;br /&gt;
 sdptool browse 00:0D:B5:30:07:79&lt;br /&gt;
connect bluetooth device virtual servial.&lt;br /&gt;
 rfcomm bind /dev/rfcomm0 00:0D:B5:30:07:79 1&lt;br /&gt;
=rkhunter=&lt;br /&gt;
Run rkhunter full scan no keypresses needed&lt;br /&gt;
 sudo rkhunter --checkall --skip-keypress -x&lt;br /&gt;
Update database&lt;br /&gt;
 sudo rkhunter --propupd&lt;br /&gt;
Search for what triggered alarm.&lt;br /&gt;
 sudo grep -E &#039;Warning|Suspicious&#039; /var/log/rkhunter/rkhunter.log&lt;br /&gt;
&lt;br /&gt;
=dnf update rkhunter. Update dnf after rkhunter scan=&lt;br /&gt;
 tail -1 /etc/sysconfig/rkhunter &lt;br /&gt;
 sleep 300 &amp;amp;&amp;amp; ( dnf -e 0 -y update ; rkhunter --propupd ) &amp;gt;&amp;gt; /tmp/dnf_update_rkhunter--propupd.$(date +%F_%H-%M-%S).log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=rotatelogs=&lt;br /&gt;
Write standard output to logfile. Rotate at 100M. Keep 3 files.&lt;br /&gt;
 your_script.sh | rotatelogs -n3 /var/log/your.log 100M&lt;br /&gt;
=route=&lt;br /&gt;
The route to a network is behind 10.111.222.7&lt;br /&gt;
 route add -net 10.111.223.0 netmask 255.255.255.0 gw 10.111.222.7&lt;br /&gt;
Add default route&lt;br /&gt;
 route add default gw 192.168.122.1&lt;br /&gt;
Permanent route under redhat&lt;br /&gt;
 /etc/sysconfig/static-routes&lt;br /&gt;
 any net 198.18.129.0/24 gw 10.240.175.12&lt;br /&gt;
/etc/sysconfig/network-scripts/route-eth1&lt;br /&gt;
 1.2.3.4/23 via 1.2.3.1&lt;br /&gt;
Drop packages to ip.&lt;br /&gt;
 route add -host 192.168.1.51 reject&lt;br /&gt;
Remove reject rule.&lt;br /&gt;
 route del -host 192.168.1.51 reject&lt;br /&gt;
Remove route&lt;br /&gt;
 route -n&lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0&lt;br /&gt;
 10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0&lt;br /&gt;
 0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 eth0&lt;br /&gt;
 route del -net 10.0.0.0    gw    0.0.0.0   netmask      255.0.0.0 dev eth0&lt;br /&gt;
&lt;br /&gt;
=rpm=&lt;br /&gt;
==install src.rpm==&lt;br /&gt;
 rpmbuild --rebuild alien-6.51-1.src.rpm&lt;br /&gt;
 rpm -i /usr/src/redhat/RPMS/x86_64/alien-6.51-1.rpm&lt;br /&gt;
==List contents of rpm.==&lt;br /&gt;
 rpm -qlp myfile.rpm&lt;br /&gt;
==Extract single file from rpm.==&lt;br /&gt;
 rpm2cpio package.rpm | cpio -idv ./search_path_to_file_from_listing_above.txt&lt;br /&gt;
==List information about non installed rpm.==&lt;br /&gt;
 rpm -qip foo.rpm&lt;br /&gt;
==Extract contents of rpm.==&lt;br /&gt;
 rpm2cpio *.rpm | cpio -i --make-directories&lt;br /&gt;
==Which version of rpm is installed.==&lt;br /&gt;
/etc/rpm/macros ~/.rpmmacros&lt;br /&gt;
 %_query_all_fmt         %%{name}-%%{version}-%%{release}.%%{arch}&lt;br /&gt;
==list architecture==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{n}-%{v}-%{r}.%{arch}\n&amp;quot;&lt;br /&gt;
==List only name of installed rpms.==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{NAME}\n&amp;quot;&lt;br /&gt;
==Extract rpms in subdirectories.==&lt;br /&gt;
 for RPM in $(ls *|sed &#039;s_\.rpm$__g&#039;);do echo $RPM; mkdir $RPM; rpm2cpio $RPM.rpm | (cd $RPM &amp;amp;&amp;amp; cpio -i --make-directories);done&lt;br /&gt;
==Verify content of rpm==&lt;br /&gt;
 rpm -V package&lt;br /&gt;
 # What does those cryptic letters mean from rpm -V:&lt;br /&gt;
 S file Size differs&lt;br /&gt;
 M Mode differs (includes permissions and file type)&lt;br /&gt;
 5 MD5 sum differs&lt;br /&gt;
 D Device major/minor number mismatch&lt;br /&gt;
 L readlink(2) path mismatch&lt;br /&gt;
 U User ownership differs&lt;br /&gt;
 G Group ownership differs&lt;br /&gt;
 T mTime differs&lt;br /&gt;
==Reinstall rpm==&lt;br /&gt;
 rpm -iv --replacepkgs package.rpm&lt;br /&gt;
==Dependencies of rpm==&lt;br /&gt;
 rpm -qpR ${rpm}&lt;br /&gt;
 rpm -qR ${packagename}&lt;br /&gt;
 rpm -qp mypackage.rpm --provides&lt;br /&gt;
 rpm -qp mypackage.rpm --requires&lt;br /&gt;
==Rebuild rpm database.==&lt;br /&gt;
 \rm /var/lib/rpm/__db*&lt;br /&gt;
 rpm --rebuilddb&lt;br /&gt;
&lt;br /&gt;
==Update minor release.==&lt;br /&gt;
 yum --releasever=6.11 update sl-release&lt;br /&gt;
 yum clean all&lt;br /&gt;
 yum update&lt;br /&gt;
==Downgrade rpm.==&lt;br /&gt;
 rpm -Uvh --oldpackage /tmp/app.x86_64.rpm&lt;br /&gt;
==Which rpm:s are required by rpm. Can be used to install rpm on machine without access to yum repo.==&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==CVE:s fixed by rpm==&lt;br /&gt;
 rpm -qi --changelog openssh-server | grep -i CVE&lt;br /&gt;
&lt;br /&gt;
=rsync=&lt;br /&gt;
Syncronize folders. Delete non existing files on remote host. Compress.&lt;br /&gt;
 rsync --delete -az -e ssh bjorklun@semco.homeip.net:/install/program/windows/&lt;br /&gt;
Syncronize files over ssh on port 2222. Show progress. Syncronize even empty directories.&lt;br /&gt;
 rsync -Pae &#039;ssh -p 2222&#039; localhost:/opt/techops/bin/ /opt/techops/bin/&lt;br /&gt;
rsync with total progress bar.&lt;br /&gt;
 rsync -a --info=progress2 /dir1/ /dir2/&lt;br /&gt;
Run rsync in both ends but transfer data with normal user.&lt;br /&gt;
 sudo rsync -aP /tmp/andreas/ andreasbj@localhost:/tmp/andreas2/ --rsync-path=&#039;sudo rsync&#039;&lt;br /&gt;
rsync with limit of 8 MB/s.&lt;br /&gt;
 rsync -aP --bwlimit=8000 /source/ /destination/&lt;br /&gt;
rsync excluding directory&lt;br /&gt;
 rsync -r --exclude=.svn /source/ /destination/&lt;br /&gt;
rsync including selinux information. Preserve hard links.&lt;br /&gt;
 rsync -aPXH /source /destination&lt;br /&gt;
rsync don&#039;t keep links. Copy files referenced.&lt;br /&gt;
 rsync -rLP /source/ /destination&lt;br /&gt;
Record which files to sync.&lt;br /&gt;
 rsync -r -ptgo --delete -P --size-only -n www.halfface.se:/mp3/ /mp3/ -n | tee /temp/mp3_$(date +%Y-%m-%d)_diff.txt&lt;br /&gt;
Rsync new files.&lt;br /&gt;
 rsync -RDa0P --files-from=&amp;lt;(find /sourcedir -mtime -7 -print0) . /targetdir/&lt;br /&gt;
rsync ignore existing files.&lt;br /&gt;
 rsync -P --ignore-existing /source/* /destination/ -n&lt;br /&gt;
rsync excluding directories matching pattern.&lt;br /&gt;
 SOURCE=/apps/IP400 ; DESTINATION=/apps/IP400.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; rsync -aP &amp;quot;${SOURCE}&amp;quot;/ &amp;quot;${DESTINATION}&amp;quot;/ --exclude-from=&amp;lt;(cd &amp;quot;${SOURCE}&amp;quot; ; find -type d -name log | sed -e &#039;s|./||&#039;)&lt;br /&gt;
Sync files partially.&lt;br /&gt;
 rsync -avz --partial --inplace&lt;br /&gt;
which files differ between hosts.&lt;br /&gt;
 rsync -nrlptDqv --delete --exclude napsjb/server/naps/tmp/ /opt/ongame/ 10.6.21.11:/opt/ongame | less&lt;br /&gt;
 -n dry run.&lt;br /&gt;
 -r recursive&lt;br /&gt;
 -l copy symlinks av symlinks.&lt;br /&gt;
 -p preserve permission&lt;br /&gt;
 -t preserve tims.&lt;br /&gt;
 -D --device --special. Keep special files.&lt;br /&gt;
 -q quiet&lt;br /&gt;
 -v verbose&lt;br /&gt;
&lt;br /&gt;
=sar=&lt;br /&gt;
Old sar information.&lt;br /&gt;
 sar -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
load average.&lt;br /&gt;
 sar -q -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
All information.&lt;br /&gt;
 sar -A -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
View network statistics.&lt;br /&gt;
 LANG=c sar -n DEV | grep eth0&lt;br /&gt;
realtime summary.&lt;br /&gt;
 sar 4 5&lt;br /&gt;
=script=&lt;br /&gt;
Run command under shell even if it does not exist.&lt;br /&gt;
 script -q -f -c &amp;quot;commands or scripts to run&amp;quot;&lt;br /&gt;
Run session under screen in script.&lt;br /&gt;
 screen -dm bash -c &#039;script --timing=script1.tm script1.out&#039;&lt;br /&gt;
Replay script recorded file&lt;br /&gt;
 scriptreplay --timing script1.tm --typescript script1.out&lt;br /&gt;
=scp=&lt;br /&gt;
Limit to 1.2MB/s.&lt;br /&gt;
 scp -l 10240 Rocky-8.5-x86_64-minimal.iso halfface.se:/temp/&lt;br /&gt;
&lt;br /&gt;
=search&amp;amp;replace=&lt;br /&gt;
perl&lt;br /&gt;
 grep -rsl &#039;10.6.4.102&#039; * | xargs perl -pi -e &#039;s/10.6.4.102/10.6.4.103/&#039;&lt;br /&gt;
sed&lt;br /&gt;
 find . -type f -exec sed -i &#039;s/string1/string2/g&#039; {} \;&lt;br /&gt;
Grep for regexp starting with CN= and stop at first occurrence of ,. not greedy&lt;br /&gt;
 grep -oE &#039;CN=[^,]*,&#039;&lt;br /&gt;
=set=&lt;br /&gt;
Look at current settings. Expanded or simple view.&lt;br /&gt;
 set -o&lt;br /&gt;
 echo $-&lt;br /&gt;
&lt;br /&gt;
=setfacl=&lt;br /&gt;
Add rwx permission for user_name recursivly from /directory&lt;br /&gt;
 setfacl -Rm u:user_name:rwx /directory&lt;br /&gt;
Remove acl:s&lt;br /&gt;
 setfacl -bn foobar&lt;br /&gt;
=setpriv=&lt;br /&gt;
Dump your privileges.&lt;br /&gt;
 setpriv -d&lt;br /&gt;
&lt;br /&gt;
=shred=&lt;br /&gt;
Recurse remove dir&lt;br /&gt;
 find /tmp/secret -type f -exec shred {} \;&lt;br /&gt;
&lt;br /&gt;
=shuf=&lt;br /&gt;
Pick random line in file.&lt;br /&gt;
 shuf -n1 /file&lt;br /&gt;
Get random number&lt;br /&gt;
 shuf -i 10-120 -n1&lt;br /&gt;
&lt;br /&gt;
=sms=&lt;br /&gt;
Mail to sms gateway.&lt;br /&gt;
 tele2&lt;br /&gt;
 07XXXXXXXX@sms.tele2.se&lt;br /&gt;
&lt;br /&gt;
 Comviq&lt;br /&gt;
 467xxxxxxxx@sms.comviq.se&lt;br /&gt;
&lt;br /&gt;
 Europolitan&lt;br /&gt;
 4670xxxxxxx@europolitan.se&lt;br /&gt;
&lt;br /&gt;
=snmptrap=&lt;br /&gt;
 # send more than one string.&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &amp;quot;&amp;quot; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -c xxxxxxx localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 .1.3.6.1.4.1.5089.2.0.999 s &amp;quot;Hej Hej&amp;quot;&lt;br /&gt;
Simple trap&lt;br /&gt;
 snmptrap  -v 1 -c public  localhost   &#039;&#039;  0 0  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=snmptrapd=&lt;br /&gt;
 # Enable logfile. /etc/sysconfig/snmptrapd&lt;br /&gt;
 OPTIONS=&amp;quot;-Lf /var/log/snmptrapd.log&amp;quot;&lt;br /&gt;
 # Disable authorization and put in logfile. /etc/snmp/snmptrapd.conf&lt;br /&gt;
 disableAuthorization yes&lt;br /&gt;
 authCommunity log public&lt;br /&gt;
&lt;br /&gt;
=snmpwalk=&lt;br /&gt;
Get information from an oid.&lt;br /&gt;
 snmpwalk -v 1 -c public snmp.device.net .1.3.6.1.4.1.2021.84&lt;br /&gt;
Do tcpdump while running.&lt;br /&gt;
 tcpdump -i eth0 -n -s0 -v host snmp.device.net and port snmp&lt;br /&gt;
=socat=&lt;br /&gt;
Create a tunnel between localhost 2222 to remote host 2222&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.111.222.2:2222&lt;br /&gt;
 socat TCP-LISTEN:22,fork,bind=127.0.0.1 TCP:192.168.0.15:5900&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.8.110.20:22,bind=172.19.14.251&lt;br /&gt;
Listen on 10.120.50.12:9090 and forward to 127.0.0.1:9090&lt;br /&gt;
 socat TCP-LISTEN:9090,bind=10.120.50.12,fork TCP:127.0.0.1:9090&lt;br /&gt;
Create tunnel via systemctl&lt;br /&gt;
Create file similar to this. /etc/systemd/system/socat_win.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/socat TCP-LISTEN:3389,fork TCP:192.168.122.204:3389&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
Enable new file.&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
Start new daemon&lt;br /&gt;
 systemctl start socat_win&lt;br /&gt;
&lt;br /&gt;
=sort=&lt;br /&gt;
Sort ip address.&lt;br /&gt;
 sort -t. +0n -1 +1n -2 +2n -3 +3n -4&lt;br /&gt;
 sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n&lt;br /&gt;
sort on fift column&lt;br /&gt;
 sort -t, -k5n,5 /tmp/gfp&lt;br /&gt;
Get a list of configured ip for a set of hosts. Sort on domain then hostname&lt;br /&gt;
 pdsh ^/host_list &#039;ip route get 8.8.8.8 | awk &amp;quot;NR==1 {print \$NF}&amp;quot;&#039; | sort -t . -k 2 -k 1&lt;br /&gt;
Sort on first column only.&lt;br /&gt;
 sort -n -k 1,1&lt;br /&gt;
&lt;br /&gt;
=spawn=&lt;br /&gt;
Encode wav to ogg in parallel.&lt;br /&gt;
  # ls -1 *.wav | while read ; do echo &amp;quot;oggenc -q6 \&amp;quot;$REPLY\&amp;quot;&amp;quot; ; done | spawn -j4&lt;br /&gt;
=split=&lt;br /&gt;
Devide file into parts containing 100 lines.&lt;br /&gt;
 split -l 100 create_updated_2013-10-29_sort_created_ci_id_name.txt --numeric-suffixes --suffix-length=3 Cleanup.&lt;br /&gt;
Devide file in 10 parts. Suffix length 4.&lt;br /&gt;
 split -n 10 -a 3 bigfile.tar.gz&lt;br /&gt;
&lt;br /&gt;
=sqlite=&lt;br /&gt;
Is db broken?&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;PRAGMA integrity_check&amp;quot;&lt;br /&gt;
recover db&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;.dump&amp;quot; | sqlite3 new.db&lt;br /&gt;
 sqlite3 stellar.db .recover | sqlite3 stellar_2.db&lt;br /&gt;
Show databases&lt;br /&gt;
 sqlite&amp;gt; .databases&lt;br /&gt;
 main: /var/lib/tuptime/tuptime.db&lt;br /&gt;
List tables&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
 tuptime&lt;br /&gt;
Run sql command&lt;br /&gt;
 sqlite&amp;gt; select * from tuptime;&lt;br /&gt;
 1544984636|2387765.42|-1|0|0.0|Linux-4.19.8-200.fc28.x86_64-x86_64-with-fedora-28-Twenty_Eight&lt;br /&gt;
exit|quit&lt;br /&gt;
 .quit&lt;br /&gt;
==vacuum==&lt;br /&gt;
 /usr/local/openvpn_as/bin/sqlite3 /usr/local/openvpn_as/etc/db/log.db &amp;quot;VACUUM&amp;quot;&lt;br /&gt;
==count tables==&lt;br /&gt;
 DB=files.db ; for TABLE in $( sqlite3 $DB &amp;quot;.tables&amp;quot;) ; do echo -e $TABLE\\t$(sqlite3 $DB &amp;quot;SELECT COUNT(1) FROM $TABLE;&amp;quot;) ; done | column_tab&lt;br /&gt;
&lt;br /&gt;
=ss=&lt;br /&gt;
List all connections.&lt;br /&gt;
 ss -an&lt;br /&gt;
List processes and which port they listen too. Grep process.&lt;br /&gt;
 ss -tulpn | grep 5405&lt;br /&gt;
&lt;br /&gt;
=ssh=&lt;br /&gt;
==ssh-keygen==&lt;br /&gt;
Create key pair without input.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KEYNAME=cluster-info-reporting ; KEYNAME_PATH=/tmp/${KEYNAME}-$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; ssh-keygen -q -t ed25519 -N &#039;&#039; -C $KEYNAME &amp;lt;&amp;lt;&amp;lt; $&#039;\ny&#039; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 -f &amp;quot;${KEYNAME_PATH}&amp;quot; ; echo Keys: $(ls &amp;quot;${KEYNAME_PATH}&amp;quot;*)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==which private ssh keys are password protected==&lt;br /&gt;
 ls ${HOME}/.ssh/* | grep -Ev &#039;pub$|authorized_keys|config|known_hosts|ssh-agent.sock&#039; | while read i ; do SSH_PASSWORD=$(ssh-keygen -y -P &amp;quot;&amp;quot; -f &amp;quot;$i&amp;quot; 2&amp;gt;&amp;amp;1 | grep &amp;quot;incorrect passphrase supplied to decrypt private key&amp;quot;) ; if [ -z &amp;quot;${SSH_PASSWORD}&amp;quot; ] ; then echo No password encrypted ssh private key: $i ; fi ; done&lt;br /&gt;
&lt;br /&gt;
==Remove pass phrase==&lt;br /&gt;
 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&lt;br /&gt;
&lt;br /&gt;
==view fingerprint==&lt;br /&gt;
 ssh-keygen -l -E md5 -f /tmp/ssh-keygen.pub&lt;br /&gt;
&lt;br /&gt;
==change the name of private key==&lt;br /&gt;
 ssh-keygen -c -C &amp;quot;first.lastname@example.com&amp;quot; -f ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
==Copy public key to authorized_keys==&lt;br /&gt;
 ssh-copy-id user@host&lt;br /&gt;
List supported ciphers&lt;br /&gt;
 ssh -Q cipher&lt;br /&gt;
List supported MACs&lt;br /&gt;
 ssh -Q mac&lt;br /&gt;
List supported public key type&lt;br /&gt;
 ssh -Q key&lt;br /&gt;
List supported key exchange algorithms&lt;br /&gt;
 ssh -Q kex&lt;br /&gt;
List supported ciphers, macs and kexalgorithms.&lt;br /&gt;
 sshd -T | grep &amp;quot;\(ciphers\|macs\|kexalgorithms\)&amp;quot;&lt;br /&gt;
Run command each time you login via ssh.&lt;br /&gt;
 $HOME/.ssh/rc&lt;br /&gt;
&lt;br /&gt;
==Tunnel==&lt;br /&gt;
 sudo ssh -nNTx -R 2222:localhost:22 andreasbj@www.halfface.se&lt;br /&gt;
Reverse tunnel.&lt;br /&gt;
 ssh -D \*:666 www.halfface.se&lt;br /&gt;
 ssh -N ipmon10.ny1.ip-soft.net -L43389:ippc01.ongame.ip-soft.net:3389&lt;br /&gt;
 -n	Dont take console. Good for background.&lt;br /&gt;
 -N	Do not execute a remote command&lt;br /&gt;
 -T	Disable pseudo-tty allocation.&lt;br /&gt;
 -x	Disables X11 forwarding.&lt;br /&gt;
 -R port:host:hostport&lt;br /&gt;
 sudo ssh -N -L 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 443:satellite.ongame.com:443 root@10.0.254.30 # Tunnel 443 over ssh from remote host via local host.&lt;br /&gt;
Open tunnel on remote host. Start remote proxy server forwarding to internal network.&lt;br /&gt;
 ssh remotehost -R remoteport:localhost:localport &amp;quot;ssh -D 9050 localhost:remoteport&amp;quot;&lt;br /&gt;
Multiple reverse tunnel controled by autossh. (-M)Control port,(-f)background, (-N) no remote command, reverse tunnel (-R)&lt;br /&gt;
 autossh -M 41000 -f -N -R 0.0.0.0:8001:192.168.1.10:80 -R 0.0.0.0:8002:192.168.1.20:80 user@remotehost&lt;br /&gt;
&lt;br /&gt;
==reverse tunnel bound to all interfaces==&lt;br /&gt;
The config has to allow to bind to * interface. /etc/ssh/sshd_config  GatewayPorts yes&lt;br /&gt;
 sudo ssh -i ${HOME}/.ssh/id_dsa -N -R \*:2222:localhost:22 ${USER}@www.halfface.se&lt;br /&gt;
&lt;br /&gt;
==Create an ssh tunnel link==&lt;br /&gt;
 https://help.ubuntu.com/community/SSH_VPN&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 vim /etc/ssh/sshd_config  PermitTunnel=yes&lt;br /&gt;
 sudo ssh -NTCf -w 0:0 1.2.3.4&lt;br /&gt;
 sudo ssh -v -w any:any www.halfface.se&lt;br /&gt;
 ###&lt;br /&gt;
 local:&lt;br /&gt;
 ip link set tun0 up&lt;br /&gt;
 ip addr add 169.254.0.1/32 peer 169.254.0.2 dev tun0&lt;br /&gt;
 ip route add 192.168.0/24 via 169.254.0.2&lt;br /&gt;
 remote:&lt;br /&gt;
 ip link set tun1 up&lt;br /&gt;
 ip addr add 169.254.0.2/32 peer 169.254.0.1 dev tun1&lt;br /&gt;
 arp -sD 169.254.0.2 eth1 pub&lt;br /&gt;
 ### Change default gateway. In this case, 192.168.0.1 is Machine B&#039;s current default gateway; it is the gateway on Network B that provides internet connectivity&lt;br /&gt;
 ip route add 1.2.3.4/32 via 192.168.0.1&lt;br /&gt;
 ip route replace default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
==Limit ssh access with pam_access==&lt;br /&gt;
 /etc/security/access.conf&lt;br /&gt;
&lt;br /&gt;
==Proxycommand without nc==&lt;br /&gt;
 Host server1&lt;br /&gt;
  Hostname 10.0.1.1&lt;br /&gt;
  ProxyCommand ssh -q -x jumphost -W %h:22&lt;br /&gt;
&lt;br /&gt;
==ssh over ipv6 via 2 network interface.==&lt;br /&gt;
 ssh -6 fe80::1ec1:deff:fecb:6ce%2&lt;br /&gt;
&lt;br /&gt;
==ssh options==&lt;br /&gt;
None interactive. Dont ask for password.&lt;br /&gt;
 -o BatchMode=yes&lt;br /&gt;
Accept all keys.&lt;br /&gt;
 -o StrictHostKeyChecking=no&lt;br /&gt;
&lt;br /&gt;
==ssh via proxy/squid==&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc --proxy proxy.inter.net:3128 --proxy-type http %h %p&#039; host.inter.net hostname&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc -X connect -x proxy.inter.net:3128 %h %p&#039; host.inter.net hostname&lt;br /&gt;
&lt;br /&gt;
==brow.sh==&lt;br /&gt;
browser in terminal window.&lt;br /&gt;
 ssh brow.sh&lt;br /&gt;
&lt;br /&gt;
==jail==&lt;br /&gt;
/etc/sshd/sshd_config &lt;br /&gt;
 Match group mychroot &lt;br /&gt;
 ChrootDirectory /jail/ &lt;br /&gt;
 X11Forwarding no &lt;br /&gt;
 AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
==sshd debug==&lt;br /&gt;
Start deamon once in debug mode and put output to your console.&lt;br /&gt;
 /etc/sysconfig/sshd&lt;br /&gt;
 OPTIONS=&amp;quot;-ddd&amp;quot;&lt;br /&gt;
Kill of sshd which is listening for new connections. Start sshd with the following command. Debug level can bee changed.&lt;br /&gt;
 /usr/sbin/sshd -De -o LogLevel=DEBUG3&lt;br /&gt;
&lt;br /&gt;
==ssh multiple jumps one cli==&lt;br /&gt;
Jump through host1.net to get to host2.net&lt;br /&gt;
 ssh -t host1.net ssh -t host2&lt;br /&gt;
Jump through host1.net to host2.net and bring port 8080 with you.&lt;br /&gt;
 ssh -t host1.net -L 8080:localhost:8080 ssh -t host2.net -L 8080:localhost:8080&lt;br /&gt;
&lt;br /&gt;
==ssh force password login==&lt;br /&gt;
 ssh -o StrictHostKeyChecking=no -o ControlPath=none -o ControlMaster=no -o PubkeyAuthentication=no user@host&lt;br /&gt;
&lt;br /&gt;
==ssh via jumphost==&lt;br /&gt;
 ssh -J core@1.1.1.1 core@2.2.2.2&lt;br /&gt;
&lt;br /&gt;
==socks==&lt;br /&gt;
 # Setup socks server exiting on remote host&lt;br /&gt;
 ssh -D &#039;*:3128&#039; halfface.se&lt;br /&gt;
 # Use socks setup above.&lt;br /&gt;
 curl --socks5 localhost:3128 https://ifconfig.me&lt;br /&gt;
&lt;br /&gt;
==Create public key from private==&lt;br /&gt;
 ssh-keygen -y -f &amp;lt;private_key_with_return_at_end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshfs mount filesystem over ssh=&lt;br /&gt;
 sshfs name@server:/path/to/folder /path/to/mount/point&lt;br /&gt;
=sshpass=&lt;br /&gt;
ssh with password provided on the command line.&lt;br /&gt;
 sshpass -p P@ssW0rd ssh -t -o ControlPath=none -o PreferredAuthentications=password -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Error user@localhost hostname&lt;br /&gt;
=specify key=&lt;br /&gt;
 ssh -o &amp;quot;IdentitiesOnly=yes&amp;quot; -i &amp;lt;private key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshuttle=&lt;br /&gt;
create a network route over ssh.&lt;br /&gt;
 sshuttle -D -r user@remotehost:2222 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
=stat=&lt;br /&gt;
View file permissions only.&lt;br /&gt;
 stat -c &amp;quot;%a %n&amp;quot; /usr/bin/bash&lt;br /&gt;
 Access - the last time the file was read&lt;br /&gt;
 Modify - the last time the file was modified (content has been modified)&lt;br /&gt;
 Change - the last time meta data of the file was changed (e.g. permissions)&lt;br /&gt;
Copy permissions from one location to another.&lt;br /&gt;
 rpm -qlp package.rpm | while read FILE ; do echo chmod $(stat -c &amp;quot;%a&amp;quot; $FILE) \&amp;quot;$FILE\&amp;quot;;done &amp;gt; /tmp/copy_permissions.sh&lt;br /&gt;
&lt;br /&gt;
=strace=&lt;br /&gt;
==File open activity.==&lt;br /&gt;
 strace -e open -f ls -la /temp/&lt;br /&gt;
==File open activity under directory.==&lt;br /&gt;
  strace -e open -P /temp/ -f ls -la /temp/&lt;br /&gt;
==More file activity.==&lt;br /&gt;
 strace -e trace=file -p 1234&lt;br /&gt;
 strace -e trace=desc -p 1234&lt;br /&gt;
==Trace network activity.==&lt;br /&gt;
 sudo strace -f -e trace=network -p 1476&lt;br /&gt;
 # 1024 long strings.&lt;br /&gt;
 sudo strace -s 1024 -f -e trace=network -p 1476&lt;br /&gt;
 # strace follow process with matching regex.&lt;br /&gt;
 strace -f -e poll,select,connect,recvfrom,sendto -p $(pgrep -f login-sync.xml)&lt;br /&gt;
 # trace nework activity&lt;br /&gt;
 strace -f -e trace=network -s 1000000 nc localhost 3333&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
 sudo strace -f -e trace=memory -p $(pgrep -f firefox)&lt;br /&gt;
==What is taking time==&lt;br /&gt;
 [root@util01 abjorklund]# strace -f -c -p 9657&lt;br /&gt;
  % time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
  88.11   11.614155        1644      7065      1565 futex&lt;br /&gt;
   9.94    1.310794       16183        81        73 restart_syscall&lt;br /&gt;
   1.86    0.245018          86      2850           recvfrom&lt;br /&gt;
   0.05    0.006784          30       228           poll&lt;br /&gt;
   0.03    0.004006           2      1838           sendto&lt;br /&gt;
   0.00    0.000271           1       253           sched_yield&lt;br /&gt;
   0.00    0.000134          12        11           mmap&lt;br /&gt;
   0.00    0.000107           0      5176           ioctl&lt;br /&gt;
   0.00    0.000026           0       148       148 stat&lt;br /&gt;
   0.00    0.000000           0         1           read&lt;br /&gt;
   0.00    0.000000           0       254           write&lt;br /&gt;
   0.00    0.000000           0        44           mprotect&lt;br /&gt;
   0.00    0.000000           0         1           rt_sigreturn&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
 100.00   13.181295                 17950      1786 total&lt;br /&gt;
&lt;br /&gt;
==strace multiple processes==&lt;br /&gt;
 export PIDSEARCH=3366006 ; sudo strace -s 1024 -f $(echo $PIDSEARCH $(pgrep -P $PIDSEARCH) | sed &#039;s/\([0-9]*\)/-p \1/g&#039; )&lt;br /&gt;
&lt;br /&gt;
==strace to hex output. Convert to utf8.==&lt;br /&gt;
 strace -xx -f -o/tmp/strace -s0 echo bajskorv&lt;br /&gt;
 cat /tmp/strace | while read -r line; do printf &amp;quot;%b\n&amp;quot; &amp;quot;$line&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=stty=&lt;br /&gt;
List settings&lt;br /&gt;
 stty -a&lt;br /&gt;
 speed 38400 baud; rows 50; columns 200; line = 0;&lt;br /&gt;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;&lt;br /&gt;
 -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts&lt;br /&gt;
 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8&lt;br /&gt;
 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc&lt;br /&gt;
Set terminal properties.&lt;br /&gt;
 stty rows 50 cols 200&lt;br /&gt;
&lt;br /&gt;
=sudo=&lt;br /&gt;
Enable sudo logging&lt;br /&gt;
 sed -i &amp;quot;$(( $(grep -n ^Defaults /etc/sudoers | tail -1 | awk -F: &#039;{print $1}&#039;) + 1 ))iDefaults    log_output\nDefaults    log_input&amp;quot; /etc/sudoers&lt;br /&gt;
Command above adds the following to /etc/sudoers&lt;br /&gt;
 Defaults    log_output&lt;br /&gt;
 Defaults    log_input&lt;br /&gt;
List sudo-io logs.&lt;br /&gt;
 sudoreplay -l&lt;br /&gt;
Search for string in logs.&lt;br /&gt;
 zgrep search_string $(find /var/log/sudo-io/ -type f)&lt;br /&gt;
Replay session. Max wait 1s. 5 times the speed.&lt;br /&gt;
 sudoreplay -m1 -s5 000002&lt;br /&gt;
Replay session including stdin&lt;br /&gt;
 sudo sudoreplay -m1 -s5 -f stdin,stdout,stderr,ttyin,ttyout 000001&lt;br /&gt;
Which rules apply to user&lt;br /&gt;
 sudo -l -U username&lt;br /&gt;
==Add user to sudoers.d so you do not need to add password for that user.==&lt;br /&gt;
 SUDO_USER=&amp;lt;user&amp;gt; ; echo -e &amp;quot;# Adding $SUDO_USER user to sudo users.\n$SUDO_USER ALL=(ALL) NOPASSWD:ALL&amp;quot; &amp;gt; /etc/sudoers.d/90-${SUDO_USER//./_} ; chmod 440 /etc/sudoers.d/90-${SUDO_USER//./_}&lt;br /&gt;
&lt;br /&gt;
=swapon/swapof=&lt;br /&gt;
Free swap&lt;br /&gt;
 (swapoff -a; swapon -a) &amp;amp; watch free -m&lt;br /&gt;
&lt;br /&gt;
=sysbench=&lt;br /&gt;
cpu test.&lt;br /&gt;
 sysbench cpu --cpu-max-prime=20000 --threads=32 run | grep &amp;quot;events per second&amp;quot;&lt;br /&gt;
ram test&lt;br /&gt;
 sysbench memory --threads=32 run | grep sec&lt;br /&gt;
disk test&lt;br /&gt;
 RAM_TWO=$(( $(grep MemTotal /proc/meminfo | awk &#039;{print $2}&#039;) * 2 ))kb&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} prepare &amp;gt; /dev/null&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} --file-test-mode=rndrw --time=300 --max-requests=0 run|grep -E &#039; read, | written, &#039;&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} cleanup &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
=sysctl=&lt;br /&gt;
Rename machine.&lt;br /&gt;
 sysctl kernel.hostname=ipmonxx.${CLIENT}.ip-soft.net&lt;br /&gt;
Set tcp keepalive&lt;br /&gt;
 $ sysctl -a | grep tcp_keepalive&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 1800&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 9&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 75&lt;br /&gt;
 sudo sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 60&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 3&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 10&lt;br /&gt;
Reload config files&lt;br /&gt;
 sysctl --system&lt;br /&gt;
&lt;br /&gt;
=systemctl=&lt;br /&gt;
==init 3== &lt;br /&gt;
 systemctl isolate runlevel3.target&lt;br /&gt;
 systemctl isolate multi-user.target&lt;br /&gt;
 systemctl set-default multi-user.target&lt;br /&gt;
&lt;br /&gt;
==init 5==&lt;br /&gt;
 systemctl isolate runlevel5.target&lt;br /&gt;
 systemctl isolate graphical.target&lt;br /&gt;
 systemctl set-default graphical.target&lt;br /&gt;
&lt;br /&gt;
==When you have made changes to  /etc/systemd/system/*.service==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==List all units==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==List units with problems==&lt;br /&gt;
 systemctl list-units --failed&lt;br /&gt;
==create service==&lt;br /&gt;
cd /etc/systemd/system ; vim $service.service ; systemctl daemon-reload&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Set laptop brightness&lt;br /&gt;
 After=multi-user.target &lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 ExecStart=/bin/sh -c &#039;echo 1000 &amp;gt; /sys/class/backlight/intel_backlight/brightness&#039;&lt;br /&gt;
 LimitNOFILE=65535&lt;br /&gt;
 LimitNPROC=65535&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=default.target&lt;br /&gt;
&lt;br /&gt;
==Add groups to processes started by services script==&lt;br /&gt;
 [Service]&lt;br /&gt;
 SupplementaryGroups=33 518&lt;br /&gt;
==takes a long time to login==&lt;br /&gt;
 systemctl daemon-reexec&lt;br /&gt;
 systemctl restart systemd-logind&lt;br /&gt;
&lt;br /&gt;
=strace process started by systemctl=&lt;br /&gt;
 strace -f -o /tmp/strace.log -s 2048 -p 1 &amp;amp; systemctl restart httpd.service&lt;br /&gt;
=systemctl show puma=&lt;br /&gt;
Show variables of service&lt;br /&gt;
 systemctl show puma&lt;br /&gt;
&lt;br /&gt;
=systemd-analyze=&lt;br /&gt;
What takes time at startup.&lt;br /&gt;
 systemd-analyze plot &amp;gt; /tmp/systemd-analyze-plot.svg ; chrome /tmp/systemd-analyze-plot.svg&lt;br /&gt;
=systemd-resolved=&lt;br /&gt;
 resolvectl status&lt;br /&gt;
clear cache.&lt;br /&gt;
 sudo systemd-resolve --flush-caches&lt;br /&gt;
Look at stats.&lt;br /&gt;
 systemd-resolve --statistics&lt;br /&gt;
==restart daemon to apply settings==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart systemd-networkd&lt;br /&gt;
 systemctl restart systemd-resolved&lt;br /&gt;
=systemctl show=&lt;br /&gt;
will show all available properties&lt;br /&gt;
 systemctl show $service&lt;br /&gt;
&lt;br /&gt;
=tail=&lt;br /&gt;
Tail from line number 21.&lt;br /&gt;
 tail -n +21 /file&lt;br /&gt;
=talk=&lt;br /&gt;
Talks swedish.&lt;br /&gt;
 espeak -v swedish -f /tmp/file&lt;br /&gt;
&lt;br /&gt;
=tar=&lt;br /&gt;
Make a backup of a directory or disk.&lt;br /&gt;
 server: tar -cpsf - $dir | pv -b | nc -l 3333&lt;br /&gt;
 client: nc server 3333 | pv -b | tar -xpst -&lt;br /&gt;
Inline tar archive.&lt;br /&gt;
 awk &#039;/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }&#039; $0&lt;br /&gt;
 tail -n $0 &amp;gt; archive.tar # tail -n +347 Filename&lt;br /&gt;
Backup dir but exclude files within&lt;br /&gt;
 tar zcf /tmp/backup_$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).tar.gz /apps/app --exclude=/apps/app/var/* --exclude=/apps/app/logs/*&lt;br /&gt;
extract files remove 5 path element components.&lt;br /&gt;
 tar xf archive.tar --strip-components 5&lt;br /&gt;
extract to other directory.&lt;br /&gt;
 tar -xzf bar.tar.gz -C foo&lt;br /&gt;
extract files excluding path.&lt;br /&gt;
 tar xf $file.tar.gz --transform=&#039;s/.*\///&#039;&lt;br /&gt;
&lt;br /&gt;
=tcpdump=&lt;br /&gt;
dump trafic information, -e Print the link-level header on each dump line, -vvv verbose.&lt;br /&gt;
 tcpdump -e -vvv port 21&lt;br /&gt;
dump all trafic to and from machine. -w write to file, -s0 size of package, host to listen from.&lt;br /&gt;
 time tcpdump -w ssl_dump -s0 host test.x30.webservices.itsfogo.com&lt;br /&gt;
dump all trafic into files of max 100MB. 270MB in reality.&lt;br /&gt;
 tcpdump -w snoop -s0 -C 100000000&lt;br /&gt;
dump all trafic. compress logfiles. Create 10 files which are 10 MB big. Dont convert numbers to names. Dont truncate frames create logfile with this name.&lt;br /&gt;
 tcpdump -z gzip -i wlan0 -C 10 -W 10 -n -s0 -w /tmp/tcpdump.log&lt;br /&gt;
Which machines send a syn packet.&lt;br /&gt;
 sudo tcpdump -nn -i eth0 &#039;tcp[13] = 2&#039;&lt;br /&gt;
Show information about all traffic on interface.&lt;br /&gt;
 tcpdump -s0 -i eth1 -vv&lt;br /&gt;
Show information about communication over port 514&lt;br /&gt;
 tcpdump -Xni any port 514&lt;br /&gt;
listen on port 1023 for incoming trafic. disable local subnets.&lt;br /&gt;
 sudo tcpdump -n -i eth0 tcp and dst host 172.17.17.6 and not src net 172.17.17.0/24 and not src net 158.0.0.0/8 and &#039;port 1023&#039;&lt;br /&gt;
listen after torrent traffic.&lt;br /&gt;
 sudo tcpdump -Xni any portrange 6882-6999&lt;br /&gt;
View content of http trafic&lt;br /&gt;
 sudo tcpdump -i any -A -s 1500 dst 89.253.75.84 and port 80&lt;br /&gt;
View post in utf-8 format.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tcpdump -lnp -i any -A -s 1500 dst 89.253.75.84 and port 80 -w - | tr -t &#039;[^[:print:]]&#039; &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get cookie&lt;br /&gt;
 tcpdump -i lo -A -l dst port 8000 |     grep &amp;quot;^Cookie: &amp;quot;&lt;br /&gt;
 To create cookie for curl: https://xiix.wordpress.com/2006/03/23/mozillafirefox-cookie-format/&lt;br /&gt;
Look at traffic from specific ip&lt;br /&gt;
 tcpdump -n -i any -n host 198.18.130.9&lt;br /&gt;
Eavesdrop password&lt;br /&gt;
 tcpdump -i any -A -s0 port 8030 | grep Authorization:&lt;br /&gt;
==flags==&lt;br /&gt;
tcpdump -enni eth0 host 172.30.142.11 port 5432&lt;br /&gt;
 F - FIN&lt;br /&gt;
 S - SYN&lt;br /&gt;
 R - RST&lt;br /&gt;
 P - PSH&lt;br /&gt;
 U - URG&lt;br /&gt;
 E - ECN Echo&lt;br /&gt;
 W - ECN Cwnd Reduced&lt;br /&gt;
 . - ACK only&lt;br /&gt;
==get ftp username/password==&lt;br /&gt;
 sudo tcpdump -n -vvv -i any -A -f &amp;quot;port 21&amp;quot; | grep -i &amp;quot;user\|pass&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=tcptraceroute=&lt;br /&gt;
 tcptraceroute -n -q 1 192.168.0.1 -p 22&lt;br /&gt;
=teamdctl=&lt;br /&gt;
 teamdctl team0 state view -v&lt;br /&gt;
=tee=&lt;br /&gt;
Feed tee with an unbuffered stream.&lt;br /&gt;
 sar -n DEV 2 | stdbuf -oL grep wlp0s20f3 | tee /temp/sar_-n_wlp0s20f3.$(date)&lt;br /&gt;
&lt;br /&gt;
=telnet=&lt;br /&gt;
Look at world map. a - z zoom.&lt;br /&gt;
 telnet mapscii.me&lt;br /&gt;
=testssl=&lt;br /&gt;
test ssl certificate&lt;br /&gt;
 testssl www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=tftp=&lt;br /&gt;
 # Download test.file&lt;br /&gt;
 tftp -v 172.17.17.6 -c get test.file&lt;br /&gt;
 # Upload file.&lt;br /&gt;
 tftp -v 172.17.17.6 -c put /tmp/test.put test.put&lt;br /&gt;
 # Enable upload file in in.tftpd&lt;br /&gt;
 /etc/xinetd.d/tftp&lt;br /&gt;
 server_args        = -c -s /var/lib/tftpboot&lt;br /&gt;
=tibco=&lt;br /&gt;
show permissions.&lt;br /&gt;
 help permissions&lt;br /&gt;
Create user&lt;br /&gt;
 create user surveillance &amp;quot;Surveillance user&amp;quot; password=surveillance&lt;br /&gt;
Grant user permission to view all&lt;br /&gt;
 grant admin user=surveillance view-all&lt;br /&gt;
=tif=&lt;br /&gt;
cli image viewer.&lt;br /&gt;
 tif $IMAGE.jpg&lt;br /&gt;
&lt;br /&gt;
=time=&lt;br /&gt;
Time in a loop.&lt;br /&gt;
 { time sleep 2 &amp;gt;&amp;gt; ${LOG} ; } 2&amp;gt;&amp;gt; ${LOG}&lt;br /&gt;
How long did a command take&lt;br /&gt;
 TIME=$( { /usr/bin/time -f &amp;quot;%e&amp;quot; sleep 1.5 ;} 2&amp;gt;&amp;amp;1 ) ; echo $TIME&lt;br /&gt;
Built in time command. 3 decimals in seconds.&lt;br /&gt;
 TIMEFORMAT=&#039;%3R&#039;; time ( sleep 61.22222 )&lt;br /&gt;
=timedatectl=&lt;br /&gt;
Show info how clock is synced.&lt;br /&gt;
 timedatectl timesync-status&lt;br /&gt;
Which time zones exist&lt;br /&gt;
 timedatectl list-timezones | cat -v | grep -i stockholm&lt;br /&gt;
Set timezone.&lt;br /&gt;
 timedatectl set-timezone &amp;quot;Europe/Stockholm&amp;quot;&lt;br /&gt;
Show ntp servers&lt;br /&gt;
 timedatectl show-timesync --all&lt;br /&gt;
Sync clock&lt;br /&gt;
 timedatectl set-ntp true&lt;br /&gt;
Enable clock sync.&lt;br /&gt;
 systemctl enable systemd-timesyncd --now&lt;br /&gt;
&lt;br /&gt;
=timeout=&lt;br /&gt;
limit waiting for a period.&lt;br /&gt;
 timeout 2s sleep 100&lt;br /&gt;
Run function under timeout&lt;br /&gt;
 export -f my_function ; timeout 1 bash -c &#039;my_function options&#039;&lt;br /&gt;
Run loop for some time then exit.&lt;br /&gt;
 timeout 172800 bash -c -- &#039;while true ; do echo $(TZ=UTC date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;) $(ping -w1 -q -c1 -i10 192.168.10.120 | grep received) ; sleep 1 ; done| tee /tmp/ping_192.168.10.120.log&#039;&lt;br /&gt;
&lt;br /&gt;
=tnef=&lt;br /&gt;
List content of winmail.dat. Remove options to extract to current dir.&lt;br /&gt;
 tnef -t -f winmail.dat&lt;br /&gt;
=toilet=&lt;br /&gt;
Generate graphics text similar to banner.&lt;br /&gt;
 toilet -F gay -f mono12 &amp;quot;Some Funky Text&amp;quot;&lt;br /&gt;
=tor=&lt;br /&gt;
Select outgoing country. https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2&lt;br /&gt;
Set country in:&lt;br /&gt;
 torrc&lt;br /&gt;
One or several exit countries.&lt;br /&gt;
 ExitNodes {us}&lt;br /&gt;
 ExitNodes {kr},{ru},{sy},{cn}&lt;br /&gt;
test exit node&lt;br /&gt;
 ifconfig.me&lt;br /&gt;
=toolbox=&lt;br /&gt;
 toolbox create --distro rhel --release 9.5&lt;br /&gt;
==running rocky==&lt;br /&gt;
 podman pull docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
 toolbox create --image docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
&lt;br /&gt;
=top(the command)=&lt;br /&gt;
Top batch mode run one iteration&lt;br /&gt;
 top -bn1&lt;br /&gt;
Sort by memory usage&lt;br /&gt;
 for i in {1..10};do date; top -c -b -o +%MEM | head -n 17|tail -11;sleep 5;done&lt;br /&gt;
Top used in openshift.&lt;br /&gt;
 top -bcn1 -w512 | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=top derivates=&lt;br /&gt;
 apachetop&lt;br /&gt;
 dnstop&lt;br /&gt;
 iftop&lt;br /&gt;
 latencytop&lt;br /&gt;
 glances&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 touch -am 0910120003    Give a new access time on a file 0910120003MMDDhhmmyy&lt;br /&gt;
linux&lt;br /&gt;
 touch -t 197102162324 *&lt;br /&gt;
&lt;br /&gt;
=tput=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
Line wraps&lt;br /&gt;
 tput smam&lt;br /&gt;
invisible cursor&lt;br /&gt;
 tput civis&lt;br /&gt;
visible cursor&lt;br /&gt;
 tput cnorm&lt;br /&gt;
reset is a good command to reset shell&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
=tr=&lt;br /&gt;
translate capital to lower letter.&lt;br /&gt;
 tr &#039;[:upper:]&#039; &#039;[:lower:]&#039;&lt;br /&gt;
null character to new line&lt;br /&gt;
 tr &#039;\000&#039; &#039;\n&#039; &amp;lt; /proc/3575/environ&lt;br /&gt;
Remove unprintable characters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tr -dc &#039;[[:print:]]&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trickle=&lt;br /&gt;
Speed limit for download&lt;br /&gt;
 rsync -ae &amp;quot;trickle -d 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Speed limit for upload.&lt;br /&gt;
 rsync -ae &amp;quot;trickle -u 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Limit wget to 64kbit upload and download.&lt;br /&gt;
 trickle -d 64 -u 64 wget &amp;quot;https://www.halfface.se/file.txt&amp;quot;&lt;br /&gt;
=ts=&lt;br /&gt;
timestamp&lt;br /&gt;
 ls -la | ts &#039;%F %H:%M:%S&#039;&lt;br /&gt;
&lt;br /&gt;
=tune2fs(tunefs)=&lt;br /&gt;
 tune2fs -m 0 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=type=&lt;br /&gt;
What kind of command do we use. builtin or some file?&lt;br /&gt;
 type ls&lt;br /&gt;
&lt;br /&gt;
=udevadm=&lt;br /&gt;
Monitor udev events.&lt;br /&gt;
 udevadm monitor&lt;br /&gt;
udevadm info --query=all --name=sda&lt;br /&gt;
 look at values for disk. Can be used to locate san source.&lt;br /&gt;
&lt;br /&gt;
=udr=&lt;br /&gt;
rsync over udp.&lt;br /&gt;
 udr -a 57621 -b 57631 rsync -rP host.inter.net:/source/ /destination/&lt;br /&gt;
=ulimt=&lt;br /&gt;
Look at current limits for logged in user.&lt;br /&gt;
 ulimit -a&lt;br /&gt;
Look at limits for process with pid 12345.&lt;br /&gt;
 cat /proc/12345/limits&lt;br /&gt;
=unalias=&lt;br /&gt;
Unalias all aliases&lt;br /&gt;
 unalias -a&lt;br /&gt;
=unhide=&lt;br /&gt;
Find hidden ports.&lt;br /&gt;
 unhide -v proc&lt;br /&gt;
&lt;br /&gt;
=unetbootin=&lt;br /&gt;
 Boot iso image from usb memory.&lt;br /&gt;
=update-crypto-policies=&lt;br /&gt;
Change crypt policies so that I am able to start openvpn connection.&lt;br /&gt;
 sudo update-crypto-policies --set DEFAULT:SHA1&lt;br /&gt;
&lt;br /&gt;
=upower=&lt;br /&gt;
 # Powerstatus of the system. battery charge.&lt;br /&gt;
 upower --dump&lt;br /&gt;
=uptime=&lt;br /&gt;
Uptime in seconds.&lt;br /&gt;
 awk -F . &#039;{print $1}&#039; /proc/uptime&lt;br /&gt;
&lt;br /&gt;
=urldecode/urlencode=&lt;br /&gt;
Encode&lt;br /&gt;
 perl -pe&#039;s/([^-_.~A-Za-z0-9])/sprintf(&amp;quot;%%%02X&amp;quot;, ord($1))/seg&#039;&lt;br /&gt;
 jq -sRr @uri&lt;br /&gt;
Decode&lt;br /&gt;
 perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;&lt;br /&gt;
 jq -r @uri&lt;br /&gt;
&lt;br /&gt;
=useradd=&lt;br /&gt;
 useradd --uid 666 --gid 666 --comment &#039;devil&#039; devil &amp;amp;&amp;amp; echo &#039;devil:VerySecretPassword&#039; | chpasswd&lt;br /&gt;
&lt;br /&gt;
=v4l2=&lt;br /&gt;
Video player&lt;br /&gt;
 qv4l2&lt;br /&gt;
List available formatats and resolutions.&lt;br /&gt;
 v4l2-ctl --list-formats-ext&lt;br /&gt;
List available formats&lt;br /&gt;
 v4l2-ctl --list-formats&lt;br /&gt;
Set camera to h264&lt;br /&gt;
 v4l2-ctl --set-fmt-video=width=800,height=448,pixelformat=1&lt;br /&gt;
Set framerate.&lt;br /&gt;
 v4l2-ctl --set-parm=30&lt;br /&gt;
List video parameters&lt;br /&gt;
 v4l2-ctl --get-fmt-video&lt;br /&gt;
List video output&lt;br /&gt;
 v4l2-ctl --all&lt;br /&gt;
Disable autofocus&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_auto=0&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_absolute=0&lt;br /&gt;
=version of linux=&lt;br /&gt;
 cat /etc/os-release&lt;br /&gt;
&lt;br /&gt;
=vi=&lt;br /&gt;
 :set ignorecase&lt;br /&gt;
 :set list        show all keys.&lt;br /&gt;
 :set nolist      show their representative.&lt;br /&gt;
=wipefs=&lt;br /&gt;
Wipe removes information about file system without removing actual data.&lt;br /&gt;
 wipefs -a /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=vmstat=&lt;br /&gt;
top over time.&lt;br /&gt;
 vmstat -n 5&lt;br /&gt;
Description:&lt;br /&gt;
 r=procs waiting for cpu time.&lt;br /&gt;
 b=procs in sleep mode.&lt;br /&gt;
 swpd=virtual memory in use in swap.&lt;br /&gt;
 free=memory free.&lt;br /&gt;
 buff=memory used by buffers&lt;br /&gt;
 cache=memory used as cache.&lt;br /&gt;
 si=swap in.&lt;br /&gt;
 so=swap out.&lt;br /&gt;
 bi=io block in.&lt;br /&gt;
 bo=io block out.&lt;br /&gt;
 in=interups&lt;br /&gt;
 cs=contex switching.&lt;br /&gt;
 us=cpu user space&lt;br /&gt;
 sy=cpu system usage to serve.&lt;br /&gt;
 id=cpu idle&lt;br /&gt;
 wa=cpu waiting for input output. iowait.&lt;br /&gt;
 st=cpu time stolen from a virtual machine&lt;br /&gt;
&lt;br /&gt;
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----&lt;br /&gt;
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st&lt;br /&gt;
  2  1 814984 167992  26820 999460    0    0     1     0 2467 5088  2  2 95  1  0   &lt;br /&gt;
  0  0 814984 168100  26820 999540    0    0     2   150 2467 5026  1  2 97  0  0&lt;br /&gt;
=w3m(elinks)=&lt;br /&gt;
 curl -s https://google.com | w3m -T text/html -dump&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 wget -r -nH -np --cut-dirs=1 --no-check-certificate -U Mozilla --user={uname} --password={pwd} https://my-host/my-webdav-dir/my-dir-in-webdav&lt;br /&gt;
wget to standard output.&lt;br /&gt;
 wget --no-check-certificate -S -O- http://inter.net&lt;br /&gt;
Special heather&lt;br /&gt;
 wget &#039;http://halfface.se&#039; --header=&#039;Cookie: has_js=1&#039;&lt;br /&gt;
Mirror&lt;br /&gt;
 wget &#039;https://halfface.se/test&#039; -r -l 3 --convert-links -o log  --html-extension&lt;br /&gt;
&lt;br /&gt;
=whois=&lt;br /&gt;
 # When does a domain expire.&lt;br /&gt;
 whois -h whois.iana.org sivberg.se&lt;br /&gt;
 # which ipranges does an ipaddress belong too. In this case looking at google.&lt;br /&gt;
 whois -h whois.radb.net -- &amp;quot;-i origin $(whois -s -h whois.radb.net 172.217.26.68 | grep ^origin | awk &#039;{print $2}&#039; | tail -1)&amp;quot; | grep ^route | awk &#039;{print $2}&#039;&lt;br /&gt;
 # Who to find address range for site.&lt;br /&gt;
 host www.facebook.com&lt;br /&gt;
 whois 157.240.194.35 | grep CIDR&lt;br /&gt;
&lt;br /&gt;
=wireshark=&lt;br /&gt;
 find packet&lt;br /&gt;
 packet details&lt;br /&gt;
 string&lt;br /&gt;
==ssl decryption==&lt;br /&gt;
 export SSLKEYLOGFILE=/tmp/sslkeylog ; curl -sv -d &amp;quot;blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla&amp;quot; https://www.halfface.se&lt;br /&gt;
 wireshark. Edit - Preferences - Protocols - TLS - (Pre) -master-Secret log file.&lt;br /&gt;
==tshark==&lt;br /&gt;
cli version&lt;br /&gt;
 tshark -V -r $dump.pcap&lt;br /&gt;
=wlr-randr=&lt;br /&gt;
Change dpi in wayland.&lt;br /&gt;
 wlr-randr --output eDP-1 --scale 2&lt;br /&gt;
Change resolution&lt;br /&gt;
 wlr-randr --output DP-1 --mode 1920x1080&lt;br /&gt;
&lt;br /&gt;
=wodim=&lt;br /&gt;
Burning disks.&lt;br /&gt;
 wodim -scanbus    # Scan scsi bus for burners.&lt;br /&gt;
 wodim --devices   # Discover basic information.&lt;br /&gt;
 wodim -checkdrive # Information about burner.&lt;br /&gt;
 wodim -tao speed=0 dev=/dev/sr0 -v -data /temp/files/                      # Burn disk containing structure from /temp/files/&lt;br /&gt;
 wodim -eject  -tao speed=0 dev=/dev/scd0 -v -data /my/directory/image.iso   # Burn image to disc.&lt;br /&gt;
=write=&lt;br /&gt;
Send message to someone via tty.&lt;br /&gt;
 who | grep user&lt;br /&gt;
write message end with CTRL + d&lt;br /&gt;
 write abjorklund pts/2&lt;br /&gt;
&lt;br /&gt;
=xargs=&lt;br /&gt;
locate case insensetive, regular expression. xargs string to replace imput. Print output to standard error.&lt;br /&gt;
 locate -ir &amp;quot;.*\.crt$&amp;quot; | xargs -I &#039;{}&#039; -t cp {} /temp/ssl/&lt;br /&gt;
Do something on everything from standard input.&lt;br /&gt;
 ls -la | xargs -i% echo &#039;# beginning #&#039; % &#039;# end of line #&#039;&lt;br /&gt;
split several lines into groups.&lt;br /&gt;
 for i in {00..99} ; do echo $i, ; done | xargs -L 20&lt;br /&gt;
&lt;br /&gt;
=xdotool=&lt;br /&gt;
When you have to move your mouse but you dont want to push it.&lt;br /&gt;
 xdotool mousemove_relative -- -1 -1&lt;br /&gt;
 xdotool mousemove_relative 1 1&lt;br /&gt;
Send ab to window.&lt;br /&gt;
 xdotool search --onlyvisible --name freerdp key a key b&lt;br /&gt;
=xfs=&lt;br /&gt;
 xfs_repair -L /dev/mapper/vg00-root&lt;br /&gt;
&lt;br /&gt;
=xinput=&lt;br /&gt;
 # List xinputs.&lt;br /&gt;
 xinput list&lt;br /&gt;
 # List properties.&lt;br /&gt;
 xinput list-props &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot;&lt;br /&gt;
 # Middle button emulation.&lt;br /&gt;
 xinput set-prop &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot; &amp;quot;Evdev Middle Button Emulation&amp;quot; 1&lt;br /&gt;
 xinput set-prop 12 &amp;quot;libinput Middle Emulation Enabled&amp;quot; 1&lt;br /&gt;
=xkill=&lt;br /&gt;
Kill xorg process with id 0xb6ffa0&lt;br /&gt;
 xkill -id 0xb6ffa0&lt;br /&gt;
List x applictions&lt;br /&gt;
 xwininfo&lt;br /&gt;
Get recursive list of x applications.&lt;br /&gt;
 xwininfo -root -tree&lt;br /&gt;
&lt;br /&gt;
=xmllint=&lt;br /&gt;
prettify xml&lt;br /&gt;
 xmllint --format -&lt;br /&gt;
&lt;br /&gt;
=xset=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 xset -dpms ; xset s noblank ;xset s off&lt;br /&gt;
Disable repeat&lt;br /&gt;
 xset r off&lt;br /&gt;
Enable repeat&lt;br /&gt;
 xset r on&lt;br /&gt;
&lt;br /&gt;
=xxd=&lt;br /&gt;
Hex to binary&lt;br /&gt;
 xxd -r -p hex.txt output.bin&lt;br /&gt;
Hex to binary in pipe&lt;br /&gt;
 echo &amp;quot;$HEX&amp;quot; | xxd -r -p -&lt;br /&gt;
=yum=&lt;br /&gt;
download src rpm&lt;br /&gt;
 yumdownloader --source net-snmp&lt;br /&gt;
Reinstall default repos.&lt;br /&gt;
 yum reinstall yum-conf-sl6x-1-2&lt;br /&gt;
This will give you a directory with all rpm:s that are required to install rpm.&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=6 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==broken repos==&lt;br /&gt;
 yum install bareos-client --disablerepo=* --enablerepo=bareos&lt;br /&gt;
==search for different versions==&lt;br /&gt;
 yum --showduplicates search percona-xtrabackup&lt;br /&gt;
==Add repos to centos 6==&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-epel-eol.repo --output /etc/yum.repos.d/epel.repo&lt;br /&gt;
==fix yum in Centos 7, 8==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i &#039;s%^enabled=.%enabled=0%&#039; /etc/yum/pluginconf.d/subscription-manager.conf&lt;br /&gt;
sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get variables to test /etc/yum-repos.d/&amp;lt;file&amp;gt;.conf files==&lt;br /&gt;
 export releasever=$(lsb_release -r | awk &#039;{print $NF}&#039; | awk -F . &#039;{print $1}&#039;)&lt;br /&gt;
 export basearch=$(uname -m)&lt;br /&gt;
&lt;br /&gt;
=zip=&lt;br /&gt;
Zip directory exclude files .svn directory.&lt;br /&gt;
 zip -r /temp/ssl.zip . -x &amp;quot;.svn/*&amp;quot;&lt;br /&gt;
List contents of zip archive.&lt;br /&gt;
 unzip -l archive.zip&lt;br /&gt;
Unzip single file&lt;br /&gt;
 unzip file.zip file/you/want/to/extract/the_file.txt&lt;br /&gt;
unzip excluding path.&lt;br /&gt;
 unzip -j file.zip&lt;br /&gt;
&lt;br /&gt;
=zdump=&lt;br /&gt;
View information from timezone tz.&lt;br /&gt;
 zdump -v /etc/localtime&lt;br /&gt;
Change timezone on host&lt;br /&gt;
 ln -sfT ../usr/share/zoneinfo/Europe/Stockholm localtime&lt;br /&gt;
&lt;br /&gt;
=zfs=&lt;br /&gt;
==Get sync==&lt;br /&gt;
 zfs get sync datapool/netstorage/dog/prod&lt;br /&gt;
 NAME                          PROPERTY  VALUE     SOURCE&lt;br /&gt;
 datapool/netstorage/dog/prod  sync      standard  default&lt;br /&gt;
==set sync==&lt;br /&gt;
 zfs set sync=disabled datapool/netstorage/dog/prod&lt;br /&gt;
==List snapshots(can take time)==&lt;br /&gt;
 zfs list -t snapshot&lt;br /&gt;
==List snapshots for one mount point.==&lt;br /&gt;
 zfs list -r -t snapshot -o name,creation datapool/netstorage/bro/prod&lt;br /&gt;
==Displays the detailed health status==&lt;br /&gt;
 zpool status&lt;br /&gt;
==List datasets==&lt;br /&gt;
 zfs list&lt;br /&gt;
==Create dataset==&lt;br /&gt;
 zfs create datapool/netstorage/media&lt;br /&gt;
==zdb==&lt;br /&gt;
display zpool debugging and consistency information&lt;br /&gt;
 zdb -d dataset&lt;br /&gt;
==zpool list==&lt;br /&gt;
Lists the given pools along with a health status and space usage.&lt;br /&gt;
==iostat==&lt;br /&gt;
Get iostat with values since last second.&lt;br /&gt;
 zpool iostat are -y 1 -l&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Unix]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16598</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16598"/>
		<updated>2026-04-09T13:27:10Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* list historic events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;br /&gt;
==list checks on remote windows machine==&lt;br /&gt;
 gc -tail 10 &amp;quot;C:\Program Files\NSClient++\nsclient.ini&amp;quot;&lt;br /&gt;
 [/settings/external scripts/alias]&lt;br /&gt;
 check_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED&lt;br /&gt;
 check_load = check_cpu filter=none warn=90 crit=95&lt;br /&gt;
 check_io = CheckCounter Counter:DiskIO=\\PhysicalDisk(_Total)\\Disk\ Bytes/sec&lt;br /&gt;
 alias_memory = check_memory warn=99 crit=100&lt;br /&gt;
 ipsec_hypergene = check_ping 10.255.255.1&lt;br /&gt;
 ipsec_sharp = check_ping 192.168.77.1&lt;br /&gt;
 ipsec_telia = check_ping 192.168.20.1&lt;br /&gt;
==list historic events==&lt;br /&gt;
 ls -c1 -rt /var/log/icinga2/icinga2.log* | while read i ; do zcat -f $i | grep &amp;quot;ElKretsenIpsecTelia&amp;quot; | grep information/Notification | grep oncall-notification ; done&lt;br /&gt;
==Custom checks==&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_crash.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_df.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_health.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mgr.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_mon.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_osd.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_rgw_sync_status.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_scrub.py&lt;br /&gt;
 /usr/lib64/nagios/plugins/custom/check_ceph_versions.py&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16597</id>
		<title>Openstack</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16597"/>
		<updated>2026-04-09T10:53:39Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* manage loadbalancer aurora/haproxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean=&lt;br /&gt;
 aodh                  Alarming service&lt;br /&gt;
 barbican              REST API designed for the secure storage, provisioning and management of secrets such as passwords, encryption keys and X.509&lt;br /&gt;
 cinder                OpenStack Block Storage&lt;br /&gt;
 gnocchi               Time Series Database as a Service&lt;br /&gt;
 glance                OpenStack Image Service&lt;br /&gt;
 heat                  iac. Deploy instances, volumes and other OpenStack services using YAML based templates.&lt;br /&gt;
 horizon               Openstack’s Dashboard, which provides a web based user interface to OpenStack services&lt;br /&gt;
 ironic                bootstrap&lt;br /&gt;
 keystone              identity service &lt;br /&gt;
 magnum                container orchestration engines&lt;br /&gt;
 mistral               workflow service&lt;br /&gt;
 neutron               networking as a service&lt;br /&gt;
 nfv                   Network functions virtualization&lt;br /&gt;
 nova                  cloud computing instance controller, provision compute instances (aka virtual servers).&lt;br /&gt;
 octavia               Load balancer. Octavia HAProxy Amphora API&lt;br /&gt;
 rhosp                 Red Hat OpenStack Platform&lt;br /&gt;
 swift                 OpenStack Object Storage&lt;br /&gt;
 tacker                NFV Orchestration&lt;br /&gt;
 trove                 Database as a Service&lt;br /&gt;
 Zaqar                 multi-tenant cloud messaging service&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(openstack complete 2&amp;gt;/dev/null )&lt;br /&gt;
=flavor=&lt;br /&gt;
Which machine types exist.&lt;br /&gt;
 gp      &amp;quot;General purpose&amp;quot; Well rounded combination of amount of CPUs and the amount of RAM.&lt;br /&gt;
 hm      &amp;quot;High memory&amp;quot; Optimimzed for applications that need a lot of memory.&lt;br /&gt;
 hp      &amp;quot;High performance&amp;quot; High frequenzy cpu.&lt;br /&gt;
List suitable flavors&lt;br /&gt;
 openstack flavor list -f json -c VCPUs -c RAM -c Disk -c Name | jq -r &#039;.[] | [ .Name, .VCPUs, .RAM, .Disk ] | @tsv&#039; | sort -k 2,2n -k 3,3n | grep -vE &#039;gpu|pinned|nvme&#039; | column_tab&lt;br /&gt;
Change flavor of vm&lt;br /&gt;
 openstack server resize &amp;lt;vm-name-or-id&amp;gt; --flavor &amp;lt;new-flavor-name-or-id&amp;gt; --wait&lt;br /&gt;
 openstack server resize confirm &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Manage multiple projects=&lt;br /&gt;
 export OS_CLIENT_CONFIG_FILE=~/.config/openstack/project1_clouds.yaml&lt;br /&gt;
 export OS_CLOUD=project1&lt;br /&gt;
&lt;br /&gt;
=list volumes=&lt;br /&gt;
 openstack volume list&lt;br /&gt;
==list volume belonging to &amp;lt;server&amp;gt;==&lt;br /&gt;
 openstack server volume list &amp;lt;server&amp;gt;&lt;br /&gt;
==remove volume from server==&lt;br /&gt;
 openstack server remove volume &amp;lt;vm_name_or_id&amp;gt; &amp;lt;volume_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack=&lt;br /&gt;
 dnf install python3-openstackclient&lt;br /&gt;
 dnf -y install $(dnf -q search python3- client |grep -i OpenStack | grep -v -- -tests| awk &#039;{print $1}&#039;)&lt;br /&gt;
&lt;br /&gt;
=get ip addresses of all host=&lt;br /&gt;
 openstack server list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;&lt;br /&gt;
=long output=&lt;br /&gt;
 openstack server list --long&lt;br /&gt;
=select server depending status=&lt;br /&gt;
 openstack server list --status ACTIVE&lt;br /&gt;
&lt;br /&gt;
=output=&lt;br /&gt;
 -f csv,json,table,value,yaml&lt;br /&gt;
Get output without headers.&lt;br /&gt;
 openstack server list -f value&lt;br /&gt;
&lt;br /&gt;
=list all=&lt;br /&gt;
 openstack command list -f yaml | grep - | grep list | sed &#039;s/^  - /openstack /g&#039; |grep -v &amp;quot;openstack command list&amp;quot; | while read i ; do echo &#039;*&#039; $i ; $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039; | while read i ; do echo &#039;*&#039; openstack $i ; openstack $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=How to reach nodes=&lt;br /&gt;
 OPENSTACK=$(openstack server  list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;) ; OPENSTACK_JUMP=$(grep 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; NODES=$(grep -v 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; for NODE in ${NODES} ; do echo ssh -J core@${OPENSTACK_JUMP} core@${NODE} ; done&lt;br /&gt;
=create server=&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image fedora-37-x86_64 --boot-from-volume 100 --network abjorklund-01-5tsbc-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
With setting password.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; user-data&lt;br /&gt;
 #cloud-config&lt;br /&gt;
 password: Password123!&lt;br /&gt;
 chpasswd: {expire: False}&lt;br /&gt;
 ssh_pwauth: True&lt;br /&gt;
 EOF&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file) --user-data user-data&lt;br /&gt;
With existing network port&lt;br /&gt;
 openstack server create --flavor gp.1x2 --block-device source=volume,id=&amp;lt;volume-id&amp;gt;,dest=volume,bootindex=0,delete_on_termination=false --nic port-id=&amp;lt;existing-port-id&amp;gt; --key-name &amp;lt;your-keypair&amp;gt; &amp;lt;new-server-name&lt;br /&gt;
&lt;br /&gt;
=router=&lt;br /&gt;
==List routers==&lt;br /&gt;
 openstack router list&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 openstack router show abjorklund-01-5tsbc-external-router -c external_gateway_info -f json | jq &#039;.external_gateway_info.external_fixed_ips[0].ip_address&#039;&lt;br /&gt;
==Remove subnet from router==&lt;br /&gt;
 openstack router remove subnet &amp;lt;router&amp;gt; &amp;lt;subnet&amp;gt;&lt;br /&gt;
==add route to router==&lt;br /&gt;
openstack router add route --route destination=10.8.1.0/24,gateway=10.111.222.254 &amp;lt;router&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=list available images=&lt;br /&gt;
 openstack image list&lt;br /&gt;
=Download image=&lt;br /&gt;
Get info about image.&lt;br /&gt;
 openstack image list | grep -i nord-ic-&lt;br /&gt;
 | 98c03b69-4ba8-4276-8695-b6c3f006cf20 | nord-ic-bc84t-rhcos            | active |&lt;br /&gt;
 glance image-download --file nord-ic-bc84t-rhcos --progress 98c03b69-4ba8-4276-8695-b6c3f006cf20&lt;br /&gt;
&lt;br /&gt;
=Upload image=&lt;br /&gt;
https://cloud-images.ubuntu.com/focal/current/&lt;br /&gt;
 openstack image create --disk-format qcow2 --container-format bare --file focal-server-cloudimg-amd64.img Focal_Fossa.$(date_file)&lt;br /&gt;
&lt;br /&gt;
=security=&lt;br /&gt;
==Create security group.==&lt;br /&gt;
 openstack security group create &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group create ssh_allow&lt;br /&gt;
&lt;br /&gt;
==Get security groups.==&lt;br /&gt;
 openstack security group list -c Name -f json | jq -r &#039;.[].Name&#039;&lt;br /&gt;
==Get all security groups with rules.==&lt;br /&gt;
 openstack security group list -c Name -f value | while read SECURITY ; do openstack security group show &amp;quot;$SECURITY&amp;quot; ; done &amp;gt; /temp/${OS_CLOUD##*/}}_openstack_security_group_list_openstack_security_group_show.$(date_file).log&lt;br /&gt;
==Get rules from one security group.==&lt;br /&gt;
 openstack security group rule list &amp;lt;group&amp;gt;&lt;br /&gt;
==Add rule to allow traffic from ip.==&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 6443 --remote-ip 185.53.164.10/32 --ingress &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
 openstack security group rule create ssh_allow --remote-ip 0.0.0.0/0 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack security group rule create &amp;lt;rule&amp;gt; --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Allow nfs4 traffic==&lt;br /&gt;
 # List group to add too.&lt;br /&gt;
 openstack security group list | grep rw-core&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 2049 --remote-ip 10.2.0.0/16 rw-core-p9dq6-master&lt;br /&gt;
==Add security group to server==&lt;br /&gt;
 openstack server add security group &amp;lt;server_name_or_id&amp;gt; &amp;lt;security_group_name_or_id&amp;gt;&lt;br /&gt;
Example of adding a group with a rule.&lt;br /&gt;
 openstack security group create ssh-vpn&lt;br /&gt;
 openstack security group rule create ssh-vpn --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack server add security group RW01 ssh-vpn&lt;br /&gt;
&lt;br /&gt;
=create block device=&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
Resize block device.&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
&lt;br /&gt;
=set physical ip on host=&lt;br /&gt;
 openstack port list&lt;br /&gt;
List in different view.&lt;br /&gt;
 openstack port list -f json | jq -r &#039;.[]|[.ID, .Name, .Status, .&amp;quot;Fixed IP Addresses&amp;quot;[].ip_address]| join(&amp;quot;\t&amp;quot;)&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=Change security group on port=&lt;br /&gt;
Remove if existing port does not exist.&lt;br /&gt;
 openstack port set --no-security-group a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
 openstack port set --security-group 3723f737-280f-453e-af0b-50aca4ce1b0d a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
=create port=&lt;br /&gt;
 openstack port create --network abjorklund-01-h4sxm-openshift --fixed-ip subnet=4bb2ab0c-f8f9-4346-b238-5f992f0bcf56,ip-address=10.1.0.5 abjorklund-01-h4sxm-api-port&lt;br /&gt;
&lt;br /&gt;
=manage loadbalancer aurora/haproxy=&lt;br /&gt;
 openstack loadbalancer&lt;br /&gt;
 openstack loadbalancer list&lt;br /&gt;
 openstack loadbalancer show test-lb -c listeners -f value&lt;br /&gt;
=listerners and l7policy=&lt;br /&gt;
Identify listener&lt;br /&gt;
 openstack loadbalancer listener list --loadbalancer test-lb | grep frontend_https&lt;br /&gt;
List l7policy on listener&lt;br /&gt;
 openstack loadbalancer l7policy list --listener cdae695d-04fe-41e7-b927-88b5f32b9ed8 -f json&lt;br /&gt;
Let traffic through&lt;br /&gt;
 openstack loadbalancer l7policy set --disable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
Maintenance mode&lt;br /&gt;
 openstack loadbalancer l7policy set --enable cdae695d-04fe-41e7-b927-88b5f32b9ed8&lt;br /&gt;
&lt;br /&gt;
=view limits=&lt;br /&gt;
If you have problems to create something in openstack it could be worth verifying you are within limits.&lt;br /&gt;
 openstack limits show --absolute -f value | grep -E &#039;RAM|Cores&#039;&lt;br /&gt;
 openstack quota show --usage -c Resource -c Limit -c &amp;quot;In Use&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=count resources=&lt;br /&gt;
 openstack quota show --usage -c Resource -c &amp;quot;In Use&amp;quot; -f json | jq -r &#039;.[] | select(.Resource == &amp;quot;cores&amp;quot; or .Resource == &amp;quot;ram&amp;quot; or .Resource == &amp;quot;gigabytes&amp;quot; )| [.Resource, .&amp;quot;In Use&amp;quot;] | @tsv&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=get project id=&lt;br /&gt;
 openstack project list -f value -c ID&lt;br /&gt;
=manage s3/swift=&lt;br /&gt;
==create s3 credentials==&lt;br /&gt;
 openstack ec2 credentials create&lt;br /&gt;
 openstack ec2 credentials list&lt;br /&gt;
==Create s3 bucket==&lt;br /&gt;
 aws s3api create-bucket --bucket &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift post &amp;lt;bucket&amp;gt;&lt;br /&gt;
 openstack container create &amp;lt;bucket&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list s3 storage==&lt;br /&gt;
 swift list&lt;br /&gt;
 swift list &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift list --long &amp;lt;container&amp;gt;&lt;br /&gt;
 swift stat &amp;lt;bucket&amp;gt;&lt;br /&gt;
 aws s3api list-buckets&lt;br /&gt;
 openstack container list&lt;br /&gt;
==download file==&lt;br /&gt;
 swift download elastic_snapshots elasticsearch-snapshots/snap-symvtlMpRIetTyfCDsHIVg.dat&lt;br /&gt;
&lt;br /&gt;
==mount s3 bucket==&lt;br /&gt;
 export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID ; export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY ; export AWS_DEFAULT_REGION=us-west-2 ; s3fs -f -d openshift-region /mnt/openshift-region/ -o endpoint=europe-se-1 -o &amp;quot;host=https://object-eu-se-1a.binero.cloud&amp;quot; -o use_path_request_style&lt;br /&gt;
==copy file to s3==&lt;br /&gt;
 openstack server show $(openstack server list -f value | head -1 | awk &#039;{print $2}&#039;) -c project_id -f value&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 openstack configuration show -f json | jq -r &#039;.&amp;quot;auth.username&amp;quot;&#039;&lt;br /&gt;
=sort=&lt;br /&gt;
Sort on column name.&lt;br /&gt;
 openstack network list --sort-column Name&lt;br /&gt;
=selected columns=&lt;br /&gt;
Select column name only&lt;br /&gt;
 openstack server list -c Name -c Status -f table&lt;br /&gt;
&lt;br /&gt;
=create ssh public key(keypair)=&lt;br /&gt;
 openstack keypair create --public-key /home/abjorklund/.ssh/id_ed25519.pub abjorklund_id_ed25519&lt;br /&gt;
List keys&lt;br /&gt;
 openstack keypair list&lt;br /&gt;
Delete kaypair&lt;br /&gt;
 openstack keypair delete &amp;lt;keypair&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=create floating ip=&lt;br /&gt;
 openstack floating ip create europe-se-1-1a-net0&lt;br /&gt;
=remove floating ip=&lt;br /&gt;
 openstack floating ip delete 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign floating ip to port=&lt;br /&gt;
 openstack floating ip set --port abjorklund-01-h4sxm-ingress-port 193.93.251.233&lt;br /&gt;
=unassign floating ip to server=&lt;br /&gt;
 openstack server remove floating ip ocp-13-nkvgn-master-0 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign ip to server=&lt;br /&gt;
 openstack server add floating ip abjorklund_dns-lookup 193.93.248.34&lt;br /&gt;
&lt;br /&gt;
=restart server=&lt;br /&gt;
 openstack server reboot &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server reboot --hard &amp;lt;server&amp;gt;&lt;br /&gt;
=view events/log from server=&lt;br /&gt;
 openstack server event list &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server event show &amp;lt;server&amp;gt; &amp;lt;requestid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=recovery of server using iso=&lt;br /&gt;
Upload iso recovery.&lt;br /&gt;
 export ISO=ubuntu-22.04.4-live-server-amd64.iso ; openstack image create $ISO --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi --disk-format iso --file $ISO --private --progress&lt;br /&gt;
If special properties are not set then set them.&lt;br /&gt;
 openstack image set --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi &amp;lt;image&amp;gt;&lt;br /&gt;
Boot server with recovery iso.&lt;br /&gt;
 export SERVER=&amp;lt;server&amp;gt; ISO=&amp;lt;iso&amp;gt;; openstack --os-compute-api-version 2.87 server rescue --image $ISO $SERVER&lt;br /&gt;
When done disable rescue mode.&lt;br /&gt;
 openstack server unrescue SERVER&lt;br /&gt;
&lt;br /&gt;
=subnet=&lt;br /&gt;
List subnets&lt;br /&gt;
 openstack subnet list&lt;br /&gt;
=hypervisor=&lt;br /&gt;
 Which underlying hypervisor is used.&lt;br /&gt;
 Not of your business. Ask worthy person.&lt;br /&gt;
=volume backups=&lt;br /&gt;
 openstack volume backup list&lt;br /&gt;
=create snapshot=&lt;br /&gt;
 SERVER=&amp;lt;server&amp;gt; openstack server image create --name &amp;quot;backup-${SERVER}-$(date_file)&amp;quot; ${SERVER}&lt;br /&gt;
=volume snapshot=&lt;br /&gt;
 openstack volume snapshot list&lt;br /&gt;
 openstack volume snapshot list -c ID -f value | while read SNAPSHOT ; do echo &#039;*&#039; $SNAPSHOT ; openstack volume snapshot delete $SNAPSHOT ; done&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 # openstack dns https://docs.binero.com/dns.html&lt;br /&gt;
 # List zones&lt;br /&gt;
 openstack zone list&lt;br /&gt;
 # Create zone &lt;br /&gt;
 openstack zone create --email anden@halfface.se binero.halfface.se.&lt;br /&gt;
 # Add entries.&lt;br /&gt;
 openstack recordset create --record &amp;lt;ip&amp;gt; --type A &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # list enries.&lt;br /&gt;
 openstack recordset list &amp;lt;zone&amp;gt;&lt;br /&gt;
 # Delete entries.&lt;br /&gt;
 openstack recordset delete &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # show values for one entry&lt;br /&gt;
 openstack recordset show &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Networking explained=&lt;br /&gt;
&lt;br /&gt;
 1. openstack_networking_network_v2&lt;br /&gt;
 - Purpose: Represents a network in OpenStack.&lt;br /&gt;
 - Interaction: This is the top-level network entity. You create a network to provide a layer 2 domain for your instances.&lt;br /&gt;
 &lt;br /&gt;
 2. openstack_networking_subnet_v2&lt;br /&gt;
 - Purpose: Represents a subnet within a network.&lt;br /&gt;
 - Interaction: A subnet is associated with a network. It defines a range of IP addresses, and optionally, DHCP settings.&lt;br /&gt;
 &lt;br /&gt;
 3. openstack_networking_router_v2&lt;br /&gt;
 - Purpose: Represents a virtual router.&lt;br /&gt;
 - Interaction: Routers are used to route traffic between different subnets or networks. They can also be used to provide external network access to instances.&lt;br /&gt;
 &lt;br /&gt;
 4. openstack_networking_router_interface_v2&lt;br /&gt;
 - Purpose: Connects a router to a subnet.&lt;br /&gt;
 - Interaction: This resource is used to add an interface to a router, effectively connecting the router to a subnet, enabling routing between that subnet and others.&lt;br /&gt;
 &lt;br /&gt;
 5. openstack_networking_port_v2&lt;br /&gt;
 - Purpose: Represents a port on a network.&lt;br /&gt;
 - Interaction: Ports are attachment points for devices (like instances) on a network. They have associated IP addresses and MAC addresses.&lt;br /&gt;
 &lt;br /&gt;
 6. openstack_networking_port_secgroup_associate_v2&lt;br /&gt;
 - Purpose: Associates security groups with a port.&lt;br /&gt;
 - Interaction: Security groups define the firewall rules applied to ports. Associating a security group with a port applies the security group&#039;s rules to that port.&lt;br /&gt;
 &lt;br /&gt;
 7. openstack_networking_secgroup_v2&lt;br /&gt;
 - Purpose: Represents a security group.&lt;br /&gt;
 - Interaction: Security groups contain a set of rules that define the allowed ingress and egress traffic to and from ports.&lt;br /&gt;
 &lt;br /&gt;
 8. openstack_networking_secgroup_rule_v2&lt;br /&gt;
 - Purpose: Represents a rule within a security group.&lt;br /&gt;
 - Interaction: Security group rules define specific ingress or egress traffic allowed to the instances associated with ports to which the security group is applied.&lt;br /&gt;
 &lt;br /&gt;
 9. openstack_networking_floatingip_v2&lt;br /&gt;
 - Purpose: Represents a floating IP.&lt;br /&gt;
 - Interaction: Floating IPs are IP addresses that can be dynamically associated with instances. They provide external access to instances.&lt;br /&gt;
 &lt;br /&gt;
 10. openstack_networking_floatingip_associate_v2&lt;br /&gt;
 - Purpose: Associates a floating IP with a port.&lt;br /&gt;
 - Interaction: This resource links a floating IP to a port, providing the instance with an external IP address that is accessible from outside the OpenStack cloud.&lt;br /&gt;
 &lt;br /&gt;
 Interaction Summary&lt;br /&gt;
 1. Network and Subnet Creation:&lt;br /&gt;
   - Create a network using `openstack_networking_network_v2`.&lt;br /&gt;
   - Create a subnet within this network using `openstack_networking_subnet_v2`.&lt;br /&gt;
 &lt;br /&gt;
 2. Router Configuration:&lt;br /&gt;
   - Create a router using `openstack_networking_router_v2`.&lt;br /&gt;
   - Add an interface to this router to connect it to a subnet using `openstack_networking_router_interface_v2`.&lt;br /&gt;
 &lt;br /&gt;
 3. Instance Connectivity:&lt;br /&gt;
   - Create a port on the network using `openstack_networking_port_v2`.&lt;br /&gt;
   - Attach this port to an instance.&lt;br /&gt;
 &lt;br /&gt;
 4. Security:&lt;br /&gt;
   - Create security groups using `openstack_networking_secgroup_v2`.&lt;br /&gt;
   - Define rules for the security group using `openstack_networking_secgroup_rule_v2`.&lt;br /&gt;
   - Associate security groups with the port using `openstack_networking_port_secgroup_associate_v2`.&lt;br /&gt;
 &lt;br /&gt;
 5. External Access:&lt;br /&gt;
   - Create a floating IP using `openstack_networking_floatingip_v2`.&lt;br /&gt;
   - Associate the floating IP with the port attached to the instance using `openstack_networking_floatingip_associate_v2`.&lt;br /&gt;
=Extend disk=&lt;br /&gt;
Look at usage from beginning.&lt;br /&gt;
 df -lh&lt;br /&gt;
Extend partition partprobe&lt;br /&gt;
 openstack volume set --size &amp;lt;new_size&amp;gt; &amp;lt;volume&amp;gt; --os-volume-api-version 3.42&lt;br /&gt;
Grow partition that you intend to grow. This part can be ignored if using disk as raw partion(/dev/sd?)&lt;br /&gt;
 growpart /dev/sdb 1&lt;br /&gt;
Resize filesystem.&lt;br /&gt;
 resize2fs /dev/sdb1&lt;br /&gt;
Look at usage after extend.&lt;br /&gt;
 df -lh&lt;br /&gt;
=affinity=&lt;br /&gt;
 affinity           Put servers on same hypervisor.&lt;br /&gt;
 anti-affinity      Dont put servers on same hypervisor.&lt;br /&gt;
 soft-affinity      Put servers on same hypervisor if possible.&lt;br /&gt;
 soft-anti-affinity Put server on hypervisor if possible&lt;br /&gt;
&lt;br /&gt;
=Are hosts located on same hypervisor=&lt;br /&gt;
 openstack server list -f value -c ID | while read i ; do openstack server show $i -f value -c hostId -c name | xargs ; done | sort -n&lt;br /&gt;
=Define how server should be handled regarding affinity=&lt;br /&gt;
 openstack server group list&lt;br /&gt;
==create server group name with soft affinity==&lt;br /&gt;
 openstack server group create --policy soft-anti-affinity &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack cli on rhel7/8=&lt;br /&gt;
 yum install centos-release-openstack-train.noarch&lt;br /&gt;
 yum install python-openstackclient&lt;br /&gt;
 sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
 sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
=remove network with dependencies=&lt;br /&gt;
 export ROUTER=93b6d9c1-67db-4e04-9aaf-dad208def3c4&lt;br /&gt;
 export NETWORK=9b86febc-f46f-4990-96c8-ef2e4bc8e139&lt;br /&gt;
 openstack router remove subnet ${ROUTER} $(openstack route show ${ROUTER} -f json | jq -r &#039;.interfaces_info[].subnet_id&#039;)&lt;br /&gt;
 openstack router unset --external-gateway ${ROUTER}&lt;br /&gt;
 for port in $(openstack port list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
   openstack port delete &amp;quot;$port&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 for subnet in $(openstack subnet list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
    openstack subnet delete &amp;quot;$subnet&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 openstack network delete ${NETWORK}&lt;br /&gt;
 openstack router delete ${ROUTER}&lt;br /&gt;
=delete nic/network from server=&lt;br /&gt;
 openstack port list --server &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
 openstack server remove port &amp;lt;vm-name-or-id&amp;gt; &amp;lt;port-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=openstack version=&lt;br /&gt;
openstack major miro version.&lt;br /&gt;
 openstack version show&lt;br /&gt;
 openstack version show -f json | jq -r &#039;.[] | select(.Status == &amp;quot;CURRENT&amp;quot;) | [.&amp;quot;Service Type&amp;quot;, .Version, .Endpoint]|@tsv&#039; | column_tab&lt;br /&gt;
=download volume to you where you want=&lt;br /&gt;
Create an image.&lt;br /&gt;
 openstack image create --volume &amp;lt;volume name&amp;gt; --private --progress &amp;lt;image name&amp;gt;&lt;br /&gt;
Download it using.&lt;br /&gt;
 openstack image save --file &amp;lt;local filename&amp;gt; &amp;lt;image name&amp;gt;&lt;br /&gt;
=application credentials=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Login via working cli session. Create application credentials with read permissions. Create config file with output from the command.&lt;br /&gt;
openstack application credential create reader_3 --role reader -c id -c secret -f value | xargs | while read ID SECRET ; do cat &amp;gt; clouds.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
clouds:&lt;br /&gt;
  ${OS_CLOUD}:&lt;br /&gt;
    auth_type: &amp;quot;v3applicationcredential&amp;quot;&lt;br /&gt;
    auth:&lt;br /&gt;
      auth_url: https://auth.binero.cloud:5000&lt;br /&gt;
      application_credential_id: &amp;quot;${ID}&amp;quot;&lt;br /&gt;
      application_credential_secret: &amp;quot;${SECRET}&amp;quot;&lt;br /&gt;
    region_name: europe-se-1&lt;br /&gt;
    interface: public&lt;br /&gt;
    identity_api_version: 3&lt;br /&gt;
    volume_api_version: 3&lt;br /&gt;
EOF&lt;br /&gt;
done&lt;br /&gt;
# To be able to use above config file you have to set OS_CLOUD variable and have the clouds.yaml file in either your working directory or  ~/.config/openstack/clouds.yaml.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=manage certs=&lt;br /&gt;
==List secrets==&lt;br /&gt;
 openstack secret list&lt;br /&gt;
==Add new cert. Content type p12== &lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
 openstack secret store --name star-sulzer-com-lb-cert-2026-10-23 --secret-type opaque --payload-content-type &#039;application/octet-stream&#039; --payload-content-encoding base64 --payload &amp;quot;$(base64 /temp/sulzer.p12)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Download cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429 --payload_content_type &#039;application/octet-stream&#039; --file /tmp/tmp&lt;br /&gt;
==Look at cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429   --payload_content_type &#039;application/octet-stream&#039;   --payload -f value | python3 -c &amp;quot;import sys; sys.stdout.buffer.write(eval(sys.stdin.read()))&amp;quot; | openssl pkcs12 -nodes -info -passin pass:&lt;br /&gt;
==Add cert to listener==&lt;br /&gt;
 openstack loadbalancer listener set &amp;lt;listener_id&amp;gt; --default-tls-container-ref &amp;lt;certificate_secret_id&amp;gt;&lt;br /&gt;
=dhcp options provided by cloud-init=&lt;br /&gt;
 /var/log/cloud-init.log&lt;br /&gt;
=List hypervisor=&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;.[]|select(.State == &amp;quot;up&amp;quot;)|.&amp;quot;Hypervisor Hostname&amp;quot;&#039; | sort -n | while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;[.[] | select(.State == &amp;quot;up&amp;quot;)]  | sort_by(.&amp;quot;Hypervisor Hostname&amp;quot; | match(&amp;quot;([0-9]+)&amp;quot;).captures[0].string | tonumber) | .[].&amp;quot;Hypervisor Hostname&amp;quot;&#039;| while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16596</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16596"/>
		<updated>2026-04-02T11:56:08Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* list operatorhub/catalogsources */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
=delete operator=&lt;br /&gt;
 export OPERATOR=gitops ; oc get csv,subscriptions -n openshift-operators | grep &amp;quot;${OPERATOR}&amp;quot; | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get $i -n openshift-operators &amp;lt;/dev/null; echo oc delete $i ; done ; oc get installplan -n openshift-operators --sort-by=.metadata.creationTimestamp | grep &amp;quot;${OPERATOR}&amp;quot; | tail -n1 | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get installplan $i -n openshift-operators &amp;lt;/dev/null ; echo oc delete installplan $i; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v$(oc version -o json | jq -r .openshiftVersion | grep -o &#039;^[0-9]*\.[0-9]*&#039;)&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image,ADDRESS:.status.connectionState.address&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=When creating new machines. Os template comes from the following values=&lt;br /&gt;
 oc get machinesets -o name -n openshift-machine-api | while read i ; do echo $i $( oc get -n openshift-machine-api $i -o json | jq -r &#039;.spec.template.spec.providerSpec.value|.rootVolume.sourceUUID,.template&#039; ) ; done&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Commands&amp;diff=16595</id>
		<title>Commands</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Commands&amp;diff=16595"/>
		<updated>2026-03-27T12:23:36Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* proxy */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=7za=&lt;br /&gt;
decompress file&lt;br /&gt;
 7za e myfiles.7z&lt;br /&gt;
=ab=&lt;br /&gt;
apache benchmarking&lt;br /&gt;
 ab -n 50 https://www.halfface.se/photos/&lt;br /&gt;
 ab -n 1000 -c 10 https://www.halfface.se/wiki/index.php/Halfface&lt;br /&gt;
&lt;br /&gt;
=abcde=&lt;br /&gt;
Rip cd.&lt;br /&gt;
 abcde&lt;br /&gt;
=adb android=&lt;br /&gt;
 # install adb&lt;br /&gt;
 dnf install android-tools&lt;br /&gt;
 # enable debug. On phone. Settings. about phone. build version. Click until prompted. Enable debug via selector.&lt;br /&gt;
 # Connect phone via usb.&lt;br /&gt;
 # List phones.&lt;br /&gt;
 adb devices&lt;br /&gt;
 # Get shell on phone.&lt;br /&gt;
 adb shell&lt;br /&gt;
 # list installed packages.&lt;br /&gt;
 pm list packages -f&lt;br /&gt;
 adb shell pm list packages -f | grep game&lt;br /&gt;
 # Uninstall&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gos&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gametools&lt;br /&gt;
 adb shell pm disable-user --user 0 com.sec.android.app.samsungapps&lt;br /&gt;
&lt;br /&gt;
=agrep=&lt;br /&gt;
Aproximate grep. 3 differences from andreas&lt;br /&gt;
 agrep -3 andreas /var/log/messages&lt;br /&gt;
=alacritty(Terminal emulator hw accellerated)=&lt;br /&gt;
Terminal copy mode.&lt;br /&gt;
 CTRL + SHIFT + SPACE&lt;br /&gt;
=alsactl=&lt;br /&gt;
Reload alsa drivers&lt;br /&gt;
 systemctl restart alsa-state&lt;br /&gt;
 sudo alsactl restore&lt;br /&gt;
&lt;br /&gt;
=alternatives=&lt;br /&gt;
 alternatives --set mta /usr/sbin/sendmail.postfix&lt;br /&gt;
 sudo alternatives --config java&lt;br /&gt;
&lt;br /&gt;
=antiword=&lt;br /&gt;
 antiword bad.doc &amp;gt; pure.txt&lt;br /&gt;
&lt;br /&gt;
=arecord=&lt;br /&gt;
List soundcards.&lt;br /&gt;
 arecord -l&lt;br /&gt;
Chose source.&lt;br /&gt;
 alsamixer&lt;br /&gt;
Create mp3 from source.&lt;br /&gt;
 arecord -f cd -d 5 -t raw | lame -x -r - out.mp3&lt;br /&gt;
=arp-scan=&lt;br /&gt;
Scan ip addresses on local subnet&lt;br /&gt;
 arp-scan --localnet | sort -n -k4 -t. | grep ^[0-9]&lt;br /&gt;
&lt;br /&gt;
=at=&lt;br /&gt;
Run command at specific time. Look at queue.&lt;br /&gt;
 echo &#039;/usr/bin/espeak -s120 &amp;quot;I will say this only once.&amp;quot;&#039; | at -t $(date +%Y%m%d%H%M --date=&amp;quot;+2 min&amp;quot;)&lt;br /&gt;
 atq&lt;br /&gt;
List at jobs.&lt;br /&gt;
 atq ; atq | awk &#039;{print $1}&#039; | while read i ; do echo &#039;***&#039; $i ; at -c $i 2&amp;gt;&amp;amp;1 | tail -3 | head -1 ; done&lt;br /&gt;
 2       Sun May 17 04:00:00 2020 a root&lt;br /&gt;
 *** 2&lt;br /&gt;
 /usr/bin/systemctl restart springboot_uc_supportrouter.service&lt;br /&gt;
&lt;br /&gt;
=authselect=&lt;br /&gt;
Redhat command to manage connection to underlying services and features.&lt;br /&gt;
 # To change content of nsswitch.conf do to your used profile.&lt;br /&gt;
 vim /usr/share/authselect/default/local/nsswitch.conf&lt;br /&gt;
 authselect select local --force&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
 base64 -d /tmp/html | elinks --dump | less -ISRM&lt;br /&gt;
No wrapping&lt;br /&gt;
 base64 --wrap=0&lt;br /&gt;
 base64 -w 0&lt;br /&gt;
=bash=&lt;br /&gt;
curl&lt;br /&gt;
 exec 3&amp;lt;&amp;gt;/dev/tcp/localhost/8080 ; echo -e &amp;quot;GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n&amp;quot; &amp;gt;&amp;amp;3 ; cat &amp;lt;&amp;amp;3&lt;br /&gt;
&lt;br /&gt;
=bbk_cli_...=&lt;br /&gt;
Bredbandskollen via cli.&lt;br /&gt;
 bbk_cli_linux_amd64-1.0&lt;br /&gt;
&lt;br /&gt;
=bc=&lt;br /&gt;
Simplify using bercerly calculator&lt;br /&gt;
 calc(){ echo -e &amp;quot;scale=8\n${@}\nquit\n&amp;quot; | bc ; }&lt;br /&gt;
To the power of(upphöjt i)&lt;br /&gt;
 2^10 = 1024&lt;br /&gt;
scientific (aka exponential) notation&lt;br /&gt;
 echo 1.6945991213315015e+09 | sed -E &#039;s/([+-]?[0-9.]+)[eE]\+?(-?)([0-9]+)/(\1*10^\2\3)/g&#039; | bc&lt;br /&gt;
=bitwarden=&lt;br /&gt;
 # Install bw.&lt;br /&gt;
 curl -L -o /tmp/bw.zip &#039;https://vault.bitwarden.com/download/?app=cli&amp;amp;platform=linux&#039; ; (cd /usr/local/bin ; sudo unzip -o /tmp/bw.zip)&lt;br /&gt;
 # Remove bitwarden config.&lt;br /&gt;
 unset BW_CLIENTID BW_CLIENTSECRET BW_SESSION&lt;br /&gt;
 \rm -r /home/abjorklund/.config/Bitwarden*&lt;br /&gt;
 # Set bitwarden server.&lt;br /&gt;
 bw config server https://halfface.se/vaultwarden/&lt;br /&gt;
 # api login&lt;br /&gt;
 bw login --apikey&lt;br /&gt;
 # sso login. When web server opens write &amp;quot;Binero SSO&amp;quot;&lt;br /&gt;
 bw login&lt;br /&gt;
 # Unlock&lt;br /&gt;
 bw unlock&lt;br /&gt;
 # Sync from server.&lt;br /&gt;
 bw sync&lt;br /&gt;
 # List items.&lt;br /&gt;
 bw list items | jq -r &#039;.[].name&#039;&lt;br /&gt;
 # get totp&lt;br /&gt;
 bw_halfface get totp ginatricot_user&lt;br /&gt;
 # get login info.&lt;br /&gt;
 bw get item bareos-webui | jq .login&lt;br /&gt;
 # which version&lt;br /&gt;
 curl https://halfface.se/vaultwarden/api/version&lt;br /&gt;
 podman image inspect docker.io/vaultwarden/server | jq -r &#039;.[].Config.Labels.&amp;quot;org.opencontainers.image.version&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=bluetoothctl=&lt;br /&gt;
Enable bluetooth&lt;br /&gt;
 sudo systemctl enable bluetooth --now&lt;br /&gt;
Scan&lt;br /&gt;
 bluetoothctl scan on&lt;br /&gt;
Pair&lt;br /&gt;
 bluetoothctl pair &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Connect&lt;br /&gt;
 bluetoothctl connect &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Trust&lt;br /&gt;
 bluetoothctl trust &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Remove&lt;br /&gt;
 bluetoothctl remove &amp;lt;MAC address&amp;gt;&lt;br /&gt;
List paired devices&lt;br /&gt;
 bluetoothctl devices&lt;br /&gt;
Get info about paired device&lt;br /&gt;
 bluetoothctl info 00:00:00:00:3E:E2&lt;br /&gt;
&lt;br /&gt;
=blkid=&lt;br /&gt;
Get uuid of disk.&lt;br /&gt;
 blkid /dev/sdb1&lt;br /&gt;
 /dev/sdb1: UUID=&amp;quot;64cd54f7-5330-425d-81e5-a0e473a5f5e7&amp;quot; TYPE=&amp;quot;ext4&amp;quot; PARTLABEL=&amp;quot;primary&amp;quot; PARTUUID=&amp;quot;21f38e48-af2d-4fdd-854a-5910f392a6e0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bonnie++=&lt;br /&gt;
Report performance on disk. benchmark&lt;br /&gt;
 bonnie++ -u 0:0&lt;br /&gt;
On machine running out of disk&lt;br /&gt;
 sudo bonnie++ -d ./ -s 400 -r 200 -u root&lt;br /&gt;
Example command.&lt;br /&gt;
 bonnie++ -d /storage/temp/ -s 32G -n 0 -m TEST -f -b -u abjorklund&lt;br /&gt;
&lt;br /&gt;
=boot=&lt;br /&gt;
Booting singe user mode.&lt;br /&gt;
 kernel ... single&lt;br /&gt;
&lt;br /&gt;
=bootchart=&lt;br /&gt;
Analyze startup times.&lt;br /&gt;
&lt;br /&gt;
=bootgraph=&lt;br /&gt;
How to use.&lt;br /&gt;
 Kernel later than 2.6.28&lt;br /&gt;
 kernel option initcall_debug&lt;br /&gt;
 dmesg | /usr/src/linux-headers-2.6.28-11-generic/scripts/bootgraph.pl &amp;gt; /tmp/bootgraph.svg&lt;br /&gt;
=bpftrace=&lt;br /&gt;
run code at each system call&lt;br /&gt;
 #!/usr/bin/bpftrace&lt;br /&gt;
 &lt;br /&gt;
 interval:s:5&lt;br /&gt;
 {&lt;br /&gt;
   exit();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 kprobe:do_sys_open&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;%s %s\n&amp;quot;, comm, str(arg1));&lt;br /&gt;
 }&lt;br /&gt;
=busctl=&lt;br /&gt;
 busctl may be used to introspect and monitor the D-Bus bus.&lt;br /&gt;
&lt;br /&gt;
=bzip2=&lt;br /&gt;
Extract keep original&lt;br /&gt;
 bzip2 -dk /compressed_file.bz2 and extract standard out via tar.&lt;br /&gt;
Extract bunzip2 file and extract via tar from standard out.&lt;br /&gt;
 bzip2 -c /compressed_file.bz2 | tar -xivf -&lt;br /&gt;
&lt;br /&gt;
=cdrecord=&lt;br /&gt;
Blank cd/dvd rw&lt;br /&gt;
 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=all -force&lt;br /&gt;
=certutil=&lt;br /&gt;
Test password. Password should be part of file called by -f&lt;br /&gt;
 certutil -K -d /etc/dirsrv/slapd-halfface -f /tmp/pin.txt&lt;br /&gt;
Remove cert if it already exist.&lt;br /&gt;
 certutil -D -n &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Create new certificate.&lt;br /&gt;
 certutil -S -n Self-Signed-CA -s CN=ssca.389ds.halfface,O=halfface,L=389ds,ST=Stockholm,C=SE -x -t &amp;quot;CT,,&amp;quot; -v 480 -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt&lt;br /&gt;
List certificates&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/&lt;br /&gt;
Look at a specific certificate&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/ -n &amp;quot;Self-Signed-CA&amp;quot;&lt;br /&gt;
Remove orphan key&lt;br /&gt;
 certutil -F -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt -k 27e0fcb7a201cf0f0c3674eae03c8d94b47b4de0&lt;br /&gt;
Generate a new csr&lt;br /&gt;
 certutil -R -s &amp;quot;CN=www.halfface.se,O=halfface,L=389ds,ST=Stockholm,C=SE&amp;quot; -o server.csr -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt --extSAN &amp;quot;dns:www.halfface.se,dns:ldap.halfface.se&amp;quot; -v 240&lt;br /&gt;
sign certificate&lt;br /&gt;
 certutil -C -i server.csr -o server-cert.crt -c &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Import signed cert&lt;br /&gt;
 certutil -A -n &amp;quot;Server-Cert&amp;quot; -t &amp;quot;u,u,u&amp;quot; -i server-cert.crt -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
==Add certs to chrome==&lt;br /&gt;
 for i in $(ls) ; do echo &#039;*&#039; $i ; certutil -d sql:${HOME}/.pki/nssdb -A -t &amp;quot;C,,&amp;quot; -n &amp;quot;vSphere Root CA $i&amp;quot; -i $i ; done&lt;br /&gt;
&lt;br /&gt;
=cfdisk=&lt;br /&gt;
 Disk partitioning via ncurses interface. like fdisk.&lt;br /&gt;
=chage=&lt;br /&gt;
List password properties of user&lt;br /&gt;
 chage -l abjorklund&lt;br /&gt;
Unlimited login&lt;br /&gt;
 chage -I -1 -m 0 -M 99999 -E -1 sftponly&lt;br /&gt;
&lt;br /&gt;
=chattr/lsattr=&lt;br /&gt;
Set extendet attributes of files.&lt;br /&gt;
 # Lock file for most activities.&lt;br /&gt;
 chattr +i file&lt;br /&gt;
 # Unlock file&lt;br /&gt;
 chattr -i file&lt;br /&gt;
 # recursive lsattr looking for imutable.&lt;br /&gt;
 lsattr -aR -- .//. 2&amp;gt;/dev/null | sed -rn &#039;/i.+\.\/\/\./s/\.\/\///p&#039;&lt;br /&gt;
&lt;br /&gt;
=chmod=&lt;br /&gt;
Sticky bit on directory. Only owners of files are able to delete.&lt;br /&gt;
 chmod 1755 /file.&lt;br /&gt;
 -rwxr-xr-t&lt;br /&gt;
GUID on file. binaries started will have the group set to the defined group.&lt;br /&gt;
 chmod 2755 /file&lt;br /&gt;
 -rwxr-sr-x&lt;br /&gt;
SUID on file.&lt;br /&gt;
 chmod 4755 /file&lt;br /&gt;
 -rwsr-xr-x&lt;br /&gt;
Remover permissions for others&lt;br /&gt;
 chmod o-rwx&lt;br /&gt;
&lt;br /&gt;
=chntpw=&lt;br /&gt;
 # Change windows passwords offline&lt;br /&gt;
 mkdir /mnt/disk ; mount /dev/sd1 /mnt/disk; cd /mnt/disk/Windows/System32/config&lt;br /&gt;
 # List local users.&lt;br /&gt;
 chntpw -l SAM&lt;br /&gt;
 # clear password on user.&lt;br /&gt;
 chntpw -u Administrator SAM&lt;br /&gt;
=chrony=&lt;br /&gt;
 # setup time sync via ntp.&lt;br /&gt;
 /etc/chrony.conf&lt;br /&gt;
 # look at status&lt;br /&gt;
 chronyc tracking&lt;br /&gt;
 # List ntp sources.&lt;br /&gt;
 chronyc sources&lt;br /&gt;
   .-- Source mode  &#039;^&#039; = server, &#039;=&#039; = peer, &#039;#&#039; = local clock.&lt;br /&gt;
  / .- Source state &#039;*&#039; = current synced, &#039;+&#039; = combined , &#039;-&#039; = not combined,&lt;br /&gt;
 | /   &#039;?&#039; = unreachable, &#039;x&#039; = time may be in error, &#039;~&#039; = time too variable.&lt;br /&gt;
 ||                                                 .- xxxx [ yyyy ] +/- zzzz&lt;br /&gt;
 ||      Reachability register (octal) -.           |  xxxx = adjusted offset,&lt;br /&gt;
 ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,&lt;br /&gt;
 ||                                \     |          |  zzzz = estimated error.&lt;br /&gt;
 ||                                 |    |           \&lt;br /&gt;
 MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
 ===============================================================================&lt;br /&gt;
 #? PHC0                          0   3     0   19d    +41ns[ +349ns] +/-  104ns&lt;br /&gt;
Force syncronize&lt;br /&gt;
 sudo chronyc -a &#039;burst 4/4&#039;&lt;br /&gt;
Make a big step. Did not work for me.&lt;br /&gt;
 chronyc -a makestep&lt;br /&gt;
Verify clock&lt;br /&gt;
 chronyd -q &#039;server pool.ntp.org iburst&#039;&lt;br /&gt;
&lt;br /&gt;
=chvt=&lt;br /&gt;
From a script change to a virtual interface and connect script to that terminal.&lt;br /&gt;
chvt 3 exec &amp;lt; /dev/tty3 &amp;gt; /dev/tty3&lt;br /&gt;
&lt;br /&gt;
=cacafire=&lt;br /&gt;
 View some fire in ascii.&lt;br /&gt;
&lt;br /&gt;
=clean=&lt;br /&gt;
Clean file from comments and blank lines.&lt;br /&gt;
 sed &#039;/ *#/d; /^ *$/d&#039;&lt;br /&gt;
&lt;br /&gt;
=codepage=&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 convmv -f cp850 -t iso-8859-1 --notest *&lt;br /&gt;
 convmv -f utf8 -t iso8859-1 -r --notest *&lt;br /&gt;
 convmv -f iso8859-1 -t en_US.UTF-8 -r --notest .&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 iconv --from-code=ISO-8859-15 --to-code=UTF-8 document.csv &amp;gt; document_iconv.csv&lt;br /&gt;
View nfo files&lt;br /&gt;
 iconv -f CP437 -t UTF-8 KaOs.nfo&lt;br /&gt;
&lt;br /&gt;
=column=&lt;br /&gt;
Create nice column. Use tab as delimiter.&lt;br /&gt;
 column -t -s $&#039;\t&#039; /file.tsv&lt;br /&gt;
=compgen=&lt;br /&gt;
List all commands &lt;br /&gt;
 compgen -A function -abck&lt;br /&gt;
&lt;br /&gt;
=convert=&lt;br /&gt;
Convert Image to 8 bit grey with threshold for white.&lt;br /&gt;
 for tif in *.tif; do convert -depth 8 -white-threshold 70% ${tif} ${tif%%.*}.png;done&lt;br /&gt;
Resize image&lt;br /&gt;
 convert -resize 25% -gamma 1.5 2011-08-03_11-09-43.jpg 2011-08-03_11-09-43_new.jpg&lt;br /&gt;
Multipage pdf.&lt;br /&gt;
 convert -adjoin -page A4 -compress jpeg Infineon1.tif Infineon2.tif Infineon.pdf&lt;br /&gt;
 pdfunite RegionUppsala01.pdf RegionUppsala02.pdf RegionUppsala03.pdf RegionUppsala04.pdf RegionUppsala.pdf&lt;br /&gt;
Prepare photos for printing.&lt;br /&gt;
 convert -rotate 90 -gamma 1.5 -resize 25% -compress jpeg -quality 80 -adjoin -page A4 * print.pdf&lt;br /&gt;
Resize change aspect.&lt;br /&gt;
 convert Slide1.PNG -resize 1920x1080\! slide01.png&lt;br /&gt;
animated gif&lt;br /&gt;
 convert -delay 100 -loop 0 *.jpg animation.gif&lt;br /&gt;
Create multipage pdf of photos.&lt;br /&gt;
 convert -resize 25% -adjoin -page A4 -rotate 90 -compress jpeg *.jpg test.pdf ; pdfjam test.pdf --no-landscape --frame true --nup 2x2 --suffix 4up --outfile /temp/photos/Alva/test_2x2.pdf&lt;br /&gt;
For vertical stacking (top to bottom):&lt;br /&gt;
 convert -append 1.jpg 2.jpg out.jpg&lt;br /&gt;
For horizontal stacking (left to right):&lt;br /&gt;
 convert +append 1.jpg 2.jpg out.jpg&lt;br /&gt;
Remove transparancy&lt;br /&gt;
 convert image.png -background white -flatten image.jpg&lt;br /&gt;
&lt;br /&gt;
=cpio=&lt;br /&gt;
Copy wanted partitions.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd /boot/ ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc )&amp;quot; | (cd /mnt/sysimage/boot ; cpio -idvuma )&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd / ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc)&amp;quot; | (cd /mnt/sysimage ; cpio -idvuma )&lt;br /&gt;
 # -o copy out mode.&lt;br /&gt;
 # -0 terminated by null character.&lt;br /&gt;
 # -Hnewc som storing format.&lt;br /&gt;
 # -i extract copy in mode.&lt;br /&gt;
 # -d make directories.&lt;br /&gt;
 # -v verbose.&lt;br /&gt;
 # -V print dot.&lt;br /&gt;
 # -u replace all files.&lt;br /&gt;
 # -m preserve modification time.&lt;br /&gt;
 # -a preserve access time.&lt;br /&gt;
=cpulimit=&lt;br /&gt;
Limit application cpu usage to 25% cpu utilization. Inherit limit to spawned processes.&lt;br /&gt;
 cpulimit -i -l 25 /apps&lt;br /&gt;
&lt;br /&gt;
=crash=&lt;br /&gt;
Troubleshoot hung Redhat vm.&lt;br /&gt;
Dump vm.&lt;br /&gt;
 virsh dump &amp;lt;vm&amp;gt; --memory-only --verbose /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Login to machine you dump:ed and rebooted. Verify kernel version. uname -r&lt;br /&gt;
Setup vm similar to the one you dumped.&lt;br /&gt;
Install rpm:s to be able to debug.&lt;br /&gt;
 export UNAME_R=5.14.0-554.el9.x86_64&lt;br /&gt;
 dnf install --enablerepo=* crash kernel-modules-${UNAME_R} kernel-core-${UNAME_R} kernel-${UNAME_R} kernel-modules-core-${UNAME_R} kernel-debuginfo-common-x86_64-${UNAME_R} kernel-debuginfo-${UNAME_R}&lt;br /&gt;
Tips to find rpm:s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://kojihub.stream.centos.org/koji/builds -&amp;gt; Dropdown: builds -&amp;gt; Search: kernel-5.14.0-554.el9&lt;br /&gt;
https://kojihub.stream.centos.org/kojifiles/packages/kernel/ -&amp;gt; find your way down the tree.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start crash. Write help to give advice. LLMS are quite useful for troubleshooting advice.&lt;br /&gt;
 crash /usr/lib/debug/lib/modules/${UNAME_R}/vmlinux /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Scripting with crash&lt;br /&gt;
 cd /temp/ ;cat commands.txt ; for i in $(ls instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04*) ; do crash -i commands.txt /usr/lib/debug/lib/modules/5.14.0-554.el9.x86_64/vmlinux /temp/instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04.core &amp;gt; $i.log &amp;lt;/dev/null ; done&lt;br /&gt;
 ps&lt;br /&gt;
 runq&lt;br /&gt;
&lt;br /&gt;
=cronie=&lt;br /&gt;
Start cronie in foreground. Write what it is doing.&lt;br /&gt;
 /usr/sbin/crond -n -x sch&lt;br /&gt;
&lt;br /&gt;
=crontab/cron=&lt;br /&gt;
crontab.&lt;br /&gt;
 * * * * *  command to be executed&lt;br /&gt;
 - - - - -&lt;br /&gt;
 | | | | |&lt;br /&gt;
 | | | | +----- day of week (0 - 6) (Sunday=0)&lt;br /&gt;
 | | | +------- month (1 - 12)&lt;br /&gt;
 | | +--------- day of month (1 - 31)&lt;br /&gt;
 | +----------- hour (0 - 23)&lt;br /&gt;
 +------------- min (0 - 59)&lt;br /&gt;
 0 Sunday&lt;br /&gt;
 1 Monday&lt;br /&gt;
 2 Tuesday&lt;br /&gt;
 3 Wednesday&lt;br /&gt;
 4 Thursday&lt;br /&gt;
 5 Friday&lt;br /&gt;
 6 Saturday&lt;br /&gt;
 @reboot &amp;quot;run command at reboot&amp;quot;&lt;br /&gt;
 If you need % in crontab escape it. \%&lt;br /&gt;
&lt;br /&gt;
Run command every 10 minutes.&lt;br /&gt;
 */10 * * * * command&lt;br /&gt;
&lt;br /&gt;
Run command at 12:00 and 24:00 hours.&lt;br /&gt;
 00 0,12 * * *      command&lt;br /&gt;
&lt;br /&gt;
Run command between 8-17 every 2 hours.&lt;br /&gt;
 0 8-17/2 * * * /path/command&lt;br /&gt;
 0 8,10,12,14,16 * * * /path/command&lt;br /&gt;
&lt;br /&gt;
Start program under crontab.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 COMMAND=&amp;quot;screen -L -d -m ping www.dn.se&amp;quot;&lt;br /&gt;
 if [ &amp;quot;$(ps -ef | grep -i ping | grep -v grep)&amp;quot; ]&lt;br /&gt;
 then&lt;br /&gt;
   echo &amp;quot;\&amp;quot;${COMMAND}\&amp;quot; already running.&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;Starting \&amp;quot;${COMMAND}\&amp;quot;.&amp;quot;&lt;br /&gt;
   cd /tmp&lt;br /&gt;
   ${COMMAND}&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=crudini=&lt;br /&gt;
Edit ini files och cli.&lt;br /&gt;
 crudini --set /lib/systemd/system/icinga2.service Service Nice -10 ; systemctl daemon-reload ; systemctl restart icinga2.service&lt;br /&gt;
&lt;br /&gt;
=cryptsetup=&lt;br /&gt;
luks. Process to unlock disk. Mount it and unmount and encrypt.&lt;br /&gt;
 cryptsetup luksOpen /dev/nvme0n1p3 secure&lt;br /&gt;
 mount /dev/mapper/secure /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 cryptsetup luksClose secure&lt;br /&gt;
==create luks encrypted disk==&lt;br /&gt;
 # Add block device and add gpt label. Create partition.&lt;br /&gt;
 cfdisk /dev/sde&lt;br /&gt;
 # Encypt partition&lt;br /&gt;
 sudo cryptsetup luksFormat /dev/vdb1&lt;br /&gt;
 # open encrypted disk&lt;br /&gt;
 sudo cryptsetup open /dev/vdb1 encrypted-disk&lt;br /&gt;
 # Format disk&lt;br /&gt;
 sudo mkfs.ext4 /dev/mapper/encrypted-disk&lt;br /&gt;
 # Info about partition&lt;br /&gt;
 sudo blkid /dev/vdb1 &lt;br /&gt;
 /dev/vdb1: UUID=&amp;quot;cb2e7238-8245-41cb-9811-6804f602e5e8&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot; PARTUUID=&amp;quot;56b829b6-8295-4963-9562-29e8937819a8&amp;quot;&lt;br /&gt;
 # Setup crypttab if you want to decrypt at boot splash&lt;br /&gt;
 echo &#039;encrypted-disk UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 none luks&#039; | sudo tee -a /etc/crypttab&lt;br /&gt;
 # Manually unlock luks partition&lt;br /&gt;
 sudo cryptsetup luksOpen UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 encrypted-disk&lt;br /&gt;
 # Manuall lock luks partition&lt;br /&gt;
 sudo cryptsetup luksClose encrypted-disk&lt;br /&gt;
 # Add disk to fstab&lt;br /&gt;
 echo &#039;/dev/mapper/encrypted-disk /mnt/encrypted-disk ext4 noauto 0 2&#039; | sudo tee -a /etc/fstab&lt;br /&gt;
 # Create mount point&lt;br /&gt;
 sudo mkdir /mnt/encrypted-disk ; sudo chmod 777 /mnt/encrypted-disk&lt;br /&gt;
 # mount disk&lt;br /&gt;
 sudo umount /mnt/encrypted-disk&lt;br /&gt;
 # Change password of luks partition&lt;br /&gt;
 sudo cryptsetup luksAddKey UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup --test-passphrase -v open UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup luksRemoveKey UUID=cb2e7238-8245-4&lt;br /&gt;
&lt;br /&gt;
=cups=&lt;br /&gt;
Install cups&lt;br /&gt;
 dnf install cups&lt;br /&gt;
enable cups&lt;br /&gt;
 systemctl enable cups.service --now&lt;br /&gt;
Configure printer in cups.&lt;br /&gt;
 http://localhost:631/&lt;br /&gt;
&lt;br /&gt;
=cut=&lt;br /&gt;
Cuf everything from field 5.&lt;br /&gt;
 cut -f5- -d &#039; &#039;&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
==Get http return code.==&lt;br /&gt;
 curl --connect-timeout 3 --max-time 9 -ksL -w &#039;%{http_code}\n&#039; &#039;http://www.dn.se&#039; -o /dev/null&lt;br /&gt;
==get external ip. what is my ip==&lt;br /&gt;
 curl ifconfig.me &lt;br /&gt;
==get external ip and all related browser information.==&lt;br /&gt;
 curl ifconfig.me/all &lt;br /&gt;
==Alternative address for domain.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -sk --resolve www.halfface.se:80:127.0.0.1 http://www.halfface.se&lt;br /&gt;
 curl http://127.0.0.1/ -H &amp;quot;Host: halfface.se&amp;quot; -H &amp;quot;X-Forwarded-Proto: https&amp;quot; -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get header / mime type==&lt;br /&gt;
 curl -I http://url.se&lt;br /&gt;
==post file==&lt;br /&gt;
 curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult&lt;br /&gt;
==post file via ftp using proxy==&lt;br /&gt;
 curl -p --proxy http://proxy.example.se:3128 -v -T backup.tar ftp://user:password@ftp.example.se/directory/&lt;br /&gt;
&lt;br /&gt;
==cookie format. tab delimited.==&lt;br /&gt;
 domain     - The domain that created AND that can read the variable. .halfface.se&lt;br /&gt;
 flag       - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain.&lt;br /&gt;
 path       - The path within the domain that the variable is valid for.&lt;br /&gt;
 secure     - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.&lt;br /&gt;
 expiration - The UNIX time that the variable will expire on. UNIX time is defined as the number of seconds since Jan 1, 1970 0:00:00 GMT.&lt;br /&gt;
 name       - The name of the variable.&lt;br /&gt;
 value      - The value of the variable.&lt;br /&gt;
&lt;br /&gt;
==add certificate authority to openssl==&lt;br /&gt;
Redhat based os:es this file gets updated. /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt&lt;br /&gt;
 cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/&lt;br /&gt;
 update-ca-trust&lt;br /&gt;
Debian based&lt;br /&gt;
 cp /tmp/ca.crt /usr/share/ca-certificates/extra&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
Debian 2 &lt;br /&gt;
 cp foo.crt /usr/local/share/ca-certificates/foo.crt&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
==curl ipv6==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -6 -g &amp;quot;http://[::1]:80/&amp;quot;&lt;br /&gt;
curl -g &amp;quot;http://[2001:9b1:402d:0:ffff:f038:ec3e:b5d4]/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==proxy==&lt;br /&gt;
 curl  --proxy http://proxy.se:3128 -sk &amp;quot;http://mirrorlist.centos.org&amp;quot;&lt;br /&gt;
===no_proxy===&lt;br /&gt;
 export https_proxy=http://proxy.se:3128 ; export http_proxy=$https_proxy ; export HTTPS_PROXY=$https_proxy ; export HTTP_PROXY=$https_proxy ; export no_proxy=localhost,127.0.0.1,.inter.net,$(echo 10.217.{4..5}.{1..254}, 10.217.5.255) ; export NO_PROXY=$no_proxy&lt;br /&gt;
===time spent===&lt;br /&gt;
 -w &amp;quot;time_namelookup: %{time_namelookup}, time_connect: %{time_connect}, time_appconnect: %{time_appconnect}, time_pretransfer: %{time_pretransfer}, time_redirect: %{time_redirect}, time_starttransfer: %{time_starttransfer}, time_total: %{time_total}\n&amp;quot;&lt;br /&gt;
==which isp==&lt;br /&gt;
 curl -s http://ip-api.com/json/${IP} | grep -o &#039;&amp;quot;isp&amp;quot;:&amp;quot;[^&amp;quot;]*&amp;quot;&#039; | cut -d &#039;&amp;quot;&#039; -f4&lt;br /&gt;
&lt;br /&gt;
=Is it a free day?=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sk https://sholiday.faboul.se/dagar/v2.1/2023 | jq -r &#039;.dagar[] |select(.&amp;quot;arbetsfri dag&amp;quot;==&amp;quot;Ja&amp;quot;)|.datum&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=qr code=&lt;br /&gt;
encode&lt;br /&gt;
 qrencode &amp;quot;Andreas&amp;quot; -o /tmp/qr_Andreas.png&lt;br /&gt;
decode&lt;br /&gt;
 zbarimg /tmp/qr_Andreas.png&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
Get date in requested format.&lt;br /&gt;
 date &#039;+%Y-%m-%d %H:%M&#039;&lt;br /&gt;
 date +%Y-%m-%d-%H%M&lt;br /&gt;
 date &amp;quot;+%F_%T&amp;quot; # 2017-01-16_19:41:41&lt;br /&gt;
&lt;br /&gt;
date 033121422003.55&lt;br /&gt;
 Mon Mar 31 21:42:55 PST 2003&lt;br /&gt;
 date MMDDhhmmCCYY.ss&lt;br /&gt;
&lt;br /&gt;
Whats the date in 1000 years. Or any other increment.&lt;br /&gt;
 date --date=&amp;quot;+1000 years&amp;quot; +%C%y-%m-%d&lt;br /&gt;
 date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
 TZ=CEST date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
&lt;br /&gt;
What is the time in other timezone given in unixtime/epoch.&lt;br /&gt;
 TZ=GMT date -d &#039;@1345064585&#039;&lt;br /&gt;
 Wed Aug 15 21:03:05 GMT 2012&lt;br /&gt;
&lt;br /&gt;
Unix time.&lt;br /&gt;
 date +%s&lt;br /&gt;
Unix to normal&lt;br /&gt;
 date -d @1234567890&lt;br /&gt;
&lt;br /&gt;
scew clock by a second.&lt;br /&gt;
 DATE_OFF=$(date --date=&amp;quot;-5 second&amp;quot; +%C%y-%m-%d\ %H:%M:%S\ %Z) ; date --set=&amp;quot;${DATE_OFF}&amp;quot;&lt;br /&gt;
Set clock&lt;br /&gt;
 date &#039;+%Y-%m-%d %T %Z&#039; -s &amp;quot;2008-11-28 08:08:08 UTC&amp;quot;&lt;br /&gt;
=datefudge=&lt;br /&gt;
Fake date for command.&lt;br /&gt;
 datefudge &amp;quot;2020-04-01 10:23&amp;quot; date&lt;br /&gt;
&lt;br /&gt;
=dateseq=&lt;br /&gt;
Create date sequense.&lt;br /&gt;
 dateseq 2017-04-01 2017-04-05&lt;br /&gt;
&lt;br /&gt;
=db2=&lt;br /&gt;
Empty catalog remove node&lt;br /&gt;
 for DB2 in $(db2 list node directory | grep &amp;quot;Node name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog node $DB2;done&lt;br /&gt;
Empty catalog remove db&lt;br /&gt;
 for DB2 in $(db2 list db directory | grep &amp;quot;Database name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog db $DB2;done&lt;br /&gt;
# Load db2 environment.&lt;br /&gt;
 . /home/db2/sqllib/db2profile&lt;br /&gt;
&lt;br /&gt;
# Connect to database.&lt;br /&gt;
 db2 connect to ${database_name} user ${user} using ${password}&lt;br /&gt;
&lt;br /&gt;
# Test query.&lt;br /&gt;
 SELECT service_level, fixpack_num, bld_level FROM TABLE (sysproc.env_get_inst_info()) as A;&lt;br /&gt;
&lt;br /&gt;
# System Database Directory&lt;br /&gt;
 db2 list db directory&lt;br /&gt;
&lt;br /&gt;
# Node Directory&lt;br /&gt;
 db2 list node directory&lt;br /&gt;
&lt;br /&gt;
# setup directory&lt;br /&gt;
 db2 &amp;quot;catalog tcpip node db2datan remote 1.2.3.4 server 5000&amp;quot;&lt;br /&gt;
 db2 &amp;quot;catalog db db2datadb as db2datadb at node db2datan&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Drop connection.&lt;br /&gt;
 db2 terminate&lt;br /&gt;
&lt;br /&gt;
=dbus-monitor=&lt;br /&gt;
 dbus-monitor   # Monitor activity on the dbus to see what system and sessions are doing.&lt;br /&gt;
&lt;br /&gt;
=dd=&lt;br /&gt;
output your microphone to a remote computer&#039;s speaker&lt;br /&gt;
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp&lt;br /&gt;
Add 2GB to disk image.&lt;br /&gt;
 dd if=/dev/zero of=/system_image.img bs=1M oflag=append conv=notrunc count=2000&lt;br /&gt;
dd with progress bar.&lt;br /&gt;
 dd if=kali.iso of=/dev/sdc status=progress&lt;br /&gt;
 pv -ptre /install/backup/machine/raspberry/ipcenter_view.img | sudo dd of=/dev/mmcblk0 bs=1M&lt;br /&gt;
dd to position on disk&lt;br /&gt;
 dd of=/dev/disk1 if=/dev/urandom obs=500000 seek=1 bs=1MB count=1 conv=notrunc&lt;br /&gt;
==consume 100GB ram==&lt;br /&gt;
 mount -o remount,size=300G /dev/shm&lt;br /&gt;
 dd if=/dev/zero of=/dev/shm/$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) bs=1073741824 count=100 status=progress&lt;br /&gt;
&lt;br /&gt;
=debugfs=&lt;br /&gt;
 ctime:  Shows file change time.&lt;br /&gt;
 atime:  Shows file access time.&lt;br /&gt;
 mtime:  Shows file modification time.&lt;br /&gt;
 crtime: Shows file creation time. Birth.&lt;br /&gt;
Example&lt;br /&gt;
 debugfs -R &#039;stat /etc/exports.bkp-2021-11-17_10-07-46&#039; /dev/mapper/vg_rbnetstorage0-lv_root&lt;br /&gt;
 debugfs 1.41.12 (17-May-2010)&lt;br /&gt;
 Inode: 924905   Type: regular    Mode:  0644   Flags: 0x80000&lt;br /&gt;
 Generation: 2068409071    Version: 0x00000000:00000001&lt;br /&gt;
 User:     0   Group:     0   Size: 4775&lt;br /&gt;
 File ACL: 0    Directory ACL: 0&lt;br /&gt;
 Links: 1   Blockcount: 16&lt;br /&gt;
 Fragment:  Address: 0    Number: 0    Size: 0&lt;br /&gt;
  ctime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
  atime: 0x6193bd7f:c4faf658 -- Tue Nov 16 15:17:35 2021&lt;br /&gt;
  mtime: 0x61925419:34c06f18 -- Mon Nov 15 13:35:37 2021&lt;br /&gt;
 crtime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
 Size of extra inode fields: 28&lt;br /&gt;
 Extended attributes stored in inode body: &lt;br /&gt;
   selinux = &amp;quot;unconfined_u:object_r:etc_t:s0\000&amp;quot; (31)&lt;br /&gt;
 EXTENTS:&lt;br /&gt;
 (0-1): 3718194-3718195&lt;br /&gt;
=ddclient=&lt;br /&gt;
Debug&lt;br /&gt;
 ddclient -daemon=0 -debug -verbose -noquiet&lt;br /&gt;
&lt;br /&gt;
=df=&lt;br /&gt;
df output one per line. Without header.&lt;br /&gt;
 df -Plk / /apps | tail -n+2&lt;br /&gt;
&lt;br /&gt;
=dhclient=&lt;br /&gt;
[root@wall sysconfig]# cat /etc/dhclient.conf&lt;br /&gt;
 interface &amp;quot;eth0&amp;quot; {&lt;br /&gt;
          prepend domain-name-servers 127.0.0.1;&lt;br /&gt;
          supersede domain-name &amp;quot;bltprojektering.se&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=dialog=&lt;br /&gt;
Create dialog in terminal. Example a progressbar.&lt;br /&gt;
 for i in {0..100} ; do echo $i | dialog --gauge &amp;quot;Please wait&amp;quot; 7 70 1 ; sleep .1 ; done&lt;br /&gt;
=diff=&lt;br /&gt;
 sdiff &amp;lt;(echo -e &#039;hej\nda\nvi\nses\ni\nmorgon&#039;) &amp;lt;(echo -e &#039;hej\ndå\nvi\nSES\ni\nmorgon&#039;)&lt;br /&gt;
Only show files that differ.&lt;br /&gt;
 -q  --brief&lt;br /&gt;
Only show change between files.&lt;br /&gt;
 diff -u file1.txt file2.txt | grep -vE &#039;^(---|\+\+\+|@@|\+|-)&#039;&lt;br /&gt;
&lt;br /&gt;
=dig=&lt;br /&gt;
==Get all dns information about host.==&lt;br /&gt;
 dig any www.halfface.se&lt;br /&gt;
==Trace dns lookups from root dns. Use 8.8.8.8 for lookups.==&lt;br /&gt;
 dig +trace @8.8.8.8 www.halfface.se&lt;br /&gt;
==Recursive lookup.==&lt;br /&gt;
 dig -tAXFR halfface.se&lt;br /&gt;
==backward resolve==&lt;br /&gt;
 dig -x 89.253.75.84&lt;br /&gt;
==get ttl==&lt;br /&gt;
 dig +nocmd +multiline +noall +answer any halfface.se&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
==Get txt record.==&lt;br /&gt;
 dig google.com txt&lt;br /&gt;
==You can find the authoritative servers by asking for the NS records for a domain==&lt;br /&gt;
 dig example.com NS&lt;br /&gt;
==dig using alternative port==&lt;br /&gt;
 dig +short -p 5353 halfface.se @10.130.0.35&lt;br /&gt;
&lt;br /&gt;
=digitemp=&lt;br /&gt;
 digitemp_DS9097 -c /etc/.digitemprc -t0&lt;br /&gt;
&lt;br /&gt;
=disk=&lt;br /&gt;
disk usage&lt;br /&gt;
 baobab&lt;br /&gt;
foremost&lt;br /&gt;
 recover deleted files.&lt;br /&gt;
=disown=&lt;br /&gt;
Disconnect process(pid) so that is survives a logout.&lt;br /&gt;
 disown %2&lt;br /&gt;
&lt;br /&gt;
=display=&lt;br /&gt;
Change resolution&lt;br /&gt;
 xrandr --output LVDS --mode 1280x800&lt;br /&gt;
 xrandr --output default --mode 1280x1024&lt;br /&gt;
Query graphics card capabilities.&lt;br /&gt;
 xrandr -q&lt;br /&gt;
Change dpi&lt;br /&gt;
 xrandr --dpi 138/eDP1&lt;br /&gt;
=du=&lt;br /&gt;
 du -amx / | sort -n | tail -5&lt;br /&gt;
=duplicity=&lt;br /&gt;
Encrypted backups over rsync&lt;br /&gt;
&lt;br /&gt;
=dmesg=&lt;br /&gt;
dmesg with iso time format&lt;br /&gt;
 dmesg --ctime --time-format iso&lt;br /&gt;
Write to dmesg&lt;br /&gt;
 echo &amp;quot;$USER $(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;)&amp;quot; | sudo tee /dev/kmsg&lt;br /&gt;
&lt;br /&gt;
=dmidecode=&lt;br /&gt;
List memory banks&lt;br /&gt;
 sudo dmidecode -t 17&lt;br /&gt;
&lt;br /&gt;
=dnf=&lt;br /&gt;
install skip if not exist&lt;br /&gt;
 sudo dnf install --setopt=strict=0 $(sort -u /temp/other_machine_rpm)&lt;br /&gt;
==update system==&lt;br /&gt;
 dnf -y upgrade --refresh&lt;br /&gt;
 reboot&lt;br /&gt;
 dnf -y install dnf-plugin-system-upgrade&lt;br /&gt;
 dnf -y system-upgrade download --refresh --allowerasing --releasever=43&lt;br /&gt;
 # Before 42:&lt;br /&gt;
 dnf -y system-upgrade reboot&lt;br /&gt;
 # From 42 and onward&lt;br /&gt;
 dnf5 offline reboot&lt;br /&gt;
 # broken deps.&lt;br /&gt;
 dnf repoquery --unsatisfied&lt;br /&gt;
 # look for duplicates&lt;br /&gt;
 dnf repoquery --duplicated&lt;br /&gt;
 # which rpms do not exit in repo.&lt;br /&gt;
 dnf list extras&lt;br /&gt;
 # remove no longer used.&lt;br /&gt;
 dnf autoremove&lt;br /&gt;
 dnf remove $(rpm -qa| grep \.fc23)&lt;br /&gt;
 # reinstall rpm&lt;br /&gt;
 dnf reinstall sssd-common&lt;br /&gt;
&lt;br /&gt;
==auto update==&lt;br /&gt;
 # Install auto updates.&lt;br /&gt;
 dnf install dnf-automatic&lt;br /&gt;
 # Enable auto update.&lt;br /&gt;
 sed -i &amp;quot;s/apply_updates = no/apply_updates = yes/g;s/email_from = root@example.com/email_from = root@${HOSTNAME}/g;s/email_to = root/email_to = anden@halfface.se/g&amp;quot; /etc/dnf/automatic.conf&lt;br /&gt;
 # Enable timer.&lt;br /&gt;
 systemctl enable dnf-automatic.timer &amp;amp;&amp;amp; systemctl start dnf-automatic.timer&lt;br /&gt;
 # Trigger timer.&lt;br /&gt;
 systemctl start  dnf-automatic.timer&lt;br /&gt;
 # Check status of dnf-automatic:&lt;br /&gt;
 systemctl list-timers *dnf-*&lt;br /&gt;
==build environment==&lt;br /&gt;
 dnf group install &amp;quot;C Development Tools and Libraries&amp;quot;&lt;br /&gt;
==update to specific version==&lt;br /&gt;
View available version.&lt;br /&gt;
 dnf --showduplicates list  gitlab-ee&lt;br /&gt;
Update to specific version&lt;br /&gt;
 dnf install gitlab-ee-13.12.15-ee.0.el8&lt;br /&gt;
&lt;br /&gt;
=Setup dnsmasq on ubuntu=&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
# Install dnsmasq&lt;br /&gt;
apt install dnsmasq&lt;br /&gt;
systemctl enable dnsmasq --now&lt;br /&gt;
# Disable systemd-resolved.&lt;br /&gt;
sudo systemctl disable --now systemd-resolved&lt;br /&gt;
# Make NetworkManager ignore dns.&lt;br /&gt;
sudo tee /etc/NetworkManager/conf.d/no-dns.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
[main]&lt;br /&gt;
dns=none&lt;br /&gt;
EOF&lt;br /&gt;
systemctl restart NetworkManager&lt;br /&gt;
# Fix /etc/resolv.conf&lt;br /&gt;
sudo \rm /etc/resolv.conf&lt;br /&gt;
sudo tee /etc/resolv.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
search int.redbridge.se halfface.se cloud.binero.net&lt;br /&gt;
options timeout:1 attempts:1&lt;br /&gt;
EOF&lt;br /&gt;
# Create config&lt;br /&gt;
sudo tee /etc/dnsmasq.d/custom.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
listen-address=127.0.0.1&lt;br /&gt;
bind-interfaces&lt;br /&gt;
server=/redbridge.se/185.53.164.25&lt;br /&gt;
#server=/halfface.se/10.111.222.2&lt;br /&gt;
server=8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
# Restart dnsmasq&lt;br /&gt;
systemctl restart dnsmasq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dracut=&lt;br /&gt;
Dracut is a tool used to create an initial RAM filesystem (initramfs) for Linux systems.&lt;br /&gt;
&lt;br /&gt;
=dvgrab=&lt;br /&gt;
Capture dv material&lt;br /&gt;
 dvgrab -f dv2 -i -showstatus -s 0 -timestamp California-2&lt;br /&gt;
&lt;br /&gt;
=e2fsck=&lt;br /&gt;
Scan for bad blocks.&lt;br /&gt;
 e2fsck -ycv /dev/VolGroup00/LogVol00&lt;br /&gt;
&lt;br /&gt;
=edid/ddc=&lt;br /&gt;
 startx -- -logverbose 5.&lt;br /&gt;
 The EDID information turns up in /var/log/Xorg.0.log.&lt;br /&gt;
=enca=&lt;br /&gt;
detect and convert encoding of text files. (codepage utf)&lt;br /&gt;
 enca -L none /temp/locale2&lt;br /&gt;
=esmtp=&lt;br /&gt;
 # Install dependency&lt;br /&gt;
 dnf install procmail&lt;br /&gt;
 # Put the following config in either /etc/esmtprc or more specific ~/.esmtprc. chmod 644.&lt;br /&gt;
 SMTP_SERVER=halfface.se&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; ~/.esmtprc&lt;br /&gt;
 hostname = $SMTP_SERVER:25&lt;br /&gt;
 # Set the Mail Delivery Agent (MDA)&lt;br /&gt;
 mda = &amp;quot;/usr/bin/procmail -d %T&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 chmod 0710 ~/.esmtprc&lt;br /&gt;
&lt;br /&gt;
=etckeeper=&lt;br /&gt;
 Keep your /etc/ directory under git revision control.&lt;br /&gt;
What has happened.&lt;br /&gt;
 git log -p /etc/resolv.conf&lt;br /&gt;
Wipe /etc/.git&lt;br /&gt;
 etckeeper uninit &lt;br /&gt;
 etckeeper init&lt;br /&gt;
&lt;br /&gt;
=ethtool=&lt;br /&gt;
show-features&lt;br /&gt;
 ethtool -k &amp;lt;device&amp;gt;&lt;br /&gt;
 generic-segmentation-offload = gso&lt;br /&gt;
 tcp-segmentation-offload     = tso&lt;br /&gt;
 ...&lt;br /&gt;
Enable wake on lan magic package.&lt;br /&gt;
 ethtool --change &amp;lt;interface&amp;gt; wol g&lt;br /&gt;
Permanently add wol&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039; | while read i ; do INTERFACE_INFO=$(ip address show $i) ; MAC=$(grep link/ether  &amp;lt;&amp;lt;&amp;lt; &amp;quot;${INTERFACE_INFO}&amp;quot; | awk &#039;{print $2}&#039;) ; echo &amp;quot;# /etc/systemd/network/50-wired.link&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=$MAC&lt;br /&gt;
 &lt;br /&gt;
 [Link]&lt;br /&gt;
 NamePolicy=kernel database onboard slot path&lt;br /&gt;
 MACAddressPolicy=persistent&lt;br /&gt;
 WakeOnLan=magic&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=exiftool=&lt;br /&gt;
Change meta data for files, exif, jpg, mp3...&lt;br /&gt;
Get info from file.&lt;br /&gt;
 exiftool $file.mp4&lt;br /&gt;
gps format&lt;br /&gt;
 41°24&#039;12.2&amp;quot;N 2°10&#039;26.5&amp;quot;E&lt;br /&gt;
gps format known to maps.google.com&lt;br /&gt;
 exiftool -c &amp;quot;%.6f&amp;quot; 2022-03-06_10-39-40.mp4 | grep -i gps&lt;br /&gt;
&lt;br /&gt;
=exportfs=&lt;br /&gt;
Install server&lt;br /&gt;
 dnf install nfs-utils&lt;br /&gt;
Start nfs server&lt;br /&gt;
 systemctl enable nfs-server --now&lt;br /&gt;
Reexport everything.&lt;br /&gt;
 exportfs -avr&lt;br /&gt;
Example export.&lt;br /&gt;
 *(rw,no_root_squash,async,insecure)&lt;br /&gt;
 rw              rewritable&lt;br /&gt;
 no_root_squash  Allow root on remote machine same permissions as local root&lt;br /&gt;
 async&lt;br /&gt;
 insecure        NFS version 2 and 3 servers only provide (insecure) host-based authentication: Hosts are allowed/denied based on hostnames and/or IP addresses. Authorization of users is controlled on the clients using the permissions of the files based on user/group IDs. allows clients with NFS implementations that don&#039;t use a reserved port for NFS&lt;br /&gt;
&lt;br /&gt;
=fdupes=&lt;br /&gt;
Find duplicate files.&lt;br /&gt;
 fdupes -r /home&lt;br /&gt;
=feh=&lt;br /&gt;
Image viewer&lt;br /&gt;
&lt;br /&gt;
=ffmpeg=&lt;br /&gt;
ffmpeg&lt;br /&gt;
 ffmpeg -y -deinterlace -aspect 16:9 -author &amp;quot;Andreas Bjorklund&amp;quot; -title &amp;quot;Tanzania&amp;quot; -year 2007 -i Tanzania.m2t -acodec mp3 -vcodec mpeg4 -b 3000k -s 720x540 test.avi&lt;br /&gt;
Create swf/flv from mpeg2 stream&lt;br /&gt;
 ffmpeg -deinterlace -i VTS_01_1.VOB -ab 56 -ar 22050 -b 500000 -r 15 -s 360x288  sisyfos.swf&lt;br /&gt;
Create horse movie.&lt;br /&gt;
 ffmpeg -deinterlace -i /temp/VTS_01_1.VOB -ab 100 -ar 22050 -b 1200000 -r 25 -s 360x288 3horses.swf&lt;br /&gt;
Cut video from command prompt.&lt;br /&gt;
 ffmpeg -i video.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:00:04 trimmed_video.avi&lt;br /&gt;
Record desktop.&lt;br /&gt;
 ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 5 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 -threads 0 -y output.mkv&lt;br /&gt;
 ffmpeg -f x11grab -s $(xrandr | grep \*+|awk &#039;{print $1}&#039;) -r 25 -i :0.0 -sameq /tmp/out.mpg&lt;br /&gt;
Change container.&lt;br /&gt;
  ffmpeg -i film.mov -vcodec copy -acodec copy film.mp4&lt;br /&gt;
Transcode to h264 aac&lt;br /&gt;
 ffmpeg -i original.avi -vcodec libx264 -acodec aac -strict experimental new_file.mp4&lt;br /&gt;
Transcode mp3 to ogg vorbis&lt;br /&gt;
 for file in *.mp3;   do ffmpeg -i &amp;quot;${file}&amp;quot; -acodec libvorbis &amp;quot;${file/%mp3/ogg}&amp;quot;;done&lt;br /&gt;
Take one photo from video stream.&lt;br /&gt;
 ffmpeg -ss 00:00:01 -i &amp;lt;video input&amp;gt; -frames:v 1 -q:v 2 &amp;lt;photo created&amp;gt;&lt;br /&gt;
Take photo&lt;br /&gt;
 ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f image2 snapshot.jpg&lt;br /&gt;
 ls /dev/video* | while read i ; do echo $i ; ffmpeg -f video4linux2 -i $i -vframes 1 -q:v 2 /tmp/${i//\//%}.$(date +%F_%H-%M-%S).jpg ; done ; ls -la /tmp/%*&lt;br /&gt;
Take a photo from a video steam every 10 seconds.&lt;br /&gt;
 ffmpeg -i video.mp4 -r 0.1 -f image2 %03dandreas.jpg&lt;br /&gt;
Take a photo every 1 put it in a file.&lt;br /&gt;
 ffmpeg -y -i http://balcony.halfface.se:8080 -r 1 -f image2 -update 1 stream_image.jpg -probesize 5e+07&lt;br /&gt;
Rotate 180 degrees.&lt;br /&gt;
 ffmpeg -i input.mp4 -filter:v &amp;quot;transpose=1,transpose=1&amp;quot; output.mp4&lt;br /&gt;
Change rotation without transcoding.&lt;br /&gt;
 ffmpeg -i IMG_0703.MOV -metadata:s:v rotate=&amp;quot;&amp;quot; -codec copy rotate_IMG_0703.MOV&lt;br /&gt;
Concaternate videos.&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output&lt;br /&gt;
&lt;br /&gt;
=find=&lt;br /&gt;
==Find exluding directory==&lt;br /&gt;
 find . -wholename &#039;/var/&#039; -prune -o -ls&lt;br /&gt;
==Find text file in directoy execpt directory. Grep for text in that file and show it with colours in less==&lt;br /&gt;
 find /opt/ongame/ -wholename &#039;/opt/ongame/napsjb/server/naps/tmp&#039; -prune -o -type f -exec grep --color=always -r &#039;/fraud&#039; /dev/null {} \; | less -SR&lt;br /&gt;
==Find excluding several directories==&lt;br /&gt;
 find / -type d \( -path /proc -o -path /dev -o -path /net \) -prune -o -gid 1002 -exec chgrp -h 1001 {} \;&lt;br /&gt;
==Find excluding svn==&lt;br /&gt;
 find . -path &#039;*/.svn&#039; -prune -o -type f -print&lt;br /&gt;
==Searches for files modified up to 4 days ago==&lt;br /&gt;
 find ./ -type f -mtime -4&lt;br /&gt;
==Searches for files modified between certain dates. Here for files older than 30 days but younger than 60 (penultimate month)==&lt;br /&gt;
 find ./ -type f -mtime -60 ! -mtime -30&lt;br /&gt;
 sudo find . -newermt &amp;quot;2014-10-19 09:30&amp;quot; ! -newermt &amp;quot;2014-10-19 09:35&amp;quot;&lt;br /&gt;
==Find which dir is consuming inodes==&lt;br /&gt;
 find /var -xdev -printf &#039;%h\n&#039; | sort | uniq -c | sort -k 1 -n&lt;br /&gt;
 for i in $(ls) ; do echo $(find $i | wc -l) $i ; done | sort -n&lt;br /&gt;
==How much data is consumed by pattern==&lt;br /&gt;
 export NFS_DIR=/netstorage/cam/ocp-01 ; find ${NFS_DIR} -maxdepth 1 | grep ^${NFS_DIR}/archived- | while read NFS_DIR_REMOVE ; do du -sk &amp;quot;${NFS_DIR_REMOVE}&amp;quot; ; done | awk &#039;{ SUM +=  $1} END { print SUM &amp;quot;KiB&amp;quot; }&#039; | numfmt --from=auto --to=iec-i --suffix=B&lt;br /&gt;
==find search small files==&lt;br /&gt;
 find . -type f -size -1M -exec grep -H &#039;your_search_pattern&#039; {} +&lt;br /&gt;
=find physical network interfaces=&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039;&lt;br /&gt;
&lt;br /&gt;
=findmnt=&lt;br /&gt;
view the mount tree&lt;br /&gt;
 findmnt&lt;br /&gt;
&lt;br /&gt;
=flash=&lt;br /&gt;
When firefox is complaining about outdated flash plugin&lt;br /&gt;
 rm pluginreg.dat&lt;br /&gt;
=flatpak=&lt;br /&gt;
=Install flatpak=&lt;br /&gt;
 sudo apt install -y flatpak gnome-software-plugin-flatpak&lt;br /&gt;
 sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
=Install flatpak application and replace system binary=&lt;br /&gt;
 sudo flatpak install -y flathub com.freerdp.FreeRDP&lt;br /&gt;
 cat &amp;lt;&amp;lt;&#039;EOF&#039; | sudo tee /usr/local/bin/xfreerdp&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 flatpak run com.freerdp.FreeRDP &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 sudo chmod 755 /usr/local/bin/xfreerdp&lt;br /&gt;
 hash -r&lt;br /&gt;
=Run other binary from flatpack=&lt;br /&gt;
 flatpak run --command=xfreerdp com.freerdp.FreeRDP&lt;br /&gt;
&lt;br /&gt;
=List installed applications.=&lt;br /&gt;
 flatpak list --app&lt;br /&gt;
&lt;br /&gt;
=flock=&lt;br /&gt;
used to use cript that only used 1 time concurrently.&lt;br /&gt;
 flock&lt;br /&gt;
&lt;br /&gt;
=fmt=&lt;br /&gt;
Join lines&lt;br /&gt;
 ifconfig -a | fmt -w 300&lt;br /&gt;
&lt;br /&gt;
=fold=&lt;br /&gt;
Fold long lines. Break at 80 and blank spaces.&lt;br /&gt;
 fold -w 80 -s text.txt&lt;br /&gt;
=forward traffic=&lt;br /&gt;
 service x11&lt;br /&gt;
 {&lt;br /&gt;
         disable = no&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         wait = no&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /usr/bin/nc&lt;br /&gt;
         server_args = 172.28.37.152 6000&lt;br /&gt;
 }&lt;br /&gt;
=fping=&lt;br /&gt;
 fping --timeout=10 --elapsed --netdata &amp;lt;fqdn&amp;gt;&lt;br /&gt;
Example of testing connectivity.&lt;br /&gt;
 for i in $(grep -E &#039;ocp-[0-9]{2}-&#039; /etc/hosts | awk &#039;{print $2}&#039;) ; do echo -e &amp;quot;$(fping --timeout=10 --elapsed $i)\t$(nc -v -w1 $i 22 &amp;lt;/dev/null 2&amp;gt;&amp;amp;1 | strings | xargs)&amp;quot; ; done | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=free=&lt;br /&gt;
You have 15956MB physical ram. 9033MB is used by applications. 6922MB is free.&lt;br /&gt;
 free -m&lt;br /&gt;
              total       used       free     shared    buffers     cached&lt;br /&gt;
 Mem:         15956      15755        200          0        300       6421&lt;br /&gt;
 -/+ buffers/cache:       9033       6922&lt;br /&gt;
 Swap:        19998       2405      17593&lt;br /&gt;
&lt;br /&gt;
=free new=&lt;br /&gt;
Total memory 8076624k and 5169152 free.&lt;br /&gt;
              total        used        free      shared  buff/cache   available&lt;br /&gt;
 Mem:        8076624     2536328     1069132      284152     4471164     5169152&lt;br /&gt;
 Swap:       7815164     2809244     5005920&lt;br /&gt;
&lt;br /&gt;
Free memory usage from /proc/zoneinfo and /proc/meminfo&lt;br /&gt;
 awk -v low=$(grep low /proc/zoneinfo | awk &#039;{k+=$2}END{print k}&#039;)  &#039;{a[$1]=$2} END{print a[&amp;quot;MemFree:&amp;quot;]+a[&amp;quot;Active(file):&amp;quot;]+a[&amp;quot;Inactive(file):&amp;quot;]+a[&amp;quot;SReclaimable:&amp;quot;]-(12*low);}&#039; /proc/meminfo&lt;br /&gt;
 5168456&lt;br /&gt;
==physical memory==&lt;br /&gt;
Show physical memory in machine. Consider points below.&lt;br /&gt;
 grep MemTotal /proc/meminfo&lt;br /&gt;
meminfo:&lt;br /&gt;
 Provides information about distribution and utilisation of memory. This varies by architecture and compile options...&lt;br /&gt;
MemTotal: &lt;br /&gt;
 Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)&lt;br /&gt;
Gives more information not really sure how.&lt;br /&gt;
 dmesg|grep Memory:&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 dmidecode -t memory&lt;br /&gt;
 lshw -class memory&lt;br /&gt;
&lt;br /&gt;
=fstab=&lt;br /&gt;
Use ram for some logfiles.&lt;br /&gt;
 none             /var/log/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /tmp/                  tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/tmp/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/spool/            tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
&lt;br /&gt;
=fswebcam=&lt;br /&gt;
Capture photo.&lt;br /&gt;
 fswebcam -r 1920x1080 --jpeg 85 -D 1 --quiet --no-banner shot.jpg&lt;br /&gt;
 fswebcam -d /dev/video0 -i 0 -r 2592x1944 -p YUYV /net/10.111.222.1/storage/temp/logitech.jpg&lt;br /&gt;
=fwupdmgr=&lt;br /&gt;
 fwupdmgr get-devices --show-all-devices&lt;br /&gt;
 fwupdmgr get-upgrades&lt;br /&gt;
 fwupdmgr update $device_id&lt;br /&gt;
&lt;br /&gt;
=genisoimage=&lt;br /&gt;
 genisoimage -o nuc.iso nuc&lt;br /&gt;
=gnome-font-viewer=&lt;br /&gt;
view fonts&lt;br /&gt;
 gnome-font-viewer /file.woff2&lt;br /&gt;
=gnome-monitor-config=&lt;br /&gt;
Set one monitor. Disable all others.&lt;br /&gt;
 gnome-monitor-config set -LpM HDMI-2&lt;br /&gt;
Get monitor settings&lt;br /&gt;
 WINDOWS + p&lt;br /&gt;
&lt;br /&gt;
=gpg=&lt;br /&gt;
Password encryption decryption with gnupg.&lt;br /&gt;
 gpg -c --force-mdc /temp/shadow&lt;br /&gt;
 echo &amp;quot;$(gpg -qd /temp/shadow.gpg)&amp;quot;&lt;br /&gt;
==create keys==&lt;br /&gt;
 gpg --full-generate-key&lt;br /&gt;
==list secret keys==&lt;br /&gt;
 gpg --list-secret-keys --keyid-format LONG&lt;br /&gt;
==delete secret keys==&lt;br /&gt;
 gpg --delete-secret-key liza&lt;br /&gt;
&lt;br /&gt;
==list public keys==&lt;br /&gt;
 gpg --list-public-keys --keyid-format LONG&lt;br /&gt;
&lt;br /&gt;
==export public key==&lt;br /&gt;
 gpg --armor --export 3AA5C34371567BD2&lt;br /&gt;
==export private key==&lt;br /&gt;
 gpg --armor --export-secret-keys 3AA5C34371567BD2&lt;br /&gt;
==export secret subkey==&lt;br /&gt;
 gpg --armor --export-secret-subkeys 3AA5C34371567BD2&lt;br /&gt;
==import keys==&lt;br /&gt;
 gpg --import pub.key&lt;br /&gt;
 gpg --import sec.key&lt;br /&gt;
 gpg --import sub.key&lt;br /&gt;
==add trust to private key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669 trust quit # 5 y&lt;br /&gt;
&lt;br /&gt;
==edit gpg key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669&lt;br /&gt;
==send gpg key==&lt;br /&gt;
 gpg --send-key 6252FC9A029A2669&lt;br /&gt;
==delete public key==&lt;br /&gt;
 gpg --delete-key &amp;quot;User Name&amp;quot;&lt;br /&gt;
==change trust level on  all keys==&lt;br /&gt;
 gpg --list-keys --fingerprint |grep pub -A 1|egrep -Ev &amp;quot;pub|--&amp;quot;|tr -d &#039; &#039;  | awk &#039;BEGIN { FS = &amp;quot;\n&amp;quot; } ; { print $1&amp;quot;:6:&amp;quot; } &#039; | gpg --import-ownertrust&lt;br /&gt;
==get info about gpg encrypted file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp&lt;br /&gt;
==list keys in gpg file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp # | grep keyid&lt;br /&gt;
==get public key from command above==&lt;br /&gt;
 gpg --recv-keys 754817487F42735A&lt;br /&gt;
==encrypt file==&lt;br /&gt;
 gpg --encrypt --recipient user1@inter.net --recipient user2@inter.net --recipient user3@inter.net file.txt&lt;br /&gt;
&lt;br /&gt;
==decrypt gpg file==&lt;br /&gt;
 gpg --decrypt vpn-0ea602e33ab9c49fd.txt.gpg&lt;br /&gt;
&lt;br /&gt;
==who has encrypted file==&lt;br /&gt;
 gpg --pinentry-mode cancel --list-packets file.gpg&lt;br /&gt;
==remove expired public keys==&lt;br /&gt;
 for i in $(gpg --list-public-keys --keyid-format LONG 2&amp;gt;&amp;amp;1 | grep -A1 -B1 expired | grep -Ev &#039;^$|^pub|^uid&#039;) ; do gpg --delete-key $i ; done&lt;br /&gt;
&lt;br /&gt;
=pgpdump=&lt;br /&gt;
 pgpdump &amp;lt;(curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg)&lt;br /&gt;
=gphoto2=&lt;br /&gt;
Capture photo from the command line linux.&lt;br /&gt;
 gphoto2 --camera=&#039;Canon EOS 40D (PTP mode)&#039; --port=usb: --capture-image-and-download&lt;br /&gt;
&lt;br /&gt;
=graphviz=&lt;br /&gt;
Create graph.&lt;br /&gt;
 dot -Tps /flow -o /tmp/flow.ps&lt;br /&gt;
&lt;br /&gt;
=grep=&lt;br /&gt;
Colorize grep output.&lt;br /&gt;
 grep --color=always -r &#039;10\.7\.&#039; /opt/ongame/&lt;br /&gt;
Show non comment lines ending with a blank.&lt;br /&gt;
 find . -name &#039;*.properties&#039; -exec grep --color=always -E &#039;^[^#].*\ $&#039; {} \; | less -SR&lt;br /&gt;
grep ipaddress from message file.&lt;br /&gt;
 sudo grep DHCP /var/log/messages | grep -oir --color=always &#039;192\.168\.[0-9]*\.[0-9]*&#039; | sort -u&lt;br /&gt;
 grep -E &#039;([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))&#039;&lt;br /&gt;
grep ipaddress from file&lt;br /&gt;
 grep -E &#039;[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}&#039;&lt;br /&gt;
grep for tab&lt;br /&gt;
 grep 10.199.2.1$&#039;\t&#039; /etc/hosts&lt;br /&gt;
grep from word containing regex space separated.&lt;br /&gt;
 grep -oE &#039;\S*regex\S*&#039; /file&lt;br /&gt;
When grep start to complain about file being binary run the following command to define where.&lt;br /&gt;
 grep -Pa &#039;\x00&#039; /temp/file_name&lt;br /&gt;
Remove binary part of file.&lt;br /&gt;
 sed -i &#039;s/\x00//g&#039; /temp/file_name&lt;br /&gt;
Grep email addresses.&lt;br /&gt;
 grep -E -o &amp;quot;\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b&amp;quot; filename.txt&lt;br /&gt;
Grep for exact string like \&lt;br /&gt;
 grep -F \\ blabla.json&lt;br /&gt;
=grepcidr=&lt;br /&gt;
 grepcidr -v 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&lt;br /&gt;
&lt;br /&gt;
=growpart=&lt;br /&gt;
 growpart /dev/vda 5&lt;br /&gt;
 btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
=gsettings=&lt;br /&gt;
Emulate 3 button mouse&lt;br /&gt;
 gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true&lt;br /&gt;
Blinking cursor disable&lt;br /&gt;
 gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \&#039;)/ cursor-blink-mode off&lt;br /&gt;
List settings&lt;br /&gt;
 gsettings list-recursively&lt;br /&gt;
&lt;br /&gt;
=gsync=&lt;br /&gt;
Install gsync&lt;br /&gt;
 git clone https://github.com/iwonbigbro/gsync.git&lt;br /&gt;
 cd gsync/&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
Download data.&lt;br /&gt;
 gsync -u -r -t -v --progress --delete -l -s drive://motion/ /temp/motion2/&lt;br /&gt;
&lt;br /&gt;
=gzip=&lt;br /&gt;
Compress a stream.&lt;br /&gt;
 find . | gzip -9 &amp;gt; /tmp/file_list.gz&lt;br /&gt;
&lt;br /&gt;
=gscan2pdf=&lt;br /&gt;
Scan and ocr pdf dokuments&lt;br /&gt;
&lt;br /&gt;
=Handbrake=&lt;br /&gt;
Compress dvd&lt;br /&gt;
#Rip dvd.&lt;br /&gt;
 sudo vobcopy -o /storage/temp/ -v -x -l&lt;br /&gt;
#compress video.&lt;br /&gt;
 HandBrakeCLI -e x264 -Z Normal -i source.vob -o destination.mkv -a 2 -r 25 -E faac -f mkv -d -S 600 --crop 0:0:0:0&lt;br /&gt;
#Create film for android.&lt;br /&gt;
 HandBrakeCLI -i 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.vob -o 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.mp4 -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1 -e x264 --vb 300 -E faac --ab 128 --maxWidth 320 -2 -T -d&lt;br /&gt;
# Compress.&lt;br /&gt;
 SOURCE=/ssd/temp ; DESTINATION=/temp ; for FILM in $(cd ${SOURCE}; ls *.mov | sed &#039;s/\.mov$//g&#039;); do HandBrakeCLI -e x264 -q 20 -B 160 -i ${SOURCE}/${FILM}.mov -o ${DESTINATION}/${FILM}.mp4 ;done&lt;br /&gt;
# High profile&lt;br /&gt;
 HandBrakeCLI -i DVD -o ~/Movies/movie.mp4  -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --strict-anamorphic -m -x ref=2:bframes=2:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0&lt;br /&gt;
=hashid=&lt;br /&gt;
Identify hash strings.&lt;br /&gt;
 hashid&lt;br /&gt;
&lt;br /&gt;
=heif-convert=&lt;br /&gt;
 heif-convert image.HEIC new-image.jpg&lt;br /&gt;
=hostnamectl=&lt;br /&gt;
 hostnamectl set-hostname rocky_8_1&lt;br /&gt;
&lt;br /&gt;
=htmldoc=&lt;br /&gt;
Convert html document to pdf&lt;br /&gt;
 htmldoc --webpage -f php_html_doc.pdf /home/andreasbj/php_manual_en.html 2&amp;gt;/tmp/htmldoc&lt;br /&gt;
=htpasswd=&lt;br /&gt;
Add user to htpasswd file.&lt;br /&gt;
 htpasswd -b /etc/httpd/conf/htpasswd &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=hunspell=&lt;br /&gt;
 hunspell -d sv_SE swedish.txt&lt;br /&gt;
=hydra=&lt;br /&gt;
Password checking.&lt;br /&gt;
 hydra -l root -P /etc/passwdknown -t 5 192.168.29.62 ssh2&lt;br /&gt;
&lt;br /&gt;
=ifconfig=&lt;br /&gt;
Configure network.&lt;br /&gt;
 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up&lt;br /&gt;
ip address alias&lt;br /&gt;
 ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0&lt;br /&gt;
Network configuration Full config.&lt;br /&gt;
 echo -e &amp;quot;options timeout:1 attempts:1&lt;br /&gt;
 domain halfface.se&lt;br /&gt;
 nameserver 84.246.88.10&lt;br /&gt;
 nameserver 84.246.88.20&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
 ifconfig eth0 89.253.75.84 netmask 255.255.255.224 up&lt;br /&gt;
 route add default gw 89.253.75.65 eth0&lt;br /&gt;
Vip on loopback /etc/sysconfig/network-scripts/ifcfg-lo:ipdbm&lt;br /&gt;
 DEVICE=lo:ipdbm&lt;br /&gt;
 IPADDR=192.168.122.2&lt;br /&gt;
 NETMASK=255.255.255.255&lt;br /&gt;
 NETWORK=192.168.122.0&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
Setting up multiple addresses. ifcfg-eth0-range0 &lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR_START=192.168.122.3&lt;br /&gt;
 IPADDR_END=192.168.122.15&lt;br /&gt;
ifcfg-eth0&lt;br /&gt;
 DEVICE=eth0&lt;br /&gt;
 BOOTPROTO=static&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR=10.111.222.2&lt;br /&gt;
 NETMASK=255.255.255.0&lt;br /&gt;
 GATEWAY=10.111.222.1&lt;br /&gt;
 DNS1=10.111.222.253&lt;br /&gt;
 DNS2=10.111.222.254&lt;br /&gt;
 DOMAIN=&amp;quot;halfface.se subdomain.halfface.se&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=imv=&lt;br /&gt;
Image viewer for wayland&lt;br /&gt;
 imv . -f -s full&lt;br /&gt;
&lt;br /&gt;
=ilo=&lt;br /&gt;
log in to ilo&lt;br /&gt;
 env -u LANG ssh -v Ongame@10.1.1.94&lt;br /&gt;
restart ilo&lt;br /&gt;
 reset map1&lt;br /&gt;
start system&lt;br /&gt;
 start system1&lt;br /&gt;
&lt;br /&gt;
=install=&lt;br /&gt;
Crete directory&lt;br /&gt;
 install -d --mode=755 --owner=user --group=group /apps/IP/IPim/var/log&lt;br /&gt;
Create empty file&lt;br /&gt;
 install -o 0664 -o user -g group /dev/null ${ALFRESCO_DIR}/logs/catalina.out&lt;br /&gt;
=inotifywathc=&lt;br /&gt;
Se what access /dev/random&lt;br /&gt;
 inotifywatch -v -t 60 /dev/random&lt;br /&gt;
&lt;br /&gt;
=inxi=&lt;br /&gt;
inventory report.&lt;br /&gt;
 inxi -Frmxx&lt;br /&gt;
=iostat=&lt;br /&gt;
 iostat -xtc 5&lt;br /&gt;
 -x extended statistics.&lt;br /&gt;
 -t print time for each report.&lt;br /&gt;
 -c display the cpu utalization report.&lt;br /&gt;
 -y Omit first report with statistics since the system boot&lt;br /&gt;
==iostat -xty 5 1 dm-3==&lt;br /&gt;
 Linux 2.6.32-573.7.1.el6.x86_64 (machine.se)      12/30/2021      _x86_64_        (12 CPU)&lt;br /&gt;
 12/30/2021 11:47:42 AM&lt;br /&gt;
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle&lt;br /&gt;
            0.12    0.00    2.01    4.23    0.00   93.65&lt;br /&gt;
 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util&lt;br /&gt;
 dm-3              0.00     0.00 5806.20    0.00 1485056.00     0.00   255.77     1.54    0.27   0.17  97.44&lt;br /&gt;
&lt;br /&gt;
 # Explained.&lt;br /&gt;
 rrqm/s   The number of read requests merged per second that were queued to the device.&lt;br /&gt;
 wrqm/s   The number of write requests merged per second that were queued to the device.&lt;br /&gt;
 r/s      The number of read requests that were issued to the device per second.&lt;br /&gt;
 w/s      The number of write requests that were issued to the device per second.&lt;br /&gt;
 rsec/s   The number of sectors read from the device per second.&lt;br /&gt;
 wsec/s   The number of sectors written to the device per second.&lt;br /&gt;
 avgrq-sz The average size (in sectors) of the requests that were issued to the device.&lt;br /&gt;
 avgqu-sz The average queue length of the requests that were issued to the device.&lt;br /&gt;
 await    The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.&lt;br /&gt;
 svctm    The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future sysstat version.&lt;br /&gt;
 %util    Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.&lt;br /&gt;
&lt;br /&gt;
=iotop=&lt;br /&gt;
iotop with dates for output to logfile.&lt;br /&gt;
 DATE=$(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;) ; sudo iotop -kbon1 | head -2 | while read i ; do echo $DATE $i ; done&lt;br /&gt;
&lt;br /&gt;
=ip=&lt;br /&gt;
==Add vlan 23==&lt;br /&gt;
 ip link add link eno1 name eno1.23 type vlan id 23&lt;br /&gt;
==View vlan protocol==&lt;br /&gt;
 ip -d link show eno1.23&lt;br /&gt;
==Configure vlan==&lt;br /&gt;
 ip addr add 10.151.23.101/24 brd 10.151.23.255 dev eno1.23&lt;br /&gt;
 ip link set dev eno1.23 up&lt;br /&gt;
==create default route==&lt;br /&gt;
 ip route add default via 192.168.1.254&lt;br /&gt;
==show routing==&lt;br /&gt;
 ip route show&lt;br /&gt;
more info&lt;br /&gt;
 ip route show table all&lt;br /&gt;
==Add static route==&lt;br /&gt;
 ip route add 10.10.20.0/24 via 192.168.50.100 dev eth0&lt;br /&gt;
==Remove static route.==&lt;br /&gt;
 ip route del 10.10.20.0/24&lt;br /&gt;
==which outgoing interfaces are available.==&lt;br /&gt;
 ip r l| awk &#039;/src/{print $9}&#039;&lt;br /&gt;
==Which route is used for ip.==&lt;br /&gt;
 ip route get 192.168.122.252&lt;br /&gt;
==route subnet over interface.==&lt;br /&gt;
 sudo ip route add 145.251.242.0/24 dev tun0&lt;br /&gt;
==Show ipaddress on interface tun0==&lt;br /&gt;
 ip address show tun0&lt;br /&gt;
==vlan tag interface.==&lt;br /&gt;
 ip link add link eth0 name eth0.8 type vlan id 8&lt;br /&gt;
==set ip on interface.==&lt;br /&gt;
 ip addr add 192.168.50.5 dev eth1&lt;br /&gt;
 ip addr add 192.168.50.5/24 dev eth1&lt;br /&gt;
==set secondary ip on interface==&lt;br /&gt;
 ip addr add 192.168.1.2/24 dev eth0&lt;br /&gt;
==remove ip address.==&lt;br /&gt;
 ip addr del 192.168.50.5/24 dev eth1&lt;br /&gt;
==enable interface==&lt;br /&gt;
 ip link set eth1 up&lt;br /&gt;
==disable interface==&lt;br /&gt;
 ip link set eth1 down&lt;br /&gt;
==list arp entries.==&lt;br /&gt;
 ip neigh show&lt;br /&gt;
==local routing table==&lt;br /&gt;
 ip route list table local&lt;br /&gt;
==rule base routing. List rules==&lt;br /&gt;
 ip rule show&lt;br /&gt;
==show multicast networks==&lt;br /&gt;
 ip maddr show&lt;br /&gt;
==Disable traffic to an ipaddress.==&lt;br /&gt;
 ip route add blackhole 10.151.19.151&lt;br /&gt;
==dynamic/random mac wifi disable==&lt;br /&gt;
 MAC=$(ip link show | grep link/ | grep -v 00:00:00:00:00:00 | awk &#039;{print $2}&#039;) ; nmcli -f TYPE,NAME connection show | grep ^wifi | sed &#039;s/^wifi *//g&#039; | while read i ; do echo &#039;*&#039; $i ; nmcli connection modify &amp;quot;${i}&amp;quot; 802-11-wireless.cloned-mac-address $MAC ; done&lt;br /&gt;
==change mtu==&lt;br /&gt;
 sudo ip link set dev ens3 mtu 1400&lt;br /&gt;
==network namespaces==&lt;br /&gt;
 ip netns list&lt;br /&gt;
&lt;br /&gt;
=ip2location=&lt;br /&gt;
 ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB&lt;br /&gt;
 sed &#039;s/ \+/\t/g&#039; haproxy.log | cut -f 9 | sort -u | while read IP ; do ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB | tail -n1 ; done | column_tab | sort&lt;br /&gt;
=ipcalc=&lt;br /&gt;
 ipcalc -n 192.121.85.96/27 -m&lt;br /&gt;
&lt;br /&gt;
=iperf=&lt;br /&gt;
start server on client A.&lt;br /&gt;
 iperf -s&lt;br /&gt;
start measure from the other host. Limit bandwidth to 10k.&lt;br /&gt;
 iperf -c 10.20.30.40 --bandwidth 10K&lt;br /&gt;
==Multicast test.==&lt;br /&gt;
On the listener side:&lt;br /&gt;
 iperf -s -u -B 224.1.1.1 -i 1&lt;br /&gt;
On sender&lt;br /&gt;
 iperf -c 224.1.1.1 -u -T 32 -t 3 -i 1&lt;br /&gt;
&lt;br /&gt;
=ipmitool=&lt;br /&gt;
What is the power consumtion of dell server.&lt;br /&gt;
 ipmitool -I lanplus -H 127.0.0.1 -U root -P calvin delloem powermonitor&lt;br /&gt;
 ipmitool lan print&lt;br /&gt;
 ipmitool sdr list&lt;br /&gt;
&lt;br /&gt;
=iptables=&lt;br /&gt;
==Show iptables OUTPUT, PREROUTING and POSTROUTING==&lt;br /&gt;
 iptables --table nat --list --exact --verbose --numeric --line-number&lt;br /&gt;
==Show config==&lt;br /&gt;
 iptables -L -t nat -n&lt;br /&gt;
==Dnat to localhost.==&lt;br /&gt;
 iptables -t nat -I PREROUTING --source 131.115.115.53 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
 iptables -t nat -I OUTPUT --source 131.115.115.53 --destination 127.0.0.1 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
==Flush all rules.==&lt;br /&gt;
 &lt;br /&gt;
 iptables -F&lt;br /&gt;
 iptables -X&lt;br /&gt;
 iptables -t nat -F&lt;br /&gt;
 iptables -t nat -X&lt;br /&gt;
 iptables -t mangle -F&lt;br /&gt;
 iptables -t mangle -X&lt;br /&gt;
 iptables -P INPUT ACCEPT&lt;br /&gt;
 iptables -P FORWARD ACCEPT&lt;br /&gt;
 iptables -P OUTPUT ACCEPT&lt;br /&gt;
&lt;br /&gt;
==Block==&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j DROP&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block outgoing mail==&lt;br /&gt;
 iptables -A OUTPUT -p tcp --dport 25 -o $INTERFACE -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block all traffic except ssh in/out log to syslog.==&lt;br /&gt;
 iptables -P INPUT DROP&lt;br /&gt;
 iptables -P OUTPUT DROP&lt;br /&gt;
 iptables -P FORWARD DROP&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A INPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-in&amp;quot;&lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Block traffic on certain port.==&lt;br /&gt;
 iptables -A INPUT -p tcp --dport 7009 -j REJECT&lt;br /&gt;
==Fake source==&lt;br /&gt;
 iptables -t nat -A POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot; &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
 # Remove the current rules&lt;br /&gt;
 iptables -t nat -D POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot;&lt;br /&gt;
==redirect ip==&lt;br /&gt;
Send traffic destined for one ip and port to another ip and port.&lt;br /&gt;
 iptables -t nat -A OUTPUT -p tcp -d 146.213.6.7 --dport 1023 -j DNAT --to-destination 10.199.150.111:1023&lt;br /&gt;
 iptables -t nat -A OUTPUT -p icmp -d 146.213.6.7 -j DNAT --to-destination 10.199.150.111&lt;br /&gt;
==allow trafic from subnet==&lt;br /&gt;
 iptables -A INPUT -s 172.16.27.0/24 -j ACCEPT&lt;br /&gt;
==allow ssh from all==&lt;br /&gt;
 iptables -A INPUT -p tcp -dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -p tcp -dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT&lt;br /&gt;
or&lt;br /&gt;
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
 -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
==find which rule is blocking by removing one at a time. Better way is to enable logging==&lt;br /&gt;
 iptables -L -n --line-numbers&lt;br /&gt;
 iptables -D &amp;lt;line-number&amp;gt;&lt;br /&gt;
==List rules from OUTPUT chain with line number==&lt;br /&gt;
 iptables -t filter -L OUTPUT --line-numbers -n&lt;br /&gt;
&lt;br /&gt;
==Add rule to specific row number==&lt;br /&gt;
 iptables -I OUTPUT $ROW_NUMBER -d 54.72.175.186/32 -p tcp -m tcp --dport 443 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=irc=&lt;br /&gt;
Close private messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close public messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close a query&lt;br /&gt;
 /q&lt;br /&gt;
=jmtpfs=&lt;br /&gt;
Mount disk&lt;br /&gt;
 jmtpfs /mnt/mtp&lt;br /&gt;
Umount disk&lt;br /&gt;
 fusermount -u /mnt/mtp&lt;br /&gt;
&lt;br /&gt;
=john=&lt;br /&gt;
Test performance&lt;br /&gt;
 john -test&lt;br /&gt;
Recover passwords with password list.&lt;br /&gt;
 john -wordlist:password.lst passfile.txt&lt;br /&gt;
=journalctl=&lt;br /&gt;
==View log from last day.==&lt;br /&gt;
 journalctl --since yesterday&lt;br /&gt;
==List all units.==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==Current disk usage.==&lt;br /&gt;
 journalctl --disk-usage&lt;br /&gt;
==Show only certain error level. (err crit)==&lt;br /&gt;
 journalctl -p err&lt;br /&gt;
==List boots==&lt;br /&gt;
 journalctl --list-boots&lt;br /&gt;
==Show events between two time stamps.==&lt;br /&gt;
 journalctl --since &amp;quot;2017-01-23 05:56:42&amp;quot; --until &amp;quot;2017-01-23 07:56:42&amp;quot;&lt;br /&gt;
==show entries for one unit.==&lt;br /&gt;
 journalctl -u openvpn-server@server&lt;br /&gt;
 journalctl -u sshd  -f&lt;br /&gt;
==iptables logs==&lt;br /&gt;
 journalctl -k -f | grep -i iptables&lt;br /&gt;
==wipe logs==&lt;br /&gt;
 journalctl --vacuum-time=1h&lt;br /&gt;
==compare two different boots==&lt;br /&gt;
 journalctl --since &amp;quot;$(date &#039;+%F %H:%M:%S&#039; --date &#039;-10 hour&#039;)&amp;quot; -u NetworkManager -b -1  -o cat | sed &#039;s/\[[0-9.]*\]//g&#039;&lt;br /&gt;
&lt;br /&gt;
==persistent logging==&lt;br /&gt;
Enable persistent logging in systemd-journald. grep journal /usr/lib/tmpfiles.d/systemd.conf. Install syslog instead.&lt;br /&gt;
 mkdir /var/log/journal &lt;br /&gt;
 chmod 2755 /var/log/journal&lt;br /&gt;
 chown root:systemd-journal /var/log/journal&lt;br /&gt;
 killall -USR1 systemd-journald&lt;br /&gt;
&lt;br /&gt;
=jpegtran=&lt;br /&gt;
 # to lossless cut a file.&lt;br /&gt;
 jpegtran -crop 700x400+2150+1500 2012-05-19_20-39-35.jpg &amp;gt; /photos/Sweden/2012/2012-05-19/2012-05-19_20-39-35.jpg&lt;br /&gt;
 # Rotate counter clockwise.&lt;br /&gt;
 jpegtran  -copy all -rotate 270 2012-08-18_15-06-43.jpg &amp;gt; 2012-08-18_15-06-43_270.jpg&lt;br /&gt;
=kdump=&lt;br /&gt;
Change action to dump memory.&lt;br /&gt;
 /etc/kdump.conf&lt;br /&gt;
 core_collector true&lt;br /&gt;
Reload config.&lt;br /&gt;
 systemctl restart kdump&lt;br /&gt;
=keepass=&lt;br /&gt;
Create database&lt;br /&gt;
 printf &#039;%s\n&#039; &#039;P@55Word&#039;{,} | keepassxc-cli db-create -p -q keepassxc_abjorklund.kdbx&lt;br /&gt;
Add entry to database.&lt;br /&gt;
 keepassxc-cli add keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
Copy password from password entry&lt;br /&gt;
 keepassxc-cli clip keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
&lt;br /&gt;
=keyboard=&lt;br /&gt;
 keymaps &lt;br /&gt;
 dumpkeys&lt;br /&gt;
 loadkeys sv-latin1&lt;br /&gt;
 loadkeys us&lt;br /&gt;
 setxkbmap en&lt;br /&gt;
 setxkbmap -layout se -variant nodeadkeys&lt;br /&gt;
reset corrupt keyboard after using vmware.&lt;br /&gt;
 setxkbmap&lt;br /&gt;
&lt;br /&gt;
=kill=&lt;br /&gt;
suspend/resume a jobb.&lt;br /&gt;
 # kill -STOP PID&lt;br /&gt;
 # kill -CONT PID&lt;br /&gt;
=kpartx=&lt;br /&gt;
 # Create device files from disk image.&lt;br /&gt;
 sudo kpartx -av disk_image.raw &lt;br /&gt;
 # Remove device files.&lt;br /&gt;
 sudo kpartx -d disk_image.raw&lt;br /&gt;
&lt;br /&gt;
=lastb=&lt;br /&gt;
Show failed ssh logins.&lt;br /&gt;
 lastb&lt;br /&gt;
=less=&lt;br /&gt;
Toggle line wrap&lt;br /&gt;
 - -&amp;gt; S&lt;br /&gt;
tail with less. CTRL + c = scroll around. SHIFT + f = to tail again.&lt;br /&gt;
 less +F -B /tmp/tmp&lt;br /&gt;
=lftp=&lt;br /&gt;
 lftp -u &amp;lt;user&amp;gt;,&amp;lt;password&amp;gt; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
With proxy.&lt;br /&gt;
 lftp -e &amp;quot;set ftp:proxy http://&amp;lt;url&amp;gt;:3128 ; set ssl:verify-certificate no; open -u user,password ftp://ftp.example.se/&amp;quot;&lt;br /&gt;
Workaround.&lt;br /&gt;
 lftp -e &#039;set ftp:use-feat false; set ftp:ssl-allow false&#039; -u user,passwor ftp.example.se&lt;br /&gt;
Run commands from cli.&lt;br /&gt;
 lftp -u &#039;&amp;lt;user&amp;gt;,&amp;lt;password&amp;gt;&#039; -e &#039;set ssl:verify-certificate no ; ls -la ; quit&#039; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=ln=&lt;br /&gt;
Create link even if it exists.&lt;br /&gt;
 ln -sfT /destination link&lt;br /&gt;
&lt;br /&gt;
=locale=&lt;br /&gt;
To show 24 hour format.&lt;br /&gt;
 LC_ALL=C&lt;br /&gt;
=localectl=&lt;br /&gt;
Change keyboard.&lt;br /&gt;
 localectl list-keymaps&lt;br /&gt;
 localectl set-keymap se-nodeadkeys&lt;br /&gt;
 localectl set-x11-keymap se-nodeadkeys&lt;br /&gt;
&lt;br /&gt;
=lock=&lt;br /&gt;
locking keyboard under linux.&lt;br /&gt;
 lock-keyboard-for-baby&lt;br /&gt;
=logging=&lt;br /&gt;
bash create log.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 exec &amp;gt; /logfile&lt;br /&gt;
alternative&lt;br /&gt;
 exec 2&amp;gt;/tmp/log&lt;br /&gt;
Read logs on system.&lt;br /&gt;
 tail -f $(lsof | grep log$ |awk &#039;{ print $NF }&#039; | sort -u |xargs)&lt;br /&gt;
=logrotate=&lt;br /&gt;
Test dry run logrotate file. -d=debug -f=force&lt;br /&gt;
 logrotate -d -f /etc/logrotate.conf&lt;br /&gt;
Force logrotate in verbose mode.&lt;br /&gt;
 logrotate -v -f /etc/logrotate.conf&lt;br /&gt;
Create logrotate config entry.&lt;br /&gt;
 # Configure log rotation.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/logrotate.d/ipmonperfj_cleanupdaemon&lt;br /&gt;
 /directory/logs/cleanupdaemon.log {&lt;br /&gt;
    copytruncate&lt;br /&gt;
    size 100M&lt;br /&gt;
    rotate 60&lt;br /&gt;
    compress&lt;br /&gt;
    missingok&lt;br /&gt;
    olddir old&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
Disable logrotate. Look for file extension to ignore.&lt;br /&gt;
 man logrotate.conf, you can read find tabooext&lt;br /&gt;
 Ex. mv /etc/logrotate.d/mysql{,.rpmsave}&lt;br /&gt;
&lt;br /&gt;
=losetup=&lt;br /&gt;
Create loopback devices for partitions in image. Force the kernel to scan the partition table on a newly created loop device&lt;br /&gt;
 losetup -P /dev/loop2 harddrive.img&lt;br /&gt;
Set up next available device read only.&lt;br /&gt;
 losetup -f -r /temp/rb-slog05/sda6&lt;br /&gt;
Show all&lt;br /&gt;
 losetup -a&lt;br /&gt;
detatach&lt;br /&gt;
 losetup -d /dev/loop2&lt;br /&gt;
&lt;br /&gt;
=ls=&lt;br /&gt;
 ls -la --time-style=&amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; *.3gp&lt;br /&gt;
List processes in epoch date&lt;br /&gt;
 ( cd /proc; ls -rtd --full-time --time-style=+%s [0123456789]*; )&lt;br /&gt;
=lsblk=&lt;br /&gt;
 lsblk -d -o NAME,ROTA,MODEL&lt;br /&gt;
=lshw=&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 lshw -C memory&lt;br /&gt;
&lt;br /&gt;
==Is cpu 32 or 64bit.==&lt;br /&gt;
 lshw -class processor&lt;br /&gt;
&lt;br /&gt;
=lsof=&lt;br /&gt;
List recurivly all process that have a path open.&lt;br /&gt;
 lsof +D /apps/&lt;br /&gt;
which ports has a process opened?&lt;br /&gt;
 lsof -Pan -p 13354 -i&lt;br /&gt;
=lspci=&lt;br /&gt;
List devices without drivers.&lt;br /&gt;
 lspci -nnk&lt;br /&gt;
&lt;br /&gt;
=which process listen to port=&lt;br /&gt;
 lsof -i :443&lt;br /&gt;
&lt;br /&gt;
=mail=&lt;br /&gt;
command line mail with changed from&lt;br /&gt;
 echo message$(date +%F_%H-%M-%S) | mail -s Subject$(date +%F_%H-%M-%S) -r from@inter.net reciever@inter.net&lt;br /&gt;
command line mail with changed from with attachment&lt;br /&gt;
 echo message | mail -s Subject -r from@inter.net -a /attach.ment reciever@inter.net&lt;br /&gt;
Change default sender.&lt;br /&gt;
 # ~/.mailrc &lt;br /&gt;
 # From address for mailx.&lt;br /&gt;
 set from=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot; &lt;br /&gt;
 set replyto=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=man=&lt;br /&gt;
man correct caracters.&lt;br /&gt;
 LANG=C man passwd&lt;br /&gt;
&lt;br /&gt;
man clean for output to file.&lt;br /&gt;
 man [manual] | col -b &amp;gt; file.txt&lt;br /&gt;
Read from section 5&lt;br /&gt;
 man man.5&lt;br /&gt;
&lt;br /&gt;
=mbr=&lt;br /&gt;
backup mbr.&lt;br /&gt;
 # dd if=/dev/sdX of=/temp/sdx-mbr bs=512 count=1&lt;br /&gt;
&lt;br /&gt;
restore mbr&lt;br /&gt;
 # dd if=/temp/sdx-mbr of=/dev/sdX bs=446 count=1&lt;br /&gt;
=mdadm=&lt;br /&gt;
Add disk that was lost&lt;br /&gt;
 mdadm /dev/md125 -a /dev/vda1&lt;br /&gt;
&lt;br /&gt;
=minimodem=&lt;br /&gt;
Transmit file via audio.&lt;br /&gt;
 minimodem -t 200 &lt;br /&gt;
Recieve file via audio&lt;br /&gt;
 minimodem -r 200&lt;br /&gt;
&lt;br /&gt;
=mkfs=&lt;br /&gt;
Create fat32 file system.&lt;br /&gt;
 dd if=/dev/zero of=/tmp/sdb bs=32M status=progress conv=fdatasync count=10&lt;br /&gt;
 fdisk /tmp/sdb&lt;br /&gt;
 n&lt;br /&gt;
 &amp;lt;accept all defaults&amp;gt;&lt;br /&gt;
 t&lt;br /&gt;
 b&lt;br /&gt;
 p&lt;br /&gt;
 w&lt;br /&gt;
 mkfs.vfat -F 32 -n MYDRIVE /tmp/sdb1&lt;br /&gt;
==mkfs.ext4==&lt;br /&gt;
Create ext4 filesystem. Overwrite. Label and root reserved to 0.&lt;br /&gt;
 mkfs.ext4 -F -L looted_storage -m 0 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
=mkpasswd=&lt;br /&gt;
Create a password hash&lt;br /&gt;
 echo password | mkpasswd -m sha-512 -s&lt;br /&gt;
&lt;br /&gt;
=mogrify=&lt;br /&gt;
Resize, crop... a file. Removes original.&lt;br /&gt;
 mogrify -resize 800 *.jpg&lt;br /&gt;
=mokutil(secure boot/secureboot=&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
=mount=&lt;br /&gt;
Mount a temporary ram partition&lt;br /&gt;
 mount -t tmpfs tmpfs /mnt -o size=1024&lt;br /&gt;
Mount a cifs filesystem and change owner on mountpoint.&lt;br /&gt;
 mount.cifs -o credentials=/home/user/cifs.credentials,gid=1004,uid=1004 //server/c$ /mnt/cifs&lt;br /&gt;
Disallow normal user to ps. If not belonging to gid 1001.&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
 proc                    /proc                   proc    defaults,hidepid=2,gid=1001        0 0&lt;br /&gt;
&lt;br /&gt;
=movgrab=&lt;br /&gt;
List available formats&lt;br /&gt;
 movgrab -T http://youtu.be/ucivXRBrP_0&lt;br /&gt;
Get version listed.&lt;br /&gt;
 movgrab -f mp4:1920x1080 http://www.youtube.com/v/ucivXRBrP_0&lt;br /&gt;
&lt;br /&gt;
=mplayer=&lt;br /&gt;
mplayer in ascii mode.&lt;br /&gt;
 mplayer -monitoraspect 4:3 -vo aa LinaFreestyler.avi&lt;br /&gt;
 mplayer -vo aa -monitorpixelaspect 0.5 *.mp4&lt;br /&gt;
mplayer on second soundcard.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=0.0 *.mp3&lt;br /&gt;
Or, to specify a non-default (secondary) device either of the following commands can be used.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp1 *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=1.0 *.mp3&lt;br /&gt;
play from v4l&lt;br /&gt;
 mplayer -tv device=/dev/video:driver=v4l:input=1:width=640:height=480:norm=ntsc:adevice=/dev/dsp tv://1 -zoom -aspect 4:3&lt;br /&gt;
 mplayer -fps 15 tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0play hdv material.&lt;br /&gt;
 mplayer -monitoraspect 16:9 -vf pp=lb&lt;br /&gt;
play dvd image.&lt;br /&gt;
 mplayer dvd://1 -dvd-device DVD.iso&lt;br /&gt;
play h264 webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0:outfmt=0x34363248 -aspect 16:10 -fs&lt;br /&gt;
play mjpeg webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:outfmt=mjpeg:width=1920:height=1080:device=/dev/video0 -aspect 16:10 -fs&lt;br /&gt;
play mp3 in different speed keep pitch.&lt;br /&gt;
 mplayer -speed 1.5 -af scaletempo /mp3/music.mp3&lt;br /&gt;
 # list chapters.&lt;br /&gt;
 mplayer dvd://1 -dvd-device /dev/sr0 -identify -novideo -nosound &lt;br /&gt;
 # dump chapters.&lt;br /&gt;
 mplayer -dvd-device /dev/sr0 dvd://3 -dumpstream -dumpfile 3.vob&lt;br /&gt;
&lt;br /&gt;
=MP4Box=&lt;br /&gt;
Combine mp4 files&lt;br /&gt;
 MP4Box -add file1.mp4 -add file2.mp4 output.mp4&lt;br /&gt;
=mpv=&lt;br /&gt;
Video player. Enable hardware accelleration.&lt;br /&gt;
 # Install packages.&lt;br /&gt;
 dnf install intel-media-driver libva libva-utils gstreamer1-vaapi ffmpeg intel-gpu-tools mesa-dri-drivers mpv&lt;br /&gt;
 # Top for intel gpu&lt;br /&gt;
 sudo intel_gpu_top&lt;br /&gt;
 # Enable hardware accelleration for mpv.&lt;br /&gt;
 CONFIG_FILE=~/.config/mpv/mpv.conf ; if ! grep -q ^hwdec=auto ${CONFIG_FILE} ; then echo hwdec=auto ${CONFIG_FILE} ; fi&lt;br /&gt;
 # Create new initramfs&lt;br /&gt;
 sudo dracut --force&lt;br /&gt;
 # Look at browser.&lt;br /&gt;
 chrome://gpu/&lt;br /&gt;
&lt;br /&gt;
=mpstat=&lt;br /&gt;
top like output of system usage&lt;br /&gt;
 mpstat 5 5&lt;br /&gt;
&lt;br /&gt;
=mtr=&lt;br /&gt;
ping and traceroute combined.&lt;br /&gt;
 mtr -rc 10 8.8.8.8&lt;br /&gt;
&lt;br /&gt;
=mutt=&lt;br /&gt;
Put the followin in .muttrc to change From.&lt;br /&gt;
 set realname=&amp;quot;Joe User&amp;quot;&lt;br /&gt;
 set from=&amp;quot;user@host&amp;quot;&lt;br /&gt;
 set use_from=yes&lt;br /&gt;
command line mail with attachment&lt;br /&gt;
 mutt -s subject -a syslogs.tar.gz admin@domain.org &amp;lt; /dev/null&lt;br /&gt;
Change sender from command line.&lt;br /&gt;
 export EMAIL=address@inter.net &amp;amp;&amp;amp; mutt -s &amp;quot;Subject Test&amp;quot; anden@halfface.se &amp;lt; /dev/null&lt;br /&gt;
 echo &amp;quot;Test message&amp;quot; | mutt -s &amp;quot;Subject test&amp;quot; -e &amp;quot;set realname=\&amp;quot;Real Name\&amp;quot;&amp;quot; -e &amp;quot;set from=\&amp;quot;anden@halfface.se\&amp;quot;&amp;quot; -e &amp;quot;set use_from=yes&amp;quot; anden@halfface.se&lt;br /&gt;
Change envolope from&lt;br /&gt;
 export REPLYTO=email@inter.net&lt;br /&gt;
 export EMAIL=email@inter.net&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment&lt;br /&gt;
oneliner&lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment &lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; -s &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; &amp;quot;${EMAIL}&amp;quot;&lt;br /&gt;
Dont trigger out of Out Of Office reply.&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;unignore list-id&amp;quot; email@inter.net&lt;br /&gt;
=multilog=&lt;br /&gt;
split standard output to logfiles. In this case keep specific size. t means to prepend a TAI timestamp on each line. 10000B. 5 logfiles. tai64nlocal program simply reads stdin and replaces TAI timestamps with human-readable ones. http://blog.teksol.info/pages/daemontools/best-practices. Compress rotated logfiles.&lt;br /&gt;
 mkdir /tmp/myapp ; ./myapp | multilog t s10000 n5 &#039;!tai64nlocal&#039; &#039;!gzip&#039; /tmp/myapp 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
=nc (netcat)=&lt;br /&gt;
==Check communication.==&lt;br /&gt;
listen on port 3333.&lt;br /&gt;
 nc -kl 3333&lt;br /&gt;
talk to port 3333.&lt;br /&gt;
 nc 192.168.0.1 3333&lt;br /&gt;
&lt;br /&gt;
==Transfer data==&lt;br /&gt;
Cat file, calculate size listen on port 3333.&lt;br /&gt;
 cat backup.iso | pv -b | nc -l 3333&lt;br /&gt;
Receive file.&lt;br /&gt;
 nc 192.168.0.1 3333 | pv -b &amp;gt; backup.iso&lt;br /&gt;
&lt;br /&gt;
==Setup telnet server==&lt;br /&gt;
 nc -L -l -p1234 -d -e cmd.exe&lt;br /&gt;
&lt;br /&gt;
==Test connection.==&lt;br /&gt;
 nc -w2 -znv 10.1.22.31 7222&lt;br /&gt;
&lt;br /&gt;
==tunnel==&lt;br /&gt;
On the server, we open a listener on the TCP port 6667 which will      forward data to UDP port 53 of a specified IP. If you want to do      DNS forwarding like me, you can take the first nameserver&#039;s IP      you will find in /etc/resolv.conf - in this      example, this is 192.168.1.1. But first, we need to      create a fifo. The fifo is necessary to have two-way      communication between the two channels. A simple shell pipe      would only communicate left process&#039; standard output to right      process&#039; standard input.&lt;br /&gt;
&lt;br /&gt;
 mkfifo /tmp/fifo&lt;br /&gt;
 nc -l -p 6667 &amp;lt; /tmp/fifo | nc -u 192.168.1.1 53 &amp;gt; /tmp/fifo&lt;br /&gt;
&lt;br /&gt;
==Dont eat up standard output.==&lt;br /&gt;
 nc -v --send-only --recv-only localhost 22&lt;br /&gt;
&lt;br /&gt;
==Talk to pop3 server over ssl.==&lt;br /&gt;
 nc --ssl mail.tele2.se 995&lt;br /&gt;
==Talk to pop server==&lt;br /&gt;
 nc -C mail.tele2.se 25&lt;br /&gt;
&lt;br /&gt;
==Talk to web server==&lt;br /&gt;
 URL_SSL=halfface.se ; echo -e &amp;quot;HEAD / HTTP/1.1\nHost: ${URL_SSL}\n\n&amp;quot; | nc --ssl ${URL_SSL} 443&lt;br /&gt;
 echo -e &#039;GET /users/password/new HTTP/1.1\r\nHost: localhost\r\nConnection: Close\r\n\r\n&#039; | nc localhost 80 | head&lt;br /&gt;
To overcome problems with nc closing connection too fast.&lt;br /&gt;
 (echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;; sleep .1) | nc 172.30.156.15 80 | head -30&lt;br /&gt;
 nc --no-shutdown -v 172.30.156.15 80 &amp;lt;&amp;lt;&amp;lt;$(echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;)&lt;br /&gt;
&lt;br /&gt;
=ncdu=&lt;br /&gt;
disk usage. Stay in one filesystem.&lt;br /&gt;
 ncdu -x /&lt;br /&gt;
=net=&lt;br /&gt;
Start service via samba.&lt;br /&gt;
 net rpc service start ipremote -I 172.17.255.99 -U &#039;domain/user%password&#039;&lt;br /&gt;
&lt;br /&gt;
=netstat=&lt;br /&gt;
Look at network connections. tcp/ip4.&lt;br /&gt;
 netstat -4anpt&lt;br /&gt;
Look at multicast groups&lt;br /&gt;
 netstat -g&lt;br /&gt;
What does it mean?=&lt;br /&gt;
   ESTABLISHED&lt;br /&gt;
          The socket has an established connection.&lt;br /&gt;
   SYN_SENT&lt;br /&gt;
          The socket is actively attempting to establish a connection.&lt;br /&gt;
   SYN_RECV&lt;br /&gt;
          A connection request has been received from the network.&lt;br /&gt;
   FIN_WAIT1&lt;br /&gt;
          The socket is closed, and the connection is shutting down.&lt;br /&gt;
   FIN_WAIT2&lt;br /&gt;
          Connection is closed, and the socket is waiting for  a  shutdown&lt;br /&gt;
          from the remote end.&lt;br /&gt;
   TIME_WAIT&lt;br /&gt;
          The socket is waiting after close to handle packets still in the&lt;br /&gt;
          network.&lt;br /&gt;
   CLOSE  The socket is not being used.&lt;br /&gt;
   CLOSE_WAIT&lt;br /&gt;
          The remote end has shut down, waiting for the socket to close.&lt;br /&gt;
   LAST_ACK&lt;br /&gt;
          The remote end has shut down, and the socket is closed.  Waiting&lt;br /&gt;
          for acknowledgement.&lt;br /&gt;
   LISTEN The  socket is listening for incoming connections.  Such sockets&lt;br /&gt;
          are  not  included  in  the  output  unless  you   specify   the&lt;br /&gt;
          --listening (-l) or --all (-a) option.&lt;br /&gt;
   CLOSING&lt;br /&gt;
          Both  sockets are shut down but we still don&#039;t have all our data&lt;br /&gt;
          sent.&lt;br /&gt;
   UNKNOWN&lt;br /&gt;
          The state of the socket is unknown.&lt;br /&gt;
==statistics==&lt;br /&gt;
 netstat -s&lt;br /&gt;
 netstat -s | retransmit&lt;br /&gt;
&lt;br /&gt;
=nft=&lt;br /&gt;
nftables list config&lt;br /&gt;
 nft -j list ruleset | jq . &lt;br /&gt;
=nmap=&lt;br /&gt;
Scan for open ssh ports.&lt;br /&gt;
 nmap -p 22 --open -sV 10.0.0.*&lt;br /&gt;
 nmap -p 22 -sV --open -oG - $(ip -4 a s $(ip route show default | awk &#039;{print $5}&#039;) | grep inet | awk &#039;{print $2}&#039;) | awk &#039;/\/open\// {print $2,$3}&#039;&lt;br /&gt;
Syn scan.&lt;br /&gt;
 nmap -P0 -sS -p1023 www.halfface.se&lt;br /&gt;
Ping scan. Do not resolve.&lt;br /&gt;
 nmap -sn -n 10.127.254.1-254&lt;br /&gt;
Which ciphers are allowed.&lt;br /&gt;
 nmap --script ssl-enum-ciphers -p 465 www.halfface.se&lt;br /&gt;
arp scan.&lt;br /&gt;
 nmap -PR 192.168.0.0/24&lt;br /&gt;
which kex_algorithms server_host_key_algorithms encryption_algorithms compression_algorithms&lt;br /&gt;
 nmap --script ssh2-enum-algos -sV -p 22 ssh.server.inter.net&lt;br /&gt;
Which manufacturer.&lt;br /&gt;
 nmap -sn 10.111.222.0/24&lt;br /&gt;
&lt;br /&gt;
=nmcli=&lt;br /&gt;
==List connections==&lt;br /&gt;
 nmcli con&lt;br /&gt;
==rename connection==&lt;br /&gt;
 nmcli connection modify &amp;lt;old_name&amp;gt; con-name &amp;lt;new_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==manage network from cli==&lt;br /&gt;
 http://fedoraproject.org/wiki/Networking/CLI&lt;br /&gt;
==Connect to a configured connection by name==&lt;br /&gt;
 nmcli connection up WireLess&lt;br /&gt;
==Disconnection by name==&lt;br /&gt;
 nmcli connection down Wireless&lt;br /&gt;
==Connect to remembered network.==&lt;br /&gt;
 nmcli con up &#039;[-_-] halfface 5&#039; &lt;br /&gt;
==List available wireless networks.==&lt;br /&gt;
 nmcli device wifi list&lt;br /&gt;
==Generate list of available wireless networks.==&lt;br /&gt;
 nmcli device wifi rescan&lt;br /&gt;
 sudo nmcli device wifi list --rescan yes&lt;br /&gt;
&lt;br /&gt;
==Create connection for wireless network.==&lt;br /&gt;
 nmcli device wifi connect Bredband password P4ssM0rd&lt;br /&gt;
==Connect to specific bssid==&lt;br /&gt;
 nmcli connection modify MyWifiConnection 802-11-wireless.bssid 00:11:22:33:44:55&lt;br /&gt;
&lt;br /&gt;
==List networks on specific interface.==&lt;br /&gt;
 nmcli device wifi list ifname wlp0s18f2u4&lt;br /&gt;
==Disconnect network interface.==&lt;br /&gt;
 nmcli device disconnect wlp0s18f2u4&lt;br /&gt;
==Manually setup interface.==&lt;br /&gt;
 nmcli con add con-name &amp;quot;static-ens32&amp;quot; ifname ens32 type ethernet ip4 xxx.xxx.120.44/24 gw4 xxx.xxx.120.1&lt;br /&gt;
 nmcli con mod &amp;quot;static-ens32&amp;quot; ipv4.dns &amp;quot;xxx.xxx.120.1,8.8.8.8&amp;quot;&lt;br /&gt;
 nmcli con up &amp;quot;static-ens32&amp;quot; iface ens32&lt;br /&gt;
==list devices.==&lt;br /&gt;
 nmcli device status&lt;br /&gt;
==list connections.==&lt;br /&gt;
 nmcli connection show&lt;br /&gt;
==delete connection==&lt;br /&gt;
 nmcli con delete &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
==add connection with static ip.==&lt;br /&gt;
 nmcli con add con-name ens224 ifname ens224 type ethernet ip4 172.30.109.16/24&lt;br /&gt;
==show properties for connection==&lt;br /&gt;
 nmcli dev show ens224&lt;br /&gt;
==set dns server==&lt;br /&gt;
 nmcli connection modify enp1s0 ipv4.dns &amp;quot;10.111.222.2,8.8.8.8&amp;quot;&lt;br /&gt;
==edit==&lt;br /&gt;
 nmcli con edit $connection&lt;br /&gt;
 print all&lt;br /&gt;
==autostart==&lt;br /&gt;
 nmcli connection modify IFNAME connection.autoconnect yes|no&lt;br /&gt;
==dhcp option==&lt;br /&gt;
 ip -4 addr show | grep -Ev &amp;quot;127.0.0.1|LOOPBACK&amp;quot; | awk &#039;/^[0-9]+:/ {sub(/:/,&amp;quot;&amp;quot;,$2); print $2}&#039; | sort -u | while read NIC ; do echo &#039;*&#039; $NIC ; nmcli -f DHCP4 device show $NIC ; done&lt;br /&gt;
&lt;br /&gt;
==Make network a bridge interface==&lt;br /&gt;
 sudo nmcli con add ifname br0 type bridge con-name br0&lt;br /&gt;
 sudo nmcli con add type bridge-slave ifname &amp;lt;network_card&amp;gt; master br0&lt;br /&gt;
 sudo nmcli con modify br0 bridge.stp no&lt;br /&gt;
 sudo nmcli con down &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
 sudo nmcli con up br0&lt;br /&gt;
==modify(change) vlan id==&lt;br /&gt;
 nmcli connection modify &amp;lt;connection_name&amp;gt; vlan.id &amp;lt;new_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=nohup=&lt;br /&gt;
Start binary under nohup and tail log.&lt;br /&gt;
 nohup ./run.sh &amp;amp; sleep 1 ; tail -1000f nohup.out&lt;br /&gt;
Start process and log to specified file.&lt;br /&gt;
 nohup daemon &amp;gt; /path/daemon.log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=nping=&lt;br /&gt;
 nping -c 1 --tcp -p 80 www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=nth=&lt;br /&gt;
Name That Hash&lt;br /&gt;
 nth --text &#039;$y$j9T$jogs61gwDHB6L1oEwHeR00$L4cfYqkxKzS8dtkC5hPXFRMOIcEl6q5VKIkngrRGFM0&#039;&lt;br /&gt;
=ntfs-3g=&lt;br /&gt;
mount ntfs filesystem. read and write.&lt;br /&gt;
 yum install fuse fuse-libs ntfs-3g&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -r -o umask=0222,locale=en_US&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -rw -o umask=0000,locale=en_US&lt;br /&gt;
 fstab read and write.&lt;br /&gt;
 /dev/sda3   /media/e_drive     ntfs-3g    ro,defaults,umask=0222 0 0&lt;br /&gt;
 /dev/sda1   /media/c_drive     ntfs-3g    rw,defaults,umask=0000 0 0&lt;br /&gt;
Create ntfs partition.&lt;br /&gt;
 fdisk 7/gdisk 0700&lt;br /&gt;
 mkfs.ntfs /dev/sdx1 -Q&lt;br /&gt;
&lt;br /&gt;
=numbers=&lt;br /&gt;
series of numbers&lt;br /&gt;
 bash:&lt;br /&gt;
 echo {1..10}&lt;br /&gt;
=numfmt=&lt;br /&gt;
iec=accept optional single letter suffix. No output suffix. Remove B from input. change format of output, mb ,gb and so on.&lt;br /&gt;
 numfmt --from=iec --to=none --suffix=B 8.7KB&lt;br /&gt;
&lt;br /&gt;
=nwipe (dban)=&lt;br /&gt;
Wipe your disk&lt;br /&gt;
 nwipe --nogui --nowait --autonuke /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=omping=&lt;br /&gt;
multicast ping&lt;br /&gt;
  omping -c10 10.111.222.118 10.111.222.121&lt;br /&gt;
=openvpn3=&lt;br /&gt;
==Install openvpn fedora 38+ /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:dsommers\:openvpn3-devsnapshots.repo==&lt;br /&gt;
 [copr:copr.fedorainfracloud.org:dsommers:openvpn3-devsnapshots]&lt;br /&gt;
 name=Copr repo for openvpn3-devsnapshots owned by dsommers&lt;br /&gt;
 baseurl=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/fedora-$releasever-$basearch/&lt;br /&gt;
 type=rpm-md&lt;br /&gt;
 skip_if_unavailable=True&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 gpgkey=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/pubkey.gpg&lt;br /&gt;
 repo_gpgcheck=0&lt;br /&gt;
 enabled=1&lt;br /&gt;
 enabled_metadata=1&lt;br /&gt;
==Install package from above.==&lt;br /&gt;
 dnf install openvpn3-client&lt;br /&gt;
==Add configuration==&lt;br /&gt;
 OPENVPN_CONFIG=&amp;lt;name&amp;gt; ; openvpn3 config-import --name &amp;quot;$OPENVPN_CONFIG&amp;quot; --persistent --config &amp;quot;$OPENVPN_CONFIG&amp;quot;.ovpn&lt;br /&gt;
==List configs==&lt;br /&gt;
 openvpn3 configs-list&lt;br /&gt;
 openvpn3 configs-list --verbose&lt;br /&gt;
&lt;br /&gt;
==Remove config==&lt;br /&gt;
 openvpn3 config-remove --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==show full config==&lt;br /&gt;
 openvpn3 config-dump --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect==&lt;br /&gt;
 openvpn3 session-start --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Disconnect==&lt;br /&gt;
 openvpn3 session-manage --config &amp;lt;config-name&amp;gt; --disconnect&lt;br /&gt;
==Connect to the log with debug enabled. This can be run in a different terminal window after the connection has been started.==&lt;br /&gt;
 openvpn3 log --config &amp;lt;config-name&amp;gt; --log-level 6&lt;br /&gt;
==Show active sessions==&lt;br /&gt;
 openvpn3 sessions-list&lt;br /&gt;
==Show statistics for an active session==&lt;br /&gt;
 openvpn3 session-stats --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Show configuration settings==&lt;br /&gt;
 openvpn3 config-manage --config &amp;lt;config-name&amp;gt; --show&lt;br /&gt;
==sessions disconnect==&lt;br /&gt;
 openvpn3 sessions-list | grep Path | awk &#039;{print $2}&#039; | while read OPENVPN_PATH ; do echo $OPENVPN_PATH ; openvpn3 session-manage --session-path $OPENVPN_PATH --disconnect ; done&lt;br /&gt;
==View config files==&lt;br /&gt;
 sudo find /var/lib/openvpn3/configs/ -type f&lt;br /&gt;
&lt;br /&gt;
=openssl=&lt;br /&gt;
==Grab the public key.==&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443 &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -ne &#039;/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p&#039;&lt;br /&gt;
==What does the ssl cert look like.==&lt;br /&gt;
 HOST=www.halfface.se ; PORT=443 ; echo | openssl s_client -connect ${HOST}:${PORT} -servername ${HOST}| openssl x509 -ext subjectAltName -noout -startdate -enddate -subject -issuer -nameopt RFC2253,sep_comma_plus_space&lt;br /&gt;
&lt;br /&gt;
==What does crl look like. (Certificate Revocation List)==&lt;br /&gt;
 openssl crl -inform PEM -text -noout -in crl.pem&lt;br /&gt;
&lt;br /&gt;
==Connect to ssl server==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect to ssl server -cipher NULL,LOW==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect with openssl v3==&lt;br /&gt;
 openssl s_client -ssl3 -connect ipmon01.dupont:443&lt;br /&gt;
==Connect with low security cipher==&lt;br /&gt;
 echo X | openssl s_client -cipher NULL,LOW -connect www.halfface.se:8140&lt;br /&gt;
==PEM convert to DER==&lt;br /&gt;
 openssl x509 -inform PEM -in /file.pem -outform DER file.der&lt;br /&gt;
==p12 to cer==&lt;br /&gt;
 openssl pkcs12 -in infile.p12 -out outfile.cer -nodes&lt;br /&gt;
Export public&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.pem -clcerts -nokeys -passin pass:${PASS}&lt;br /&gt;
Export private&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.key -clcerts -nodes -passin pass:${PASS}&lt;br /&gt;
==p7b to pem==&lt;br /&gt;
 openssl pkcs7 -print_certs -in &amp;lt;certificate&amp;gt;.p7b -out certificate.pem&lt;br /&gt;
==pem to p12==&lt;br /&gt;
Using file containing private, public and chain.&lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
&lt;br /&gt;
==pfx to pem==&lt;br /&gt;
 env FILE=&amp;quot;&amp;lt;file&amp;gt;&amp;quot; PASSWORD=&amp;quot;&amp;lt;password&amp;gt;&amp;quot; bash -c &#039;openssl pkcs12 -in &amp;quot;$FILE&amp;quot; -out &amp;quot;${FILE//\//_}.pem&amp;quot; -nodes -password pass:&amp;quot;$PASSWORD&amp;quot;&#039;&lt;br /&gt;
Complete file.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -out cert.pem -nodes&lt;br /&gt;
Get private cert. Then remove password. Decrypt&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -nocerts -out key.pem&lt;br /&gt;
 openssl rsa -in key.pem -out server.key&lt;br /&gt;
Get public cert.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem&lt;br /&gt;
&lt;br /&gt;
==Extract p12 password protected keys in==&lt;br /&gt;
 openssl pkcs12 -in /file.p12 -passin file:/password -nokey -nodes -out /file.nokeys&lt;br /&gt;
 openssl pkcs12 -info -in &amp;lt;/path/to/file.pfx&amp;gt; -passin pass:&amp;lt;pfx&#039;s password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Encrypt file==&lt;br /&gt;
 openssl aes-256-cbc -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Decrypte file==&lt;br /&gt;
 openssl aes-256-cbc -d -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Install new root ca==&lt;br /&gt;
 # Change to the directory:&lt;br /&gt;
 cd /etc/pki/tls/certs&lt;br /&gt;
 # Next download the College root certificate:&lt;br /&gt;
 wget https://icca2.ic.ac.uk/certenroll/ic-root.crt&lt;br /&gt;
 # Convert the certificate to PEM format:&lt;br /&gt;
 openssl x509 -inform der -in ic-root.crt -out ic-root.pem&lt;br /&gt;
 # Create a link with the certificate hash:&lt;br /&gt;
 ln -s ic-root.pem `openssl x509 -hash -noout -in ic-root.pem`.0&lt;br /&gt;
 # Create sha256 base64 encoded hash&lt;br /&gt;
 openssl dgst -binary -sha256 | openssl base64&lt;br /&gt;
 # Verify root ca.&lt;br /&gt;
 openssl verify -CApath /etc/pki/tls/certs ic-inter-root.pem&lt;br /&gt;
 icrootca.cer: OK&lt;br /&gt;
The server certificate is the first certificate returned, and will be PEM formatted. The CA certificate is the final certificate returned, and is also PEM formatted.&lt;br /&gt;
 openssl&#039;: echo | openssl s_client -connect www.sslsite.com:443 -showcerts&lt;br /&gt;
Check ca store files.&lt;br /&gt;
 find . -name &#039;*.pem&#039; | while read PEM ; do echo &#039;###&#039; ${PEM} &#039;###&#039;;ls -la &amp;quot;${PEM}&amp;quot; ; set -x ; curl --cacert &amp;quot;${PEM}&amp;quot; https://site.test.net/index.htm.&lt;br /&gt;
==Verify pop3 connectivity.==&lt;br /&gt;
 openssl s_client -crlf -connect mail.tele2.se:110 -starttls pop3&lt;br /&gt;
 USER yiming&lt;br /&gt;
 PASS foobar&lt;br /&gt;
 LIST – lists the messages available in the user’s account, returning a status message and list with each row containing a message number and the size of that message in bytes&lt;br /&gt;
 STAT – returns a status message, the number of messages in the mailbox, and the size of the mailbox in bytes&lt;br /&gt;
 RETR [message_num] – returns the message identified by the message number, which is the same as the message number shown in the LIST command output&lt;br /&gt;
 TOP [message_num] [n] – returns the top n lines of the message denoted by message number.&lt;br /&gt;
 QUIT command will end the session.&lt;br /&gt;
==Create wildcard self signed certificate.==&lt;br /&gt;
 openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout wildcard.test.internal.zone.key -out wildcard.test.internal.zone.crt&lt;br /&gt;
 Common Name (eg, your name or your server&#039;s hostname) []:*.test.internal.zone&lt;br /&gt;
==Verify certificate chain==&lt;br /&gt;
 openssl verify -CAfile Thawte_Primary_Root_CA.pem -untrusted thawte_SSL_CA_G2.cer www.halfface.se.pem&lt;br /&gt;
Look at certificate chain.&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443&lt;br /&gt;
 CONNECTED(00000003)&lt;br /&gt;
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=1 C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=0 CN = www.halfface.se&lt;br /&gt;
 verify return:1&lt;br /&gt;
 ---&lt;br /&gt;
 Certificate chain&lt;br /&gt;
  0 s:CN = www.halfface.se&lt;br /&gt;
    i:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
  1 s:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
    i:O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 ---&lt;br /&gt;
Verify chain.&lt;br /&gt;
 openssl s_client -showcerts -verify 5 -connect www.halfface.se:443 &amp;lt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
==Connect to smtp server via ssl.==&lt;br /&gt;
 openssl s_client -crlf -ign_eof -connect www.halfface.se:25 -starttls smtp -quiet&lt;br /&gt;
 EHLO halfface.se&lt;br /&gt;
 AUTH LOGIN&lt;br /&gt;
 $(echo -n &amp;quot;username&amp;quot; | base64)&lt;br /&gt;
 $(echo -n &amp;quot;password&amp;quot; | base64)&lt;br /&gt;
 MAIL FROM:anden@halfface.se&lt;br /&gt;
 RCPT TO:&amp;lt;anden@halfface.se&amp;gt;&lt;br /&gt;
 DATA&lt;br /&gt;
 Subject: Test from cli. &lt;br /&gt;
 &lt;br /&gt;
 This is a test email.&lt;br /&gt;
 .&lt;br /&gt;
 QUIT&lt;br /&gt;
&lt;br /&gt;
==Connect to imap==&lt;br /&gt;
 openssl s_client -crlf -connect www.halfface.se:993&lt;br /&gt;
 openssl s_client -showcerts -connect www.halfface.se:143 -starttls imap&lt;br /&gt;
Login&lt;br /&gt;
 tag login abjorklund ${PASSWORD}&lt;br /&gt;
List mailboxes&lt;br /&gt;
 tag LIST &amp;quot;&amp;quot; &amp;quot;*&amp;quot;&lt;br /&gt;
Log out&lt;br /&gt;
 tag LOGOUT&lt;br /&gt;
&lt;br /&gt;
==compare two certifactes==&lt;br /&gt;
Compare the use case for the certificate.&lt;br /&gt;
  sdiff &amp;lt;(openssl x509 -in server.crt -noout -issuer -subject -enddate -purpose) &amp;lt;(openssl x509 -in uc_activemq.crt -noout -issuer -subject -enddate -purpose)| less&lt;br /&gt;
==create a csr==&lt;br /&gt;
 openssl req -new -sha256 -nodes -out www.halfface.se.csr -newkey rsa:2048 -keyout www.halfface.se.key -config &amp;lt;(&lt;br /&gt;
 cat &amp;lt;&amp;lt;-EOF&lt;br /&gt;
 [req]&lt;br /&gt;
 default_bits = 2048&lt;br /&gt;
 prompt = no&lt;br /&gt;
 default_md = sha256&lt;br /&gt;
 req_extensions = req_ext&lt;br /&gt;
 distinguished_name = dn&lt;br /&gt;
 [ dn ]&lt;br /&gt;
 O=Organisation: halfface&lt;br /&gt;
 C=SE&lt;br /&gt;
 ST=Stockholm&lt;br /&gt;
 L=Stockholm&lt;br /&gt;
 CN = www.halfface.se&lt;br /&gt;
 [ req_ext ]&lt;br /&gt;
 subjectAltName = @alt_names&lt;br /&gt;
 [ alt_names ]&lt;br /&gt;
 DNS.1 = halfface.se&lt;br /&gt;
 DNS.2 = ldap.halfface.se&lt;br /&gt;
 DNS.3 = mqtt.halfface.se&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
==csr information==&lt;br /&gt;
 openssl req -noout -text -in file.csr | grep -vE &#039;  [0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:&#039;&lt;br /&gt;
&lt;br /&gt;
==look at content of private key==&lt;br /&gt;
 openssl rsa -text -noout -in key.pem&lt;br /&gt;
&lt;br /&gt;
==confirm that public private and csr match==&lt;br /&gt;
 # For your SSL certificate: &lt;br /&gt;
 CERT_PUBLIC=$(ls *.crt)&lt;br /&gt;
 echo $(openssl x509 -noout -modulus -in &amp;quot;${CERT_PUBLIC}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PUBLIC}&amp;quot;,public cert.&lt;br /&gt;
 # For your RSA private key: &lt;br /&gt;
 CERT_PRIVATE=$(ls *.key)&lt;br /&gt;
 echo $(openssl rsa -noout -modulus -in &amp;quot;${CERT_PRIVATE}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PRIVATE}&amp;quot;,private key&lt;br /&gt;
 # For your CSR: &lt;br /&gt;
 CERT_CSR=$(ls *.csr)&lt;br /&gt;
 echo $(openssl req -noout -modulus -in &amp;quot;${CERT_CSR}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_CSR}&amp;quot;,certificate signing request&lt;br /&gt;
&lt;br /&gt;
==connect with ca private and public key==&lt;br /&gt;
 openssl s_client -CAfile ca.pem -cert public.crt -key private.key -connect 10.12.118.184:1023 -tls1_2&lt;br /&gt;
==create a ca==&lt;br /&gt;
===Create ca and certificates.===&lt;br /&gt;
 # Create folder structure.&lt;br /&gt;
 mkdir /root/ca/&lt;br /&gt;
 mkdir /root/ca/certs/&lt;br /&gt;
 mkdir /root/ca/crl/&lt;br /&gt;
 mkdir /root/ca/newcerts/&lt;br /&gt;
 mkdir /root/ca/private/&lt;br /&gt;
 mkdir /root/ca/requests/&lt;br /&gt;
 touch /root/ca/index.txt&lt;br /&gt;
 echo 1000 &amp;gt; /root/ca/serial&lt;br /&gt;
 chmod 600 /root/ca&lt;br /&gt;
 # Create private key for the CA certificate. pass phrase: $(pwgen 15)&lt;br /&gt;
 cd /root/ca/&lt;br /&gt;
 openssl genrsa -aes256 -out private/cakey.pem 4096&lt;br /&gt;
 # Create a public certificate for the CA.&lt;br /&gt;
 openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 36525&lt;br /&gt;
&lt;br /&gt;
 Country Name (2 letter code) [AU]:SE&lt;br /&gt;
 State or Province Name (full name) [Some-State]:Stockholm&lt;br /&gt;
 Locality Name (eg, city) []:Stockholm&lt;br /&gt;
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company&lt;br /&gt;
 Organizational Unit Name (eg, section) []:Company&lt;br /&gt;
 Common Name (e.g. server FQDN or YOUR name) []:Certificate Authority&lt;br /&gt;
 Email Address []:anden@halfface.se&lt;br /&gt;
&lt;br /&gt;
 # Copy system openssl.cnf to /root/ca dir. Then change dir in config.&lt;br /&gt;
 vim openssl.cnf&lt;br /&gt;
 [ CA_default ]&lt;br /&gt;
 dir = /root/ca # Where everything is kept&lt;br /&gt;
&lt;br /&gt;
===Create signed certificate keypair===&lt;br /&gt;
 cd requests/&lt;br /&gt;
 # Create csr&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -nodes -keyout &amp;lt;client&amp;gt;.key -out &amp;lt;client&amp;gt;.csr -config ../openssl.cnf&lt;br /&gt;
 # Issue certificate for csr.&lt;br /&gt;
 openssl ca -in &amp;lt;client&amp;gt;.csr -out &amp;lt;client&amp;gt;.crt -config ../openssl.cnf -days 36525&lt;br /&gt;
&lt;br /&gt;
==talk http via openssl==&lt;br /&gt;
 openssl s_client -crlf -quiet -connect www.halfface.se:443 &amp;lt;&amp;lt;EOF&lt;br /&gt;
 GET / HTTP/2.0&lt;br /&gt;
 Host: www.halfface.se&lt;br /&gt;
 &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==look at cert==&lt;br /&gt;
 openssl asn1parse -in rb-ca.crt.2021-02-28&lt;br /&gt;
==performance testing==&lt;br /&gt;
 openssl speed -evp aes-256-ecb&lt;br /&gt;
==confirm that ca is correct==&lt;br /&gt;
 echo | openssl s_client -CAfile Sectigo_RSA_Domain_Validation_Secure_Server_CA.pem -no-CAfile -no-CApath -tls1_2 -connect 172.30.32.141:5044 2&amp;gt;&amp;amp;1 | grep Verification&lt;br /&gt;
 Verification: OK&lt;br /&gt;
==openssl s_server==&lt;br /&gt;
Setup server listening as http server.&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert host.inter.net.crt -key host.inter.net.key&lt;br /&gt;
Setup https server listening on https on port 4433 providing complete chain&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert halfface.se.pem -cert_chain halfface.se.intermediate.pem -key halfface.se.key -accept 4433&lt;br /&gt;
&lt;br /&gt;
==othername:&amp;lt;unsupported&amp;gt;==&lt;br /&gt;
You will have to locate the &amp;quot;OCTET STRING&amp;quot; line just below the &amp;quot;OBJECT :X509v3 Subject Alternative Name&amp;quot; line then strpars&lt;br /&gt;
 # print section offset via&lt;br /&gt;
 openssl asn1parse -in yourcert.pem&lt;br /&gt;
 # parse otherName from &amp;quot;OCTET STRING&amp;quot; &amp;lt;offset&amp;gt; is the value in the beginning of the line.&lt;br /&gt;
 openssl asn1parse -in yourcert.pem -strparse &amp;lt;offset&amp;gt;&lt;br /&gt;
Another way of seeing same data is through &lt;br /&gt;
 openssl asn1parse -in /tmp/tmp -dump -strictpem&lt;br /&gt;
&lt;br /&gt;
=create password string=&lt;br /&gt;
 openssl passwd -6 -salt $RANDOM $PASSWORD&lt;br /&gt;
&lt;br /&gt;
=pactl=&lt;br /&gt;
Pulse Audio cli tool.&lt;br /&gt;
List output devices.&lt;br /&gt;
 pactl list short sinks&lt;br /&gt;
Set default output device&lt;br /&gt;
 pactl set-default-sink $i&lt;br /&gt;
List where applications send output.&lt;br /&gt;
 pactl list short sink-inputs&lt;br /&gt;
Move application to other output device.&lt;br /&gt;
 pactl move-sink-input $applicaiton $sink&lt;br /&gt;
&lt;br /&gt;
=pam=&lt;br /&gt;
Troubleshooting pam.&lt;br /&gt;
 /etc/syslog.conf&lt;br /&gt;
 # Get debugging data.&lt;br /&gt;
 *.debug     /var/log/debug.log&lt;br /&gt;
Create logfile and restart *syslog.&lt;br /&gt;
 touch /var/log/debug.log&lt;br /&gt;
 service syslog restart&lt;br /&gt;
Put pam in debug mode.&lt;br /&gt;
 touch /etc/pam_debug&lt;br /&gt;
OR you can enable debugging only for the modules you&#039;re interested in by adding &amp;quot;debug&amp;quot; to the end of the relevant lines in /etc/pam.d/system-auth or the other /etc/pam.d/* files:&lt;br /&gt;
 login   auth    required    pam_unix.so debug&lt;br /&gt;
Debugging is found in /var/log/debug.log.&lt;br /&gt;
&lt;br /&gt;
=pam_tally2=&lt;br /&gt;
Configured here.&lt;br /&gt;
 /etc/pam.d/password-auth:auth        required      pam_tally2.so file=/var/log/tallylog onerr=fail per_user deny=6 no_magic_root&lt;br /&gt;
What is status from account?&lt;br /&gt;
 pam_tally2 --user=user1&lt;br /&gt;
 Login           Failures Latest failure     From&lt;br /&gt;
 user1             8    04/20/15 11:39:54  192.168.1.1&lt;br /&gt;
&lt;br /&gt;
=parallel=&lt;br /&gt;
Run command 10 times in parallel.&lt;br /&gt;
 seq 10 | parallel -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Run command 10 times in parallel dryrun.&lt;br /&gt;
 seq 10 | parallel --dry-run -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Compress logfiles in parallel.&lt;br /&gt;
 parallel gzip ::: *.log&lt;br /&gt;
=partprobe=&lt;br /&gt;
Rescan block device to setup device files&lt;br /&gt;
 partprobe /dev/sde&lt;br /&gt;
=partx=&lt;br /&gt;
 partx /dev/sda -l ; partx /dev/sda -u ; partx /dev/sda -l&lt;br /&gt;
&lt;br /&gt;
=paste=&lt;br /&gt;
Combine to files to one in multiple column. Replace tab with spaces.&lt;br /&gt;
 paste /tmp/check_name_nagios /tmp/filename | column -t -s $&#039;\t&#039;&lt;br /&gt;
Combine every second line with a space in between.&lt;br /&gt;
 paste -d&#039; &#039; - -&lt;br /&gt;
&lt;br /&gt;
=pcregrep=&lt;br /&gt;
Multiline grep&lt;br /&gt;
 pcregrep -M &#039;pattern: line1\nPattern lin2&#039; /temp/files_*&lt;br /&gt;
=pdftotext=&lt;br /&gt;
grab text from pdf document.&lt;br /&gt;
 pdftotext document.pdf&lt;br /&gt;
=pdftk=&lt;br /&gt;
Rotate clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endwest output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Rotate counter clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endeast output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Create one pdf from others.&lt;br /&gt;
 pdftk &amp;lt;file.pdf&amp;gt;* cat output &amp;lt;file_combo.pdf&amp;gt;&lt;br /&gt;
Extract one page from pdf.&lt;br /&gt;
 pdftk input.pdf cat 11 output page11.pdf&lt;br /&gt;
Extract series of pages from pdf&lt;br /&gt;
 pdftk input.pdf cat 3-7 output pages_3-7.pdf&lt;br /&gt;
&lt;br /&gt;
=pidof=&lt;br /&gt;
which pids has a program stared. Find pid.&lt;br /&gt;
&lt;br /&gt;
=ping=&lt;br /&gt;
Ping ipv6 loopback&lt;br /&gt;
 ping6 ::1 -c1&lt;br /&gt;
Ping ipv6 broadcast&lt;br /&gt;
 ping6 ff02::1%2 | cut -d\  -f4&lt;br /&gt;
Ping short output&lt;br /&gt;
 export ADDRESS=2001:4860:4860::8888 ; PING=$(ping6 -w1 -q -c1 -i10 ${ADDRESS} 2&amp;gt;&amp;amp;1) ; RTT=$( grep rtt &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot; | awk -F/ &#039;{print $6}&#039;) ; RECEIVED=$(grep received &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot;) ; echo $ADDRESS $RECEIVED, rtt=${RTT}&lt;br /&gt;
Ping to discover mtu. 1460, 1450. When reply increase with 2. when found highest value increase with 28 to get mtu.&lt;br /&gt;
 ping -M do -s 1472 123.45.56.78&lt;br /&gt;
&lt;br /&gt;
=pip=&lt;br /&gt;
==which versions of django exist==&lt;br /&gt;
 pip install pylibmc&lt;br /&gt;
==which versions are installed==&lt;br /&gt;
 pip list&lt;br /&gt;
&lt;br /&gt;
==which files does pip package provide.==&lt;br /&gt;
 pip show -f $package&lt;br /&gt;
==Uppgrade package.==&lt;br /&gt;
 pip install $package --upgrade&lt;br /&gt;
==where your own packages might end up==&lt;br /&gt;
 /usr/local/lib/python3.9&lt;br /&gt;
 /usr/lib/python2.7/site-packages/&lt;br /&gt;
==upgrade pip==&lt;br /&gt;
 ls -la /usr/lib64/libldap_r.so /usr/lib64/libldap.so&lt;br /&gt;
==do not use cache==&lt;br /&gt;
 pip3 install -r requirements.txt --no-cache-dir&lt;br /&gt;
&lt;br /&gt;
=pgrep=&lt;br /&gt;
Grep any processlines including 1066&lt;br /&gt;
 pgrep -lf 1066&lt;br /&gt;
=pmap=&lt;br /&gt;
Look at memory usage of process.&lt;br /&gt;
 sudo pmap 2258&lt;br /&gt;
&lt;br /&gt;
=postfix=&lt;br /&gt;
remove mails in queue.&lt;br /&gt;
 mailq | grep ^[A-F0-9] | awk &#039;{print $1}&#039; | postsuper -d -&lt;br /&gt;
list mails in queue&lt;br /&gt;
 mailq | grep &amp;quot;^[A-F0-9]&amp;quot;&lt;br /&gt;
Get mails in better output to better decide what to do with mails.&lt;br /&gt;
 mailq | grep -v -- &amp;quot;-Queue ID-&amp;quot; |  sed &#039;s/^$/\x0/g&#039; | tr -d &#039;\n&#039; | sed &#039;s/\x0/\n/g&#039;&lt;br /&gt;
Remove stuck emails.&lt;br /&gt;
 postsuper -d ALL deferred&lt;br /&gt;
List email&lt;br /&gt;
 postcat -q E55692442F&lt;br /&gt;
Read mail&lt;br /&gt;
 postcat -vq [message-id]&lt;br /&gt;
&lt;br /&gt;
=pr=&lt;br /&gt;
Print two files between each other.&lt;br /&gt;
 pr -w200 -m -t /tmp/1 /tmp/2&lt;br /&gt;
=printf=&lt;br /&gt;
Convert octal to utf-8&lt;br /&gt;
 printf &#039;\360\237\222\200&#039;&lt;br /&gt;
decimal to integral&lt;br /&gt;
 printf &amp;quot;%.0f&amp;quot; &amp;lt;decimal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=printscreen=&lt;br /&gt;
 import -window root test.png&lt;br /&gt;
Gnome copy graphics to paste buffer. Copy selected portion of screen.&lt;br /&gt;
 gnome-screenshot -a&lt;br /&gt;
&lt;br /&gt;
=/proc=&lt;br /&gt;
*/proc/meminfo&lt;br /&gt;
MemTotal — Total amount of physical RAM, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
MemFree — The amount of physical RAM, in kilobytes, left unused by the system.&lt;br /&gt;
&lt;br /&gt;
Buffers — The amount of physical RAM, in kilobytes, used for file buffers.&lt;br /&gt;
&lt;br /&gt;
Cached — The amount of physical RAM, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
SwapCached — The amount of swap, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
Active — The total amount of buffer or page cache memory, in kilobytes, that is in active use. This is memory that has been recently used and is usually not reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
Inactive — The total amount of buffer or page cache memory, in kilobytes, that are free and available. This is memory that has not been recently used and can be reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
HighTotal and HighFree — The total and free amount of memory, in kilobytes, that is not directly mapped into kernel space. The HighTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
LowTotal and LowFree — The total and free amount of memory, in kilobytes, that is directly mapped into kernel space. The LowTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
SwapTotal — The total amount of swap available, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
SwapFree — The total amount of swap free, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
Dirty — The total amount of memory, in kilobytes, waiting to be written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Writeback — The total amount of memory, in kilobytes, actively being written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Mapped — The total amount of memory, in kilobytes, which have been used to map devices, files, or libraries using the mmap command.&lt;br /&gt;
&lt;br /&gt;
Slab — The total amount of memory, in kilobytes, used by the kernel to cache data structures for its own use.&lt;br /&gt;
&lt;br /&gt;
Committed_AS — The total amount of memory, in kilobytes, estimated to complete the workload. This value represents the worst case scenario value, and also includes swap memory.&lt;br /&gt;
&lt;br /&gt;
PageTables — The total amount of memory, in kilobytes, dedicated to the lowest page table level.&lt;br /&gt;
&lt;br /&gt;
VMallocTotal — The total amount of memory, in kilobytes, of total allocated virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocUsed — The total amount of memory, in kilobytes, of used virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocChunk — The largest contiguous block of memory, in kilobytes, of available virtual address space.&lt;br /&gt;
&lt;br /&gt;
HugePages_Total — The total number of hugepages for the system. The number is derived by dividing Hugepagesize by the megabytes set aside for hugepages specified in /proc/sys/vm/hugetlb_pool. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
HugePages_Free — The total number of hugepages available for the system. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
Hugepagesize — The size for each hugepages unit in kilobytes. By default, the value is 4096 KB on uniprocessor kernels for 32 bit architectures. For SMP, hugemem kernels, and AMD64, the default is 2048 KB. For Itanium architectures, the default is 262144 KB. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
=ps=&lt;br /&gt;
==Process list in tree view.==&lt;br /&gt;
 ps axfww&lt;br /&gt;
==Process sort by cpu usage.==&lt;br /&gt;
 ps auxwww --sort -%cpu | head&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 ps -p 1 -o etime=&lt;br /&gt;
==Process list sorted after memory usage.==&lt;br /&gt;
 ps aux --sort=size&lt;br /&gt;
==Process show memory usage... sort...==&lt;br /&gt;
 ps axo rss,%cpu,pid,euser,cmd | sort -nr | head -n 10 | less -ISRM&lt;br /&gt;
==Process sort by mem usage.==&lt;br /&gt;
 ps auxwww --sort -rss | head&lt;br /&gt;
==Processes sorted by time running.==&lt;br /&gt;
 ps aux --sort -time&lt;br /&gt;
==Processes sorted by time started==&lt;br /&gt;
 ps -auxwww --sort=start_time&lt;br /&gt;
==ps showing threads.==&lt;br /&gt;
 ps -efL&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 echo -n $(( ($(date +%s) - $( stat -c%X /proc/$(pgrep -f [a]ctivemq.jar))) / 3600 ))&lt;br /&gt;
==ps long usernames==&lt;br /&gt;
 ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm&lt;br /&gt;
==ps including nice==&lt;br /&gt;
 ps -eo pid,user,ni,comm&lt;br /&gt;
&lt;br /&gt;
=pstack=&lt;br /&gt;
 print a stack trace of a running process&lt;br /&gt;
&lt;br /&gt;
=pulseaudio=&lt;br /&gt;
# Is pulseaudio running?&lt;br /&gt;
 ps uxawww| grep -E pulseaudi[o]&lt;br /&gt;
# stop pulseaudio&lt;br /&gt;
 pulseaudio -k&lt;br /&gt;
# start pulseaudio as found by ps | grep pulseaudio&lt;br /&gt;
 /usr/bin/pulseaudio --start --log-target=syslog&lt;br /&gt;
&lt;br /&gt;
=putty=&lt;br /&gt;
Run putty from cli with login&lt;br /&gt;
 &amp;quot;C:\Program Files\PuTTY\putty.exe&amp;quot; -l &amp;lt;username&amp;gt; -pw &amp;lt;password&amp;gt; &amp;lt;host_url&amp;gt;&lt;br /&gt;
Always setup stay alive.&lt;br /&gt;
 connection -&amp;gt; keepalive -&amp;gt; 60&lt;br /&gt;
set up tunnel&lt;br /&gt;
 putty -load blt.homeip.net -l bjorklun -pw password -L 19242:192.168.0.42:3389 blt.homeip.net&lt;br /&gt;
putty without taking tty.&lt;br /&gt;
 plink -load www.halfface.se -l user_name -pw password -R *:3389:localhost:3389 -2 -4 -N&lt;br /&gt;
reverse tunnel. Connect remote host 3400 to machine running putty localhost:3389.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; &amp;quot;Source Port&amp;quot; = 3400 -&amp;gt; destination = localhost:3389 -&amp;gt; remote.&lt;br /&gt;
socks server.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; Source port: 3128 , Destination: localhost:3128, Dynamic:true -&amp;gt; add -&amp;gt; apply.&lt;br /&gt;
Change font size&lt;br /&gt;
 echo Windows Registry Editor Version 5.00 &amp;gt; putty.reg &amp;amp;&amp;amp; echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings] &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;Font&amp;quot;=&amp;quot;Courier New&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;FontHeight&amp;quot;=&amp;quot;12&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; reg import putty.reg&lt;br /&gt;
&lt;br /&gt;
=pv=&lt;br /&gt;
throughput in pipe. speed.&lt;br /&gt;
 pv&lt;br /&gt;
 pv -cN&lt;br /&gt;
make a dd and limit througput to 20MB/s.&lt;br /&gt;
 dd if=${HOST}.qcow2 bs=4k conv=noerror,sync | pv -L 20M | dd of=${HOST}.dd_noerror.qcow2&lt;br /&gt;
=pwgen=&lt;br /&gt;
Create less complicated password.&lt;br /&gt;
 pwgen -sy 15 -r \&#039;\&amp;quot;\^\(\)\`\~\;\[\]\{\}\,&lt;br /&gt;
&lt;br /&gt;
=qalculate=&lt;br /&gt;
 qalc&lt;br /&gt;
 &amp;gt; 40 euro to SEK&lt;br /&gt;
 40 * euro = approx. SEK 417.36&lt;br /&gt;
=readpst=&lt;br /&gt;
output pst file in separate files in out directory&lt;br /&gt;
 readpst -S -o out/ outlook.pst&lt;br /&gt;
=reboot=&lt;br /&gt;
 Hard reboot mean that shutdown scripts will not run and machine reboot immediately without syncing hard disk drives.&lt;br /&gt;
 This commands enable sysrq and after this call fast reboot. &lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq&lt;br /&gt;
 echo b &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Force shutdown&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq &lt;br /&gt;
 echo o &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Kernel panic&lt;br /&gt;
 echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
==List last reboots==&lt;br /&gt;
 last --time-format iso reboot&lt;br /&gt;
&lt;br /&gt;
=rename=&lt;br /&gt;
Recursive lowercase to uppercase&lt;br /&gt;
 for i in $(find * -depth); do (mv $i $(echo $i | sed &#039;s%[^/][^/]*$%%&#039;)$(echo $i | sed &#039;s!.*/!!&#039; | tr [:upper:] [:lower:])); done&lt;br /&gt;
Upper to lower case&lt;br /&gt;
 for f in `find .`; do mv -v &amp;quot;$f&amp;quot; &amp;quot;`echo $f | tr &#039;[A-Z]&#039; &#039;[a-z]&#039;`&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
=reposync=&lt;br /&gt;
 reposync -n -c /etc/yum/yum.conf -p /repos/centos6 -d -r base -r updates -r extras -r centosplus -r contrib&lt;br /&gt;
 createrepo -g /repos/centos6/base/repodata/comps.xml /repos/centos6/base&lt;br /&gt;
 createrepo /repos/centos6/updates&lt;br /&gt;
 createrepo /repos/centos6/extras&lt;br /&gt;
 createrepo /repos/centos6/centosplus&lt;br /&gt;
halfface -&amp;gt; sync repo. -d delete what is not on remote, -n only newest version, -p store here, -r which repos to sync&lt;br /&gt;
 reposync -d -n -p /install/system/linux/fedora/24/repo/ -r updates -r fedora -r rpmfusion-free -r rpmfusion-free-updates -r rpmfusion-nonfree -r rpmfusion-nonfree-updates&lt;br /&gt;
halfface -&amp;gt; create repository&lt;br /&gt;
 REPODIR=/install/system/linux/fedora/24/repo ; for REPO in $(cd $REPODIR; ls) ; do echo $REPO ; createrepo_c ${REPODIR}/${REPO} ;done&lt;br /&gt;
=reptyr=&lt;br /&gt;
 Reparent a running program to a new terminal. (move tty)&lt;br /&gt;
&lt;br /&gt;
=rfcomm=&lt;br /&gt;
list usb devices&lt;br /&gt;
 hcitool scan&lt;br /&gt;
What properties does the device have.&lt;br /&gt;
 sdptool browse 00:0D:B5:30:07:79&lt;br /&gt;
connect bluetooth device virtual servial.&lt;br /&gt;
 rfcomm bind /dev/rfcomm0 00:0D:B5:30:07:79 1&lt;br /&gt;
=rkhunter=&lt;br /&gt;
Run rkhunter full scan no keypresses needed&lt;br /&gt;
 sudo rkhunter --checkall --skip-keypress -x&lt;br /&gt;
Update database&lt;br /&gt;
 sudo rkhunter --propupd&lt;br /&gt;
Search for what triggered alarm.&lt;br /&gt;
 sudo grep -E &#039;Warning|Suspicious&#039; /var/log/rkhunter/rkhunter.log&lt;br /&gt;
&lt;br /&gt;
=dnf update rkhunter. Update dnf after rkhunter scan=&lt;br /&gt;
 tail -1 /etc/sysconfig/rkhunter &lt;br /&gt;
 sleep 300 &amp;amp;&amp;amp; ( dnf -e 0 -y update ; rkhunter --propupd ) &amp;gt;&amp;gt; /tmp/dnf_update_rkhunter--propupd.$(date +%F_%H-%M-%S).log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=rotatelogs=&lt;br /&gt;
Write standard output to logfile. Rotate at 100M. Keep 3 files.&lt;br /&gt;
 your_script.sh | rotatelogs -n3 /var/log/your.log 100M&lt;br /&gt;
=route=&lt;br /&gt;
The route to a network is behind 10.111.222.7&lt;br /&gt;
 route add -net 10.111.223.0 netmask 255.255.255.0 gw 10.111.222.7&lt;br /&gt;
Add default route&lt;br /&gt;
 route add default gw 192.168.122.1&lt;br /&gt;
Permanent route under redhat&lt;br /&gt;
 /etc/sysconfig/static-routes&lt;br /&gt;
 any net 198.18.129.0/24 gw 10.240.175.12&lt;br /&gt;
/etc/sysconfig/network-scripts/route-eth1&lt;br /&gt;
 1.2.3.4/23 via 1.2.3.1&lt;br /&gt;
Drop packages to ip.&lt;br /&gt;
 route add -host 192.168.1.51 reject&lt;br /&gt;
Remove reject rule.&lt;br /&gt;
 route del -host 192.168.1.51 reject&lt;br /&gt;
Remove route&lt;br /&gt;
 route -n&lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0&lt;br /&gt;
 10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0&lt;br /&gt;
 0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 eth0&lt;br /&gt;
 route del -net 10.0.0.0    gw    0.0.0.0   netmask      255.0.0.0 dev eth0&lt;br /&gt;
&lt;br /&gt;
=rpm=&lt;br /&gt;
==install src.rpm==&lt;br /&gt;
 rpmbuild --rebuild alien-6.51-1.src.rpm&lt;br /&gt;
 rpm -i /usr/src/redhat/RPMS/x86_64/alien-6.51-1.rpm&lt;br /&gt;
==List contents of rpm.==&lt;br /&gt;
 rpm -qlp myfile.rpm&lt;br /&gt;
==Extract single file from rpm.==&lt;br /&gt;
 rpm2cpio package.rpm | cpio -idv ./search_path_to_file_from_listing_above.txt&lt;br /&gt;
==List information about non installed rpm.==&lt;br /&gt;
 rpm -qip foo.rpm&lt;br /&gt;
==Extract contents of rpm.==&lt;br /&gt;
 rpm2cpio *.rpm | cpio -i --make-directories&lt;br /&gt;
==Which version of rpm is installed.==&lt;br /&gt;
/etc/rpm/macros ~/.rpmmacros&lt;br /&gt;
 %_query_all_fmt         %%{name}-%%{version}-%%{release}.%%{arch}&lt;br /&gt;
==list architecture==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{n}-%{v}-%{r}.%{arch}\n&amp;quot;&lt;br /&gt;
==List only name of installed rpms.==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{NAME}\n&amp;quot;&lt;br /&gt;
==Extract rpms in subdirectories.==&lt;br /&gt;
 for RPM in $(ls *|sed &#039;s_\.rpm$__g&#039;);do echo $RPM; mkdir $RPM; rpm2cpio $RPM.rpm | (cd $RPM &amp;amp;&amp;amp; cpio -i --make-directories);done&lt;br /&gt;
==Verify content of rpm==&lt;br /&gt;
 rpm -V package&lt;br /&gt;
 # What does those cryptic letters mean from rpm -V:&lt;br /&gt;
 S file Size differs&lt;br /&gt;
 M Mode differs (includes permissions and file type)&lt;br /&gt;
 5 MD5 sum differs&lt;br /&gt;
 D Device major/minor number mismatch&lt;br /&gt;
 L readlink(2) path mismatch&lt;br /&gt;
 U User ownership differs&lt;br /&gt;
 G Group ownership differs&lt;br /&gt;
 T mTime differs&lt;br /&gt;
==Reinstall rpm==&lt;br /&gt;
 rpm -iv --replacepkgs package.rpm&lt;br /&gt;
==Dependencies of rpm==&lt;br /&gt;
 rpm -qpR ${rpm}&lt;br /&gt;
 rpm -qR ${packagename}&lt;br /&gt;
 rpm -qp mypackage.rpm --provides&lt;br /&gt;
 rpm -qp mypackage.rpm --requires&lt;br /&gt;
==Rebuild rpm database.==&lt;br /&gt;
 \rm /var/lib/rpm/__db*&lt;br /&gt;
 rpm --rebuilddb&lt;br /&gt;
&lt;br /&gt;
==Update minor release.==&lt;br /&gt;
 yum --releasever=6.11 update sl-release&lt;br /&gt;
 yum clean all&lt;br /&gt;
 yum update&lt;br /&gt;
==Downgrade rpm.==&lt;br /&gt;
 rpm -Uvh --oldpackage /tmp/app.x86_64.rpm&lt;br /&gt;
==Which rpm:s are required by rpm. Can be used to install rpm on machine without access to yum repo.==&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==CVE:s fixed by rpm==&lt;br /&gt;
 rpm -qi --changelog openssh-server | grep -i CVE&lt;br /&gt;
&lt;br /&gt;
=rsync=&lt;br /&gt;
Syncronize folders. Delete non existing files on remote host. Compress.&lt;br /&gt;
 rsync --delete -az -e ssh bjorklun@semco.homeip.net:/install/program/windows/&lt;br /&gt;
Syncronize files over ssh on port 2222. Show progress. Syncronize even empty directories.&lt;br /&gt;
 rsync -Pae &#039;ssh -p 2222&#039; localhost:/opt/techops/bin/ /opt/techops/bin/&lt;br /&gt;
rsync with total progress bar.&lt;br /&gt;
 rsync -a --info=progress2 /dir1/ /dir2/&lt;br /&gt;
Run rsync in both ends but transfer data with normal user.&lt;br /&gt;
 sudo rsync -aP /tmp/andreas/ andreasbj@localhost:/tmp/andreas2/ --rsync-path=&#039;sudo rsync&#039;&lt;br /&gt;
rsync with limit of 8 MB/s.&lt;br /&gt;
 rsync -aP --bwlimit=8000 /source/ /destination/&lt;br /&gt;
rsync excluding directory&lt;br /&gt;
 rsync -r --exclude=.svn /source/ /destination/&lt;br /&gt;
rsync including selinux information. Preserve hard links.&lt;br /&gt;
 rsync -aPXH /source /destination&lt;br /&gt;
rsync don&#039;t keep links. Copy files referenced.&lt;br /&gt;
 rsync -rLP /source/ /destination&lt;br /&gt;
Record which files to sync.&lt;br /&gt;
 rsync -r -ptgo --delete -P --size-only -n www.halfface.se:/mp3/ /mp3/ -n | tee /temp/mp3_$(date +%Y-%m-%d)_diff.txt&lt;br /&gt;
Rsync new files.&lt;br /&gt;
 rsync -RDa0P --files-from=&amp;lt;(find /sourcedir -mtime -7 -print0) . /targetdir/&lt;br /&gt;
rsync ignore existing files.&lt;br /&gt;
 rsync -P --ignore-existing /source/* /destination/ -n&lt;br /&gt;
rsync excluding directories matching pattern.&lt;br /&gt;
 SOURCE=/apps/IP400 ; DESTINATION=/apps/IP400.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; rsync -aP &amp;quot;${SOURCE}&amp;quot;/ &amp;quot;${DESTINATION}&amp;quot;/ --exclude-from=&amp;lt;(cd &amp;quot;${SOURCE}&amp;quot; ; find -type d -name log | sed -e &#039;s|./||&#039;)&lt;br /&gt;
Sync files partially.&lt;br /&gt;
 rsync -avz --partial --inplace&lt;br /&gt;
which files differ between hosts.&lt;br /&gt;
 rsync -nrlptDqv --delete --exclude napsjb/server/naps/tmp/ /opt/ongame/ 10.6.21.11:/opt/ongame | less&lt;br /&gt;
 -n dry run.&lt;br /&gt;
 -r recursive&lt;br /&gt;
 -l copy symlinks av symlinks.&lt;br /&gt;
 -p preserve permission&lt;br /&gt;
 -t preserve tims.&lt;br /&gt;
 -D --device --special. Keep special files.&lt;br /&gt;
 -q quiet&lt;br /&gt;
 -v verbose&lt;br /&gt;
&lt;br /&gt;
=sar=&lt;br /&gt;
Old sar information.&lt;br /&gt;
 sar -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
load average.&lt;br /&gt;
 sar -q -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
All information.&lt;br /&gt;
 sar -A -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
View network statistics.&lt;br /&gt;
 LANG=c sar -n DEV | grep eth0&lt;br /&gt;
realtime summary.&lt;br /&gt;
 sar 4 5&lt;br /&gt;
=script=&lt;br /&gt;
Run command under shell even if it does not exist.&lt;br /&gt;
 script -q -f -c &amp;quot;commands or scripts to run&amp;quot;&lt;br /&gt;
Run session under screen in script.&lt;br /&gt;
 screen -dm bash -c &#039;script --timing=script1.tm script1.out&#039;&lt;br /&gt;
Replay script recorded file&lt;br /&gt;
 scriptreplay --timing script1.tm --typescript script1.out&lt;br /&gt;
=scp=&lt;br /&gt;
Limit to 1.2MB/s.&lt;br /&gt;
 scp -l 10240 Rocky-8.5-x86_64-minimal.iso halfface.se:/temp/&lt;br /&gt;
&lt;br /&gt;
=search&amp;amp;replace=&lt;br /&gt;
perl&lt;br /&gt;
 grep -rsl &#039;10.6.4.102&#039; * | xargs perl -pi -e &#039;s/10.6.4.102/10.6.4.103/&#039;&lt;br /&gt;
sed&lt;br /&gt;
 find . -type f -exec sed -i &#039;s/string1/string2/g&#039; {} \;&lt;br /&gt;
Grep for regexp starting with CN= and stop at first occurrence of ,. not greedy&lt;br /&gt;
 grep -oE &#039;CN=[^,]*,&#039;&lt;br /&gt;
=set=&lt;br /&gt;
Look at current settings. Expanded or simple view.&lt;br /&gt;
 set -o&lt;br /&gt;
 echo $-&lt;br /&gt;
&lt;br /&gt;
=setfacl=&lt;br /&gt;
Add rwx permission for user_name recursivly from /directory&lt;br /&gt;
 setfacl -Rm u:user_name:rwx /directory&lt;br /&gt;
Remove acl:s&lt;br /&gt;
 setfacl -bn foobar&lt;br /&gt;
=setpriv=&lt;br /&gt;
Dump your privileges.&lt;br /&gt;
 setpriv -d&lt;br /&gt;
&lt;br /&gt;
=shred=&lt;br /&gt;
Recurse remove dir&lt;br /&gt;
 find /tmp/secret -type f -exec shred {} \;&lt;br /&gt;
&lt;br /&gt;
=shuf=&lt;br /&gt;
Pick random line in file.&lt;br /&gt;
 shuf -n1 /file&lt;br /&gt;
Get random number&lt;br /&gt;
 shuf -i 10-120 -n1&lt;br /&gt;
&lt;br /&gt;
=sms=&lt;br /&gt;
Mail to sms gateway.&lt;br /&gt;
 tele2&lt;br /&gt;
 07XXXXXXXX@sms.tele2.se&lt;br /&gt;
&lt;br /&gt;
 Comviq&lt;br /&gt;
 467xxxxxxxx@sms.comviq.se&lt;br /&gt;
&lt;br /&gt;
 Europolitan&lt;br /&gt;
 4670xxxxxxx@europolitan.se&lt;br /&gt;
&lt;br /&gt;
=snmptrap=&lt;br /&gt;
 # send more than one string.&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &amp;quot;&amp;quot; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -c xxxxxxx localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 .1.3.6.1.4.1.5089.2.0.999 s &amp;quot;Hej Hej&amp;quot;&lt;br /&gt;
Simple trap&lt;br /&gt;
 snmptrap  -v 1 -c public  localhost   &#039;&#039;  0 0  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=snmptrapd=&lt;br /&gt;
 # Enable logfile. /etc/sysconfig/snmptrapd&lt;br /&gt;
 OPTIONS=&amp;quot;-Lf /var/log/snmptrapd.log&amp;quot;&lt;br /&gt;
 # Disable authorization and put in logfile. /etc/snmp/snmptrapd.conf&lt;br /&gt;
 disableAuthorization yes&lt;br /&gt;
 authCommunity log public&lt;br /&gt;
&lt;br /&gt;
=snmpwalk=&lt;br /&gt;
Get information from an oid.&lt;br /&gt;
 snmpwalk -v 1 -c public snmp.device.net .1.3.6.1.4.1.2021.84&lt;br /&gt;
Do tcpdump while running.&lt;br /&gt;
 tcpdump -i eth0 -n -s0 -v host snmp.device.net and port snmp&lt;br /&gt;
=socat=&lt;br /&gt;
Create a tunnel between localhost 2222 to remote host 2222&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.111.222.2:2222&lt;br /&gt;
 socat TCP-LISTEN:22,fork,bind=127.0.0.1 TCP:192.168.0.15:5900&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.8.110.20:22,bind=172.19.14.251&lt;br /&gt;
Listen on 10.120.50.12:9090 and forward to 127.0.0.1:9090&lt;br /&gt;
 socat TCP-LISTEN:9090,bind=10.120.50.12,fork TCP:127.0.0.1:9090&lt;br /&gt;
Create tunnel via systemctl&lt;br /&gt;
Create file similar to this. /etc/systemd/system/socat_win.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/socat TCP-LISTEN:3389,fork TCP:192.168.122.204:3389&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
Enable new file.&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
Start new daemon&lt;br /&gt;
 systemctl start socat_win&lt;br /&gt;
&lt;br /&gt;
=sort=&lt;br /&gt;
Sort ip address.&lt;br /&gt;
 sort -t. +0n -1 +1n -2 +2n -3 +3n -4&lt;br /&gt;
 sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n&lt;br /&gt;
sort on fift column&lt;br /&gt;
 sort -t, -k5n,5 /tmp/gfp&lt;br /&gt;
Get a list of configured ip for a set of hosts. Sort on domain then hostname&lt;br /&gt;
 pdsh ^/host_list &#039;ip route get 8.8.8.8 | awk &amp;quot;NR==1 {print \$NF}&amp;quot;&#039; | sort -t . -k 2 -k 1&lt;br /&gt;
Sort on first column only.&lt;br /&gt;
 sort -n -k 1,1&lt;br /&gt;
&lt;br /&gt;
=spawn=&lt;br /&gt;
Encode wav to ogg in parallel.&lt;br /&gt;
  # ls -1 *.wav | while read ; do echo &amp;quot;oggenc -q6 \&amp;quot;$REPLY\&amp;quot;&amp;quot; ; done | spawn -j4&lt;br /&gt;
=split=&lt;br /&gt;
Devide file into parts containing 100 lines.&lt;br /&gt;
 split -l 100 create_updated_2013-10-29_sort_created_ci_id_name.txt --numeric-suffixes --suffix-length=3 Cleanup.&lt;br /&gt;
Devide file in 10 parts. Suffix length 4.&lt;br /&gt;
 split -n 10 -a 3 bigfile.tar.gz&lt;br /&gt;
&lt;br /&gt;
=sqlite=&lt;br /&gt;
Is db broken?&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;PRAGMA integrity_check&amp;quot;&lt;br /&gt;
recover db&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;.dump&amp;quot; | sqlite3 new.db&lt;br /&gt;
 sqlite3 stellar.db .recover | sqlite3 stellar_2.db&lt;br /&gt;
Show databases&lt;br /&gt;
 sqlite&amp;gt; .databases&lt;br /&gt;
 main: /var/lib/tuptime/tuptime.db&lt;br /&gt;
List tables&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
 tuptime&lt;br /&gt;
Run sql command&lt;br /&gt;
 sqlite&amp;gt; select * from tuptime;&lt;br /&gt;
 1544984636|2387765.42|-1|0|0.0|Linux-4.19.8-200.fc28.x86_64-x86_64-with-fedora-28-Twenty_Eight&lt;br /&gt;
exit|quit&lt;br /&gt;
 .quit&lt;br /&gt;
==vacuum==&lt;br /&gt;
 /usr/local/openvpn_as/bin/sqlite3 /usr/local/openvpn_as/etc/db/log.db &amp;quot;VACUUM&amp;quot;&lt;br /&gt;
==count tables==&lt;br /&gt;
 DB=files.db ; for TABLE in $( sqlite3 $DB &amp;quot;.tables&amp;quot;) ; do echo -e $TABLE\\t$(sqlite3 $DB &amp;quot;SELECT COUNT(1) FROM $TABLE;&amp;quot;) ; done | column_tab&lt;br /&gt;
&lt;br /&gt;
=ss=&lt;br /&gt;
List all connections.&lt;br /&gt;
 ss -an&lt;br /&gt;
List processes and which port they listen too. Grep process.&lt;br /&gt;
 ss -tulpn | grep 5405&lt;br /&gt;
&lt;br /&gt;
=ssh=&lt;br /&gt;
==ssh-keygen==&lt;br /&gt;
Create key pair without input.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KEYNAME=cluster-info-reporting ; KEYNAME_PATH=/tmp/${KEYNAME}-$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; ssh-keygen -q -t ed25519 -N &#039;&#039; -C $KEYNAME &amp;lt;&amp;lt;&amp;lt; $&#039;\ny&#039; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 -f &amp;quot;${KEYNAME_PATH}&amp;quot; ; echo Keys: $(ls &amp;quot;${KEYNAME_PATH}&amp;quot;*)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==which private ssh keys are password protected==&lt;br /&gt;
 ls ${HOME}/.ssh/* | grep -Ev &#039;pub$|authorized_keys|config|known_hosts|ssh-agent.sock&#039; | while read i ; do SSH_PASSWORD=$(ssh-keygen -y -P &amp;quot;&amp;quot; -f &amp;quot;$i&amp;quot; 2&amp;gt;&amp;amp;1 | grep &amp;quot;incorrect passphrase supplied to decrypt private key&amp;quot;) ; if [ -z &amp;quot;${SSH_PASSWORD}&amp;quot; ] ; then echo No password encrypted ssh private key: $i ; fi ; done&lt;br /&gt;
&lt;br /&gt;
==Remove pass phrase==&lt;br /&gt;
 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&lt;br /&gt;
&lt;br /&gt;
==view fingerprint==&lt;br /&gt;
 ssh-keygen -l -E md5 -f /tmp/ssh-keygen.pub&lt;br /&gt;
&lt;br /&gt;
==change the name of private key==&lt;br /&gt;
 ssh-keygen -c -C &amp;quot;first.lastname@example.com&amp;quot; -f ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
==Copy public key to authorized_keys==&lt;br /&gt;
 ssh-copy-id user@host&lt;br /&gt;
List supported ciphers&lt;br /&gt;
 ssh -Q cipher&lt;br /&gt;
List supported MACs&lt;br /&gt;
 ssh -Q mac&lt;br /&gt;
List supported public key type&lt;br /&gt;
 ssh -Q key&lt;br /&gt;
List supported key exchange algorithms&lt;br /&gt;
 ssh -Q kex&lt;br /&gt;
List supported ciphers, macs and kexalgorithms.&lt;br /&gt;
 sshd -T | grep &amp;quot;\(ciphers\|macs\|kexalgorithms\)&amp;quot;&lt;br /&gt;
Run command each time you login via ssh.&lt;br /&gt;
 $HOME/.ssh/rc&lt;br /&gt;
&lt;br /&gt;
==Tunnel==&lt;br /&gt;
 sudo ssh -nNTx -R 2222:localhost:22 andreasbj@www.halfface.se&lt;br /&gt;
Reverse tunnel.&lt;br /&gt;
 ssh -D \*:666 www.halfface.se&lt;br /&gt;
 ssh -N ipmon10.ny1.ip-soft.net -L43389:ippc01.ongame.ip-soft.net:3389&lt;br /&gt;
 -n	Dont take console. Good for background.&lt;br /&gt;
 -N	Do not execute a remote command&lt;br /&gt;
 -T	Disable pseudo-tty allocation.&lt;br /&gt;
 -x	Disables X11 forwarding.&lt;br /&gt;
 -R port:host:hostport&lt;br /&gt;
 sudo ssh -N -L 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 443:satellite.ongame.com:443 root@10.0.254.30 # Tunnel 443 over ssh from remote host via local host.&lt;br /&gt;
Open tunnel on remote host. Start remote proxy server forwarding to internal network.&lt;br /&gt;
 ssh remotehost -R remoteport:localhost:localport &amp;quot;ssh -D 9050 localhost:remoteport&amp;quot;&lt;br /&gt;
Multiple reverse tunnel controled by autossh. (-M)Control port,(-f)background, (-N) no remote command, reverse tunnel (-R)&lt;br /&gt;
 autossh -M 41000 -f -N -R 0.0.0.0:8001:192.168.1.10:80 -R 0.0.0.0:8002:192.168.1.20:80 user@remotehost&lt;br /&gt;
&lt;br /&gt;
==reverse tunnel bound to all interfaces==&lt;br /&gt;
The config has to allow to bind to * interface. /etc/ssh/sshd_config  GatewayPorts yes&lt;br /&gt;
 sudo ssh -i ${HOME}/.ssh/id_dsa -N -R \*:2222:localhost:22 ${USER}@www.halfface.se&lt;br /&gt;
&lt;br /&gt;
==Create an ssh tunnel link==&lt;br /&gt;
 https://help.ubuntu.com/community/SSH_VPN&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 vim /etc/ssh/sshd_config  PermitTunnel=yes&lt;br /&gt;
 sudo ssh -NTCf -w 0:0 1.2.3.4&lt;br /&gt;
 sudo ssh -v -w any:any www.halfface.se&lt;br /&gt;
 ###&lt;br /&gt;
 local:&lt;br /&gt;
 ip link set tun0 up&lt;br /&gt;
 ip addr add 169.254.0.1/32 peer 169.254.0.2 dev tun0&lt;br /&gt;
 ip route add 192.168.0/24 via 169.254.0.2&lt;br /&gt;
 remote:&lt;br /&gt;
 ip link set tun1 up&lt;br /&gt;
 ip addr add 169.254.0.2/32 peer 169.254.0.1 dev tun1&lt;br /&gt;
 arp -sD 169.254.0.2 eth1 pub&lt;br /&gt;
 ### Change default gateway. In this case, 192.168.0.1 is Machine B&#039;s current default gateway; it is the gateway on Network B that provides internet connectivity&lt;br /&gt;
 ip route add 1.2.3.4/32 via 192.168.0.1&lt;br /&gt;
 ip route replace default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
==Limit ssh access with pam_access==&lt;br /&gt;
 /etc/security/access.conf&lt;br /&gt;
&lt;br /&gt;
==Proxycommand without nc==&lt;br /&gt;
 Host server1&lt;br /&gt;
  Hostname 10.0.1.1&lt;br /&gt;
  ProxyCommand ssh -q -x jumphost -W %h:22&lt;br /&gt;
&lt;br /&gt;
==ssh over ipv6 via 2 network interface.==&lt;br /&gt;
 ssh -6 fe80::1ec1:deff:fecb:6ce%2&lt;br /&gt;
&lt;br /&gt;
==ssh options==&lt;br /&gt;
None interactive. Dont ask for password.&lt;br /&gt;
 -o BatchMode=yes&lt;br /&gt;
Accept all keys.&lt;br /&gt;
 -o StrictHostKeyChecking=no&lt;br /&gt;
&lt;br /&gt;
==ssh via proxy/squid==&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc --proxy proxy.inter.net:3128 --proxy-type http %h %p&#039; host.inter.net hostname&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc -X connect -x proxy.inter.net:3128 %h %p&#039; host.inter.net hostname&lt;br /&gt;
&lt;br /&gt;
==brow.sh==&lt;br /&gt;
browser in terminal window.&lt;br /&gt;
 ssh brow.sh&lt;br /&gt;
&lt;br /&gt;
==jail==&lt;br /&gt;
/etc/sshd/sshd_config &lt;br /&gt;
 Match group mychroot &lt;br /&gt;
 ChrootDirectory /jail/ &lt;br /&gt;
 X11Forwarding no &lt;br /&gt;
 AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
==sshd debug==&lt;br /&gt;
Start deamon once in debug mode and put output to your console.&lt;br /&gt;
 /etc/sysconfig/sshd&lt;br /&gt;
 OPTIONS=&amp;quot;-ddd&amp;quot;&lt;br /&gt;
Kill of sshd which is listening for new connections. Start sshd with the following command. Debug level can bee changed.&lt;br /&gt;
 /usr/sbin/sshd -De -o LogLevel=DEBUG3&lt;br /&gt;
&lt;br /&gt;
==ssh multiple jumps one cli==&lt;br /&gt;
Jump through host1.net to get to host2.net&lt;br /&gt;
 ssh -t host1.net ssh -t host2&lt;br /&gt;
Jump through host1.net to host2.net and bring port 8080 with you.&lt;br /&gt;
 ssh -t host1.net -L 8080:localhost:8080 ssh -t host2.net -L 8080:localhost:8080&lt;br /&gt;
&lt;br /&gt;
==ssh force password login==&lt;br /&gt;
 ssh -o StrictHostKeyChecking=no -o ControlPath=none -o ControlMaster=no -o PubkeyAuthentication=no user@host&lt;br /&gt;
&lt;br /&gt;
==ssh via jumphost==&lt;br /&gt;
 ssh -J core@1.1.1.1 core@2.2.2.2&lt;br /&gt;
&lt;br /&gt;
==socks==&lt;br /&gt;
 # Setup socks server exiting on remote host&lt;br /&gt;
 ssh -D &#039;*:3128&#039; halfface.se&lt;br /&gt;
 # Use socks setup above.&lt;br /&gt;
 curl --socks5 localhost:3128 https://ifconfig.me&lt;br /&gt;
&lt;br /&gt;
==Create public key from private==&lt;br /&gt;
 ssh-keygen -y -f &amp;lt;private_key_with_return_at_end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshfs mount filesystem over ssh=&lt;br /&gt;
 sshfs name@server:/path/to/folder /path/to/mount/point&lt;br /&gt;
=sshpass=&lt;br /&gt;
ssh with password provided on the command line.&lt;br /&gt;
 sshpass -p P@ssW0rd ssh -t -o ControlPath=none -o PreferredAuthentications=password -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Error user@localhost hostname&lt;br /&gt;
=specify key=&lt;br /&gt;
 ssh -o &amp;quot;IdentitiesOnly=yes&amp;quot; -i &amp;lt;private key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshuttle=&lt;br /&gt;
create a network route over ssh.&lt;br /&gt;
 sshuttle -D -r user@remotehost:2222 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
=stat=&lt;br /&gt;
View file permissions only.&lt;br /&gt;
 stat -c &amp;quot;%a %n&amp;quot; /usr/bin/bash&lt;br /&gt;
 Access - the last time the file was read&lt;br /&gt;
 Modify - the last time the file was modified (content has been modified)&lt;br /&gt;
 Change - the last time meta data of the file was changed (e.g. permissions)&lt;br /&gt;
Copy permissions from one location to another.&lt;br /&gt;
 rpm -qlp package.rpm | while read FILE ; do echo chmod $(stat -c &amp;quot;%a&amp;quot; $FILE) \&amp;quot;$FILE\&amp;quot;;done &amp;gt; /tmp/copy_permissions.sh&lt;br /&gt;
&lt;br /&gt;
=strace=&lt;br /&gt;
==File open activity.==&lt;br /&gt;
 strace -e open -f ls -la /temp/&lt;br /&gt;
==File open activity under directory.==&lt;br /&gt;
  strace -e open -P /temp/ -f ls -la /temp/&lt;br /&gt;
==More file activity.==&lt;br /&gt;
 strace -e trace=file -p 1234&lt;br /&gt;
 strace -e trace=desc -p 1234&lt;br /&gt;
==Trace network activity.==&lt;br /&gt;
 sudo strace -f -e trace=network -p 1476&lt;br /&gt;
 # 1024 long strings.&lt;br /&gt;
 sudo strace -s 1024 -f -e trace=network -p 1476&lt;br /&gt;
 # strace follow process with matching regex.&lt;br /&gt;
 strace -f -e poll,select,connect,recvfrom,sendto -p $(pgrep -f login-sync.xml)&lt;br /&gt;
 # trace nework activity&lt;br /&gt;
 strace -f -e trace=network -s 1000000 nc localhost 3333&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
 sudo strace -f -e trace=memory -p $(pgrep -f firefox)&lt;br /&gt;
==What is taking time==&lt;br /&gt;
 [root@util01 abjorklund]# strace -f -c -p 9657&lt;br /&gt;
  % time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
  88.11   11.614155        1644      7065      1565 futex&lt;br /&gt;
   9.94    1.310794       16183        81        73 restart_syscall&lt;br /&gt;
   1.86    0.245018          86      2850           recvfrom&lt;br /&gt;
   0.05    0.006784          30       228           poll&lt;br /&gt;
   0.03    0.004006           2      1838           sendto&lt;br /&gt;
   0.00    0.000271           1       253           sched_yield&lt;br /&gt;
   0.00    0.000134          12        11           mmap&lt;br /&gt;
   0.00    0.000107           0      5176           ioctl&lt;br /&gt;
   0.00    0.000026           0       148       148 stat&lt;br /&gt;
   0.00    0.000000           0         1           read&lt;br /&gt;
   0.00    0.000000           0       254           write&lt;br /&gt;
   0.00    0.000000           0        44           mprotect&lt;br /&gt;
   0.00    0.000000           0         1           rt_sigreturn&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
 100.00   13.181295                 17950      1786 total&lt;br /&gt;
&lt;br /&gt;
==strace multiple processes==&lt;br /&gt;
 strace -s 1024 -f -o /tmp/strace $(pidof Process_name | sed &#039;s/\([0-9]*\)/-p \1/g&#039;)&lt;br /&gt;
==strace to hex output. Convert to utf8.==&lt;br /&gt;
 strace -xx -f -o/tmp/strace -s0 echo bajskorv&lt;br /&gt;
 cat /tmp/strace | while read -r line; do printf &amp;quot;%b\n&amp;quot; &amp;quot;$line&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=stty=&lt;br /&gt;
List settings&lt;br /&gt;
 stty -a&lt;br /&gt;
 speed 38400 baud; rows 50; columns 200; line = 0;&lt;br /&gt;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;&lt;br /&gt;
 -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts&lt;br /&gt;
 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8&lt;br /&gt;
 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc&lt;br /&gt;
Set terminal properties.&lt;br /&gt;
 stty rows 50 cols 200&lt;br /&gt;
&lt;br /&gt;
=sudo=&lt;br /&gt;
Enable sudo logging&lt;br /&gt;
 sed -i &amp;quot;$(( $(grep -n ^Defaults /etc/sudoers | tail -1 | awk -F: &#039;{print $1}&#039;) + 1 ))iDefaults    log_output\nDefaults    log_input&amp;quot; /etc/sudoers&lt;br /&gt;
Command above adds the following to /etc/sudoers&lt;br /&gt;
 Defaults    log_output&lt;br /&gt;
 Defaults    log_input&lt;br /&gt;
List sudo-io logs.&lt;br /&gt;
 sudoreplay -l&lt;br /&gt;
Search for string in logs.&lt;br /&gt;
 zgrep search_string $(find /var/log/sudo-io/ -type f)&lt;br /&gt;
Replay session. Max wait 1s. 5 times the speed.&lt;br /&gt;
 sudoreplay -m1 -s5 000002&lt;br /&gt;
Replay session including stdin&lt;br /&gt;
 sudo sudoreplay -m1 -s5 -f stdin,stdout,stderr,ttyin,ttyout 000001&lt;br /&gt;
Which rules apply to user&lt;br /&gt;
 sudo -l -U username&lt;br /&gt;
==Add user to sudoers.d so you do not need to add password for that user.==&lt;br /&gt;
 SUDO_USER=&amp;lt;user&amp;gt; ; echo -e &amp;quot;# Adding $SUDO_USER user to sudo users.\n$SUDO_USER ALL=(ALL) NOPASSWD:ALL&amp;quot; &amp;gt; /etc/sudoers.d/90-${SUDO_USER//./_} ; chmod 440 /etc/sudoers.d/90-${SUDO_USER//./_}&lt;br /&gt;
&lt;br /&gt;
=swapon/swapof=&lt;br /&gt;
Free swap&lt;br /&gt;
 (swapoff -a; swapon -a) &amp;amp; watch free -m&lt;br /&gt;
&lt;br /&gt;
=sysbench=&lt;br /&gt;
cpu test.&lt;br /&gt;
 sysbench cpu --cpu-max-prime=20000 --threads=32 run | grep &amp;quot;events per second&amp;quot;&lt;br /&gt;
ram test&lt;br /&gt;
 sysbench memory --threads=32 run | grep sec&lt;br /&gt;
disk test&lt;br /&gt;
 RAM_TWO=$(( $(grep MemTotal /proc/meminfo | awk &#039;{print $2}&#039;) * 2 ))kb&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} prepare &amp;gt; /dev/null&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} --file-test-mode=rndrw --time=300 --max-requests=0 run|grep -E &#039; read, | written, &#039;&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} cleanup &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
=sysctl=&lt;br /&gt;
Rename machine.&lt;br /&gt;
 sysctl kernel.hostname=ipmonxx.${CLIENT}.ip-soft.net&lt;br /&gt;
Set tcp keepalive&lt;br /&gt;
 $ sysctl -a | grep tcp_keepalive&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 1800&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 9&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 75&lt;br /&gt;
 sudo sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 60&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 3&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 10&lt;br /&gt;
Reload config files&lt;br /&gt;
 sysctl --system&lt;br /&gt;
&lt;br /&gt;
=systemctl=&lt;br /&gt;
==init 3== &lt;br /&gt;
 systemctl isolate runlevel3.target&lt;br /&gt;
 systemctl isolate multi-user.target&lt;br /&gt;
 systemctl set-default multi-user.target&lt;br /&gt;
&lt;br /&gt;
==init 5==&lt;br /&gt;
 systemctl isolate runlevel5.target&lt;br /&gt;
 systemctl isolate graphical.target&lt;br /&gt;
 systemctl set-default graphical.target&lt;br /&gt;
&lt;br /&gt;
==When you have made changes to  /etc/systemd/system/*.service==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==List all units==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==List units with problems==&lt;br /&gt;
 systemctl list-units --failed&lt;br /&gt;
==create service==&lt;br /&gt;
cd /etc/systemd/system ; vim $service.service ; systemctl daemon-reload&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Set laptop brightness&lt;br /&gt;
 After=multi-user.target &lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 ExecStart=/bin/sh -c &#039;echo 1000 &amp;gt; /sys/class/backlight/intel_backlight/brightness&#039;&lt;br /&gt;
 LimitNOFILE=65535&lt;br /&gt;
 LimitNPROC=65535&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=default.target&lt;br /&gt;
&lt;br /&gt;
==Add groups to processes started by services script==&lt;br /&gt;
 [Service]&lt;br /&gt;
 SupplementaryGroups=33 518&lt;br /&gt;
==takes a long time to login==&lt;br /&gt;
 systemctl daemon-reexec&lt;br /&gt;
 systemctl restart systemd-logind&lt;br /&gt;
&lt;br /&gt;
=strace process started by systemctl=&lt;br /&gt;
 strace -f -o /tmp/strace.log -s 2048 -p 1 &amp;amp; systemctl restart httpd.service&lt;br /&gt;
=systemctl show puma=&lt;br /&gt;
Show variables of service&lt;br /&gt;
 systemctl show puma&lt;br /&gt;
&lt;br /&gt;
=systemd-analyze=&lt;br /&gt;
What takes time at startup.&lt;br /&gt;
 systemd-analyze plot &amp;gt; /tmp/systemd-analyze-plot.svg ; chrome /tmp/systemd-analyze-plot.svg&lt;br /&gt;
=systemd-resolved=&lt;br /&gt;
 resolvectl status&lt;br /&gt;
clear cache.&lt;br /&gt;
 sudo systemd-resolve --flush-caches&lt;br /&gt;
Look at stats.&lt;br /&gt;
 systemd-resolve --statistics&lt;br /&gt;
==restart daemon to apply settings==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart systemd-networkd&lt;br /&gt;
 systemctl restart systemd-resolved&lt;br /&gt;
=systemctl show=&lt;br /&gt;
will show all available properties&lt;br /&gt;
 systemctl show $service&lt;br /&gt;
&lt;br /&gt;
=tail=&lt;br /&gt;
Tail from line number 21.&lt;br /&gt;
 tail -n +21 /file&lt;br /&gt;
=talk=&lt;br /&gt;
Talks swedish.&lt;br /&gt;
 espeak -v swedish -f /tmp/file&lt;br /&gt;
&lt;br /&gt;
=tar=&lt;br /&gt;
Make a backup of a directory or disk.&lt;br /&gt;
 server: tar -cpsf - $dir | pv -b | nc -l 3333&lt;br /&gt;
 client: nc server 3333 | pv -b | tar -xpst -&lt;br /&gt;
Inline tar archive.&lt;br /&gt;
 awk &#039;/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }&#039; $0&lt;br /&gt;
 tail -n $0 &amp;gt; archive.tar # tail -n +347 Filename&lt;br /&gt;
Backup dir but exclude files within&lt;br /&gt;
 tar zcf /tmp/backup_$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).tar.gz /apps/app --exclude=/apps/app/var/* --exclude=/apps/app/logs/*&lt;br /&gt;
extract files remove 5 path element components.&lt;br /&gt;
 tar xf archive.tar --strip-components 5&lt;br /&gt;
extract to other directory.&lt;br /&gt;
 tar -xzf bar.tar.gz -C foo&lt;br /&gt;
extract files excluding path.&lt;br /&gt;
 tar xf $file.tar.gz --transform=&#039;s/.*\///&#039;&lt;br /&gt;
&lt;br /&gt;
=tcpdump=&lt;br /&gt;
dump trafic information, -e Print the link-level header on each dump line, -vvv verbose.&lt;br /&gt;
 tcpdump -e -vvv port 21&lt;br /&gt;
dump all trafic to and from machine. -w write to file, -s0 size of package, host to listen from.&lt;br /&gt;
 time tcpdump -w ssl_dump -s0 host test.x30.webservices.itsfogo.com&lt;br /&gt;
dump all trafic into files of max 100MB. 270MB in reality.&lt;br /&gt;
 tcpdump -w snoop -s0 -C 100000000&lt;br /&gt;
dump all trafic. compress logfiles. Create 10 files which are 10 MB big. Dont convert numbers to names. Dont truncate frames create logfile with this name.&lt;br /&gt;
 tcpdump -z gzip -i wlan0 -C 10 -W 10 -n -s0 -w /tmp/tcpdump.log&lt;br /&gt;
Which machines send a syn packet.&lt;br /&gt;
 sudo tcpdump -nn -i eth0 &#039;tcp[13] = 2&#039;&lt;br /&gt;
Show information about all traffic on interface.&lt;br /&gt;
 tcpdump -s0 -i eth1 -vv&lt;br /&gt;
Show information about communication over port 514&lt;br /&gt;
 tcpdump -Xni any port 514&lt;br /&gt;
listen on port 1023 for incoming trafic. disable local subnets.&lt;br /&gt;
 sudo tcpdump -n -i eth0 tcp and dst host 172.17.17.6 and not src net 172.17.17.0/24 and not src net 158.0.0.0/8 and &#039;port 1023&#039;&lt;br /&gt;
listen after torrent traffic.&lt;br /&gt;
 sudo tcpdump -Xni any portrange 6882-6999&lt;br /&gt;
View content of http trafic&lt;br /&gt;
 sudo tcpdump -i any -A -s 1500 dst 89.253.75.84 and port 80&lt;br /&gt;
View post in utf-8 format.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tcpdump -lnp -i any -A -s 1500 dst 89.253.75.84 and port 80 -w - | tr -t &#039;[^[:print:]]&#039; &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get cookie&lt;br /&gt;
 tcpdump -i lo -A -l dst port 8000 |     grep &amp;quot;^Cookie: &amp;quot;&lt;br /&gt;
 To create cookie for curl: https://xiix.wordpress.com/2006/03/23/mozillafirefox-cookie-format/&lt;br /&gt;
Look at traffic from specific ip&lt;br /&gt;
 tcpdump -n -i any -n host 198.18.130.9&lt;br /&gt;
Eavesdrop password&lt;br /&gt;
 tcpdump -i any -A -s0 port 8030 | grep Authorization:&lt;br /&gt;
==flags==&lt;br /&gt;
tcpdump -enni eth0 host 172.30.142.11 port 5432&lt;br /&gt;
 F - FIN&lt;br /&gt;
 S - SYN&lt;br /&gt;
 R - RST&lt;br /&gt;
 P - PSH&lt;br /&gt;
 U - URG&lt;br /&gt;
 E - ECN Echo&lt;br /&gt;
 W - ECN Cwnd Reduced&lt;br /&gt;
 . - ACK only&lt;br /&gt;
==get ftp username/password==&lt;br /&gt;
 sudo tcpdump -n -vvv -i any -A -f &amp;quot;port 21&amp;quot; | grep -i &amp;quot;user\|pass&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=tcptraceroute=&lt;br /&gt;
 tcptraceroute -n -q 1 192.168.0.1 -p 22&lt;br /&gt;
=teamdctl=&lt;br /&gt;
 teamdctl team0 state view -v&lt;br /&gt;
=tee=&lt;br /&gt;
Feed tee with an unbuffered stream.&lt;br /&gt;
 sar -n DEV 2 | stdbuf -oL grep wlp0s20f3 | tee /temp/sar_-n_wlp0s20f3.$(date)&lt;br /&gt;
&lt;br /&gt;
=telnet=&lt;br /&gt;
Look at world map. a - z zoom.&lt;br /&gt;
 telnet mapscii.me&lt;br /&gt;
=testssl=&lt;br /&gt;
test ssl certificate&lt;br /&gt;
 testssl www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=tftp=&lt;br /&gt;
 # Download test.file&lt;br /&gt;
 tftp -v 172.17.17.6 -c get test.file&lt;br /&gt;
 # Upload file.&lt;br /&gt;
 tftp -v 172.17.17.6 -c put /tmp/test.put test.put&lt;br /&gt;
 # Enable upload file in in.tftpd&lt;br /&gt;
 /etc/xinetd.d/tftp&lt;br /&gt;
 server_args        = -c -s /var/lib/tftpboot&lt;br /&gt;
=tibco=&lt;br /&gt;
show permissions.&lt;br /&gt;
 help permissions&lt;br /&gt;
Create user&lt;br /&gt;
 create user surveillance &amp;quot;Surveillance user&amp;quot; password=surveillance&lt;br /&gt;
Grant user permission to view all&lt;br /&gt;
 grant admin user=surveillance view-all&lt;br /&gt;
=tif=&lt;br /&gt;
cli image viewer.&lt;br /&gt;
 tif $IMAGE.jpg&lt;br /&gt;
&lt;br /&gt;
=time=&lt;br /&gt;
Time in a loop.&lt;br /&gt;
 { time sleep 2 &amp;gt;&amp;gt; ${LOG} ; } 2&amp;gt;&amp;gt; ${LOG}&lt;br /&gt;
How long did a command take&lt;br /&gt;
 TIME=$( { /usr/bin/time -f &amp;quot;%e&amp;quot; sleep 1.5 ;} 2&amp;gt;&amp;amp;1 ) ; echo $TIME&lt;br /&gt;
Built in time command. 3 decimals in seconds.&lt;br /&gt;
 TIMEFORMAT=&#039;%3R&#039;; time ( sleep 61.22222 )&lt;br /&gt;
=timedatectl=&lt;br /&gt;
Show info how clock is synced.&lt;br /&gt;
 timedatectl timesync-status&lt;br /&gt;
Which time zones exist&lt;br /&gt;
 timedatectl list-timezones | cat -v | grep -i stockholm&lt;br /&gt;
Set timezone.&lt;br /&gt;
 timedatectl set-timezone &amp;quot;Europe/Stockholm&amp;quot;&lt;br /&gt;
Show ntp servers&lt;br /&gt;
 timedatectl show-timesync --all&lt;br /&gt;
Sync clock&lt;br /&gt;
 timedatectl set-ntp true&lt;br /&gt;
Enable clock sync.&lt;br /&gt;
 systemctl enable systemd-timesyncd --now&lt;br /&gt;
&lt;br /&gt;
=timeout=&lt;br /&gt;
limit waiting for a period.&lt;br /&gt;
 timeout 2s sleep 100&lt;br /&gt;
Run function under timeout&lt;br /&gt;
 export -f my_function ; timeout 1 bash -c &#039;my_function options&#039;&lt;br /&gt;
Run loop for some time then exit.&lt;br /&gt;
 timeout 172800 bash -c -- &#039;while true ; do echo $(TZ=UTC date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;) $(ping -w1 -q -c1 -i10 192.168.10.120 | grep received) ; sleep 1 ; done| tee /tmp/ping_192.168.10.120.log&#039;&lt;br /&gt;
&lt;br /&gt;
=tnef=&lt;br /&gt;
List content of winmail.dat. Remove options to extract to current dir.&lt;br /&gt;
 tnef -t -f winmail.dat&lt;br /&gt;
=toilet=&lt;br /&gt;
Generate graphics text similar to banner.&lt;br /&gt;
 toilet -F gay -f mono12 &amp;quot;Some Funky Text&amp;quot;&lt;br /&gt;
=tor=&lt;br /&gt;
Select outgoing country. https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2&lt;br /&gt;
Set country in:&lt;br /&gt;
 torrc&lt;br /&gt;
One or several exit countries.&lt;br /&gt;
 ExitNodes {us}&lt;br /&gt;
 ExitNodes {kr},{ru},{sy},{cn}&lt;br /&gt;
test exit node&lt;br /&gt;
 ifconfig.me&lt;br /&gt;
=toolbox=&lt;br /&gt;
 toolbox create --distro rhel --release 9.5&lt;br /&gt;
==running rocky==&lt;br /&gt;
 podman pull docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
 toolbox create --image docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
&lt;br /&gt;
=top(the command)=&lt;br /&gt;
Top batch mode run one iteration&lt;br /&gt;
 top -bn1&lt;br /&gt;
Sort by memory usage&lt;br /&gt;
 for i in {1..10};do date; top -c -b -o +%MEM | head -n 17|tail -11;sleep 5;done&lt;br /&gt;
Top used in openshift.&lt;br /&gt;
 top -bcn1 -w512 | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=top derivates=&lt;br /&gt;
 apachetop&lt;br /&gt;
 dnstop&lt;br /&gt;
 iftop&lt;br /&gt;
 latencytop&lt;br /&gt;
 glances&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 touch -am 0910120003    Give a new access time on a file 0910120003MMDDhhmmyy&lt;br /&gt;
linux&lt;br /&gt;
 touch -t 197102162324 *&lt;br /&gt;
&lt;br /&gt;
=tput=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
Line wraps&lt;br /&gt;
 tput smam&lt;br /&gt;
invisible cursor&lt;br /&gt;
 tput civis&lt;br /&gt;
visible cursor&lt;br /&gt;
 tput cnorm&lt;br /&gt;
reset is a good command to reset shell&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
=tr=&lt;br /&gt;
translate capital to lower letter.&lt;br /&gt;
 tr &#039;[:upper:]&#039; &#039;[:lower:]&#039;&lt;br /&gt;
null character to new line&lt;br /&gt;
 tr &#039;\000&#039; &#039;\n&#039; &amp;lt; /proc/3575/environ&lt;br /&gt;
Remove unprintable characters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tr -dc &#039;[[:print:]]&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trickle=&lt;br /&gt;
Speed limit for download&lt;br /&gt;
 rsync -ae &amp;quot;trickle -d 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Speed limit for upload.&lt;br /&gt;
 rsync -ae &amp;quot;trickle -u 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Limit wget to 64kbit upload and download.&lt;br /&gt;
 trickle -d 64 -u 64 wget &amp;quot;https://www.halfface.se/file.txt&amp;quot;&lt;br /&gt;
=ts=&lt;br /&gt;
timestamp&lt;br /&gt;
 ls -la | ts &#039;%F %H:%M:%S&#039;&lt;br /&gt;
&lt;br /&gt;
=tune2fs(tunefs)=&lt;br /&gt;
 tune2fs -m 0 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=type=&lt;br /&gt;
What kind of command do we use. builtin or some file?&lt;br /&gt;
 type ls&lt;br /&gt;
&lt;br /&gt;
=udevadm=&lt;br /&gt;
Monitor udev events.&lt;br /&gt;
 udevadm monitor&lt;br /&gt;
udevadm info --query=all --name=sda&lt;br /&gt;
 look at values for disk. Can be used to locate san source.&lt;br /&gt;
&lt;br /&gt;
=udr=&lt;br /&gt;
rsync over udp.&lt;br /&gt;
 udr -a 57621 -b 57631 rsync -rP host.inter.net:/source/ /destination/&lt;br /&gt;
=ulimt=&lt;br /&gt;
Look at current limits for logged in user.&lt;br /&gt;
 ulimit -a&lt;br /&gt;
Look at limits for process with pid 12345.&lt;br /&gt;
 cat /proc/12345/limits&lt;br /&gt;
=unalias=&lt;br /&gt;
Unalias all aliases&lt;br /&gt;
 unalias -a&lt;br /&gt;
=unhide=&lt;br /&gt;
Find hidden ports.&lt;br /&gt;
 unhide -v proc&lt;br /&gt;
&lt;br /&gt;
=unetbootin=&lt;br /&gt;
 Boot iso image from usb memory.&lt;br /&gt;
=update-crypto-policies=&lt;br /&gt;
Change crypt policies so that I am able to start openvpn connection.&lt;br /&gt;
 sudo update-crypto-policies --set DEFAULT:SHA1&lt;br /&gt;
&lt;br /&gt;
=upower=&lt;br /&gt;
 # Powerstatus of the system. battery charge.&lt;br /&gt;
 upower --dump&lt;br /&gt;
=uptime=&lt;br /&gt;
Uptime in seconds.&lt;br /&gt;
 awk -F . &#039;{print $1}&#039; /proc/uptime&lt;br /&gt;
&lt;br /&gt;
=urldecode/urlencode=&lt;br /&gt;
Encode&lt;br /&gt;
 perl -pe&#039;s/([^-_.~A-Za-z0-9])/sprintf(&amp;quot;%%%02X&amp;quot;, ord($1))/seg&#039;&lt;br /&gt;
 jq -sRr @uri&lt;br /&gt;
Decode&lt;br /&gt;
 perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;&lt;br /&gt;
 jq -r @uri&lt;br /&gt;
&lt;br /&gt;
=useradd=&lt;br /&gt;
 useradd --uid 666 --gid 666 --comment &#039;devil&#039; devil &amp;amp;&amp;amp; echo &#039;devil:VerySecretPassword&#039; | chpasswd&lt;br /&gt;
&lt;br /&gt;
=v4l2=&lt;br /&gt;
Video player&lt;br /&gt;
 qv4l2&lt;br /&gt;
List available formatats and resolutions.&lt;br /&gt;
 v4l2-ctl --list-formats-ext&lt;br /&gt;
List available formats&lt;br /&gt;
 v4l2-ctl --list-formats&lt;br /&gt;
Set camera to h264&lt;br /&gt;
 v4l2-ctl --set-fmt-video=width=800,height=448,pixelformat=1&lt;br /&gt;
Set framerate.&lt;br /&gt;
 v4l2-ctl --set-parm=30&lt;br /&gt;
List video parameters&lt;br /&gt;
 v4l2-ctl --get-fmt-video&lt;br /&gt;
List video output&lt;br /&gt;
 v4l2-ctl --all&lt;br /&gt;
Disable autofocus&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_auto=0&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_absolute=0&lt;br /&gt;
=version of linux=&lt;br /&gt;
 cat /etc/os-release&lt;br /&gt;
&lt;br /&gt;
=vi=&lt;br /&gt;
 :set ignorecase&lt;br /&gt;
 :set list        show all keys.&lt;br /&gt;
 :set nolist      show their representative.&lt;br /&gt;
=wipefs=&lt;br /&gt;
Wipe removes information about file system without removing actual data.&lt;br /&gt;
 wipefs -a /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=vmstat=&lt;br /&gt;
top over time.&lt;br /&gt;
 vmstat -n 5&lt;br /&gt;
Description:&lt;br /&gt;
 r=procs waiting for cpu time.&lt;br /&gt;
 b=procs in sleep mode.&lt;br /&gt;
 swpd=virtual memory in use in swap.&lt;br /&gt;
 free=memory free.&lt;br /&gt;
 buff=memory used by buffers&lt;br /&gt;
 cache=memory used as cache.&lt;br /&gt;
 si=swap in.&lt;br /&gt;
 so=swap out.&lt;br /&gt;
 bi=io block in.&lt;br /&gt;
 bo=io block out.&lt;br /&gt;
 in=interups&lt;br /&gt;
 cs=contex switching.&lt;br /&gt;
 us=cpu user space&lt;br /&gt;
 sy=cpu system usage to serve.&lt;br /&gt;
 id=cpu idle&lt;br /&gt;
 wa=cpu waiting for input output. iowait.&lt;br /&gt;
 st=cpu time stolen from a virtual machine&lt;br /&gt;
&lt;br /&gt;
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----&lt;br /&gt;
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st&lt;br /&gt;
  2  1 814984 167992  26820 999460    0    0     1     0 2467 5088  2  2 95  1  0   &lt;br /&gt;
  0  0 814984 168100  26820 999540    0    0     2   150 2467 5026  1  2 97  0  0&lt;br /&gt;
=w3m(elinks)=&lt;br /&gt;
 curl -s https://google.com | w3m -T text/html -dump&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 wget -r -nH -np --cut-dirs=1 --no-check-certificate -U Mozilla --user={uname} --password={pwd} https://my-host/my-webdav-dir/my-dir-in-webdav&lt;br /&gt;
wget to standard output.&lt;br /&gt;
 wget --no-check-certificate -S -O- http://inter.net&lt;br /&gt;
Special heather&lt;br /&gt;
 wget &#039;http://halfface.se&#039; --header=&#039;Cookie: has_js=1&#039;&lt;br /&gt;
Mirror&lt;br /&gt;
 wget &#039;https://halfface.se/test&#039; -r -l 3 --convert-links -o log  --html-extension&lt;br /&gt;
&lt;br /&gt;
=whois=&lt;br /&gt;
 # When does a domain expire.&lt;br /&gt;
 whois -h whois.iana.org sivberg.se&lt;br /&gt;
 # which ipranges does an ipaddress belong too. In this case looking at google.&lt;br /&gt;
 whois -h whois.radb.net -- &amp;quot;-i origin $(whois -s -h whois.radb.net 172.217.26.68 | grep ^origin | awk &#039;{print $2}&#039; | tail -1)&amp;quot; | grep ^route | awk &#039;{print $2}&#039;&lt;br /&gt;
 # Who to find address range for site.&lt;br /&gt;
 host www.facebook.com&lt;br /&gt;
 whois 157.240.194.35 | grep CIDR&lt;br /&gt;
&lt;br /&gt;
=wireshark=&lt;br /&gt;
 find packet&lt;br /&gt;
 packet details&lt;br /&gt;
 string&lt;br /&gt;
==ssl decryption==&lt;br /&gt;
 export SSLKEYLOGFILE=/tmp/sslkeylog ; curl -sv -d &amp;quot;blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla&amp;quot; https://www.halfface.se&lt;br /&gt;
 wireshark. Edit - Preferences - Protocols - TLS - (Pre) -master-Secret log file.&lt;br /&gt;
==tshark==&lt;br /&gt;
cli version&lt;br /&gt;
 tshark -V -r $dump.pcap&lt;br /&gt;
=wlr-randr=&lt;br /&gt;
Change dpi in wayland.&lt;br /&gt;
 wlr-randr --output eDP-1 --scale 2&lt;br /&gt;
Change resolution&lt;br /&gt;
 wlr-randr --output DP-1 --mode 1920x1080&lt;br /&gt;
&lt;br /&gt;
=wodim=&lt;br /&gt;
Burning disks.&lt;br /&gt;
 wodim -scanbus    # Scan scsi bus for burners.&lt;br /&gt;
 wodim --devices   # Discover basic information.&lt;br /&gt;
 wodim -checkdrive # Information about burner.&lt;br /&gt;
 wodim -tao speed=0 dev=/dev/sr0 -v -data /temp/files/                      # Burn disk containing structure from /temp/files/&lt;br /&gt;
 wodim -eject  -tao speed=0 dev=/dev/scd0 -v -data /my/directory/image.iso   # Burn image to disc.&lt;br /&gt;
=write=&lt;br /&gt;
Send message to someone via tty.&lt;br /&gt;
 who | grep user&lt;br /&gt;
write message end with CTRL + d&lt;br /&gt;
 write abjorklund pts/2&lt;br /&gt;
&lt;br /&gt;
=xargs=&lt;br /&gt;
locate case insensetive, regular expression. xargs string to replace imput. Print output to standard error.&lt;br /&gt;
 locate -ir &amp;quot;.*\.crt$&amp;quot; | xargs -I &#039;{}&#039; -t cp {} /temp/ssl/&lt;br /&gt;
Do something on everything from standard input.&lt;br /&gt;
 ls -la | xargs -i% echo &#039;# beginning #&#039; % &#039;# end of line #&#039;&lt;br /&gt;
split several lines into groups.&lt;br /&gt;
 for i in {00..99} ; do echo $i, ; done | xargs -L 20&lt;br /&gt;
&lt;br /&gt;
=xdotool=&lt;br /&gt;
When you have to move your mouse but you dont want to push it.&lt;br /&gt;
 xdotool mousemove_relative -- -1 -1&lt;br /&gt;
 xdotool mousemove_relative 1 1&lt;br /&gt;
Send ab to window.&lt;br /&gt;
 xdotool search --onlyvisible --name freerdp key a key b&lt;br /&gt;
=xfs=&lt;br /&gt;
 xfs_repair -L /dev/mapper/vg00-root&lt;br /&gt;
&lt;br /&gt;
=xinput=&lt;br /&gt;
 # List xinputs.&lt;br /&gt;
 xinput list&lt;br /&gt;
 # List properties.&lt;br /&gt;
 xinput list-props &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot;&lt;br /&gt;
 # Middle button emulation.&lt;br /&gt;
 xinput set-prop &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot; &amp;quot;Evdev Middle Button Emulation&amp;quot; 1&lt;br /&gt;
 xinput set-prop 12 &amp;quot;libinput Middle Emulation Enabled&amp;quot; 1&lt;br /&gt;
=xkill=&lt;br /&gt;
Kill xorg process with id 0xb6ffa0&lt;br /&gt;
 xkill -id 0xb6ffa0&lt;br /&gt;
List x applictions&lt;br /&gt;
 xwininfo&lt;br /&gt;
Get recursive list of x applications.&lt;br /&gt;
 xwininfo -root -tree&lt;br /&gt;
&lt;br /&gt;
=xmllint=&lt;br /&gt;
prettify xml&lt;br /&gt;
 xmllint --format -&lt;br /&gt;
&lt;br /&gt;
=xset=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 xset -dpms ; xset s noblank ;xset s off&lt;br /&gt;
Disable repeat&lt;br /&gt;
 xset r off&lt;br /&gt;
Enable repeat&lt;br /&gt;
 xset r on&lt;br /&gt;
&lt;br /&gt;
=xxd=&lt;br /&gt;
Hex to binary&lt;br /&gt;
 xxd -r -p hex.txt output.bin&lt;br /&gt;
Hex to binary in pipe&lt;br /&gt;
 echo &amp;quot;$HEX&amp;quot; | xxd -r -p -&lt;br /&gt;
=yum=&lt;br /&gt;
download src rpm&lt;br /&gt;
 yumdownloader --source net-snmp&lt;br /&gt;
Reinstall default repos.&lt;br /&gt;
 yum reinstall yum-conf-sl6x-1-2&lt;br /&gt;
This will give you a directory with all rpm:s that are required to install rpm.&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=6 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==broken repos==&lt;br /&gt;
 yum install bareos-client --disablerepo=* --enablerepo=bareos&lt;br /&gt;
==search for different versions==&lt;br /&gt;
 yum --showduplicates search percona-xtrabackup&lt;br /&gt;
==Add repos to centos 6==&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-epel-eol.repo --output /etc/yum.repos.d/epel.repo&lt;br /&gt;
==fix yum in Centos 7, 8==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i &#039;s%^enabled=.%enabled=0%&#039; /etc/yum/pluginconf.d/subscription-manager.conf&lt;br /&gt;
sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get variables to test /etc/yum-repos.d/&amp;lt;file&amp;gt;.conf files==&lt;br /&gt;
 export releasever=$(lsb_release -r | awk &#039;{print $NF}&#039; | awk -F . &#039;{print $1}&#039;)&lt;br /&gt;
 export basearch=$(uname -m)&lt;br /&gt;
&lt;br /&gt;
=zip=&lt;br /&gt;
Zip directory exclude files .svn directory.&lt;br /&gt;
 zip -r /temp/ssl.zip . -x &amp;quot;.svn/*&amp;quot;&lt;br /&gt;
List contents of zip archive.&lt;br /&gt;
 unzip -l archive.zip&lt;br /&gt;
Unzip single file&lt;br /&gt;
 unzip file.zip file/you/want/to/extract/the_file.txt&lt;br /&gt;
unzip excluding path.&lt;br /&gt;
 unzip -j file.zip&lt;br /&gt;
&lt;br /&gt;
=zdump=&lt;br /&gt;
View information from timezone tz.&lt;br /&gt;
 zdump -v /etc/localtime&lt;br /&gt;
Change timezone on host&lt;br /&gt;
 ln -sfT ../usr/share/zoneinfo/Europe/Stockholm localtime&lt;br /&gt;
&lt;br /&gt;
=zfs=&lt;br /&gt;
==Get sync==&lt;br /&gt;
 zfs get sync datapool/netstorage/dog/prod&lt;br /&gt;
 NAME                          PROPERTY  VALUE     SOURCE&lt;br /&gt;
 datapool/netstorage/dog/prod  sync      standard  default&lt;br /&gt;
==set sync==&lt;br /&gt;
 zfs set sync=disabled datapool/netstorage/dog/prod&lt;br /&gt;
==List snapshots(can take time)==&lt;br /&gt;
 zfs list -t snapshot&lt;br /&gt;
==List snapshots for one mount point.==&lt;br /&gt;
 zfs list -r -t snapshot -o name,creation datapool/netstorage/bro/prod&lt;br /&gt;
==Displays the detailed health status==&lt;br /&gt;
 zpool status&lt;br /&gt;
==List datasets==&lt;br /&gt;
 zfs list&lt;br /&gt;
==Create dataset==&lt;br /&gt;
 zfs create datapool/netstorage/media&lt;br /&gt;
==zdb==&lt;br /&gt;
display zpool debugging and consistency information&lt;br /&gt;
 zdb -d dataset&lt;br /&gt;
==zpool list==&lt;br /&gt;
Lists the given pools along with a health status and space usage.&lt;br /&gt;
==iostat==&lt;br /&gt;
Get iostat with values since last second.&lt;br /&gt;
 zpool iostat are -y 1 -l&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Unix]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16594</id>
		<title>Openstack</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openstack&amp;diff=16594"/>
		<updated>2026-03-26T12:20:10Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* list volumes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean=&lt;br /&gt;
 aodh                  Alarming service&lt;br /&gt;
 barbican              REST API designed for the secure storage, provisioning and management of secrets such as passwords, encryption keys and X.509&lt;br /&gt;
 cinder                OpenStack Block Storage&lt;br /&gt;
 gnocchi               Time Series Database as a Service&lt;br /&gt;
 glance                OpenStack Image Service&lt;br /&gt;
 heat                  iac. Deploy instances, volumes and other OpenStack services using YAML based templates.&lt;br /&gt;
 horizon               Openstack’s Dashboard, which provides a web based user interface to OpenStack services&lt;br /&gt;
 ironic                bootstrap&lt;br /&gt;
 keystone              identity service &lt;br /&gt;
 magnum                container orchestration engines&lt;br /&gt;
 mistral               workflow service&lt;br /&gt;
 neutron               networking as a service&lt;br /&gt;
 nfv                   Network functions virtualization&lt;br /&gt;
 nova                  cloud computing instance controller, provision compute instances (aka virtual servers).&lt;br /&gt;
 octavia               Load balancer. Octavia HAProxy Amphora API&lt;br /&gt;
 rhosp                 Red Hat OpenStack Platform&lt;br /&gt;
 swift                 OpenStack Object Storage&lt;br /&gt;
 tacker                NFV Orchestration&lt;br /&gt;
 trove                 Database as a Service&lt;br /&gt;
 Zaqar                 multi-tenant cloud messaging service&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(openstack complete 2&amp;gt;/dev/null )&lt;br /&gt;
=flavor=&lt;br /&gt;
Which machine types exist.&lt;br /&gt;
 gp      &amp;quot;General purpose&amp;quot; Well rounded combination of amount of CPUs and the amount of RAM.&lt;br /&gt;
 hm      &amp;quot;High memory&amp;quot; Optimimzed for applications that need a lot of memory.&lt;br /&gt;
 hp      &amp;quot;High performance&amp;quot; High frequenzy cpu.&lt;br /&gt;
List suitable flavors&lt;br /&gt;
 openstack flavor list -f json -c VCPUs -c RAM -c Disk -c Name | jq -r &#039;.[] | [ .Name, .VCPUs, .RAM, .Disk ] | @tsv&#039; | sort -k 2,2n -k 3,3n | grep -vE &#039;gpu|pinned|nvme&#039; | column_tab&lt;br /&gt;
Change flavor of vm&lt;br /&gt;
 openstack server resize &amp;lt;vm-name-or-id&amp;gt; --flavor &amp;lt;new-flavor-name-or-id&amp;gt; --wait&lt;br /&gt;
 openstack server resize confirm &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Manage multiple projects=&lt;br /&gt;
 export OS_CLIENT_CONFIG_FILE=~/.config/openstack/project1_clouds.yaml&lt;br /&gt;
 export OS_CLOUD=project1&lt;br /&gt;
&lt;br /&gt;
=list volumes=&lt;br /&gt;
 openstack volume list&lt;br /&gt;
==list volume belonging to &amp;lt;server&amp;gt;==&lt;br /&gt;
 openstack server volume list &amp;lt;server&amp;gt;&lt;br /&gt;
==remove volume from server==&lt;br /&gt;
 openstack server remove volume &amp;lt;vm_name_or_id&amp;gt; &amp;lt;volume_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack=&lt;br /&gt;
 dnf install python3-openstackclient&lt;br /&gt;
 dnf -y install $(dnf -q search python3- client |grep -i OpenStack | grep -v -- -tests| awk &#039;{print $1}&#039;)&lt;br /&gt;
&lt;br /&gt;
=get ip addresses of all host=&lt;br /&gt;
 openstack server list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;&lt;br /&gt;
=long output=&lt;br /&gt;
 openstack server list --long&lt;br /&gt;
=select server depending status=&lt;br /&gt;
 openstack server list --status ACTIVE&lt;br /&gt;
&lt;br /&gt;
=output=&lt;br /&gt;
 -f csv,json,table,value,yaml&lt;br /&gt;
Get output without headers.&lt;br /&gt;
 openstack server list -f value&lt;br /&gt;
&lt;br /&gt;
=list all=&lt;br /&gt;
 openstack command list -f yaml | grep - | grep list | sed &#039;s/^  - /openstack /g&#039; |grep -v &amp;quot;openstack command list&amp;quot; | while read i ; do echo &#039;*&#039; $i ; $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039; | while read i ; do echo &#039;*&#039; openstack $i ; openstack $i 2&amp;gt;&amp;amp;1 ; done | tee /tmp/openstack_list_resources.${OS_CLOUD}.$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=How to reach nodes=&lt;br /&gt;
 OPENSTACK=$(openstack server  list -c Networks -f json | jq -r &#039;.[].Networks[][]&#039;) ; OPENSTACK_JUMP=$(grep 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; NODES=$(grep -v 185 &amp;lt;&amp;lt;&amp;lt; &amp;quot;${OPENSTACK}&amp;quot;) ; for NODE in ${NODES} ; do echo ssh -J core@${OPENSTACK_JUMP} core@${NODE} ; done&lt;br /&gt;
=create server=&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image fedora-37-x86_64 --boot-from-volume 100 --network abjorklund-01-5tsbc-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
With setting password.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; user-data&lt;br /&gt;
 #cloud-config&lt;br /&gt;
 password: Password123!&lt;br /&gt;
 chpasswd: {expire: False}&lt;br /&gt;
 ssh_pwauth: True&lt;br /&gt;
 EOF&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file) --user-data user-data&lt;br /&gt;
With existing network port&lt;br /&gt;
 openstack server create --flavor gp.1x2 --block-device source=volume,id=&amp;lt;volume-id&amp;gt;,dest=volume,bootindex=0,delete_on_termination=false --nic port-id=&amp;lt;existing-port-id&amp;gt; --key-name &amp;lt;your-keypair&amp;gt; &amp;lt;new-server-name&lt;br /&gt;
&lt;br /&gt;
=router=&lt;br /&gt;
==List routers==&lt;br /&gt;
 openstack router list&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 openstack router show abjorklund-01-5tsbc-external-router -c external_gateway_info -f json | jq &#039;.external_gateway_info.external_fixed_ips[0].ip_address&#039;&lt;br /&gt;
==Remove subnet from router==&lt;br /&gt;
 openstack router remove subnet &amp;lt;router&amp;gt; &amp;lt;subnet&amp;gt;&lt;br /&gt;
==add route to router==&lt;br /&gt;
openstack router add route --route destination=10.8.1.0/24,gateway=10.111.222.254 &amp;lt;router&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=list available images=&lt;br /&gt;
 openstack image list&lt;br /&gt;
=Download image=&lt;br /&gt;
Get info about image.&lt;br /&gt;
 openstack image list | grep -i nord-ic-&lt;br /&gt;
 | 98c03b69-4ba8-4276-8695-b6c3f006cf20 | nord-ic-bc84t-rhcos            | active |&lt;br /&gt;
 glance image-download --file nord-ic-bc84t-rhcos --progress 98c03b69-4ba8-4276-8695-b6c3f006cf20&lt;br /&gt;
&lt;br /&gt;
=Upload image=&lt;br /&gt;
https://cloud-images.ubuntu.com/focal/current/&lt;br /&gt;
 openstack image create --disk-format qcow2 --container-format bare --file focal-server-cloudimg-amd64.img Focal_Fossa.$(date_file)&lt;br /&gt;
&lt;br /&gt;
=security=&lt;br /&gt;
==Create security group.==&lt;br /&gt;
 openstack security group create &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group create ssh_allow&lt;br /&gt;
&lt;br /&gt;
==Get security groups.==&lt;br /&gt;
 openstack security group list -c Name -f json | jq -r &#039;.[].Name&#039;&lt;br /&gt;
==Get all security groups with rules.==&lt;br /&gt;
 openstack security group list -c Name -f value | while read SECURITY ; do openstack security group show &amp;quot;$SECURITY&amp;quot; ; done &amp;gt; /temp/${OS_CLOUD##*/}}_openstack_security_group_list_openstack_security_group_show.$(date_file).log&lt;br /&gt;
==Get rules from one security group.==&lt;br /&gt;
 openstack security group rule list &amp;lt;group&amp;gt;&lt;br /&gt;
==Add rule to allow traffic from ip.==&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 6443 --remote-ip 185.53.164.10/32 --ingress &amp;lt;group&amp;gt;&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 22 --remote-ip 0.0.0.0/0 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
 openstack security group rule create ssh_allow --remote-ip 0.0.0.0/0 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack security group rule create &amp;lt;rule&amp;gt; --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress &amp;lt;security group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Allow nfs4 traffic==&lt;br /&gt;
 # List group to add too.&lt;br /&gt;
 openstack security group list | grep rw-core&lt;br /&gt;
 openstack security group rule create --proto tcp --dst-port 2049 --remote-ip 10.2.0.0/16 rw-core-p9dq6-master&lt;br /&gt;
==Add security group to server==&lt;br /&gt;
 openstack server add security group &amp;lt;server_name_or_id&amp;gt; &amp;lt;security_group_name_or_id&amp;gt;&lt;br /&gt;
Example of adding a group with a rule.&lt;br /&gt;
 openstack security group create ssh-vpn&lt;br /&gt;
 openstack security group rule create ssh-vpn --remote-ip 100.120.0.0/21 --protocol tcp --dst-port 22 --ingress&lt;br /&gt;
 openstack server add security group RW01 ssh-vpn&lt;br /&gt;
&lt;br /&gt;
=create block device=&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
Resize block device.&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
&lt;br /&gt;
=set physical ip on host=&lt;br /&gt;
 openstack port list&lt;br /&gt;
List in different view.&lt;br /&gt;
 openstack port list -f json | jq -r &#039;.[]|[.ID, .Name, .Status, .&amp;quot;Fixed IP Addresses&amp;quot;[].ip_address]| join(&amp;quot;\t&amp;quot;)&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=Change security group on port=&lt;br /&gt;
Remove if existing port does not exist.&lt;br /&gt;
 openstack port set --no-security-group a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
 openstack port set --security-group 3723f737-280f-453e-af0b-50aca4ce1b0d a7434863-fc4d-46ad-b93e-b0f2f717023f&lt;br /&gt;
=create port=&lt;br /&gt;
 openstack port create --network abjorklund-01-h4sxm-openshift --fixed-ip subnet=4bb2ab0c-f8f9-4346-b238-5f992f0bcf56,ip-address=10.1.0.5 abjorklund-01-h4sxm-api-port&lt;br /&gt;
&lt;br /&gt;
=manage loadbalancer aurora/haproxy=&lt;br /&gt;
 openstack loadbalancer&lt;br /&gt;
 openstack loadbalancer list&lt;br /&gt;
 openstack loadbalancer show test-lb -c listeners -f value&lt;br /&gt;
=view limits=&lt;br /&gt;
If you have problems to create something in openstack it could be worth verifying you are within limits.&lt;br /&gt;
 openstack limits show --absolute -f value | grep -E &#039;RAM|Cores&#039;&lt;br /&gt;
 openstack quota show --usage -c Resource -c Limit -c &amp;quot;In Use&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=count resources=&lt;br /&gt;
 openstack quota show --usage -c Resource -c &amp;quot;In Use&amp;quot; -f json | jq -r &#039;.[] | select(.Resource == &amp;quot;cores&amp;quot; or .Resource == &amp;quot;ram&amp;quot; or .Resource == &amp;quot;gigabytes&amp;quot; )| [.Resource, .&amp;quot;In Use&amp;quot;] | @tsv&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=get project id=&lt;br /&gt;
 openstack project list -f value -c ID&lt;br /&gt;
=manage s3/swift=&lt;br /&gt;
==create s3 credentials==&lt;br /&gt;
 openstack ec2 credentials create&lt;br /&gt;
 openstack ec2 credentials list&lt;br /&gt;
==Create s3 bucket==&lt;br /&gt;
 aws s3api create-bucket --bucket &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift post &amp;lt;bucket&amp;gt;&lt;br /&gt;
 openstack container create &amp;lt;bucket&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list s3 storage==&lt;br /&gt;
 swift list&lt;br /&gt;
 swift list &amp;lt;bucket&amp;gt;&lt;br /&gt;
 swift list --long &amp;lt;container&amp;gt;&lt;br /&gt;
 swift stat &amp;lt;bucket&amp;gt;&lt;br /&gt;
 aws s3api list-buckets&lt;br /&gt;
 openstack container list&lt;br /&gt;
==download file==&lt;br /&gt;
 swift download elastic_snapshots elasticsearch-snapshots/snap-symvtlMpRIetTyfCDsHIVg.dat&lt;br /&gt;
&lt;br /&gt;
==mount s3 bucket==&lt;br /&gt;
 export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID ; export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY ; export AWS_DEFAULT_REGION=us-west-2 ; s3fs -f -d openshift-region /mnt/openshift-region/ -o endpoint=europe-se-1 -o &amp;quot;host=https://object-eu-se-1a.binero.cloud&amp;quot; -o use_path_request_style&lt;br /&gt;
==copy file to s3==&lt;br /&gt;
 openstack server show $(openstack server list -f value | head -1 | awk &#039;{print $2}&#039;) -c project_id -f value&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 openstack configuration show -f json | jq -r &#039;.&amp;quot;auth.username&amp;quot;&#039;&lt;br /&gt;
=sort=&lt;br /&gt;
Sort on column name.&lt;br /&gt;
 openstack network list --sort-column Name&lt;br /&gt;
=selected columns=&lt;br /&gt;
Select column name only&lt;br /&gt;
 openstack server list -c Name -c Status -f table&lt;br /&gt;
&lt;br /&gt;
=create ssh public key(keypair)=&lt;br /&gt;
 openstack keypair create --public-key /home/abjorklund/.ssh/id_ed25519.pub abjorklund_id_ed25519&lt;br /&gt;
List keys&lt;br /&gt;
 openstack keypair list&lt;br /&gt;
Delete kaypair&lt;br /&gt;
 openstack keypair delete &amp;lt;keypair&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=create floating ip=&lt;br /&gt;
 openstack floating ip create europe-se-1-1a-net0&lt;br /&gt;
=remove floating ip=&lt;br /&gt;
 openstack floating ip delete 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign floating ip to port=&lt;br /&gt;
 openstack floating ip set --port abjorklund-01-h4sxm-ingress-port 193.93.251.233&lt;br /&gt;
=unassign floating ip to server=&lt;br /&gt;
 openstack server remove floating ip ocp-13-nkvgn-master-0 193.93.251.72&lt;br /&gt;
&lt;br /&gt;
=assign ip to server=&lt;br /&gt;
 openstack server add floating ip abjorklund_dns-lookup 193.93.248.34&lt;br /&gt;
&lt;br /&gt;
=restart server=&lt;br /&gt;
 openstack server reboot &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server reboot --hard &amp;lt;server&amp;gt;&lt;br /&gt;
=view events/log from server=&lt;br /&gt;
 openstack server event list &amp;lt;server&amp;gt;&lt;br /&gt;
 openstack server event show &amp;lt;server&amp;gt; &amp;lt;requestid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=recovery of server using iso=&lt;br /&gt;
Upload iso recovery.&lt;br /&gt;
 export ISO=ubuntu-22.04.4-live-server-amd64.iso ; openstack image create $ISO --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi --disk-format iso --file $ISO --private --progress&lt;br /&gt;
If special properties are not set then set them.&lt;br /&gt;
 openstack image set --property hw_rescue_device=cdrom --property hw_rescue_bus=scsi &amp;lt;image&amp;gt;&lt;br /&gt;
Boot server with recovery iso.&lt;br /&gt;
 export SERVER=&amp;lt;server&amp;gt; ISO=&amp;lt;iso&amp;gt;; openstack --os-compute-api-version 2.87 server rescue --image $ISO $SERVER&lt;br /&gt;
When done disable rescue mode.&lt;br /&gt;
 openstack server unrescue SERVER&lt;br /&gt;
&lt;br /&gt;
=subnet=&lt;br /&gt;
List subnets&lt;br /&gt;
 openstack subnet list&lt;br /&gt;
=hypervisor=&lt;br /&gt;
 Which underlying hypervisor is used.&lt;br /&gt;
 Not of your business. Ask worthy person.&lt;br /&gt;
=volume backups=&lt;br /&gt;
 openstack volume backup list&lt;br /&gt;
=create snapshot=&lt;br /&gt;
 SERVER=&amp;lt;server&amp;gt; openstack server image create --name &amp;quot;backup-${SERVER}-$(date_file)&amp;quot; ${SERVER}&lt;br /&gt;
=volume snapshot=&lt;br /&gt;
 openstack volume snapshot list&lt;br /&gt;
 openstack volume snapshot list -c ID -f value | while read SNAPSHOT ; do echo &#039;*&#039; $SNAPSHOT ; openstack volume snapshot delete $SNAPSHOT ; done&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 # openstack dns https://docs.binero.com/dns.html&lt;br /&gt;
 # List zones&lt;br /&gt;
 openstack zone list&lt;br /&gt;
 # Create zone &lt;br /&gt;
 openstack zone create --email anden@halfface.se binero.halfface.se.&lt;br /&gt;
 # Add entries.&lt;br /&gt;
 openstack recordset create --record &amp;lt;ip&amp;gt; --type A &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # list enries.&lt;br /&gt;
 openstack recordset list &amp;lt;zone&amp;gt;&lt;br /&gt;
 # Delete entries.&lt;br /&gt;
 openstack recordset delete &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
 # show values for one entry&lt;br /&gt;
 openstack recordset show &amp;lt;zone&amp;gt; &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Networking explained=&lt;br /&gt;
&lt;br /&gt;
 1. openstack_networking_network_v2&lt;br /&gt;
 - Purpose: Represents a network in OpenStack.&lt;br /&gt;
 - Interaction: This is the top-level network entity. You create a network to provide a layer 2 domain for your instances.&lt;br /&gt;
 &lt;br /&gt;
 2. openstack_networking_subnet_v2&lt;br /&gt;
 - Purpose: Represents a subnet within a network.&lt;br /&gt;
 - Interaction: A subnet is associated with a network. It defines a range of IP addresses, and optionally, DHCP settings.&lt;br /&gt;
 &lt;br /&gt;
 3. openstack_networking_router_v2&lt;br /&gt;
 - Purpose: Represents a virtual router.&lt;br /&gt;
 - Interaction: Routers are used to route traffic between different subnets or networks. They can also be used to provide external network access to instances.&lt;br /&gt;
 &lt;br /&gt;
 4. openstack_networking_router_interface_v2&lt;br /&gt;
 - Purpose: Connects a router to a subnet.&lt;br /&gt;
 - Interaction: This resource is used to add an interface to a router, effectively connecting the router to a subnet, enabling routing between that subnet and others.&lt;br /&gt;
 &lt;br /&gt;
 5. openstack_networking_port_v2&lt;br /&gt;
 - Purpose: Represents a port on a network.&lt;br /&gt;
 - Interaction: Ports are attachment points for devices (like instances) on a network. They have associated IP addresses and MAC addresses.&lt;br /&gt;
 &lt;br /&gt;
 6. openstack_networking_port_secgroup_associate_v2&lt;br /&gt;
 - Purpose: Associates security groups with a port.&lt;br /&gt;
 - Interaction: Security groups define the firewall rules applied to ports. Associating a security group with a port applies the security group&#039;s rules to that port.&lt;br /&gt;
 &lt;br /&gt;
 7. openstack_networking_secgroup_v2&lt;br /&gt;
 - Purpose: Represents a security group.&lt;br /&gt;
 - Interaction: Security groups contain a set of rules that define the allowed ingress and egress traffic to and from ports.&lt;br /&gt;
 &lt;br /&gt;
 8. openstack_networking_secgroup_rule_v2&lt;br /&gt;
 - Purpose: Represents a rule within a security group.&lt;br /&gt;
 - Interaction: Security group rules define specific ingress or egress traffic allowed to the instances associated with ports to which the security group is applied.&lt;br /&gt;
 &lt;br /&gt;
 9. openstack_networking_floatingip_v2&lt;br /&gt;
 - Purpose: Represents a floating IP.&lt;br /&gt;
 - Interaction: Floating IPs are IP addresses that can be dynamically associated with instances. They provide external access to instances.&lt;br /&gt;
 &lt;br /&gt;
 10. openstack_networking_floatingip_associate_v2&lt;br /&gt;
 - Purpose: Associates a floating IP with a port.&lt;br /&gt;
 - Interaction: This resource links a floating IP to a port, providing the instance with an external IP address that is accessible from outside the OpenStack cloud.&lt;br /&gt;
 &lt;br /&gt;
 Interaction Summary&lt;br /&gt;
 1. Network and Subnet Creation:&lt;br /&gt;
   - Create a network using `openstack_networking_network_v2`.&lt;br /&gt;
   - Create a subnet within this network using `openstack_networking_subnet_v2`.&lt;br /&gt;
 &lt;br /&gt;
 2. Router Configuration:&lt;br /&gt;
   - Create a router using `openstack_networking_router_v2`.&lt;br /&gt;
   - Add an interface to this router to connect it to a subnet using `openstack_networking_router_interface_v2`.&lt;br /&gt;
 &lt;br /&gt;
 3. Instance Connectivity:&lt;br /&gt;
   - Create a port on the network using `openstack_networking_port_v2`.&lt;br /&gt;
   - Attach this port to an instance.&lt;br /&gt;
 &lt;br /&gt;
 4. Security:&lt;br /&gt;
   - Create security groups using `openstack_networking_secgroup_v2`.&lt;br /&gt;
   - Define rules for the security group using `openstack_networking_secgroup_rule_v2`.&lt;br /&gt;
   - Associate security groups with the port using `openstack_networking_port_secgroup_associate_v2`.&lt;br /&gt;
 &lt;br /&gt;
 5. External Access:&lt;br /&gt;
   - Create a floating IP using `openstack_networking_floatingip_v2`.&lt;br /&gt;
   - Associate the floating IP with the port attached to the instance using `openstack_networking_floatingip_associate_v2`.&lt;br /&gt;
=Extend disk=&lt;br /&gt;
Look at usage from beginning.&lt;br /&gt;
 df -lh&lt;br /&gt;
Extend partition partprobe&lt;br /&gt;
 openstack volume set --size &amp;lt;new_size&amp;gt; &amp;lt;volume&amp;gt; --os-volume-api-version 3.42&lt;br /&gt;
Grow partition that you intend to grow. This part can be ignored if using disk as raw partion(/dev/sd?)&lt;br /&gt;
 growpart /dev/sdb 1&lt;br /&gt;
Resize filesystem.&lt;br /&gt;
 resize2fs /dev/sdb1&lt;br /&gt;
Look at usage after extend.&lt;br /&gt;
 df -lh&lt;br /&gt;
=affinity=&lt;br /&gt;
 affinity           Put servers on same hypervisor.&lt;br /&gt;
 anti-affinity      Dont put servers on same hypervisor.&lt;br /&gt;
 soft-affinity      Put servers on same hypervisor if possible.&lt;br /&gt;
 soft-anti-affinity Put server on hypervisor if possible&lt;br /&gt;
&lt;br /&gt;
=Are hosts located on same hypervisor=&lt;br /&gt;
 openstack server list -f value -c ID | while read i ; do openstack server show $i -f value -c hostId -c name | xargs ; done | sort -n&lt;br /&gt;
=Define how server should be handled regarding affinity=&lt;br /&gt;
 openstack server group list&lt;br /&gt;
==create server group name with soft affinity==&lt;br /&gt;
 openstack server group create --policy soft-anti-affinity &amp;lt;name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install openstack cli on rhel7/8=&lt;br /&gt;
 yum install centos-release-openstack-train.noarch&lt;br /&gt;
 yum install python-openstackclient&lt;br /&gt;
 sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
 sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
=remove network with dependencies=&lt;br /&gt;
 export ROUTER=93b6d9c1-67db-4e04-9aaf-dad208def3c4&lt;br /&gt;
 export NETWORK=9b86febc-f46f-4990-96c8-ef2e4bc8e139&lt;br /&gt;
 openstack router remove subnet ${ROUTER} $(openstack route show ${ROUTER} -f json | jq -r &#039;.interfaces_info[].subnet_id&#039;)&lt;br /&gt;
 openstack router unset --external-gateway ${ROUTER}&lt;br /&gt;
 for port in $(openstack port list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
   openstack port delete &amp;quot;$port&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 for subnet in $(openstack subnet list --network ${NETWORK} -f value -c ID); do&lt;br /&gt;
    openstack subnet delete &amp;quot;$subnet&amp;quot;&lt;br /&gt;
 done&lt;br /&gt;
 openstack network delete ${NETWORK}&lt;br /&gt;
 openstack router delete ${ROUTER}&lt;br /&gt;
=delete nic/network from server=&lt;br /&gt;
 openstack port list --server &amp;lt;vm-name-or-id&amp;gt;&lt;br /&gt;
 openstack server remove port &amp;lt;vm-name-or-id&amp;gt; &amp;lt;port-id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=openstack version=&lt;br /&gt;
openstack major miro version.&lt;br /&gt;
 openstack version show&lt;br /&gt;
 openstack version show -f json | jq -r &#039;.[] | select(.Status == &amp;quot;CURRENT&amp;quot;) | [.&amp;quot;Service Type&amp;quot;, .Version, .Endpoint]|@tsv&#039; | column_tab&lt;br /&gt;
=download volume to you where you want=&lt;br /&gt;
Create an image.&lt;br /&gt;
 openstack image create --volume &amp;lt;volume name&amp;gt; --private --progress &amp;lt;image name&amp;gt;&lt;br /&gt;
Download it using.&lt;br /&gt;
 openstack image save --file &amp;lt;local filename&amp;gt; &amp;lt;image name&amp;gt;&lt;br /&gt;
=application credentials=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Login via working cli session. Create application credentials with read permissions. Create config file with output from the command.&lt;br /&gt;
openstack application credential create reader_3 --role reader -c id -c secret -f value | xargs | while read ID SECRET ; do cat &amp;gt; clouds.yaml &amp;lt;&amp;lt;EOF&lt;br /&gt;
clouds:&lt;br /&gt;
  ${OS_CLOUD}:&lt;br /&gt;
    auth_type: &amp;quot;v3applicationcredential&amp;quot;&lt;br /&gt;
    auth:&lt;br /&gt;
      auth_url: https://auth.binero.cloud:5000&lt;br /&gt;
      application_credential_id: &amp;quot;${ID}&amp;quot;&lt;br /&gt;
      application_credential_secret: &amp;quot;${SECRET}&amp;quot;&lt;br /&gt;
    region_name: europe-se-1&lt;br /&gt;
    interface: public&lt;br /&gt;
    identity_api_version: 3&lt;br /&gt;
    volume_api_version: 3&lt;br /&gt;
EOF&lt;br /&gt;
done&lt;br /&gt;
# To be able to use above config file you have to set OS_CLOUD variable and have the clouds.yaml file in either your working directory or  ~/.config/openstack/clouds.yaml.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=manage certs=&lt;br /&gt;
==List secrets==&lt;br /&gt;
 openstack secret list&lt;br /&gt;
==Add new cert. Content type p12== &lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
 openstack secret store --name star-sulzer-com-lb-cert-2026-10-23 --secret-type opaque --payload-content-type &#039;application/octet-stream&#039; --payload-content-encoding base64 --payload &amp;quot;$(base64 /temp/sulzer.p12)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Download cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429 --payload_content_type &#039;application/octet-stream&#039; --file /tmp/tmp&lt;br /&gt;
==Look at cert==&lt;br /&gt;
 openstack secret get https://api-eu-se-1.binero.cloud:9311/v1/secrets/8c0e090c-6cf4-4767-94ce-a55417e56429   --payload_content_type &#039;application/octet-stream&#039;   --payload -f value | python3 -c &amp;quot;import sys; sys.stdout.buffer.write(eval(sys.stdin.read()))&amp;quot; | openssl pkcs12 -nodes -info -passin pass:&lt;br /&gt;
==Add cert to listener==&lt;br /&gt;
 openstack loadbalancer listener set &amp;lt;listener_id&amp;gt; --default-tls-container-ref &amp;lt;certificate_secret_id&amp;gt;&lt;br /&gt;
=dhcp options provided by cloud-init=&lt;br /&gt;
 /var/log/cloud-init.log&lt;br /&gt;
=List hypervisor=&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;.[]|select(.State == &amp;quot;up&amp;quot;)|.&amp;quot;Hypervisor Hostname&amp;quot;&#039; | sort -n | while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;br /&gt;
 openstack hypervisor list -f json | jq -r &#039;[.[] | select(.State == &amp;quot;up&amp;quot;)]  | sort_by(.&amp;quot;Hypervisor Hostname&amp;quot; | match(&amp;quot;([0-9]+)&amp;quot;).captures[0].string | tonumber) | .[].&amp;quot;Hypervisor Hostname&amp;quot;&#039;| while read i ; do echo &amp;quot;$i(){ ssh root@$i &amp;quot;&#039;&amp;quot;${@}&amp;quot; ; }&#039; ; done&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Drac&amp;diff=16593</id>
		<title>Drac</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Drac&amp;diff=16593"/>
		<updated>2026-03-26T09:03:06Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* List virtual disk */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=get system information=&lt;br /&gt;
 racadm getsysinfo&lt;br /&gt;
=reset drac=&lt;br /&gt;
 racadm racreset soft&lt;br /&gt;
=racadm(Manage dell sever via ssh idrac)=&lt;br /&gt;
==List system events.==&lt;br /&gt;
 racadm getsel&lt;br /&gt;
==How many event in log==&lt;br /&gt;
 racadm getsel -i&lt;br /&gt;
==Read 7 event from line 10.==&lt;br /&gt;
 racadm getsel -s 10 -c 7&lt;br /&gt;
==Read lifecycle log==&lt;br /&gt;
 racadm lclog view&lt;br /&gt;
==Read lifecycle logs of warning critical version.==&lt;br /&gt;
 racadm lclog view -s Warning,Critical -n 5&lt;br /&gt;
==Reset idrac==&lt;br /&gt;
 racadm racreset -f&lt;br /&gt;
==Version of idrac==&lt;br /&gt;
 racadm getversion&lt;br /&gt;
==Is sol enabled==&lt;br /&gt;
 racadm get iDRAC.IPMISOL&lt;br /&gt;
==Login via sol/serial==&lt;br /&gt;
 racadm console com2&lt;br /&gt;
==Short info about system==&lt;br /&gt;
 racadm getsysinfo&lt;br /&gt;
==Long output inventory==&lt;br /&gt;
 hwinventory&lt;br /&gt;
==View settings==&lt;br /&gt;
 racadm get BIOS.ProcSettings.ProcVirtualization&lt;br /&gt;
==Set value==&lt;br /&gt;
 racadm set BIOS.ProcSettings.ProcVirtualization Disabled&lt;br /&gt;
 [Key=BIOS.Setup.1-1#ProcSettings]&lt;br /&gt;
 RAC1017: Successfully modified the object value and the change is in&lt;br /&gt;
        pending state.&lt;br /&gt;
        To apply modified value, create a configuration job and reboot&lt;br /&gt;
        the system. To create the commit and reboot jobs, use &amp;quot;jobqueue&amp;quot;&lt;br /&gt;
        command. For more information about the &amp;quot;jobqueue&amp;quot; command, see RACADM&lt;br /&gt;
        help.&lt;br /&gt;
==Cold restart (hard reset)==&lt;br /&gt;
 racadm serveraction hardreset&lt;br /&gt;
==Full power cycle (off → on)==&lt;br /&gt;
 racadm serveraction powercycle&lt;br /&gt;
==Force shutdown and power-up manually==&lt;br /&gt;
 racadm serveraction powerdown&lt;br /&gt;
 racadm serveraction powerup&lt;br /&gt;
==look at state of disks==&lt;br /&gt;
 racadm storage get pdisks -o -p State,Name,Size,MediaType&lt;br /&gt;
==List virtual disk==&lt;br /&gt;
 racadm storage get vdisks -o&lt;br /&gt;
==change password==&lt;br /&gt;
Find user that you want to change password on.&lt;br /&gt;
 racadm get iDRAC.Users.2.UserName&lt;br /&gt;
Set password on user&lt;br /&gt;
 racadm set iDRAC.Users.2.Password &amp;lt;password&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16592</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16592"/>
		<updated>2026-03-24T13:55:46Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Batman */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16591</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16591"/>
		<updated>2026-03-24T13:55:25Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Superman */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16590</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16590"/>
		<updated>2026-03-24T13:54:50Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Suricat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16589</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16589"/>
		<updated>2026-03-24T13:54:18Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Suricat */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16588</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16588"/>
		<updated>2026-03-24T13:52:57Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Dagger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Jq&amp;diff=16587</id>
		<title>Jq</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Jq&amp;diff=16587"/>
		<updated>2026-03-24T07:16:23Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Find entries with a length greater than 0 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jq=&lt;br /&gt;
==how many stores are actually in there:==&lt;br /&gt;
 $ cat file.json | jq &#039;length&#039;&lt;br /&gt;
 1134&lt;br /&gt;
==retrieves the “name” field of each element of the input array.==&lt;br /&gt;
 cat file.json | jq &#039;.[] | .name&#039;&lt;br /&gt;
 &amp;quot;Graz&amp;quot;&lt;br /&gt;
 &amp;quot;Baden&amp;quot;&lt;br /&gt;
 &amp;quot;Zürich&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
==Give us first store.==&lt;br /&gt;
 jq &#039;.[0]&#039;&lt;br /&gt;
==Select specific fields==&lt;br /&gt;
 jq &#039;.[] | {eta: .eta, ticketID: .ticketID}&#039;&lt;br /&gt;
==Select specific files shortended.==&lt;br /&gt;
 jq &#039;.[] | {eta, ticketID}&#039;&lt;br /&gt;
==url encode a string.==&lt;br /&gt;
 jq -sRr @uri &amp;lt;&amp;lt;&amp;lt; &amp;quot;${IPRADAR_SERVICE}&amp;quot; | sed &#039;s/%0A$//g&#039;&lt;br /&gt;
==Pick extra_vars under results in raw format.==&lt;br /&gt;
 jq -r &#039;.results[]|.extra_vars&#039;&lt;br /&gt;
==Select array name based on content.==&lt;br /&gt;
 jq -r &#039;.[]|select(.name==&amp;quot;the name you want to print&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
==Display keys==&lt;br /&gt;
 jq &#039;keys&#039;&lt;br /&gt;
==Get keys and expand base64 encoded values==&lt;br /&gt;
 oc get secrets -n kafka postgres-cdc-credentials -o json | jq &#039;.data | map_values(@base64d)&#039;&lt;br /&gt;
&lt;br /&gt;
==Select specific key==&lt;br /&gt;
  jq -r &#039;. | {all}&#039;&lt;br /&gt;
==select key based on content==&lt;br /&gt;
 jq &#039;map_values(select(.group_declare == &amp;quot;true&amp;quot;))&#039; /tmp/tmp&lt;br /&gt;
Select values in a chain.&lt;br /&gt;
 oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;&lt;br /&gt;
Select multiple strings&lt;br /&gt;
 |select(.name == &amp;quot;&amp;lt;string_1&amp;gt;&amp;quot; or .name == &amp;quot;string_2&amp;quot; or .name == &amp;quot;string_3&amp;quot; or .name == &amp;quot;string_4&amp;quot;)|&lt;br /&gt;
&lt;br /&gt;
==select with regex against string in output==&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039;&lt;br /&gt;
==select where value is not null==&lt;br /&gt;
 select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)&lt;br /&gt;
==search if containing string==&lt;br /&gt;
 jq &#039;.[] | select(.original_resource_id | contains(&amp;quot;0dbc59e0-f66f-40b5-a407-ca93951a6c39&amp;quot;))&#039;&lt;br /&gt;
&lt;br /&gt;
=create list of all keys in array.=&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
 echo &#039;{&lt;br /&gt;
   &amp;quot;data&amp;quot;: {&lt;br /&gt;
     &amp;quot;aggregator_openapi_v2_regeneration_count&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;alertmanager_alerts&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&#039; | jq -r &#039;.data | keys | flatten[]&#039;&lt;br /&gt;
 aggregator_openapi_v2_regeneration_count&lt;br /&gt;
 alertmanager_alerts&lt;br /&gt;
=convert yaml too json=&lt;br /&gt;
 dnf install python3-pyyaml&lt;br /&gt;
 oc get node -o yaml | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq .&lt;br /&gt;
=jwt=&lt;br /&gt;
 jq -R &#039;split(&amp;quot;.&amp;quot;) | .[0],.[1] | @base64d | fromjson&#039; &amp;lt;file&amp;gt;&lt;br /&gt;
=join results=&lt;br /&gt;
 oc get endpoints -o json -A | jq -r &#039;.items[].subsets[] | [.addresses[0].ip,.ports[0].port]|join(&amp;quot;:&amp;quot;)&#039;&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
=Get key valuepair base64 decoded in text only format=&lt;br /&gt;
 oc get secrets -n kafka postgres-cdc-credentials -o json | jq -r &#039;.data | map_values(@base64d) | to_entries[] | &amp;quot;\(.key)\t\(.value)&amp;quot;&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
=compact format=&lt;br /&gt;
 jq -c .&lt;br /&gt;
=case insentive search=&lt;br /&gt;
 jq select(.severity | ascii_downcase == &amp;quot;warning&amp;quot;) | select(.alertstate | ascii_downcase == &amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
=Sort by lastTransitionTime.=&lt;br /&gt;
 oc get network.config cluster -o=json | jq &#039;.status.conditions | sort_by(.lastTransitionTime)&#039;&lt;br /&gt;
=sort complete json=&lt;br /&gt;
 jq --sort-keys .&lt;br /&gt;
=dont print null=&lt;br /&gt;
 oc get argocd -n $ARGOCD_NAMESPACE -o json | jq -r &#039;.items[].spec.disableAdmin // empty&#039;&lt;br /&gt;
=Find entries with a length greater than 0=&lt;br /&gt;
 jq -r &#039;.[] | select(.login.fido2Credentials | length &amp;gt; 0)&#039; &amp;lt;json&amp;gt;&lt;br /&gt;
=Find entries where value is not=&lt;br /&gt;
 jq &#039;.[]|select(.login.fido2Credentials != [])&#039; &amp;lt;json&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Jq&amp;diff=16586</id>
		<title>Jq</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Jq&amp;diff=16586"/>
		<updated>2026-03-24T07:14:57Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* dont print null */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=jq=&lt;br /&gt;
==how many stores are actually in there:==&lt;br /&gt;
 $ cat file.json | jq &#039;length&#039;&lt;br /&gt;
 1134&lt;br /&gt;
==retrieves the “name” field of each element of the input array.==&lt;br /&gt;
 cat file.json | jq &#039;.[] | .name&#039;&lt;br /&gt;
 &amp;quot;Graz&amp;quot;&lt;br /&gt;
 &amp;quot;Baden&amp;quot;&lt;br /&gt;
 &amp;quot;Zürich&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
==Give us first store.==&lt;br /&gt;
 jq &#039;.[0]&#039;&lt;br /&gt;
==Select specific fields==&lt;br /&gt;
 jq &#039;.[] | {eta: .eta, ticketID: .ticketID}&#039;&lt;br /&gt;
==Select specific files shortended.==&lt;br /&gt;
 jq &#039;.[] | {eta, ticketID}&#039;&lt;br /&gt;
==url encode a string.==&lt;br /&gt;
 jq -sRr @uri &amp;lt;&amp;lt;&amp;lt; &amp;quot;${IPRADAR_SERVICE}&amp;quot; | sed &#039;s/%0A$//g&#039;&lt;br /&gt;
==Pick extra_vars under results in raw format.==&lt;br /&gt;
 jq -r &#039;.results[]|.extra_vars&#039;&lt;br /&gt;
==Select array name based on content.==&lt;br /&gt;
 jq -r &#039;.[]|select(.name==&amp;quot;the name you want to print&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
==Display keys==&lt;br /&gt;
 jq &#039;keys&#039;&lt;br /&gt;
==Get keys and expand base64 encoded values==&lt;br /&gt;
 oc get secrets -n kafka postgres-cdc-credentials -o json | jq &#039;.data | map_values(@base64d)&#039;&lt;br /&gt;
&lt;br /&gt;
==Select specific key==&lt;br /&gt;
  jq -r &#039;. | {all}&#039;&lt;br /&gt;
==select key based on content==&lt;br /&gt;
 jq &#039;map_values(select(.group_declare == &amp;quot;true&amp;quot;))&#039; /tmp/tmp&lt;br /&gt;
Select values in a chain.&lt;br /&gt;
 oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;&lt;br /&gt;
Select multiple strings&lt;br /&gt;
 |select(.name == &amp;quot;&amp;lt;string_1&amp;gt;&amp;quot; or .name == &amp;quot;string_2&amp;quot; or .name == &amp;quot;string_3&amp;quot; or .name == &amp;quot;string_4&amp;quot;)|&lt;br /&gt;
&lt;br /&gt;
==select with regex against string in output==&lt;br /&gt;
 openstack command list -f json | jq -r &#039;.[].Commands[]|select (match(&amp;quot;list$&amp;quot;))&#039;&lt;br /&gt;
==select where value is not null==&lt;br /&gt;
 select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)&lt;br /&gt;
==search if containing string==&lt;br /&gt;
 jq &#039;.[] | select(.original_resource_id | contains(&amp;quot;0dbc59e0-f66f-40b5-a407-ca93951a6c39&amp;quot;))&#039;&lt;br /&gt;
&lt;br /&gt;
=create list of all keys in array.=&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
 echo &#039;{&lt;br /&gt;
   &amp;quot;data&amp;quot;: {&lt;br /&gt;
     &amp;quot;aggregator_openapi_v2_regeneration_count&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
        }&lt;br /&gt;
     ],&lt;br /&gt;
     &amp;quot;alertmanager_alerts&amp;quot;: [&lt;br /&gt;
       {&lt;br /&gt;
         &amp;quot;unit&amp;quot;: &amp;quot;&amp;quot;&lt;br /&gt;
       }&lt;br /&gt;
     ]&lt;br /&gt;
   }&lt;br /&gt;
 }&#039; | jq -r &#039;.data | keys | flatten[]&#039;&lt;br /&gt;
 aggregator_openapi_v2_regeneration_count&lt;br /&gt;
 alertmanager_alerts&lt;br /&gt;
=convert yaml too json=&lt;br /&gt;
 dnf install python3-pyyaml&lt;br /&gt;
 oc get node -o yaml | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq .&lt;br /&gt;
=jwt=&lt;br /&gt;
 jq -R &#039;split(&amp;quot;.&amp;quot;) | .[0],.[1] | @base64d | fromjson&#039; &amp;lt;file&amp;gt;&lt;br /&gt;
=join results=&lt;br /&gt;
 oc get endpoints -o json -A | jq -r &#039;.items[].subsets[] | [.addresses[0].ip,.ports[0].port]|join(&amp;quot;:&amp;quot;)&#039;&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
=Get key valuepair base64 decoded in text only format=&lt;br /&gt;
 oc get secrets -n kafka postgres-cdc-credentials -o json | jq -r &#039;.data | map_values(@base64d) | to_entries[] | &amp;quot;\(.key)\t\(.value)&amp;quot;&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
=compact format=&lt;br /&gt;
 jq -c .&lt;br /&gt;
=case insentive search=&lt;br /&gt;
 jq select(.severity | ascii_downcase == &amp;quot;warning&amp;quot;) | select(.alertstate | ascii_downcase == &amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
=Sort by lastTransitionTime.=&lt;br /&gt;
 oc get network.config cluster -o=json | jq &#039;.status.conditions | sort_by(.lastTransitionTime)&#039;&lt;br /&gt;
=sort complete json=&lt;br /&gt;
 jq --sort-keys .&lt;br /&gt;
=dont print null=&lt;br /&gt;
 oc get argocd -n $ARGOCD_NAMESPACE -o json | jq -r &#039;.items[].spec.disableAdmin // empty&#039;&lt;br /&gt;
=Find entries with a length greater than 0=&lt;br /&gt;
 jq -r &#039;.[] | select(.login.fido2Credentials | length &amp;gt; 0)&#039; /tmp/bw_halfface&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16585</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16585"/>
		<updated>2026-03-23T15:38:12Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* serverGroupName/server_groups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
=delete operator=&lt;br /&gt;
 export OPERATOR=gitops ; oc get csv,subscriptions -n openshift-operators | grep &amp;quot;${OPERATOR}&amp;quot; | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get $i -n openshift-operators &amp;lt;/dev/null; echo oc delete $i ; done ; oc get installplan -n openshift-operators --sort-by=.metadata.creationTimestamp | grep &amp;quot;${OPERATOR}&amp;quot; | tail -n1 | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get installplan $i -n openshift-operators &amp;lt;/dev/null ; echo oc delete installplan $i; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v$(oc version -o json | jq -r .openshiftVersion | grep -o &#039;^[0-9]*\.[0-9]*&#039;)&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=When creating new machines. Os template comes from the following values=&lt;br /&gt;
 oc get machinesets -o name -n openshift-machine-api | while read i ; do echo $i $( oc get -n openshift-machine-api $i -o json | jq -r &#039;.spec.template.spec.providerSpec.value|.rootVolume.sourceUUID,.template&#039; ) ; done&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Terraform&amp;diff=16584</id>
		<title>Terraform</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Terraform&amp;diff=16584"/>
		<updated>2026-03-20T15:30:31Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* formatting check and fix lint */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=what does it mean=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aws_iam_role_policy_attachment  Attaches a Managed IAM Policy to an IAM role&lt;br /&gt;
coalesce                        Function. Takes any number of arguments and returns the first one that isn&#039;t null or an empty string.&lt;br /&gt;
locals.tf                       Locals also known as local values or local variables, locals provide the means for expressing and storing values in the context of a specific code block.&lt;br /&gt;
variables.tf                    variable &amp;quot;cluster_name&amp;quot; { description = &amp;quot;The name of the kubernetes cluster&amp;quot; type = string }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=install terraform=&lt;br /&gt;
 sudo dnf install -y dnf-plugins-core&lt;br /&gt;
 sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo&lt;br /&gt;
 sudo dnf install terraform&lt;br /&gt;
Hardcoded install&lt;br /&gt;
 cd /tmp/ ; curl -sk -L https://releases.hashicorp.com/terraform/1.5.5/terraform_1.5.5_linux_amd64.zip -O ; cd /usr/bin/ ; sudo unzip /tmp/terraform_1.5.5_linux_amd64.zip&lt;br /&gt;
&lt;br /&gt;
=file completion=&lt;br /&gt;
 complete -C /usr/bin/terraform terraform&lt;br /&gt;
=Initiate terraform=&lt;br /&gt;
 terraform init&lt;br /&gt;
&lt;br /&gt;
=plan=&lt;br /&gt;
Creates an execution plan, which lets you preview the changes that Terraform plans to make to your infrastructure.&lt;br /&gt;
 terraform plan&lt;br /&gt;
&lt;br /&gt;
=show=&lt;br /&gt;
Show what has been done.&lt;br /&gt;
 terraform show&lt;br /&gt;
 terraform show -json&lt;br /&gt;
&lt;br /&gt;
=state=&lt;br /&gt;
list resources within a Terraform state.&lt;br /&gt;
 terraform state list&lt;br /&gt;
Show more info about individual entity.&lt;br /&gt;
 terraform state show openstack_networking_network_v2.net3&lt;br /&gt;
Import state&lt;br /&gt;
 terraform import module.kafka_eks.kubernetes_manifest.configmap_kafka_akhq &amp;quot;apiVersion=v1,kind=ConfigMap,namespace=kafka,name=akhq&amp;quot;&lt;br /&gt;
 terraform import module.kafka_eks.helm_release.akhq kafka/akhq&lt;br /&gt;
Name of statefile&lt;br /&gt;
 terraform.tfstate&lt;br /&gt;
=state nuke=&lt;br /&gt;
 rm -rf .terraform* terraform*&lt;br /&gt;
==save and restore s3 state==&lt;br /&gt;
Save state&lt;br /&gt;
 terraform state pull &amp;gt; terraform.tfstate.backup-$(date +%F_%H-%M-%S)&lt;br /&gt;
Restore state&lt;br /&gt;
 terraform state push terraform.tfstate.backup-YYYYMMDDHHMMSS&lt;br /&gt;
&lt;br /&gt;
=apply=&lt;br /&gt;
Performs a plan just like terraform plan does, but then actually carries out the planned changes to each resource using the relevant infrastructure provider&#039;s API.&lt;br /&gt;
 terraform apply&lt;br /&gt;
=debug=&lt;br /&gt;
 TF_LOG=trace terraform init&lt;br /&gt;
 TRACE DEBUG INFO WARN ERROR&lt;br /&gt;
=terraform output=&lt;br /&gt;
 Reads and output variable from a Terraform state file&lt;br /&gt;
=cloud-init=&lt;br /&gt;
==set password on user==&lt;br /&gt;
 ssh_pwauth: false&lt;br /&gt;
 chpasswd:&lt;br /&gt;
   expire: false&lt;br /&gt;
   users:&lt;br /&gt;
     - name: root&lt;br /&gt;
       password: password&lt;br /&gt;
       type: text&lt;br /&gt;
=tofu=&lt;br /&gt;
Apply without asking.&lt;br /&gt;
 tofu apply -auto-approve&lt;br /&gt;
destroy without asking(delete, rm)&lt;br /&gt;
 tofu destroy -auto-approve&lt;br /&gt;
&lt;br /&gt;
=tfk8s=&lt;br /&gt;
contvert k8s yaml to terraform&lt;br /&gt;
 tfk8s --strip --file &amp;lt;input&amp;gt; --output &amp;lt;output&amp;gt;&lt;br /&gt;
=dynamodb=&lt;br /&gt;
List tables&lt;br /&gt;
 aws dynamodb list-tables&lt;br /&gt;
Look at table.&lt;br /&gt;
 aws dynamodb scan --table-name &amp;lt;table&amp;gt;&lt;br /&gt;
Delete row from table.&lt;br /&gt;
 aws dynamodb delete-item --table-name &amp;lt;your-lock-table&amp;gt; --key &#039;{&amp;quot;LockID&amp;quot;: {&amp;quot;S&amp;quot;: &amp;quot;&amp;lt;lock-id&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
=remove lock=&lt;br /&gt;
 terraform force-unlock 2f0bda9f-f6fd-0d82-5b8f-0fb6e2b1defb&lt;br /&gt;
&lt;br /&gt;
=Remove terraform infrastructure=&lt;br /&gt;
 terraform destroy&lt;br /&gt;
 terraform destroy -auto-approve -refresh=false -target=libvirt_domain.crash-test-dummy&lt;br /&gt;
&lt;br /&gt;
=formatting check and fix lint=&lt;br /&gt;
 terraform fmt -recursive&lt;br /&gt;
=run specifig tf files=&lt;br /&gt;
Only use one module&lt;br /&gt;
 terraform apply -target=module.eks&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Commands&amp;diff=16583</id>
		<title>Commands</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Commands&amp;diff=16583"/>
		<updated>2026-03-19T13:54:18Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* curl ipv6 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=7za=&lt;br /&gt;
decompress file&lt;br /&gt;
 7za e myfiles.7z&lt;br /&gt;
=ab=&lt;br /&gt;
apache benchmarking&lt;br /&gt;
 ab -n 50 https://www.halfface.se/photos/&lt;br /&gt;
 ab -n 1000 -c 10 https://www.halfface.se/wiki/index.php/Halfface&lt;br /&gt;
&lt;br /&gt;
=abcde=&lt;br /&gt;
Rip cd.&lt;br /&gt;
 abcde&lt;br /&gt;
=adb android=&lt;br /&gt;
 # install adb&lt;br /&gt;
 dnf install android-tools&lt;br /&gt;
 # enable debug. On phone. Settings. about phone. build version. Click until prompted. Enable debug via selector.&lt;br /&gt;
 # Connect phone via usb.&lt;br /&gt;
 # List phones.&lt;br /&gt;
 adb devices&lt;br /&gt;
 # Get shell on phone.&lt;br /&gt;
 adb shell&lt;br /&gt;
 # list installed packages.&lt;br /&gt;
 pm list packages -f&lt;br /&gt;
 adb shell pm list packages -f | grep game&lt;br /&gt;
 # Uninstall&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gos&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gametools&lt;br /&gt;
 adb shell pm disable-user --user 0 com.sec.android.app.samsungapps&lt;br /&gt;
&lt;br /&gt;
=agrep=&lt;br /&gt;
Aproximate grep. 3 differences from andreas&lt;br /&gt;
 agrep -3 andreas /var/log/messages&lt;br /&gt;
=alacritty(Terminal emulator hw accellerated)=&lt;br /&gt;
Terminal copy mode.&lt;br /&gt;
 CTRL + SHIFT + SPACE&lt;br /&gt;
=alsactl=&lt;br /&gt;
Reload alsa drivers&lt;br /&gt;
 systemctl restart alsa-state&lt;br /&gt;
 sudo alsactl restore&lt;br /&gt;
&lt;br /&gt;
=alternatives=&lt;br /&gt;
 alternatives --set mta /usr/sbin/sendmail.postfix&lt;br /&gt;
 sudo alternatives --config java&lt;br /&gt;
&lt;br /&gt;
=antiword=&lt;br /&gt;
 antiword bad.doc &amp;gt; pure.txt&lt;br /&gt;
&lt;br /&gt;
=arecord=&lt;br /&gt;
List soundcards.&lt;br /&gt;
 arecord -l&lt;br /&gt;
Chose source.&lt;br /&gt;
 alsamixer&lt;br /&gt;
Create mp3 from source.&lt;br /&gt;
 arecord -f cd -d 5 -t raw | lame -x -r - out.mp3&lt;br /&gt;
=arp-scan=&lt;br /&gt;
Scan ip addresses on local subnet&lt;br /&gt;
 arp-scan --localnet | sort -n -k4 -t. | grep ^[0-9]&lt;br /&gt;
&lt;br /&gt;
=at=&lt;br /&gt;
Run command at specific time. Look at queue.&lt;br /&gt;
 echo &#039;/usr/bin/espeak -s120 &amp;quot;I will say this only once.&amp;quot;&#039; | at -t $(date +%Y%m%d%H%M --date=&amp;quot;+2 min&amp;quot;)&lt;br /&gt;
 atq&lt;br /&gt;
List at jobs.&lt;br /&gt;
 atq ; atq | awk &#039;{print $1}&#039; | while read i ; do echo &#039;***&#039; $i ; at -c $i 2&amp;gt;&amp;amp;1 | tail -3 | head -1 ; done&lt;br /&gt;
 2       Sun May 17 04:00:00 2020 a root&lt;br /&gt;
 *** 2&lt;br /&gt;
 /usr/bin/systemctl restart springboot_uc_supportrouter.service&lt;br /&gt;
&lt;br /&gt;
=authselect=&lt;br /&gt;
Redhat command to manage connection to underlying services and features.&lt;br /&gt;
 # To change content of nsswitch.conf do to your used profile.&lt;br /&gt;
 vim /usr/share/authselect/default/local/nsswitch.conf&lt;br /&gt;
 authselect select local --force&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
 base64 -d /tmp/html | elinks --dump | less -ISRM&lt;br /&gt;
No wrapping&lt;br /&gt;
 base64 --wrap=0&lt;br /&gt;
 base64 -w 0&lt;br /&gt;
=bash=&lt;br /&gt;
curl&lt;br /&gt;
 exec 3&amp;lt;&amp;gt;/dev/tcp/localhost/8080 ; echo -e &amp;quot;GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n&amp;quot; &amp;gt;&amp;amp;3 ; cat &amp;lt;&amp;amp;3&lt;br /&gt;
&lt;br /&gt;
=bbk_cli_...=&lt;br /&gt;
Bredbandskollen via cli.&lt;br /&gt;
 bbk_cli_linux_amd64-1.0&lt;br /&gt;
&lt;br /&gt;
=bc=&lt;br /&gt;
Simplify using bercerly calculator&lt;br /&gt;
 calc(){ echo -e &amp;quot;scale=8\n${@}\nquit\n&amp;quot; | bc ; }&lt;br /&gt;
To the power of(upphöjt i)&lt;br /&gt;
 2^10 = 1024&lt;br /&gt;
scientific (aka exponential) notation&lt;br /&gt;
 echo 1.6945991213315015e+09 | sed -E &#039;s/([+-]?[0-9.]+)[eE]\+?(-?)([0-9]+)/(\1*10^\2\3)/g&#039; | bc&lt;br /&gt;
=bitwarden=&lt;br /&gt;
 # Install bw.&lt;br /&gt;
 curl -L -o /tmp/bw.zip &#039;https://vault.bitwarden.com/download/?app=cli&amp;amp;platform=linux&#039; ; (cd /usr/local/bin ; sudo unzip -o /tmp/bw.zip)&lt;br /&gt;
 # Remove bitwarden config.&lt;br /&gt;
 unset BW_CLIENTID BW_CLIENTSECRET BW_SESSION&lt;br /&gt;
 \rm -r /home/abjorklund/.config/Bitwarden*&lt;br /&gt;
 # Set bitwarden server.&lt;br /&gt;
 bw config server https://halfface.se/vaultwarden/&lt;br /&gt;
 # api login&lt;br /&gt;
 bw login --apikey&lt;br /&gt;
 # sso login. When web server opens write &amp;quot;Binero SSO&amp;quot;&lt;br /&gt;
 bw login&lt;br /&gt;
 # Unlock&lt;br /&gt;
 bw unlock&lt;br /&gt;
 # Sync from server.&lt;br /&gt;
 bw sync&lt;br /&gt;
 # List items.&lt;br /&gt;
 bw list items | jq -r &#039;.[].name&#039;&lt;br /&gt;
 # get totp&lt;br /&gt;
 bw_halfface get totp ginatricot_user&lt;br /&gt;
 # get login info.&lt;br /&gt;
 bw get item bareos-webui | jq .login&lt;br /&gt;
 # which version&lt;br /&gt;
 curl https://halfface.se/vaultwarden/api/version&lt;br /&gt;
 podman image inspect docker.io/vaultwarden/server | jq -r &#039;.[].Config.Labels.&amp;quot;org.opencontainers.image.version&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=bluetoothctl=&lt;br /&gt;
Enable bluetooth&lt;br /&gt;
 sudo systemctl enable bluetooth --now&lt;br /&gt;
Scan&lt;br /&gt;
 bluetoothctl scan on&lt;br /&gt;
Pair&lt;br /&gt;
 bluetoothctl pair &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Connect&lt;br /&gt;
 bluetoothctl connect &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Trust&lt;br /&gt;
 bluetoothctl trust &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Remove&lt;br /&gt;
 bluetoothctl remove &amp;lt;MAC address&amp;gt;&lt;br /&gt;
List paired devices&lt;br /&gt;
 bluetoothctl devices&lt;br /&gt;
Get info about paired device&lt;br /&gt;
 bluetoothctl info 00:00:00:00:3E:E2&lt;br /&gt;
&lt;br /&gt;
=blkid=&lt;br /&gt;
Get uuid of disk.&lt;br /&gt;
 blkid /dev/sdb1&lt;br /&gt;
 /dev/sdb1: UUID=&amp;quot;64cd54f7-5330-425d-81e5-a0e473a5f5e7&amp;quot; TYPE=&amp;quot;ext4&amp;quot; PARTLABEL=&amp;quot;primary&amp;quot; PARTUUID=&amp;quot;21f38e48-af2d-4fdd-854a-5910f392a6e0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bonnie++=&lt;br /&gt;
Report performance on disk. benchmark&lt;br /&gt;
 bonnie++ -u 0:0&lt;br /&gt;
On machine running out of disk&lt;br /&gt;
 sudo bonnie++ -d ./ -s 400 -r 200 -u root&lt;br /&gt;
Example command.&lt;br /&gt;
 bonnie++ -d /storage/temp/ -s 32G -n 0 -m TEST -f -b -u abjorklund&lt;br /&gt;
&lt;br /&gt;
=boot=&lt;br /&gt;
Booting singe user mode.&lt;br /&gt;
 kernel ... single&lt;br /&gt;
&lt;br /&gt;
=bootchart=&lt;br /&gt;
Analyze startup times.&lt;br /&gt;
&lt;br /&gt;
=bootgraph=&lt;br /&gt;
How to use.&lt;br /&gt;
 Kernel later than 2.6.28&lt;br /&gt;
 kernel option initcall_debug&lt;br /&gt;
 dmesg | /usr/src/linux-headers-2.6.28-11-generic/scripts/bootgraph.pl &amp;gt; /tmp/bootgraph.svg&lt;br /&gt;
=bpftrace=&lt;br /&gt;
run code at each system call&lt;br /&gt;
 #!/usr/bin/bpftrace&lt;br /&gt;
 &lt;br /&gt;
 interval:s:5&lt;br /&gt;
 {&lt;br /&gt;
   exit();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 kprobe:do_sys_open&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;%s %s\n&amp;quot;, comm, str(arg1));&lt;br /&gt;
 }&lt;br /&gt;
=busctl=&lt;br /&gt;
 busctl may be used to introspect and monitor the D-Bus bus.&lt;br /&gt;
&lt;br /&gt;
=bzip2=&lt;br /&gt;
Extract keep original&lt;br /&gt;
 bzip2 -dk /compressed_file.bz2 and extract standard out via tar.&lt;br /&gt;
Extract bunzip2 file and extract via tar from standard out.&lt;br /&gt;
 bzip2 -c /compressed_file.bz2 | tar -xivf -&lt;br /&gt;
&lt;br /&gt;
=cdrecord=&lt;br /&gt;
Blank cd/dvd rw&lt;br /&gt;
 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=all -force&lt;br /&gt;
=certutil=&lt;br /&gt;
Test password. Password should be part of file called by -f&lt;br /&gt;
 certutil -K -d /etc/dirsrv/slapd-halfface -f /tmp/pin.txt&lt;br /&gt;
Remove cert if it already exist.&lt;br /&gt;
 certutil -D -n &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Create new certificate.&lt;br /&gt;
 certutil -S -n Self-Signed-CA -s CN=ssca.389ds.halfface,O=halfface,L=389ds,ST=Stockholm,C=SE -x -t &amp;quot;CT,,&amp;quot; -v 480 -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt&lt;br /&gt;
List certificates&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/&lt;br /&gt;
Look at a specific certificate&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/ -n &amp;quot;Self-Signed-CA&amp;quot;&lt;br /&gt;
Remove orphan key&lt;br /&gt;
 certutil -F -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt -k 27e0fcb7a201cf0f0c3674eae03c8d94b47b4de0&lt;br /&gt;
Generate a new csr&lt;br /&gt;
 certutil -R -s &amp;quot;CN=www.halfface.se,O=halfface,L=389ds,ST=Stockholm,C=SE&amp;quot; -o server.csr -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt --extSAN &amp;quot;dns:www.halfface.se,dns:ldap.halfface.se&amp;quot; -v 240&lt;br /&gt;
sign certificate&lt;br /&gt;
 certutil -C -i server.csr -o server-cert.crt -c &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Import signed cert&lt;br /&gt;
 certutil -A -n &amp;quot;Server-Cert&amp;quot; -t &amp;quot;u,u,u&amp;quot; -i server-cert.crt -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
==Add certs to chrome==&lt;br /&gt;
 for i in $(ls) ; do echo &#039;*&#039; $i ; certutil -d sql:${HOME}/.pki/nssdb -A -t &amp;quot;C,,&amp;quot; -n &amp;quot;vSphere Root CA $i&amp;quot; -i $i ; done&lt;br /&gt;
&lt;br /&gt;
=cfdisk=&lt;br /&gt;
 Disk partitioning via ncurses interface. like fdisk.&lt;br /&gt;
=chage=&lt;br /&gt;
List password properties of user&lt;br /&gt;
 chage -l abjorklund&lt;br /&gt;
Unlimited login&lt;br /&gt;
 chage -I -1 -m 0 -M 99999 -E -1 sftponly&lt;br /&gt;
&lt;br /&gt;
=chattr/lsattr=&lt;br /&gt;
Set extendet attributes of files.&lt;br /&gt;
 # Lock file for most activities.&lt;br /&gt;
 chattr +i file&lt;br /&gt;
 # Unlock file&lt;br /&gt;
 chattr -i file&lt;br /&gt;
 # recursive lsattr looking for imutable.&lt;br /&gt;
 lsattr -aR -- .//. 2&amp;gt;/dev/null | sed -rn &#039;/i.+\.\/\/\./s/\.\/\///p&#039;&lt;br /&gt;
&lt;br /&gt;
=chmod=&lt;br /&gt;
Sticky bit on directory. Only owners of files are able to delete.&lt;br /&gt;
 chmod 1755 /file.&lt;br /&gt;
 -rwxr-xr-t&lt;br /&gt;
GUID on file. binaries started will have the group set to the defined group.&lt;br /&gt;
 chmod 2755 /file&lt;br /&gt;
 -rwxr-sr-x&lt;br /&gt;
SUID on file.&lt;br /&gt;
 chmod 4755 /file&lt;br /&gt;
 -rwsr-xr-x&lt;br /&gt;
Remover permissions for others&lt;br /&gt;
 chmod o-rwx&lt;br /&gt;
&lt;br /&gt;
=chntpw=&lt;br /&gt;
 # Change windows passwords offline&lt;br /&gt;
 mkdir /mnt/disk ; mount /dev/sd1 /mnt/disk; cd /mnt/disk/Windows/System32/config&lt;br /&gt;
 # List local users.&lt;br /&gt;
 chntpw -l SAM&lt;br /&gt;
 # clear password on user.&lt;br /&gt;
 chntpw -u Administrator SAM&lt;br /&gt;
=chrony=&lt;br /&gt;
 # setup time sync via ntp.&lt;br /&gt;
 /etc/chrony.conf&lt;br /&gt;
 # look at status&lt;br /&gt;
 chronyc tracking&lt;br /&gt;
 # List ntp sources.&lt;br /&gt;
 chronyc sources&lt;br /&gt;
   .-- Source mode  &#039;^&#039; = server, &#039;=&#039; = peer, &#039;#&#039; = local clock.&lt;br /&gt;
  / .- Source state &#039;*&#039; = current synced, &#039;+&#039; = combined , &#039;-&#039; = not combined,&lt;br /&gt;
 | /   &#039;?&#039; = unreachable, &#039;x&#039; = time may be in error, &#039;~&#039; = time too variable.&lt;br /&gt;
 ||                                                 .- xxxx [ yyyy ] +/- zzzz&lt;br /&gt;
 ||      Reachability register (octal) -.           |  xxxx = adjusted offset,&lt;br /&gt;
 ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,&lt;br /&gt;
 ||                                \     |          |  zzzz = estimated error.&lt;br /&gt;
 ||                                 |    |           \&lt;br /&gt;
 MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
 ===============================================================================&lt;br /&gt;
 #? PHC0                          0   3     0   19d    +41ns[ +349ns] +/-  104ns&lt;br /&gt;
Force syncronize&lt;br /&gt;
 sudo chronyc -a &#039;burst 4/4&#039;&lt;br /&gt;
Make a big step. Did not work for me.&lt;br /&gt;
 chronyc -a makestep&lt;br /&gt;
Verify clock&lt;br /&gt;
 chronyd -q &#039;server pool.ntp.org iburst&#039;&lt;br /&gt;
&lt;br /&gt;
=chvt=&lt;br /&gt;
From a script change to a virtual interface and connect script to that terminal.&lt;br /&gt;
chvt 3 exec &amp;lt; /dev/tty3 &amp;gt; /dev/tty3&lt;br /&gt;
&lt;br /&gt;
=cacafire=&lt;br /&gt;
 View some fire in ascii.&lt;br /&gt;
&lt;br /&gt;
=clean=&lt;br /&gt;
Clean file from comments and blank lines.&lt;br /&gt;
 sed &#039;/ *#/d; /^ *$/d&#039;&lt;br /&gt;
&lt;br /&gt;
=codepage=&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 convmv -f cp850 -t iso-8859-1 --notest *&lt;br /&gt;
 convmv -f utf8 -t iso8859-1 -r --notest *&lt;br /&gt;
 convmv -f iso8859-1 -t en_US.UTF-8 -r --notest .&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 iconv --from-code=ISO-8859-15 --to-code=UTF-8 document.csv &amp;gt; document_iconv.csv&lt;br /&gt;
View nfo files&lt;br /&gt;
 iconv -f CP437 -t UTF-8 KaOs.nfo&lt;br /&gt;
&lt;br /&gt;
=column=&lt;br /&gt;
Create nice column. Use tab as delimiter.&lt;br /&gt;
 column -t -s $&#039;\t&#039; /file.tsv&lt;br /&gt;
=compgen=&lt;br /&gt;
List all commands &lt;br /&gt;
 compgen -A function -abck&lt;br /&gt;
&lt;br /&gt;
=convert=&lt;br /&gt;
Convert Image to 8 bit grey with threshold for white.&lt;br /&gt;
 for tif in *.tif; do convert -depth 8 -white-threshold 70% ${tif} ${tif%%.*}.png;done&lt;br /&gt;
Resize image&lt;br /&gt;
 convert -resize 25% -gamma 1.5 2011-08-03_11-09-43.jpg 2011-08-03_11-09-43_new.jpg&lt;br /&gt;
Multipage pdf.&lt;br /&gt;
 convert -adjoin -page A4 -compress jpeg Infineon1.tif Infineon2.tif Infineon.pdf&lt;br /&gt;
 pdfunite RegionUppsala01.pdf RegionUppsala02.pdf RegionUppsala03.pdf RegionUppsala04.pdf RegionUppsala.pdf&lt;br /&gt;
Prepare photos for printing.&lt;br /&gt;
 convert -rotate 90 -gamma 1.5 -resize 25% -compress jpeg -quality 80 -adjoin -page A4 * print.pdf&lt;br /&gt;
Resize change aspect.&lt;br /&gt;
 convert Slide1.PNG -resize 1920x1080\! slide01.png&lt;br /&gt;
animated gif&lt;br /&gt;
 convert -delay 100 -loop 0 *.jpg animation.gif&lt;br /&gt;
Create multipage pdf of photos.&lt;br /&gt;
 convert -resize 25% -adjoin -page A4 -rotate 90 -compress jpeg *.jpg test.pdf ; pdfjam test.pdf --no-landscape --frame true --nup 2x2 --suffix 4up --outfile /temp/photos/Alva/test_2x2.pdf&lt;br /&gt;
For vertical stacking (top to bottom):&lt;br /&gt;
 convert -append 1.jpg 2.jpg out.jpg&lt;br /&gt;
For horizontal stacking (left to right):&lt;br /&gt;
 convert +append 1.jpg 2.jpg out.jpg&lt;br /&gt;
Remove transparancy&lt;br /&gt;
 convert image.png -background white -flatten image.jpg&lt;br /&gt;
&lt;br /&gt;
=cpio=&lt;br /&gt;
Copy wanted partitions.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd /boot/ ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc )&amp;quot; | (cd /mnt/sysimage/boot ; cpio -idvuma )&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd / ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc)&amp;quot; | (cd /mnt/sysimage ; cpio -idvuma )&lt;br /&gt;
 # -o copy out mode.&lt;br /&gt;
 # -0 terminated by null character.&lt;br /&gt;
 # -Hnewc som storing format.&lt;br /&gt;
 # -i extract copy in mode.&lt;br /&gt;
 # -d make directories.&lt;br /&gt;
 # -v verbose.&lt;br /&gt;
 # -V print dot.&lt;br /&gt;
 # -u replace all files.&lt;br /&gt;
 # -m preserve modification time.&lt;br /&gt;
 # -a preserve access time.&lt;br /&gt;
=cpulimit=&lt;br /&gt;
Limit application cpu usage to 25% cpu utilization. Inherit limit to spawned processes.&lt;br /&gt;
 cpulimit -i -l 25 /apps&lt;br /&gt;
&lt;br /&gt;
=crash=&lt;br /&gt;
Troubleshoot hung Redhat vm.&lt;br /&gt;
Dump vm.&lt;br /&gt;
 virsh dump &amp;lt;vm&amp;gt; --memory-only --verbose /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Login to machine you dump:ed and rebooted. Verify kernel version. uname -r&lt;br /&gt;
Setup vm similar to the one you dumped.&lt;br /&gt;
Install rpm:s to be able to debug.&lt;br /&gt;
 export UNAME_R=5.14.0-554.el9.x86_64&lt;br /&gt;
 dnf install --enablerepo=* crash kernel-modules-${UNAME_R} kernel-core-${UNAME_R} kernel-${UNAME_R} kernel-modules-core-${UNAME_R} kernel-debuginfo-common-x86_64-${UNAME_R} kernel-debuginfo-${UNAME_R}&lt;br /&gt;
Tips to find rpm:s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://kojihub.stream.centos.org/koji/builds -&amp;gt; Dropdown: builds -&amp;gt; Search: kernel-5.14.0-554.el9&lt;br /&gt;
https://kojihub.stream.centos.org/kojifiles/packages/kernel/ -&amp;gt; find your way down the tree.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start crash. Write help to give advice. LLMS are quite useful for troubleshooting advice.&lt;br /&gt;
 crash /usr/lib/debug/lib/modules/${UNAME_R}/vmlinux /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Scripting with crash&lt;br /&gt;
 cd /temp/ ;cat commands.txt ; for i in $(ls instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04*) ; do crash -i commands.txt /usr/lib/debug/lib/modules/5.14.0-554.el9.x86_64/vmlinux /temp/instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04.core &amp;gt; $i.log &amp;lt;/dev/null ; done&lt;br /&gt;
 ps&lt;br /&gt;
 runq&lt;br /&gt;
&lt;br /&gt;
=cronie=&lt;br /&gt;
Start cronie in foreground. Write what it is doing.&lt;br /&gt;
 /usr/sbin/crond -n -x sch&lt;br /&gt;
&lt;br /&gt;
=crontab/cron=&lt;br /&gt;
crontab.&lt;br /&gt;
 * * * * *  command to be executed&lt;br /&gt;
 - - - - -&lt;br /&gt;
 | | | | |&lt;br /&gt;
 | | | | +----- day of week (0 - 6) (Sunday=0)&lt;br /&gt;
 | | | +------- month (1 - 12)&lt;br /&gt;
 | | +--------- day of month (1 - 31)&lt;br /&gt;
 | +----------- hour (0 - 23)&lt;br /&gt;
 +------------- min (0 - 59)&lt;br /&gt;
 0 Sunday&lt;br /&gt;
 1 Monday&lt;br /&gt;
 2 Tuesday&lt;br /&gt;
 3 Wednesday&lt;br /&gt;
 4 Thursday&lt;br /&gt;
 5 Friday&lt;br /&gt;
 6 Saturday&lt;br /&gt;
 @reboot &amp;quot;run command at reboot&amp;quot;&lt;br /&gt;
 If you need % in crontab escape it. \%&lt;br /&gt;
&lt;br /&gt;
Run command every 10 minutes.&lt;br /&gt;
 */10 * * * * command&lt;br /&gt;
&lt;br /&gt;
Run command at 12:00 and 24:00 hours.&lt;br /&gt;
 00 0,12 * * *      command&lt;br /&gt;
&lt;br /&gt;
Run command between 8-17 every 2 hours.&lt;br /&gt;
 0 8-17/2 * * * /path/command&lt;br /&gt;
 0 8,10,12,14,16 * * * /path/command&lt;br /&gt;
&lt;br /&gt;
Start program under crontab.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 COMMAND=&amp;quot;screen -L -d -m ping www.dn.se&amp;quot;&lt;br /&gt;
 if [ &amp;quot;$(ps -ef | grep -i ping | grep -v grep)&amp;quot; ]&lt;br /&gt;
 then&lt;br /&gt;
   echo &amp;quot;\&amp;quot;${COMMAND}\&amp;quot; already running.&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;Starting \&amp;quot;${COMMAND}\&amp;quot;.&amp;quot;&lt;br /&gt;
   cd /tmp&lt;br /&gt;
   ${COMMAND}&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=crudini=&lt;br /&gt;
Edit ini files och cli.&lt;br /&gt;
 crudini --set /lib/systemd/system/icinga2.service Service Nice -10 ; systemctl daemon-reload ; systemctl restart icinga2.service&lt;br /&gt;
&lt;br /&gt;
=cryptsetup=&lt;br /&gt;
luks. Process to unlock disk. Mount it and unmount and encrypt.&lt;br /&gt;
 cryptsetup luksOpen /dev/nvme0n1p3 secure&lt;br /&gt;
 mount /dev/mapper/secure /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 cryptsetup luksClose secure&lt;br /&gt;
==create luks encrypted disk==&lt;br /&gt;
 # Add block device and add gpt label. Create partition.&lt;br /&gt;
 cfdisk /dev/sde&lt;br /&gt;
 # Encypt partition&lt;br /&gt;
 sudo cryptsetup luksFormat /dev/vdb1&lt;br /&gt;
 # open encrypted disk&lt;br /&gt;
 sudo cryptsetup open /dev/vdb1 encrypted-disk&lt;br /&gt;
 # Format disk&lt;br /&gt;
 sudo mkfs.ext4 /dev/mapper/encrypted-disk&lt;br /&gt;
 # Info about partition&lt;br /&gt;
 sudo blkid /dev/vdb1 &lt;br /&gt;
 /dev/vdb1: UUID=&amp;quot;cb2e7238-8245-41cb-9811-6804f602e5e8&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot; PARTUUID=&amp;quot;56b829b6-8295-4963-9562-29e8937819a8&amp;quot;&lt;br /&gt;
 # Setup crypttab if you want to decrypt at boot splash&lt;br /&gt;
 echo &#039;encrypted-disk UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 none luks&#039; | sudo tee -a /etc/crypttab&lt;br /&gt;
 # Manually unlock luks partition&lt;br /&gt;
 sudo cryptsetup luksOpen UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 encrypted-disk&lt;br /&gt;
 # Manuall lock luks partition&lt;br /&gt;
 sudo cryptsetup luksClose encrypted-disk&lt;br /&gt;
 # Add disk to fstab&lt;br /&gt;
 echo &#039;/dev/mapper/encrypted-disk /mnt/encrypted-disk ext4 noauto 0 2&#039; | sudo tee -a /etc/fstab&lt;br /&gt;
 # Create mount point&lt;br /&gt;
 sudo mkdir /mnt/encrypted-disk ; sudo chmod 777 /mnt/encrypted-disk&lt;br /&gt;
 # mount disk&lt;br /&gt;
 sudo umount /mnt/encrypted-disk&lt;br /&gt;
 # Change password of luks partition&lt;br /&gt;
 sudo cryptsetup luksAddKey UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup --test-passphrase -v open UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup luksRemoveKey UUID=cb2e7238-8245-4&lt;br /&gt;
&lt;br /&gt;
=cups=&lt;br /&gt;
Install cups&lt;br /&gt;
 dnf install cups&lt;br /&gt;
enable cups&lt;br /&gt;
 systemctl enable cups.service --now&lt;br /&gt;
Configure printer in cups.&lt;br /&gt;
 http://localhost:631/&lt;br /&gt;
&lt;br /&gt;
=cut=&lt;br /&gt;
Cuf everything from field 5.&lt;br /&gt;
 cut -f5- -d &#039; &#039;&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
==Get http return code.==&lt;br /&gt;
 curl --connect-timeout 3 --max-time 9 -ksL -w &#039;%{http_code}\n&#039; &#039;http://www.dn.se&#039; -o /dev/null&lt;br /&gt;
==get external ip. what is my ip==&lt;br /&gt;
 curl ifconfig.me &lt;br /&gt;
==get external ip and all related browser information.==&lt;br /&gt;
 curl ifconfig.me/all &lt;br /&gt;
==Alternative address for domain.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -sk --resolve www.halfface.se:80:127.0.0.1 http://www.halfface.se&lt;br /&gt;
 curl http://127.0.0.1/ -H &amp;quot;Host: halfface.se&amp;quot; -H &amp;quot;X-Forwarded-Proto: https&amp;quot; -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get header / mime type==&lt;br /&gt;
 curl -I http://url.se&lt;br /&gt;
==post file==&lt;br /&gt;
 curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult&lt;br /&gt;
==post file via ftp using proxy==&lt;br /&gt;
 curl -p --proxy http://proxy.example.se:3128 -v -T backup.tar ftp://user:password@ftp.example.se/directory/&lt;br /&gt;
&lt;br /&gt;
==cookie format. tab delimited.==&lt;br /&gt;
 domain     - The domain that created AND that can read the variable. .halfface.se&lt;br /&gt;
 flag       - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain.&lt;br /&gt;
 path       - The path within the domain that the variable is valid for.&lt;br /&gt;
 secure     - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.&lt;br /&gt;
 expiration - The UNIX time that the variable will expire on. UNIX time is defined as the number of seconds since Jan 1, 1970 0:00:00 GMT.&lt;br /&gt;
 name       - The name of the variable.&lt;br /&gt;
 value      - The value of the variable.&lt;br /&gt;
&lt;br /&gt;
==add certificate authority to openssl==&lt;br /&gt;
Redhat based os:es this file gets updated. /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt&lt;br /&gt;
 cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/&lt;br /&gt;
 update-ca-trust&lt;br /&gt;
Debian based&lt;br /&gt;
 cp /tmp/ca.crt /usr/share/ca-certificates/extra&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
Debian 2 &lt;br /&gt;
 cp foo.crt /usr/local/share/ca-certificates/foo.crt&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
==curl ipv6==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -6 -g &amp;quot;http://[::1]:80/&amp;quot;&lt;br /&gt;
curl -g &amp;quot;http://[2001:9b1:402d:0:ffff:f038:ec3e:b5d4]/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==proxy==&lt;br /&gt;
 curl  --proxy http://proxy.se:3128 -sk &amp;quot;http://mirrorlist.centos.org&amp;quot;&lt;br /&gt;
===no_proxy===&lt;br /&gt;
 export https_proxy=http://proxy.se:3128 ; export http_proxy=$https_proxy ; export HTTPS_PROXY=$https_proxy ; export HTTP_PROXY=$https_proxy ; export no_proxy=localhost,127.0.0.1,.inter.net,$(echo 10.217.{4..5}.{1..254}, 10.217.5.255) ; export NO_PROXY=$no_proxy&lt;br /&gt;
===time spent===&lt;br /&gt;
 -w &amp;quot;time_namelookup: %{time_namelookup}, time_connect: %{time_connect}, time_appconnect: %{time_appconnect}, time_pretransfer: %{time_pretransfer}, time_redirect: %{time_redirect}, time_starttransfer: %{time_starttransfer}, time_total: %{time_total}\n&amp;quot;&lt;br /&gt;
=Is it a free day?=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sk https://sholiday.faboul.se/dagar/v2.1/2023 | jq -r &#039;.dagar[] |select(.&amp;quot;arbetsfri dag&amp;quot;==&amp;quot;Ja&amp;quot;)|.datum&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=qr code=&lt;br /&gt;
encode&lt;br /&gt;
 qrencode &amp;quot;Andreas&amp;quot; -o /tmp/qr_Andreas.png&lt;br /&gt;
decode&lt;br /&gt;
 zbarimg /tmp/qr_Andreas.png&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
Get date in requested format.&lt;br /&gt;
 date &#039;+%Y-%m-%d %H:%M&#039;&lt;br /&gt;
 date +%Y-%m-%d-%H%M&lt;br /&gt;
 date &amp;quot;+%F_%T&amp;quot; # 2017-01-16_19:41:41&lt;br /&gt;
&lt;br /&gt;
date 033121422003.55&lt;br /&gt;
 Mon Mar 31 21:42:55 PST 2003&lt;br /&gt;
 date MMDDhhmmCCYY.ss&lt;br /&gt;
&lt;br /&gt;
Whats the date in 1000 years. Or any other increment.&lt;br /&gt;
 date --date=&amp;quot;+1000 years&amp;quot; +%C%y-%m-%d&lt;br /&gt;
 date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
 TZ=CEST date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
&lt;br /&gt;
What is the time in other timezone given in unixtime/epoch.&lt;br /&gt;
 TZ=GMT date -d &#039;@1345064585&#039;&lt;br /&gt;
 Wed Aug 15 21:03:05 GMT 2012&lt;br /&gt;
&lt;br /&gt;
Unix time.&lt;br /&gt;
 date +%s&lt;br /&gt;
Unix to normal&lt;br /&gt;
 date -d @1234567890&lt;br /&gt;
&lt;br /&gt;
scew clock by a second.&lt;br /&gt;
 DATE_OFF=$(date --date=&amp;quot;-5 second&amp;quot; +%C%y-%m-%d\ %H:%M:%S\ %Z) ; date --set=&amp;quot;${DATE_OFF}&amp;quot;&lt;br /&gt;
Set clock&lt;br /&gt;
 date &#039;+%Y-%m-%d %T %Z&#039; -s &amp;quot;2008-11-28 08:08:08 UTC&amp;quot;&lt;br /&gt;
=datefudge=&lt;br /&gt;
Fake date for command.&lt;br /&gt;
 datefudge &amp;quot;2020-04-01 10:23&amp;quot; date&lt;br /&gt;
&lt;br /&gt;
=dateseq=&lt;br /&gt;
Create date sequense.&lt;br /&gt;
 dateseq 2017-04-01 2017-04-05&lt;br /&gt;
&lt;br /&gt;
=db2=&lt;br /&gt;
Empty catalog remove node&lt;br /&gt;
 for DB2 in $(db2 list node directory | grep &amp;quot;Node name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog node $DB2;done&lt;br /&gt;
Empty catalog remove db&lt;br /&gt;
 for DB2 in $(db2 list db directory | grep &amp;quot;Database name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog db $DB2;done&lt;br /&gt;
# Load db2 environment.&lt;br /&gt;
 . /home/db2/sqllib/db2profile&lt;br /&gt;
&lt;br /&gt;
# Connect to database.&lt;br /&gt;
 db2 connect to ${database_name} user ${user} using ${password}&lt;br /&gt;
&lt;br /&gt;
# Test query.&lt;br /&gt;
 SELECT service_level, fixpack_num, bld_level FROM TABLE (sysproc.env_get_inst_info()) as A;&lt;br /&gt;
&lt;br /&gt;
# System Database Directory&lt;br /&gt;
 db2 list db directory&lt;br /&gt;
&lt;br /&gt;
# Node Directory&lt;br /&gt;
 db2 list node directory&lt;br /&gt;
&lt;br /&gt;
# setup directory&lt;br /&gt;
 db2 &amp;quot;catalog tcpip node db2datan remote 1.2.3.4 server 5000&amp;quot;&lt;br /&gt;
 db2 &amp;quot;catalog db db2datadb as db2datadb at node db2datan&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Drop connection.&lt;br /&gt;
 db2 terminate&lt;br /&gt;
&lt;br /&gt;
=dbus-monitor=&lt;br /&gt;
 dbus-monitor   # Monitor activity on the dbus to see what system and sessions are doing.&lt;br /&gt;
&lt;br /&gt;
=dd=&lt;br /&gt;
output your microphone to a remote computer&#039;s speaker&lt;br /&gt;
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp&lt;br /&gt;
Add 2GB to disk image.&lt;br /&gt;
 dd if=/dev/zero of=/system_image.img bs=1M oflag=append conv=notrunc count=2000&lt;br /&gt;
dd with progress bar.&lt;br /&gt;
 dd if=kali.iso of=/dev/sdc status=progress&lt;br /&gt;
 pv -ptre /install/backup/machine/raspberry/ipcenter_view.img | sudo dd of=/dev/mmcblk0 bs=1M&lt;br /&gt;
dd to position on disk&lt;br /&gt;
 dd of=/dev/disk1 if=/dev/urandom obs=500000 seek=1 bs=1MB count=1 conv=notrunc&lt;br /&gt;
==consume 100GB ram==&lt;br /&gt;
 mount -o remount,size=300G /dev/shm&lt;br /&gt;
 dd if=/dev/zero of=/dev/shm/$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) bs=1073741824 count=100 status=progress&lt;br /&gt;
&lt;br /&gt;
=debugfs=&lt;br /&gt;
 ctime:  Shows file change time.&lt;br /&gt;
 atime:  Shows file access time.&lt;br /&gt;
 mtime:  Shows file modification time.&lt;br /&gt;
 crtime: Shows file creation time. Birth.&lt;br /&gt;
Example&lt;br /&gt;
 debugfs -R &#039;stat /etc/exports.bkp-2021-11-17_10-07-46&#039; /dev/mapper/vg_rbnetstorage0-lv_root&lt;br /&gt;
 debugfs 1.41.12 (17-May-2010)&lt;br /&gt;
 Inode: 924905   Type: regular    Mode:  0644   Flags: 0x80000&lt;br /&gt;
 Generation: 2068409071    Version: 0x00000000:00000001&lt;br /&gt;
 User:     0   Group:     0   Size: 4775&lt;br /&gt;
 File ACL: 0    Directory ACL: 0&lt;br /&gt;
 Links: 1   Blockcount: 16&lt;br /&gt;
 Fragment:  Address: 0    Number: 0    Size: 0&lt;br /&gt;
  ctime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
  atime: 0x6193bd7f:c4faf658 -- Tue Nov 16 15:17:35 2021&lt;br /&gt;
  mtime: 0x61925419:34c06f18 -- Mon Nov 15 13:35:37 2021&lt;br /&gt;
 crtime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
 Size of extra inode fields: 28&lt;br /&gt;
 Extended attributes stored in inode body: &lt;br /&gt;
   selinux = &amp;quot;unconfined_u:object_r:etc_t:s0\000&amp;quot; (31)&lt;br /&gt;
 EXTENTS:&lt;br /&gt;
 (0-1): 3718194-3718195&lt;br /&gt;
=ddclient=&lt;br /&gt;
Debug&lt;br /&gt;
 ddclient -daemon=0 -debug -verbose -noquiet&lt;br /&gt;
&lt;br /&gt;
=df=&lt;br /&gt;
df output one per line. Without header.&lt;br /&gt;
 df -Plk / /apps | tail -n+2&lt;br /&gt;
&lt;br /&gt;
=dhclient=&lt;br /&gt;
[root@wall sysconfig]# cat /etc/dhclient.conf&lt;br /&gt;
 interface &amp;quot;eth0&amp;quot; {&lt;br /&gt;
          prepend domain-name-servers 127.0.0.1;&lt;br /&gt;
          supersede domain-name &amp;quot;bltprojektering.se&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=dialog=&lt;br /&gt;
Create dialog in terminal. Example a progressbar.&lt;br /&gt;
 for i in {0..100} ; do echo $i | dialog --gauge &amp;quot;Please wait&amp;quot; 7 70 1 ; sleep .1 ; done&lt;br /&gt;
=diff=&lt;br /&gt;
 sdiff &amp;lt;(echo -e &#039;hej\nda\nvi\nses\ni\nmorgon&#039;) &amp;lt;(echo -e &#039;hej\ndå\nvi\nSES\ni\nmorgon&#039;)&lt;br /&gt;
Only show files that differ.&lt;br /&gt;
 -q  --brief&lt;br /&gt;
Only show change between files.&lt;br /&gt;
 diff -u file1.txt file2.txt | grep -vE &#039;^(---|\+\+\+|@@|\+|-)&#039;&lt;br /&gt;
&lt;br /&gt;
=dig=&lt;br /&gt;
==Get all dns information about host.==&lt;br /&gt;
 dig any www.halfface.se&lt;br /&gt;
==Trace dns lookups from root dns. Use 8.8.8.8 for lookups.==&lt;br /&gt;
 dig +trace @8.8.8.8 www.halfface.se&lt;br /&gt;
==Recursive lookup.==&lt;br /&gt;
 dig -tAXFR halfface.se&lt;br /&gt;
==backward resolve==&lt;br /&gt;
 dig -x 89.253.75.84&lt;br /&gt;
==get ttl==&lt;br /&gt;
 dig +nocmd +multiline +noall +answer any halfface.se&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
==Get txt record.==&lt;br /&gt;
 dig google.com txt&lt;br /&gt;
==You can find the authoritative servers by asking for the NS records for a domain==&lt;br /&gt;
 dig example.com NS&lt;br /&gt;
==dig using alternative port==&lt;br /&gt;
 dig +short -p 5353 halfface.se @10.130.0.35&lt;br /&gt;
&lt;br /&gt;
=digitemp=&lt;br /&gt;
 digitemp_DS9097 -c /etc/.digitemprc -t0&lt;br /&gt;
&lt;br /&gt;
=disk=&lt;br /&gt;
disk usage&lt;br /&gt;
 baobab&lt;br /&gt;
foremost&lt;br /&gt;
 recover deleted files.&lt;br /&gt;
=disown=&lt;br /&gt;
Disconnect process(pid) so that is survives a logout.&lt;br /&gt;
 disown %2&lt;br /&gt;
&lt;br /&gt;
=display=&lt;br /&gt;
Change resolution&lt;br /&gt;
 xrandr --output LVDS --mode 1280x800&lt;br /&gt;
 xrandr --output default --mode 1280x1024&lt;br /&gt;
Query graphics card capabilities.&lt;br /&gt;
 xrandr -q&lt;br /&gt;
Change dpi&lt;br /&gt;
 xrandr --dpi 138/eDP1&lt;br /&gt;
=du=&lt;br /&gt;
 du -amx / | sort -n | tail -5&lt;br /&gt;
=duplicity=&lt;br /&gt;
Encrypted backups over rsync&lt;br /&gt;
&lt;br /&gt;
=dmesg=&lt;br /&gt;
dmesg with iso time format&lt;br /&gt;
 dmesg --ctime --time-format iso&lt;br /&gt;
Write to dmesg&lt;br /&gt;
 echo &amp;quot;$USER $(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;)&amp;quot; | sudo tee /dev/kmsg&lt;br /&gt;
&lt;br /&gt;
=dmidecode=&lt;br /&gt;
List memory banks&lt;br /&gt;
 sudo dmidecode -t 17&lt;br /&gt;
&lt;br /&gt;
=dnf=&lt;br /&gt;
install skip if not exist&lt;br /&gt;
 sudo dnf install --setopt=strict=0 $(sort -u /temp/other_machine_rpm)&lt;br /&gt;
==update system==&lt;br /&gt;
 dnf -y upgrade --refresh&lt;br /&gt;
 reboot&lt;br /&gt;
 dnf -y install dnf-plugin-system-upgrade&lt;br /&gt;
 dnf -y system-upgrade download --refresh --allowerasing --releasever=43&lt;br /&gt;
 # Before 42:&lt;br /&gt;
 dnf -y system-upgrade reboot&lt;br /&gt;
 # From 42 and onward&lt;br /&gt;
 dnf5 offline reboot&lt;br /&gt;
 # broken deps.&lt;br /&gt;
 dnf repoquery --unsatisfied&lt;br /&gt;
 # look for duplicates&lt;br /&gt;
 dnf repoquery --duplicated&lt;br /&gt;
 # which rpms do not exit in repo.&lt;br /&gt;
 dnf list extras&lt;br /&gt;
 # remove no longer used.&lt;br /&gt;
 dnf autoremove&lt;br /&gt;
 dnf remove $(rpm -qa| grep \.fc23)&lt;br /&gt;
 # reinstall rpm&lt;br /&gt;
 dnf reinstall sssd-common&lt;br /&gt;
&lt;br /&gt;
==auto update==&lt;br /&gt;
 # Install auto updates.&lt;br /&gt;
 dnf install dnf-automatic&lt;br /&gt;
 # Enable auto update.&lt;br /&gt;
 sed -i &amp;quot;s/apply_updates = no/apply_updates = yes/g;s/email_from = root@example.com/email_from = root@${HOSTNAME}/g;s/email_to = root/email_to = anden@halfface.se/g&amp;quot; /etc/dnf/automatic.conf&lt;br /&gt;
 # Enable timer.&lt;br /&gt;
 systemctl enable dnf-automatic.timer &amp;amp;&amp;amp; systemctl start dnf-automatic.timer&lt;br /&gt;
 # Trigger timer.&lt;br /&gt;
 systemctl start  dnf-automatic.timer&lt;br /&gt;
 # Check status of dnf-automatic:&lt;br /&gt;
 systemctl list-timers *dnf-*&lt;br /&gt;
==build environment==&lt;br /&gt;
 dnf group install &amp;quot;C Development Tools and Libraries&amp;quot;&lt;br /&gt;
==update to specific version==&lt;br /&gt;
View available version.&lt;br /&gt;
 dnf --showduplicates list  gitlab-ee&lt;br /&gt;
Update to specific version&lt;br /&gt;
 dnf install gitlab-ee-13.12.15-ee.0.el8&lt;br /&gt;
&lt;br /&gt;
=Setup dnsmasq on ubuntu=&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
# Install dnsmasq&lt;br /&gt;
apt install dnsmasq&lt;br /&gt;
systemctl enable dnsmasq --now&lt;br /&gt;
# Disable systemd-resolved.&lt;br /&gt;
sudo systemctl disable --now systemd-resolved&lt;br /&gt;
# Make NetworkManager ignore dns.&lt;br /&gt;
sudo tee /etc/NetworkManager/conf.d/no-dns.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
[main]&lt;br /&gt;
dns=none&lt;br /&gt;
EOF&lt;br /&gt;
systemctl restart NetworkManager&lt;br /&gt;
# Fix /etc/resolv.conf&lt;br /&gt;
sudo \rm /etc/resolv.conf&lt;br /&gt;
sudo tee /etc/resolv.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
search int.redbridge.se halfface.se cloud.binero.net&lt;br /&gt;
options timeout:1 attempts:1&lt;br /&gt;
EOF&lt;br /&gt;
# Create config&lt;br /&gt;
sudo tee /etc/dnsmasq.d/custom.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
listen-address=127.0.0.1&lt;br /&gt;
bind-interfaces&lt;br /&gt;
server=/redbridge.se/185.53.164.25&lt;br /&gt;
#server=/halfface.se/10.111.222.2&lt;br /&gt;
server=8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
# Restart dnsmasq&lt;br /&gt;
systemctl restart dnsmasq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dracut=&lt;br /&gt;
Dracut is a tool used to create an initial RAM filesystem (initramfs) for Linux systems.&lt;br /&gt;
&lt;br /&gt;
=dvgrab=&lt;br /&gt;
Capture dv material&lt;br /&gt;
 dvgrab -f dv2 -i -showstatus -s 0 -timestamp California-2&lt;br /&gt;
&lt;br /&gt;
=e2fsck=&lt;br /&gt;
Scan for bad blocks.&lt;br /&gt;
 e2fsck -ycv /dev/VolGroup00/LogVol00&lt;br /&gt;
&lt;br /&gt;
=edid/ddc=&lt;br /&gt;
 startx -- -logverbose 5.&lt;br /&gt;
 The EDID information turns up in /var/log/Xorg.0.log.&lt;br /&gt;
=enca=&lt;br /&gt;
detect and convert encoding of text files. (codepage utf)&lt;br /&gt;
 enca -L none /temp/locale2&lt;br /&gt;
=esmtp=&lt;br /&gt;
 # Install dependency&lt;br /&gt;
 dnf install procmail&lt;br /&gt;
 # Put the following config in either /etc/esmtprc or more specific ~/.esmtprc. chmod 644.&lt;br /&gt;
 SMTP_SERVER=halfface.se&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; ~/.esmtprc&lt;br /&gt;
 hostname = $SMTP_SERVER:25&lt;br /&gt;
 # Set the Mail Delivery Agent (MDA)&lt;br /&gt;
 mda = &amp;quot;/usr/bin/procmail -d %T&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 chmod 0710 ~/.esmtprc&lt;br /&gt;
&lt;br /&gt;
=etckeeper=&lt;br /&gt;
 Keep your /etc/ directory under git revision control.&lt;br /&gt;
What has happened.&lt;br /&gt;
 git log -p /etc/resolv.conf&lt;br /&gt;
Wipe /etc/.git&lt;br /&gt;
 etckeeper uninit &lt;br /&gt;
 etckeeper init&lt;br /&gt;
&lt;br /&gt;
=ethtool=&lt;br /&gt;
show-features&lt;br /&gt;
 ethtool -k &amp;lt;device&amp;gt;&lt;br /&gt;
 generic-segmentation-offload = gso&lt;br /&gt;
 tcp-segmentation-offload     = tso&lt;br /&gt;
 ...&lt;br /&gt;
Enable wake on lan magic package.&lt;br /&gt;
 ethtool --change &amp;lt;interface&amp;gt; wol g&lt;br /&gt;
Permanently add wol&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039; | while read i ; do INTERFACE_INFO=$(ip address show $i) ; MAC=$(grep link/ether  &amp;lt;&amp;lt;&amp;lt; &amp;quot;${INTERFACE_INFO}&amp;quot; | awk &#039;{print $2}&#039;) ; echo &amp;quot;# /etc/systemd/network/50-wired.link&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=$MAC&lt;br /&gt;
 &lt;br /&gt;
 [Link]&lt;br /&gt;
 NamePolicy=kernel database onboard slot path&lt;br /&gt;
 MACAddressPolicy=persistent&lt;br /&gt;
 WakeOnLan=magic&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=exiftool=&lt;br /&gt;
Change meta data for files, exif, jpg, mp3...&lt;br /&gt;
Get info from file.&lt;br /&gt;
 exiftool $file.mp4&lt;br /&gt;
gps format&lt;br /&gt;
 41°24&#039;12.2&amp;quot;N 2°10&#039;26.5&amp;quot;E&lt;br /&gt;
gps format known to maps.google.com&lt;br /&gt;
 exiftool -c &amp;quot;%.6f&amp;quot; 2022-03-06_10-39-40.mp4 | grep -i gps&lt;br /&gt;
&lt;br /&gt;
=exportfs=&lt;br /&gt;
Install server&lt;br /&gt;
 dnf install nfs-utils&lt;br /&gt;
Start nfs server&lt;br /&gt;
 systemctl enable nfs-server --now&lt;br /&gt;
Reexport everything.&lt;br /&gt;
 exportfs -avr&lt;br /&gt;
Example export.&lt;br /&gt;
 *(rw,no_root_squash,async,insecure)&lt;br /&gt;
 rw              rewritable&lt;br /&gt;
 no_root_squash  Allow root on remote machine same permissions as local root&lt;br /&gt;
 async&lt;br /&gt;
 insecure        NFS version 2 and 3 servers only provide (insecure) host-based authentication: Hosts are allowed/denied based on hostnames and/or IP addresses. Authorization of users is controlled on the clients using the permissions of the files based on user/group IDs. allows clients with NFS implementations that don&#039;t use a reserved port for NFS&lt;br /&gt;
&lt;br /&gt;
=fdupes=&lt;br /&gt;
Find duplicate files.&lt;br /&gt;
 fdupes -r /home&lt;br /&gt;
=feh=&lt;br /&gt;
Image viewer&lt;br /&gt;
&lt;br /&gt;
=ffmpeg=&lt;br /&gt;
ffmpeg&lt;br /&gt;
 ffmpeg -y -deinterlace -aspect 16:9 -author &amp;quot;Andreas Bjorklund&amp;quot; -title &amp;quot;Tanzania&amp;quot; -year 2007 -i Tanzania.m2t -acodec mp3 -vcodec mpeg4 -b 3000k -s 720x540 test.avi&lt;br /&gt;
Create swf/flv from mpeg2 stream&lt;br /&gt;
 ffmpeg -deinterlace -i VTS_01_1.VOB -ab 56 -ar 22050 -b 500000 -r 15 -s 360x288  sisyfos.swf&lt;br /&gt;
Create horse movie.&lt;br /&gt;
 ffmpeg -deinterlace -i /temp/VTS_01_1.VOB -ab 100 -ar 22050 -b 1200000 -r 25 -s 360x288 3horses.swf&lt;br /&gt;
Cut video from command prompt.&lt;br /&gt;
 ffmpeg -i video.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:00:04 trimmed_video.avi&lt;br /&gt;
Record desktop.&lt;br /&gt;
 ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 5 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 -threads 0 -y output.mkv&lt;br /&gt;
 ffmpeg -f x11grab -s $(xrandr | grep \*+|awk &#039;{print $1}&#039;) -r 25 -i :0.0 -sameq /tmp/out.mpg&lt;br /&gt;
Change container.&lt;br /&gt;
  ffmpeg -i film.mov -vcodec copy -acodec copy film.mp4&lt;br /&gt;
Transcode to h264 aac&lt;br /&gt;
 ffmpeg -i original.avi -vcodec libx264 -acodec aac -strict experimental new_file.mp4&lt;br /&gt;
Transcode mp3 to ogg vorbis&lt;br /&gt;
 for file in *.mp3;   do ffmpeg -i &amp;quot;${file}&amp;quot; -acodec libvorbis &amp;quot;${file/%mp3/ogg}&amp;quot;;done&lt;br /&gt;
Take one photo from video stream.&lt;br /&gt;
 ffmpeg -ss 00:00:01 -i &amp;lt;video input&amp;gt; -frames:v 1 -q:v 2 &amp;lt;photo created&amp;gt;&lt;br /&gt;
Take photo&lt;br /&gt;
 ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f image2 snapshot.jpg&lt;br /&gt;
 ls /dev/video* | while read i ; do echo $i ; ffmpeg -f video4linux2 -i $i -vframes 1 -q:v 2 /tmp/${i//\//%}.$(date +%F_%H-%M-%S).jpg ; done ; ls -la /tmp/%*&lt;br /&gt;
Take a photo from a video steam every 10 seconds.&lt;br /&gt;
 ffmpeg -i video.mp4 -r 0.1 -f image2 %03dandreas.jpg&lt;br /&gt;
Take a photo every 1 put it in a file.&lt;br /&gt;
 ffmpeg -y -i http://balcony.halfface.se:8080 -r 1 -f image2 -update 1 stream_image.jpg -probesize 5e+07&lt;br /&gt;
Rotate 180 degrees.&lt;br /&gt;
 ffmpeg -i input.mp4 -filter:v &amp;quot;transpose=1,transpose=1&amp;quot; output.mp4&lt;br /&gt;
Change rotation without transcoding.&lt;br /&gt;
 ffmpeg -i IMG_0703.MOV -metadata:s:v rotate=&amp;quot;&amp;quot; -codec copy rotate_IMG_0703.MOV&lt;br /&gt;
Concaternate videos.&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output&lt;br /&gt;
&lt;br /&gt;
=find=&lt;br /&gt;
==Find exluding directory==&lt;br /&gt;
 find . -wholename &#039;/var/&#039; -prune -o -ls&lt;br /&gt;
==Find text file in directoy execpt directory. Grep for text in that file and show it with colours in less==&lt;br /&gt;
 find /opt/ongame/ -wholename &#039;/opt/ongame/napsjb/server/naps/tmp&#039; -prune -o -type f -exec grep --color=always -r &#039;/fraud&#039; /dev/null {} \; | less -SR&lt;br /&gt;
==Find excluding several directories==&lt;br /&gt;
 find / -type d \( -path /proc -o -path /dev -o -path /net \) -prune -o -gid 1002 -exec chgrp -h 1001 {} \;&lt;br /&gt;
==Find excluding svn==&lt;br /&gt;
 find . -path &#039;*/.svn&#039; -prune -o -type f -print&lt;br /&gt;
==Searches for files modified up to 4 days ago==&lt;br /&gt;
 find ./ -type f -mtime -4&lt;br /&gt;
==Searches for files modified between certain dates. Here for files older than 30 days but younger than 60 (penultimate month)==&lt;br /&gt;
 find ./ -type f -mtime -60 ! -mtime -30&lt;br /&gt;
 sudo find . -newermt &amp;quot;2014-10-19 09:30&amp;quot; ! -newermt &amp;quot;2014-10-19 09:35&amp;quot;&lt;br /&gt;
==Find which dir is consuming inodes==&lt;br /&gt;
 find /var -xdev -printf &#039;%h\n&#039; | sort | uniq -c | sort -k 1 -n&lt;br /&gt;
 for i in $(ls) ; do echo $(find $i | wc -l) $i ; done | sort -n&lt;br /&gt;
==How much data is consumed by pattern==&lt;br /&gt;
 export NFS_DIR=/netstorage/cam/ocp-01 ; find ${NFS_DIR} -maxdepth 1 | grep ^${NFS_DIR}/archived- | while read NFS_DIR_REMOVE ; do du -sk &amp;quot;${NFS_DIR_REMOVE}&amp;quot; ; done | awk &#039;{ SUM +=  $1} END { print SUM &amp;quot;KiB&amp;quot; }&#039; | numfmt --from=auto --to=iec-i --suffix=B&lt;br /&gt;
==find search small files==&lt;br /&gt;
 find . -type f -size -1M -exec grep -H &#039;your_search_pattern&#039; {} +&lt;br /&gt;
=find physical network interfaces=&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039;&lt;br /&gt;
&lt;br /&gt;
=findmnt=&lt;br /&gt;
view the mount tree&lt;br /&gt;
 findmnt&lt;br /&gt;
&lt;br /&gt;
=flash=&lt;br /&gt;
When firefox is complaining about outdated flash plugin&lt;br /&gt;
 rm pluginreg.dat&lt;br /&gt;
=flatpak=&lt;br /&gt;
=Install flatpak=&lt;br /&gt;
 sudo apt install -y flatpak gnome-software-plugin-flatpak&lt;br /&gt;
 sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
=Install flatpak application and replace system binary=&lt;br /&gt;
 sudo flatpak install -y flathub com.freerdp.FreeRDP&lt;br /&gt;
 cat &amp;lt;&amp;lt;&#039;EOF&#039; | sudo tee /usr/local/bin/xfreerdp&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 flatpak run com.freerdp.FreeRDP &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 sudo chmod 755 /usr/local/bin/xfreerdp&lt;br /&gt;
 hash -r&lt;br /&gt;
=Run other binary from flatpack=&lt;br /&gt;
 flatpak run --command=xfreerdp com.freerdp.FreeRDP&lt;br /&gt;
&lt;br /&gt;
=List installed applications.=&lt;br /&gt;
 flatpak list --app&lt;br /&gt;
&lt;br /&gt;
=flock=&lt;br /&gt;
used to use cript that only used 1 time concurrently.&lt;br /&gt;
 flock&lt;br /&gt;
&lt;br /&gt;
=fmt=&lt;br /&gt;
Join lines&lt;br /&gt;
 ifconfig -a | fmt -w 300&lt;br /&gt;
&lt;br /&gt;
=fold=&lt;br /&gt;
Fold long lines. Break at 80 and blank spaces.&lt;br /&gt;
 fold -w 80 -s text.txt&lt;br /&gt;
=forward traffic=&lt;br /&gt;
 service x11&lt;br /&gt;
 {&lt;br /&gt;
         disable = no&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         wait = no&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /usr/bin/nc&lt;br /&gt;
         server_args = 172.28.37.152 6000&lt;br /&gt;
 }&lt;br /&gt;
=fping=&lt;br /&gt;
 fping --timeout=10 --elapsed --netdata &amp;lt;fqdn&amp;gt;&lt;br /&gt;
Example of testing connectivity.&lt;br /&gt;
 for i in $(grep -E &#039;ocp-[0-9]{2}-&#039; /etc/hosts | awk &#039;{print $2}&#039;) ; do echo -e &amp;quot;$(fping --timeout=10 --elapsed $i)\t$(nc -v -w1 $i 22 &amp;lt;/dev/null 2&amp;gt;&amp;amp;1 | strings | xargs)&amp;quot; ; done | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=free=&lt;br /&gt;
You have 15956MB physical ram. 9033MB is used by applications. 6922MB is free.&lt;br /&gt;
 free -m&lt;br /&gt;
              total       used       free     shared    buffers     cached&lt;br /&gt;
 Mem:         15956      15755        200          0        300       6421&lt;br /&gt;
 -/+ buffers/cache:       9033       6922&lt;br /&gt;
 Swap:        19998       2405      17593&lt;br /&gt;
&lt;br /&gt;
=free new=&lt;br /&gt;
Total memory 8076624k and 5169152 free.&lt;br /&gt;
              total        used        free      shared  buff/cache   available&lt;br /&gt;
 Mem:        8076624     2536328     1069132      284152     4471164     5169152&lt;br /&gt;
 Swap:       7815164     2809244     5005920&lt;br /&gt;
&lt;br /&gt;
Free memory usage from /proc/zoneinfo and /proc/meminfo&lt;br /&gt;
 awk -v low=$(grep low /proc/zoneinfo | awk &#039;{k+=$2}END{print k}&#039;)  &#039;{a[$1]=$2} END{print a[&amp;quot;MemFree:&amp;quot;]+a[&amp;quot;Active(file):&amp;quot;]+a[&amp;quot;Inactive(file):&amp;quot;]+a[&amp;quot;SReclaimable:&amp;quot;]-(12*low);}&#039; /proc/meminfo&lt;br /&gt;
 5168456&lt;br /&gt;
==physical memory==&lt;br /&gt;
Show physical memory in machine. Consider points below.&lt;br /&gt;
 grep MemTotal /proc/meminfo&lt;br /&gt;
meminfo:&lt;br /&gt;
 Provides information about distribution and utilisation of memory. This varies by architecture and compile options...&lt;br /&gt;
MemTotal: &lt;br /&gt;
 Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)&lt;br /&gt;
Gives more information not really sure how.&lt;br /&gt;
 dmesg|grep Memory:&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 dmidecode -t memory&lt;br /&gt;
 lshw -class memory&lt;br /&gt;
&lt;br /&gt;
=fstab=&lt;br /&gt;
Use ram for some logfiles.&lt;br /&gt;
 none             /var/log/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /tmp/                  tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/tmp/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/spool/            tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
&lt;br /&gt;
=fswebcam=&lt;br /&gt;
Capture photo.&lt;br /&gt;
 fswebcam -r 1920x1080 --jpeg 85 -D 1 --quiet --no-banner shot.jpg&lt;br /&gt;
 fswebcam -d /dev/video0 -i 0 -r 2592x1944 -p YUYV /net/10.111.222.1/storage/temp/logitech.jpg&lt;br /&gt;
=fwupdmgr=&lt;br /&gt;
 fwupdmgr get-devices --show-all-devices&lt;br /&gt;
 fwupdmgr get-upgrades&lt;br /&gt;
 fwupdmgr update $device_id&lt;br /&gt;
&lt;br /&gt;
=genisoimage=&lt;br /&gt;
 genisoimage -o nuc.iso nuc&lt;br /&gt;
=gnome-font-viewer=&lt;br /&gt;
view fonts&lt;br /&gt;
 gnome-font-viewer /file.woff2&lt;br /&gt;
=gnome-monitor-config=&lt;br /&gt;
Set one monitor. Disable all others.&lt;br /&gt;
 gnome-monitor-config set -LpM HDMI-2&lt;br /&gt;
Get monitor settings&lt;br /&gt;
 WINDOWS + p&lt;br /&gt;
&lt;br /&gt;
=gpg=&lt;br /&gt;
Password encryption decryption with gnupg.&lt;br /&gt;
 gpg -c --force-mdc /temp/shadow&lt;br /&gt;
 echo &amp;quot;$(gpg -qd /temp/shadow.gpg)&amp;quot;&lt;br /&gt;
==create keys==&lt;br /&gt;
 gpg --full-generate-key&lt;br /&gt;
==list secret keys==&lt;br /&gt;
 gpg --list-secret-keys --keyid-format LONG&lt;br /&gt;
==delete secret keys==&lt;br /&gt;
 gpg --delete-secret-key liza&lt;br /&gt;
&lt;br /&gt;
==list public keys==&lt;br /&gt;
 gpg --list-public-keys --keyid-format LONG&lt;br /&gt;
&lt;br /&gt;
==export public key==&lt;br /&gt;
 gpg --armor --export 3AA5C34371567BD2&lt;br /&gt;
==export private key==&lt;br /&gt;
 gpg --armor --export-secret-keys 3AA5C34371567BD2&lt;br /&gt;
==export secret subkey==&lt;br /&gt;
 gpg --armor --export-secret-subkeys 3AA5C34371567BD2&lt;br /&gt;
==import keys==&lt;br /&gt;
 gpg --import pub.key&lt;br /&gt;
 gpg --import sec.key&lt;br /&gt;
 gpg --import sub.key&lt;br /&gt;
==add trust to private key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669 trust quit # 5 y&lt;br /&gt;
&lt;br /&gt;
==edit gpg key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669&lt;br /&gt;
==send gpg key==&lt;br /&gt;
 gpg --send-key 6252FC9A029A2669&lt;br /&gt;
==delete public key==&lt;br /&gt;
 gpg --delete-key &amp;quot;User Name&amp;quot;&lt;br /&gt;
==change trust level on  all keys==&lt;br /&gt;
 gpg --list-keys --fingerprint |grep pub -A 1|egrep -Ev &amp;quot;pub|--&amp;quot;|tr -d &#039; &#039;  | awk &#039;BEGIN { FS = &amp;quot;\n&amp;quot; } ; { print $1&amp;quot;:6:&amp;quot; } &#039; | gpg --import-ownertrust&lt;br /&gt;
==get info about gpg encrypted file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp&lt;br /&gt;
==list keys in gpg file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp # | grep keyid&lt;br /&gt;
==get public key from command above==&lt;br /&gt;
 gpg --recv-keys 754817487F42735A&lt;br /&gt;
==encrypt file==&lt;br /&gt;
 gpg --encrypt --recipient user1@inter.net --recipient user2@inter.net --recipient user3@inter.net file.txt&lt;br /&gt;
&lt;br /&gt;
==decrypt gpg file==&lt;br /&gt;
 gpg --decrypt vpn-0ea602e33ab9c49fd.txt.gpg&lt;br /&gt;
&lt;br /&gt;
==who has encrypted file==&lt;br /&gt;
 gpg --pinentry-mode cancel --list-packets file.gpg&lt;br /&gt;
==remove expired public keys==&lt;br /&gt;
 for i in $(gpg --list-public-keys --keyid-format LONG 2&amp;gt;&amp;amp;1 | grep -A1 -B1 expired | grep -Ev &#039;^$|^pub|^uid&#039;) ; do gpg --delete-key $i ; done&lt;br /&gt;
&lt;br /&gt;
=pgpdump=&lt;br /&gt;
 pgpdump &amp;lt;(curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg)&lt;br /&gt;
=gphoto2=&lt;br /&gt;
Capture photo from the command line linux.&lt;br /&gt;
 gphoto2 --camera=&#039;Canon EOS 40D (PTP mode)&#039; --port=usb: --capture-image-and-download&lt;br /&gt;
&lt;br /&gt;
=graphviz=&lt;br /&gt;
Create graph.&lt;br /&gt;
 dot -Tps /flow -o /tmp/flow.ps&lt;br /&gt;
&lt;br /&gt;
=grep=&lt;br /&gt;
Colorize grep output.&lt;br /&gt;
 grep --color=always -r &#039;10\.7\.&#039; /opt/ongame/&lt;br /&gt;
Show non comment lines ending with a blank.&lt;br /&gt;
 find . -name &#039;*.properties&#039; -exec grep --color=always -E &#039;^[^#].*\ $&#039; {} \; | less -SR&lt;br /&gt;
grep ipaddress from message file.&lt;br /&gt;
 sudo grep DHCP /var/log/messages | grep -oir --color=always &#039;192\.168\.[0-9]*\.[0-9]*&#039; | sort -u&lt;br /&gt;
 grep -E &#039;([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))&#039;&lt;br /&gt;
grep ipaddress from file&lt;br /&gt;
 grep -E &#039;[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}&#039;&lt;br /&gt;
grep for tab&lt;br /&gt;
 grep 10.199.2.1$&#039;\t&#039; /etc/hosts&lt;br /&gt;
grep from word containing regex space separated.&lt;br /&gt;
 grep -oE &#039;\S*regex\S*&#039; /file&lt;br /&gt;
When grep start to complain about file being binary run the following command to define where.&lt;br /&gt;
 grep -Pa &#039;\x00&#039; /temp/file_name&lt;br /&gt;
Remove binary part of file.&lt;br /&gt;
 sed -i &#039;s/\x00//g&#039; /temp/file_name&lt;br /&gt;
Grep email addresses.&lt;br /&gt;
 grep -E -o &amp;quot;\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b&amp;quot; filename.txt&lt;br /&gt;
Grep for exact string like \&lt;br /&gt;
 grep -F \\ blabla.json&lt;br /&gt;
=grepcidr=&lt;br /&gt;
 grepcidr -v 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&lt;br /&gt;
&lt;br /&gt;
=growpart=&lt;br /&gt;
 growpart /dev/vda 5&lt;br /&gt;
 btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
=gsettings=&lt;br /&gt;
Emulate 3 button mouse&lt;br /&gt;
 gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true&lt;br /&gt;
Blinking cursor disable&lt;br /&gt;
 gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \&#039;)/ cursor-blink-mode off&lt;br /&gt;
List settings&lt;br /&gt;
 gsettings list-recursively&lt;br /&gt;
&lt;br /&gt;
=gsync=&lt;br /&gt;
Install gsync&lt;br /&gt;
 git clone https://github.com/iwonbigbro/gsync.git&lt;br /&gt;
 cd gsync/&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
Download data.&lt;br /&gt;
 gsync -u -r -t -v --progress --delete -l -s drive://motion/ /temp/motion2/&lt;br /&gt;
&lt;br /&gt;
=gzip=&lt;br /&gt;
Compress a stream.&lt;br /&gt;
 find . | gzip -9 &amp;gt; /tmp/file_list.gz&lt;br /&gt;
&lt;br /&gt;
=gscan2pdf=&lt;br /&gt;
Scan and ocr pdf dokuments&lt;br /&gt;
&lt;br /&gt;
=Handbrake=&lt;br /&gt;
Compress dvd&lt;br /&gt;
#Rip dvd.&lt;br /&gt;
 sudo vobcopy -o /storage/temp/ -v -x -l&lt;br /&gt;
#compress video.&lt;br /&gt;
 HandBrakeCLI -e x264 -Z Normal -i source.vob -o destination.mkv -a 2 -r 25 -E faac -f mkv -d -S 600 --crop 0:0:0:0&lt;br /&gt;
#Create film for android.&lt;br /&gt;
 HandBrakeCLI -i 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.vob -o 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.mp4 -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1 -e x264 --vb 300 -E faac --ab 128 --maxWidth 320 -2 -T -d&lt;br /&gt;
# Compress.&lt;br /&gt;
 SOURCE=/ssd/temp ; DESTINATION=/temp ; for FILM in $(cd ${SOURCE}; ls *.mov | sed &#039;s/\.mov$//g&#039;); do HandBrakeCLI -e x264 -q 20 -B 160 -i ${SOURCE}/${FILM}.mov -o ${DESTINATION}/${FILM}.mp4 ;done&lt;br /&gt;
# High profile&lt;br /&gt;
 HandBrakeCLI -i DVD -o ~/Movies/movie.mp4  -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --strict-anamorphic -m -x ref=2:bframes=2:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0&lt;br /&gt;
=hashid=&lt;br /&gt;
Identify hash strings.&lt;br /&gt;
 hashid&lt;br /&gt;
&lt;br /&gt;
=heif-convert=&lt;br /&gt;
 heif-convert image.HEIC new-image.jpg&lt;br /&gt;
=hostnamectl=&lt;br /&gt;
 hostnamectl set-hostname rocky_8_1&lt;br /&gt;
&lt;br /&gt;
=htmldoc=&lt;br /&gt;
Convert html document to pdf&lt;br /&gt;
 htmldoc --webpage -f php_html_doc.pdf /home/andreasbj/php_manual_en.html 2&amp;gt;/tmp/htmldoc&lt;br /&gt;
=htpasswd=&lt;br /&gt;
Add user to htpasswd file.&lt;br /&gt;
 htpasswd -b /etc/httpd/conf/htpasswd &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=hunspell=&lt;br /&gt;
 hunspell -d sv_SE swedish.txt&lt;br /&gt;
=hydra=&lt;br /&gt;
Password checking.&lt;br /&gt;
 hydra -l root -P /etc/passwdknown -t 5 192.168.29.62 ssh2&lt;br /&gt;
&lt;br /&gt;
=ifconfig=&lt;br /&gt;
Configure network.&lt;br /&gt;
 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up&lt;br /&gt;
ip address alias&lt;br /&gt;
 ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0&lt;br /&gt;
Network configuration Full config.&lt;br /&gt;
 echo -e &amp;quot;options timeout:1 attempts:1&lt;br /&gt;
 domain halfface.se&lt;br /&gt;
 nameserver 84.246.88.10&lt;br /&gt;
 nameserver 84.246.88.20&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
 ifconfig eth0 89.253.75.84 netmask 255.255.255.224 up&lt;br /&gt;
 route add default gw 89.253.75.65 eth0&lt;br /&gt;
Vip on loopback /etc/sysconfig/network-scripts/ifcfg-lo:ipdbm&lt;br /&gt;
 DEVICE=lo:ipdbm&lt;br /&gt;
 IPADDR=192.168.122.2&lt;br /&gt;
 NETMASK=255.255.255.255&lt;br /&gt;
 NETWORK=192.168.122.0&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
Setting up multiple addresses. ifcfg-eth0-range0 &lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR_START=192.168.122.3&lt;br /&gt;
 IPADDR_END=192.168.122.15&lt;br /&gt;
ifcfg-eth0&lt;br /&gt;
 DEVICE=eth0&lt;br /&gt;
 BOOTPROTO=static&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR=10.111.222.2&lt;br /&gt;
 NETMASK=255.255.255.0&lt;br /&gt;
 GATEWAY=10.111.222.1&lt;br /&gt;
 DNS1=10.111.222.253&lt;br /&gt;
 DNS2=10.111.222.254&lt;br /&gt;
 DOMAIN=&amp;quot;halfface.se subdomain.halfface.se&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=imv=&lt;br /&gt;
Image viewer for wayland&lt;br /&gt;
 imv . -f -s full&lt;br /&gt;
&lt;br /&gt;
=ilo=&lt;br /&gt;
log in to ilo&lt;br /&gt;
 env -u LANG ssh -v Ongame@10.1.1.94&lt;br /&gt;
restart ilo&lt;br /&gt;
 reset map1&lt;br /&gt;
start system&lt;br /&gt;
 start system1&lt;br /&gt;
&lt;br /&gt;
=install=&lt;br /&gt;
Crete directory&lt;br /&gt;
 install -d --mode=755 --owner=user --group=group /apps/IP/IPim/var/log&lt;br /&gt;
Create empty file&lt;br /&gt;
 install -o 0664 -o user -g group /dev/null ${ALFRESCO_DIR}/logs/catalina.out&lt;br /&gt;
=inotifywathc=&lt;br /&gt;
Se what access /dev/random&lt;br /&gt;
 inotifywatch -v -t 60 /dev/random&lt;br /&gt;
&lt;br /&gt;
=inxi=&lt;br /&gt;
inventory report.&lt;br /&gt;
 inxi -Frmxx&lt;br /&gt;
=iostat=&lt;br /&gt;
 iostat -xtc 5&lt;br /&gt;
 -x extended statistics.&lt;br /&gt;
 -t print time for each report.&lt;br /&gt;
 -c display the cpu utalization report.&lt;br /&gt;
 -y Omit first report with statistics since the system boot&lt;br /&gt;
==iostat -xty 5 1 dm-3==&lt;br /&gt;
 Linux 2.6.32-573.7.1.el6.x86_64 (machine.se)      12/30/2021      _x86_64_        (12 CPU)&lt;br /&gt;
 12/30/2021 11:47:42 AM&lt;br /&gt;
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle&lt;br /&gt;
            0.12    0.00    2.01    4.23    0.00   93.65&lt;br /&gt;
 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util&lt;br /&gt;
 dm-3              0.00     0.00 5806.20    0.00 1485056.00     0.00   255.77     1.54    0.27   0.17  97.44&lt;br /&gt;
&lt;br /&gt;
 # Explained.&lt;br /&gt;
 rrqm/s   The number of read requests merged per second that were queued to the device.&lt;br /&gt;
 wrqm/s   The number of write requests merged per second that were queued to the device.&lt;br /&gt;
 r/s      The number of read requests that were issued to the device per second.&lt;br /&gt;
 w/s      The number of write requests that were issued to the device per second.&lt;br /&gt;
 rsec/s   The number of sectors read from the device per second.&lt;br /&gt;
 wsec/s   The number of sectors written to the device per second.&lt;br /&gt;
 avgrq-sz The average size (in sectors) of the requests that were issued to the device.&lt;br /&gt;
 avgqu-sz The average queue length of the requests that were issued to the device.&lt;br /&gt;
 await    The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.&lt;br /&gt;
 svctm    The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future sysstat version.&lt;br /&gt;
 %util    Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.&lt;br /&gt;
&lt;br /&gt;
=iotop=&lt;br /&gt;
iotop with dates for output to logfile.&lt;br /&gt;
 DATE=$(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;) ; sudo iotop -kbon1 | head -2 | while read i ; do echo $DATE $i ; done&lt;br /&gt;
&lt;br /&gt;
=ip=&lt;br /&gt;
==Add vlan 23==&lt;br /&gt;
 ip link add link eno1 name eno1.23 type vlan id 23&lt;br /&gt;
==View vlan protocol==&lt;br /&gt;
 ip -d link show eno1.23&lt;br /&gt;
==Configure vlan==&lt;br /&gt;
 ip addr add 10.151.23.101/24 brd 10.151.23.255 dev eno1.23&lt;br /&gt;
 ip link set dev eno1.23 up&lt;br /&gt;
==create default route==&lt;br /&gt;
 ip route add default via 192.168.1.254&lt;br /&gt;
==show routing==&lt;br /&gt;
 ip route show&lt;br /&gt;
more info&lt;br /&gt;
 ip route show table all&lt;br /&gt;
==Add static route==&lt;br /&gt;
 ip route add 10.10.20.0/24 via 192.168.50.100 dev eth0&lt;br /&gt;
==Remove static route.==&lt;br /&gt;
 ip route del 10.10.20.0/24&lt;br /&gt;
==which outgoing interfaces are available.==&lt;br /&gt;
 ip r l| awk &#039;/src/{print $9}&#039;&lt;br /&gt;
==Which route is used for ip.==&lt;br /&gt;
 ip route get 192.168.122.252&lt;br /&gt;
==route subnet over interface.==&lt;br /&gt;
 sudo ip route add 145.251.242.0/24 dev tun0&lt;br /&gt;
==Show ipaddress on interface tun0==&lt;br /&gt;
 ip address show tun0&lt;br /&gt;
==vlan tag interface.==&lt;br /&gt;
 ip link add link eth0 name eth0.8 type vlan id 8&lt;br /&gt;
==set ip on interface.==&lt;br /&gt;
 ip addr add 192.168.50.5 dev eth1&lt;br /&gt;
 ip addr add 192.168.50.5/24 dev eth1&lt;br /&gt;
==set secondary ip on interface==&lt;br /&gt;
 ip addr add 192.168.1.2/24 dev eth0&lt;br /&gt;
==remove ip address.==&lt;br /&gt;
 ip addr del 192.168.50.5/24 dev eth1&lt;br /&gt;
==enable interface==&lt;br /&gt;
 ip link set eth1 up&lt;br /&gt;
==disable interface==&lt;br /&gt;
 ip link set eth1 down&lt;br /&gt;
==list arp entries.==&lt;br /&gt;
 ip neigh show&lt;br /&gt;
==local routing table==&lt;br /&gt;
 ip route list table local&lt;br /&gt;
==rule base routing. List rules==&lt;br /&gt;
 ip rule show&lt;br /&gt;
==show multicast networks==&lt;br /&gt;
 ip maddr show&lt;br /&gt;
==Disable traffic to an ipaddress.==&lt;br /&gt;
 ip route add blackhole 10.151.19.151&lt;br /&gt;
==dynamic/random mac wifi disable==&lt;br /&gt;
 MAC=$(ip link show | grep link/ | grep -v 00:00:00:00:00:00 | awk &#039;{print $2}&#039;) ; nmcli -f TYPE,NAME connection show | grep ^wifi | sed &#039;s/^wifi *//g&#039; | while read i ; do echo &#039;*&#039; $i ; nmcli connection modify &amp;quot;${i}&amp;quot; 802-11-wireless.cloned-mac-address $MAC ; done&lt;br /&gt;
==change mtu==&lt;br /&gt;
 sudo ip link set dev ens3 mtu 1400&lt;br /&gt;
==network namespaces==&lt;br /&gt;
 ip netns list&lt;br /&gt;
&lt;br /&gt;
=ip2location=&lt;br /&gt;
 ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB&lt;br /&gt;
 sed &#039;s/ \+/\t/g&#039; haproxy.log | cut -f 9 | sort -u | while read IP ; do ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB | tail -n1 ; done | column_tab | sort&lt;br /&gt;
=ipcalc=&lt;br /&gt;
 ipcalc -n 192.121.85.96/27 -m&lt;br /&gt;
&lt;br /&gt;
=iperf=&lt;br /&gt;
start server on client A.&lt;br /&gt;
 iperf -s&lt;br /&gt;
start measure from the other host. Limit bandwidth to 10k.&lt;br /&gt;
 iperf -c 10.20.30.40 --bandwidth 10K&lt;br /&gt;
==Multicast test.==&lt;br /&gt;
On the listener side:&lt;br /&gt;
 iperf -s -u -B 224.1.1.1 -i 1&lt;br /&gt;
On sender&lt;br /&gt;
 iperf -c 224.1.1.1 -u -T 32 -t 3 -i 1&lt;br /&gt;
&lt;br /&gt;
=ipmitool=&lt;br /&gt;
What is the power consumtion of dell server.&lt;br /&gt;
 ipmitool -I lanplus -H 127.0.0.1 -U root -P calvin delloem powermonitor&lt;br /&gt;
 ipmitool lan print&lt;br /&gt;
 ipmitool sdr list&lt;br /&gt;
&lt;br /&gt;
=iptables=&lt;br /&gt;
==Show iptables OUTPUT, PREROUTING and POSTROUTING==&lt;br /&gt;
 iptables --table nat --list --exact --verbose --numeric --line-number&lt;br /&gt;
==Show config==&lt;br /&gt;
 iptables -L -t nat -n&lt;br /&gt;
==Dnat to localhost.==&lt;br /&gt;
 iptables -t nat -I PREROUTING --source 131.115.115.53 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
 iptables -t nat -I OUTPUT --source 131.115.115.53 --destination 127.0.0.1 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
==Flush all rules.==&lt;br /&gt;
 &lt;br /&gt;
 iptables -F&lt;br /&gt;
 iptables -X&lt;br /&gt;
 iptables -t nat -F&lt;br /&gt;
 iptables -t nat -X&lt;br /&gt;
 iptables -t mangle -F&lt;br /&gt;
 iptables -t mangle -X&lt;br /&gt;
 iptables -P INPUT ACCEPT&lt;br /&gt;
 iptables -P FORWARD ACCEPT&lt;br /&gt;
 iptables -P OUTPUT ACCEPT&lt;br /&gt;
&lt;br /&gt;
==Block==&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j DROP&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block outgoing mail==&lt;br /&gt;
 iptables -A OUTPUT -p tcp --dport 25 -o $INTERFACE -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block all traffic except ssh in/out log to syslog.==&lt;br /&gt;
 iptables -P INPUT DROP&lt;br /&gt;
 iptables -P OUTPUT DROP&lt;br /&gt;
 iptables -P FORWARD DROP&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A INPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-in&amp;quot;&lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Block traffic on certain port.==&lt;br /&gt;
 iptables -A INPUT -p tcp --dport 7009 -j REJECT&lt;br /&gt;
==Fake source==&lt;br /&gt;
 iptables -t nat -A POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot; &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
 # Remove the current rules&lt;br /&gt;
 iptables -t nat -D POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot;&lt;br /&gt;
==redirect ip==&lt;br /&gt;
Send traffic destined for one ip and port to another ip and port.&lt;br /&gt;
 iptables -t nat -A OUTPUT -p tcp -d 146.213.6.7 --dport 1023 -j DNAT --to-destination 10.199.150.111:1023&lt;br /&gt;
 iptables -t nat -A OUTPUT -p icmp -d 146.213.6.7 -j DNAT --to-destination 10.199.150.111&lt;br /&gt;
==allow trafic from subnet==&lt;br /&gt;
 iptables -A INPUT -s 172.16.27.0/24 -j ACCEPT&lt;br /&gt;
==allow ssh from all==&lt;br /&gt;
 iptables -A INPUT -p tcp -dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -p tcp -dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT&lt;br /&gt;
or&lt;br /&gt;
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
 -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
==find which rule is blocking by removing one at a time. Better way is to enable logging==&lt;br /&gt;
 iptables -L -n --line-numbers&lt;br /&gt;
 iptables -D &amp;lt;line-number&amp;gt;&lt;br /&gt;
==List rules from OUTPUT chain with line number==&lt;br /&gt;
 iptables -t filter -L OUTPUT --line-numbers -n&lt;br /&gt;
&lt;br /&gt;
==Add rule to specific row number==&lt;br /&gt;
 iptables -I OUTPUT $ROW_NUMBER -d 54.72.175.186/32 -p tcp -m tcp --dport 443 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=irc=&lt;br /&gt;
Close private messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close public messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close a query&lt;br /&gt;
 /q&lt;br /&gt;
=jmtpfs=&lt;br /&gt;
Mount disk&lt;br /&gt;
 jmtpfs /mnt/mtp&lt;br /&gt;
Umount disk&lt;br /&gt;
 fusermount -u /mnt/mtp&lt;br /&gt;
&lt;br /&gt;
=john=&lt;br /&gt;
Test performance&lt;br /&gt;
 john -test&lt;br /&gt;
Recover passwords with password list.&lt;br /&gt;
 john -wordlist:password.lst passfile.txt&lt;br /&gt;
=journalctl=&lt;br /&gt;
==View log from last day.==&lt;br /&gt;
 journalctl --since yesterday&lt;br /&gt;
==List all units.==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==Current disk usage.==&lt;br /&gt;
 journalctl --disk-usage&lt;br /&gt;
==Show only certain error level. (err crit)==&lt;br /&gt;
 journalctl -p err&lt;br /&gt;
==List boots==&lt;br /&gt;
 journalctl --list-boots&lt;br /&gt;
==Show events between two time stamps.==&lt;br /&gt;
 journalctl --since &amp;quot;2017-01-23 05:56:42&amp;quot; --until &amp;quot;2017-01-23 07:56:42&amp;quot;&lt;br /&gt;
==show entries for one unit.==&lt;br /&gt;
 journalctl -u openvpn-server@server&lt;br /&gt;
 journalctl -u sshd  -f&lt;br /&gt;
==iptables logs==&lt;br /&gt;
 journalctl -k -f | grep -i iptables&lt;br /&gt;
==wipe logs==&lt;br /&gt;
 journalctl --vacuum-time=1h&lt;br /&gt;
==compare two different boots==&lt;br /&gt;
 journalctl --since &amp;quot;$(date &#039;+%F %H:%M:%S&#039; --date &#039;-10 hour&#039;)&amp;quot; -u NetworkManager -b -1  -o cat | sed &#039;s/\[[0-9.]*\]//g&#039;&lt;br /&gt;
&lt;br /&gt;
==persistent logging==&lt;br /&gt;
Enable persistent logging in systemd-journald. grep journal /usr/lib/tmpfiles.d/systemd.conf. Install syslog instead.&lt;br /&gt;
 mkdir /var/log/journal &lt;br /&gt;
 chmod 2755 /var/log/journal&lt;br /&gt;
 chown root:systemd-journal /var/log/journal&lt;br /&gt;
 killall -USR1 systemd-journald&lt;br /&gt;
&lt;br /&gt;
=jpegtran=&lt;br /&gt;
 # to lossless cut a file.&lt;br /&gt;
 jpegtran -crop 700x400+2150+1500 2012-05-19_20-39-35.jpg &amp;gt; /photos/Sweden/2012/2012-05-19/2012-05-19_20-39-35.jpg&lt;br /&gt;
 # Rotate counter clockwise.&lt;br /&gt;
 jpegtran  -copy all -rotate 270 2012-08-18_15-06-43.jpg &amp;gt; 2012-08-18_15-06-43_270.jpg&lt;br /&gt;
=kdump=&lt;br /&gt;
Change action to dump memory.&lt;br /&gt;
 /etc/kdump.conf&lt;br /&gt;
 core_collector true&lt;br /&gt;
Reload config.&lt;br /&gt;
 systemctl restart kdump&lt;br /&gt;
=keepass=&lt;br /&gt;
Create database&lt;br /&gt;
 printf &#039;%s\n&#039; &#039;P@55Word&#039;{,} | keepassxc-cli db-create -p -q keepassxc_abjorklund.kdbx&lt;br /&gt;
Add entry to database.&lt;br /&gt;
 keepassxc-cli add keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
Copy password from password entry&lt;br /&gt;
 keepassxc-cli clip keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
&lt;br /&gt;
=keyboard=&lt;br /&gt;
 keymaps &lt;br /&gt;
 dumpkeys&lt;br /&gt;
 loadkeys sv-latin1&lt;br /&gt;
 loadkeys us&lt;br /&gt;
 setxkbmap en&lt;br /&gt;
 setxkbmap -layout se -variant nodeadkeys&lt;br /&gt;
reset corrupt keyboard after using vmware.&lt;br /&gt;
 setxkbmap&lt;br /&gt;
&lt;br /&gt;
=kill=&lt;br /&gt;
suspend/resume a jobb.&lt;br /&gt;
 # kill -STOP PID&lt;br /&gt;
 # kill -CONT PID&lt;br /&gt;
=kpartx=&lt;br /&gt;
 # Create device files from disk image.&lt;br /&gt;
 sudo kpartx -av disk_image.raw &lt;br /&gt;
 # Remove device files.&lt;br /&gt;
 sudo kpartx -d disk_image.raw&lt;br /&gt;
&lt;br /&gt;
=lastb=&lt;br /&gt;
Show failed ssh logins.&lt;br /&gt;
 lastb&lt;br /&gt;
=less=&lt;br /&gt;
Toggle line wrap&lt;br /&gt;
 - -&amp;gt; S&lt;br /&gt;
tail with less. CTRL + c = scroll around. SHIFT + f = to tail again.&lt;br /&gt;
 less +F -B /tmp/tmp&lt;br /&gt;
=lftp=&lt;br /&gt;
 lftp -u &amp;lt;user&amp;gt;,&amp;lt;password&amp;gt; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
With proxy.&lt;br /&gt;
 lftp -e &amp;quot;set ftp:proxy http://&amp;lt;url&amp;gt;:3128 ; set ssl:verify-certificate no; open -u user,password ftp://ftp.example.se/&amp;quot;&lt;br /&gt;
Workaround.&lt;br /&gt;
 lftp -e &#039;set ftp:use-feat false; set ftp:ssl-allow false&#039; -u user,passwor ftp.example.se&lt;br /&gt;
Run commands from cli.&lt;br /&gt;
 lftp -u &#039;&amp;lt;user&amp;gt;,&amp;lt;password&amp;gt;&#039; -e &#039;set ssl:verify-certificate no ; ls -la ; quit&#039; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=ln=&lt;br /&gt;
Create link even if it exists.&lt;br /&gt;
 ln -sfT /destination link&lt;br /&gt;
&lt;br /&gt;
=locale=&lt;br /&gt;
To show 24 hour format.&lt;br /&gt;
 LC_ALL=C&lt;br /&gt;
=localectl=&lt;br /&gt;
Change keyboard.&lt;br /&gt;
 localectl list-keymaps&lt;br /&gt;
 localectl set-keymap se-nodeadkeys&lt;br /&gt;
 localectl set-x11-keymap se-nodeadkeys&lt;br /&gt;
&lt;br /&gt;
=lock=&lt;br /&gt;
locking keyboard under linux.&lt;br /&gt;
 lock-keyboard-for-baby&lt;br /&gt;
=logging=&lt;br /&gt;
bash create log.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 exec &amp;gt; /logfile&lt;br /&gt;
alternative&lt;br /&gt;
 exec 2&amp;gt;/tmp/log&lt;br /&gt;
Read logs on system.&lt;br /&gt;
 tail -f $(lsof | grep log$ |awk &#039;{ print $NF }&#039; | sort -u |xargs)&lt;br /&gt;
=logrotate=&lt;br /&gt;
Test dry run logrotate file. -d=debug -f=force&lt;br /&gt;
 logrotate -d -f /etc/logrotate.conf&lt;br /&gt;
Force logrotate in verbose mode.&lt;br /&gt;
 logrotate -v -f /etc/logrotate.conf&lt;br /&gt;
Create logrotate config entry.&lt;br /&gt;
 # Configure log rotation.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/logrotate.d/ipmonperfj_cleanupdaemon&lt;br /&gt;
 /directory/logs/cleanupdaemon.log {&lt;br /&gt;
    copytruncate&lt;br /&gt;
    size 100M&lt;br /&gt;
    rotate 60&lt;br /&gt;
    compress&lt;br /&gt;
    missingok&lt;br /&gt;
    olddir old&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
Disable logrotate. Look for file extension to ignore.&lt;br /&gt;
 man logrotate.conf, you can read find tabooext&lt;br /&gt;
 Ex. mv /etc/logrotate.d/mysql{,.rpmsave}&lt;br /&gt;
&lt;br /&gt;
=losetup=&lt;br /&gt;
Create loopback devices for partitions in image. Force the kernel to scan the partition table on a newly created loop device&lt;br /&gt;
 losetup -P /dev/loop2 harddrive.img&lt;br /&gt;
Set up next available device read only.&lt;br /&gt;
 losetup -f -r /temp/rb-slog05/sda6&lt;br /&gt;
Show all&lt;br /&gt;
 losetup -a&lt;br /&gt;
detatach&lt;br /&gt;
 losetup -d /dev/loop2&lt;br /&gt;
&lt;br /&gt;
=ls=&lt;br /&gt;
 ls -la --time-style=&amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; *.3gp&lt;br /&gt;
List processes in epoch date&lt;br /&gt;
 ( cd /proc; ls -rtd --full-time --time-style=+%s [0123456789]*; )&lt;br /&gt;
=lsblk=&lt;br /&gt;
 lsblk -d -o NAME,ROTA,MODEL&lt;br /&gt;
=lshw=&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 lshw -C memory&lt;br /&gt;
&lt;br /&gt;
==Is cpu 32 or 64bit.==&lt;br /&gt;
 lshw -class processor&lt;br /&gt;
&lt;br /&gt;
=lsof=&lt;br /&gt;
List recurivly all process that have a path open.&lt;br /&gt;
 lsof +D /apps/&lt;br /&gt;
which ports has a process opened?&lt;br /&gt;
 lsof -Pan -p 13354 -i&lt;br /&gt;
=lspci=&lt;br /&gt;
List devices without drivers.&lt;br /&gt;
 lspci -nnk&lt;br /&gt;
&lt;br /&gt;
=which process listen to port=&lt;br /&gt;
 lsof -i :443&lt;br /&gt;
&lt;br /&gt;
=mail=&lt;br /&gt;
command line mail with changed from&lt;br /&gt;
 echo message$(date +%F_%H-%M-%S) | mail -s Subject$(date +%F_%H-%M-%S) -r from@inter.net reciever@inter.net&lt;br /&gt;
command line mail with changed from with attachment&lt;br /&gt;
 echo message | mail -s Subject -r from@inter.net -a /attach.ment reciever@inter.net&lt;br /&gt;
Change default sender.&lt;br /&gt;
 # ~/.mailrc &lt;br /&gt;
 # From address for mailx.&lt;br /&gt;
 set from=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot; &lt;br /&gt;
 set replyto=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=man=&lt;br /&gt;
man correct caracters.&lt;br /&gt;
 LANG=C man passwd&lt;br /&gt;
&lt;br /&gt;
man clean for output to file.&lt;br /&gt;
 man [manual] | col -b &amp;gt; file.txt&lt;br /&gt;
Read from section 5&lt;br /&gt;
 man man.5&lt;br /&gt;
&lt;br /&gt;
=mbr=&lt;br /&gt;
backup mbr.&lt;br /&gt;
 # dd if=/dev/sdX of=/temp/sdx-mbr bs=512 count=1&lt;br /&gt;
&lt;br /&gt;
restore mbr&lt;br /&gt;
 # dd if=/temp/sdx-mbr of=/dev/sdX bs=446 count=1&lt;br /&gt;
=mdadm=&lt;br /&gt;
Add disk that was lost&lt;br /&gt;
 mdadm /dev/md125 -a /dev/vda1&lt;br /&gt;
&lt;br /&gt;
=minimodem=&lt;br /&gt;
Transmit file via audio.&lt;br /&gt;
 minimodem -t 200 &lt;br /&gt;
Recieve file via audio&lt;br /&gt;
 minimodem -r 200&lt;br /&gt;
&lt;br /&gt;
=mkfs=&lt;br /&gt;
Create fat32 file system.&lt;br /&gt;
 dd if=/dev/zero of=/tmp/sdb bs=32M status=progress conv=fdatasync count=10&lt;br /&gt;
 fdisk /tmp/sdb&lt;br /&gt;
 n&lt;br /&gt;
 &amp;lt;accept all defaults&amp;gt;&lt;br /&gt;
 t&lt;br /&gt;
 b&lt;br /&gt;
 p&lt;br /&gt;
 w&lt;br /&gt;
 mkfs.vfat -F 32 -n MYDRIVE /tmp/sdb1&lt;br /&gt;
==mkfs.ext4==&lt;br /&gt;
Create ext4 filesystem. Overwrite. Label and root reserved to 0.&lt;br /&gt;
 mkfs.ext4 -F -L looted_storage -m 0 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
=mkpasswd=&lt;br /&gt;
Create a password hash&lt;br /&gt;
 echo password | mkpasswd -m sha-512 -s&lt;br /&gt;
&lt;br /&gt;
=mogrify=&lt;br /&gt;
Resize, crop... a file. Removes original.&lt;br /&gt;
 mogrify -resize 800 *.jpg&lt;br /&gt;
=mokutil(secure boot/secureboot=&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
=mount=&lt;br /&gt;
Mount a temporary ram partition&lt;br /&gt;
 mount -t tmpfs tmpfs /mnt -o size=1024&lt;br /&gt;
Mount a cifs filesystem and change owner on mountpoint.&lt;br /&gt;
 mount.cifs -o credentials=/home/user/cifs.credentials,gid=1004,uid=1004 //server/c$ /mnt/cifs&lt;br /&gt;
Disallow normal user to ps. If not belonging to gid 1001.&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
 proc                    /proc                   proc    defaults,hidepid=2,gid=1001        0 0&lt;br /&gt;
&lt;br /&gt;
=movgrab=&lt;br /&gt;
List available formats&lt;br /&gt;
 movgrab -T http://youtu.be/ucivXRBrP_0&lt;br /&gt;
Get version listed.&lt;br /&gt;
 movgrab -f mp4:1920x1080 http://www.youtube.com/v/ucivXRBrP_0&lt;br /&gt;
&lt;br /&gt;
=mplayer=&lt;br /&gt;
mplayer in ascii mode.&lt;br /&gt;
 mplayer -monitoraspect 4:3 -vo aa LinaFreestyler.avi&lt;br /&gt;
 mplayer -vo aa -monitorpixelaspect 0.5 *.mp4&lt;br /&gt;
mplayer on second soundcard.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=0.0 *.mp3&lt;br /&gt;
Or, to specify a non-default (secondary) device either of the following commands can be used.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp1 *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=1.0 *.mp3&lt;br /&gt;
play from v4l&lt;br /&gt;
 mplayer -tv device=/dev/video:driver=v4l:input=1:width=640:height=480:norm=ntsc:adevice=/dev/dsp tv://1 -zoom -aspect 4:3&lt;br /&gt;
 mplayer -fps 15 tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0play hdv material.&lt;br /&gt;
 mplayer -monitoraspect 16:9 -vf pp=lb&lt;br /&gt;
play dvd image.&lt;br /&gt;
 mplayer dvd://1 -dvd-device DVD.iso&lt;br /&gt;
play h264 webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0:outfmt=0x34363248 -aspect 16:10 -fs&lt;br /&gt;
play mjpeg webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:outfmt=mjpeg:width=1920:height=1080:device=/dev/video0 -aspect 16:10 -fs&lt;br /&gt;
play mp3 in different speed keep pitch.&lt;br /&gt;
 mplayer -speed 1.5 -af scaletempo /mp3/music.mp3&lt;br /&gt;
 # list chapters.&lt;br /&gt;
 mplayer dvd://1 -dvd-device /dev/sr0 -identify -novideo -nosound &lt;br /&gt;
 # dump chapters.&lt;br /&gt;
 mplayer -dvd-device /dev/sr0 dvd://3 -dumpstream -dumpfile 3.vob&lt;br /&gt;
&lt;br /&gt;
=MP4Box=&lt;br /&gt;
Combine mp4 files&lt;br /&gt;
 MP4Box -add file1.mp4 -add file2.mp4 output.mp4&lt;br /&gt;
=mpv=&lt;br /&gt;
Video player. Enable hardware accelleration.&lt;br /&gt;
 # Install packages.&lt;br /&gt;
 dnf install intel-media-driver libva libva-utils gstreamer1-vaapi ffmpeg intel-gpu-tools mesa-dri-drivers mpv&lt;br /&gt;
 # Top for intel gpu&lt;br /&gt;
 sudo intel_gpu_top&lt;br /&gt;
 # Enable hardware accelleration for mpv.&lt;br /&gt;
 CONFIG_FILE=~/.config/mpv/mpv.conf ; if ! grep -q ^hwdec=auto ${CONFIG_FILE} ; then echo hwdec=auto ${CONFIG_FILE} ; fi&lt;br /&gt;
 # Create new initramfs&lt;br /&gt;
 sudo dracut --force&lt;br /&gt;
 # Look at browser.&lt;br /&gt;
 chrome://gpu/&lt;br /&gt;
&lt;br /&gt;
=mpstat=&lt;br /&gt;
top like output of system usage&lt;br /&gt;
 mpstat 5 5&lt;br /&gt;
&lt;br /&gt;
=mtr=&lt;br /&gt;
ping and traceroute combined.&lt;br /&gt;
 mtr -rc 10 8.8.8.8&lt;br /&gt;
&lt;br /&gt;
=mutt=&lt;br /&gt;
Put the followin in .muttrc to change From.&lt;br /&gt;
 set realname=&amp;quot;Joe User&amp;quot;&lt;br /&gt;
 set from=&amp;quot;user@host&amp;quot;&lt;br /&gt;
 set use_from=yes&lt;br /&gt;
command line mail with attachment&lt;br /&gt;
 mutt -s subject -a syslogs.tar.gz admin@domain.org &amp;lt; /dev/null&lt;br /&gt;
Change sender from command line.&lt;br /&gt;
 export EMAIL=address@inter.net &amp;amp;&amp;amp; mutt -s &amp;quot;Subject Test&amp;quot; anden@halfface.se &amp;lt; /dev/null&lt;br /&gt;
 echo &amp;quot;Test message&amp;quot; | mutt -s &amp;quot;Subject test&amp;quot; -e &amp;quot;set realname=\&amp;quot;Real Name\&amp;quot;&amp;quot; -e &amp;quot;set from=\&amp;quot;anden@halfface.se\&amp;quot;&amp;quot; -e &amp;quot;set use_from=yes&amp;quot; anden@halfface.se&lt;br /&gt;
Change envolope from&lt;br /&gt;
 export REPLYTO=email@inter.net&lt;br /&gt;
 export EMAIL=email@inter.net&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment&lt;br /&gt;
oneliner&lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment &lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; -s &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; &amp;quot;${EMAIL}&amp;quot;&lt;br /&gt;
Dont trigger out of Out Of Office reply.&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;unignore list-id&amp;quot; email@inter.net&lt;br /&gt;
=multilog=&lt;br /&gt;
split standard output to logfiles. In this case keep specific size. t means to prepend a TAI timestamp on each line. 10000B. 5 logfiles. tai64nlocal program simply reads stdin and replaces TAI timestamps with human-readable ones. http://blog.teksol.info/pages/daemontools/best-practices. Compress rotated logfiles.&lt;br /&gt;
 mkdir /tmp/myapp ; ./myapp | multilog t s10000 n5 &#039;!tai64nlocal&#039; &#039;!gzip&#039; /tmp/myapp 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
=nc (netcat)=&lt;br /&gt;
==Check communication.==&lt;br /&gt;
listen on port 3333.&lt;br /&gt;
 nc -kl 3333&lt;br /&gt;
talk to port 3333.&lt;br /&gt;
 nc 192.168.0.1 3333&lt;br /&gt;
&lt;br /&gt;
==Transfer data==&lt;br /&gt;
Cat file, calculate size listen on port 3333.&lt;br /&gt;
 cat backup.iso | pv -b | nc -l 3333&lt;br /&gt;
Receive file.&lt;br /&gt;
 nc 192.168.0.1 3333 | pv -b &amp;gt; backup.iso&lt;br /&gt;
&lt;br /&gt;
==Setup telnet server==&lt;br /&gt;
 nc -L -l -p1234 -d -e cmd.exe&lt;br /&gt;
&lt;br /&gt;
==Test connection.==&lt;br /&gt;
 nc -w2 -znv 10.1.22.31 7222&lt;br /&gt;
&lt;br /&gt;
==tunnel==&lt;br /&gt;
On the server, we open a listener on the TCP port 6667 which will      forward data to UDP port 53 of a specified IP. If you want to do      DNS forwarding like me, you can take the first nameserver&#039;s IP      you will find in /etc/resolv.conf - in this      example, this is 192.168.1.1. But first, we need to      create a fifo. The fifo is necessary to have two-way      communication between the two channels. A simple shell pipe      would only communicate left process&#039; standard output to right      process&#039; standard input.&lt;br /&gt;
&lt;br /&gt;
 mkfifo /tmp/fifo&lt;br /&gt;
 nc -l -p 6667 &amp;lt; /tmp/fifo | nc -u 192.168.1.1 53 &amp;gt; /tmp/fifo&lt;br /&gt;
&lt;br /&gt;
==Dont eat up standard output.==&lt;br /&gt;
 nc -v --send-only --recv-only localhost 22&lt;br /&gt;
&lt;br /&gt;
==Talk to pop3 server over ssl.==&lt;br /&gt;
 nc --ssl mail.tele2.se 995&lt;br /&gt;
==Talk to pop server==&lt;br /&gt;
 nc -C mail.tele2.se 25&lt;br /&gt;
&lt;br /&gt;
==Talk to web server==&lt;br /&gt;
 URL_SSL=halfface.se ; echo -e &amp;quot;HEAD / HTTP/1.1\nHost: ${URL_SSL}\n\n&amp;quot; | nc --ssl ${URL_SSL} 443&lt;br /&gt;
 echo -e &#039;GET /users/password/new HTTP/1.1\r\nHost: localhost\r\nConnection: Close\r\n\r\n&#039; | nc localhost 80 | head&lt;br /&gt;
To overcome problems with nc closing connection too fast.&lt;br /&gt;
 (echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;; sleep .1) | nc 172.30.156.15 80 | head -30&lt;br /&gt;
 nc --no-shutdown -v 172.30.156.15 80 &amp;lt;&amp;lt;&amp;lt;$(echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;)&lt;br /&gt;
&lt;br /&gt;
=ncdu=&lt;br /&gt;
disk usage. Stay in one filesystem.&lt;br /&gt;
 ncdu -x /&lt;br /&gt;
=net=&lt;br /&gt;
Start service via samba.&lt;br /&gt;
 net rpc service start ipremote -I 172.17.255.99 -U &#039;domain/user%password&#039;&lt;br /&gt;
&lt;br /&gt;
=netstat=&lt;br /&gt;
Look at network connections. tcp/ip4.&lt;br /&gt;
 netstat -4anpt&lt;br /&gt;
Look at multicast groups&lt;br /&gt;
 netstat -g&lt;br /&gt;
What does it mean?=&lt;br /&gt;
   ESTABLISHED&lt;br /&gt;
          The socket has an established connection.&lt;br /&gt;
   SYN_SENT&lt;br /&gt;
          The socket is actively attempting to establish a connection.&lt;br /&gt;
   SYN_RECV&lt;br /&gt;
          A connection request has been received from the network.&lt;br /&gt;
   FIN_WAIT1&lt;br /&gt;
          The socket is closed, and the connection is shutting down.&lt;br /&gt;
   FIN_WAIT2&lt;br /&gt;
          Connection is closed, and the socket is waiting for  a  shutdown&lt;br /&gt;
          from the remote end.&lt;br /&gt;
   TIME_WAIT&lt;br /&gt;
          The socket is waiting after close to handle packets still in the&lt;br /&gt;
          network.&lt;br /&gt;
   CLOSE  The socket is not being used.&lt;br /&gt;
   CLOSE_WAIT&lt;br /&gt;
          The remote end has shut down, waiting for the socket to close.&lt;br /&gt;
   LAST_ACK&lt;br /&gt;
          The remote end has shut down, and the socket is closed.  Waiting&lt;br /&gt;
          for acknowledgement.&lt;br /&gt;
   LISTEN The  socket is listening for incoming connections.  Such sockets&lt;br /&gt;
          are  not  included  in  the  output  unless  you   specify   the&lt;br /&gt;
          --listening (-l) or --all (-a) option.&lt;br /&gt;
   CLOSING&lt;br /&gt;
          Both  sockets are shut down but we still don&#039;t have all our data&lt;br /&gt;
          sent.&lt;br /&gt;
   UNKNOWN&lt;br /&gt;
          The state of the socket is unknown.&lt;br /&gt;
==statistics==&lt;br /&gt;
 netstat -s&lt;br /&gt;
 netstat -s | retransmit&lt;br /&gt;
&lt;br /&gt;
=nft=&lt;br /&gt;
nftables list config&lt;br /&gt;
 nft -j list ruleset | jq . &lt;br /&gt;
=nmap=&lt;br /&gt;
Scan for open ssh ports.&lt;br /&gt;
 nmap -p 22 --open -sV 10.0.0.*&lt;br /&gt;
 nmap -p 22 -sV --open -oG - $(ip -4 a s $(ip route show default | awk &#039;{print $5}&#039;) | grep inet | awk &#039;{print $2}&#039;) | awk &#039;/\/open\// {print $2,$3}&#039;&lt;br /&gt;
Syn scan.&lt;br /&gt;
 nmap -P0 -sS -p1023 www.halfface.se&lt;br /&gt;
Ping scan. Do not resolve.&lt;br /&gt;
 nmap -sn -n 10.127.254.1-254&lt;br /&gt;
Which ciphers are allowed.&lt;br /&gt;
 nmap --script ssl-enum-ciphers -p 465 www.halfface.se&lt;br /&gt;
arp scan.&lt;br /&gt;
 nmap -PR 192.168.0.0/24&lt;br /&gt;
which kex_algorithms server_host_key_algorithms encryption_algorithms compression_algorithms&lt;br /&gt;
 nmap --script ssh2-enum-algos -sV -p 22 ssh.server.inter.net&lt;br /&gt;
Which manufacturer.&lt;br /&gt;
 nmap -sn 10.111.222.0/24&lt;br /&gt;
&lt;br /&gt;
=nmcli=&lt;br /&gt;
==List connections==&lt;br /&gt;
 nmcli con&lt;br /&gt;
==rename connection==&lt;br /&gt;
 nmcli connection modify &amp;lt;old_name&amp;gt; con-name &amp;lt;new_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==manage network from cli==&lt;br /&gt;
 http://fedoraproject.org/wiki/Networking/CLI&lt;br /&gt;
==Connect to a configured connection by name==&lt;br /&gt;
 nmcli connection up WireLess&lt;br /&gt;
==Disconnection by name==&lt;br /&gt;
 nmcli connection down Wireless&lt;br /&gt;
==Connect to remembered network.==&lt;br /&gt;
 nmcli con up &#039;[-_-] halfface 5&#039; &lt;br /&gt;
==List available wireless networks.==&lt;br /&gt;
 nmcli device wifi list&lt;br /&gt;
==Generate list of available wireless networks.==&lt;br /&gt;
 nmcli device wifi rescan&lt;br /&gt;
 sudo nmcli device wifi list --rescan yes&lt;br /&gt;
&lt;br /&gt;
==Create connection for wireless network.==&lt;br /&gt;
 nmcli device wifi connect Bredband password P4ssM0rd&lt;br /&gt;
==Connect to specific bssid==&lt;br /&gt;
 nmcli connection modify MyWifiConnection 802-11-wireless.bssid 00:11:22:33:44:55&lt;br /&gt;
&lt;br /&gt;
==List networks on specific interface.==&lt;br /&gt;
 nmcli device wifi list ifname wlp0s18f2u4&lt;br /&gt;
==Disconnect network interface.==&lt;br /&gt;
 nmcli device disconnect wlp0s18f2u4&lt;br /&gt;
==Manually setup interface.==&lt;br /&gt;
 nmcli con add con-name &amp;quot;static-ens32&amp;quot; ifname ens32 type ethernet ip4 xxx.xxx.120.44/24 gw4 xxx.xxx.120.1&lt;br /&gt;
 nmcli con mod &amp;quot;static-ens32&amp;quot; ipv4.dns &amp;quot;xxx.xxx.120.1,8.8.8.8&amp;quot;&lt;br /&gt;
 nmcli con up &amp;quot;static-ens32&amp;quot; iface ens32&lt;br /&gt;
==list devices.==&lt;br /&gt;
 nmcli device status&lt;br /&gt;
==list connections.==&lt;br /&gt;
 nmcli connection show&lt;br /&gt;
==delete connection==&lt;br /&gt;
 nmcli con delete &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
==add connection with static ip.==&lt;br /&gt;
 nmcli con add con-name ens224 ifname ens224 type ethernet ip4 172.30.109.16/24&lt;br /&gt;
==show properties for connection==&lt;br /&gt;
 nmcli dev show ens224&lt;br /&gt;
==set dns server==&lt;br /&gt;
 nmcli connection modify enp1s0 ipv4.dns &amp;quot;10.111.222.2,8.8.8.8&amp;quot;&lt;br /&gt;
==edit==&lt;br /&gt;
 nmcli con edit $connection&lt;br /&gt;
 print all&lt;br /&gt;
==autostart==&lt;br /&gt;
 nmcli connection modify IFNAME connection.autoconnect yes|no&lt;br /&gt;
==dhcp option==&lt;br /&gt;
 ip -4 addr show | grep -Ev &amp;quot;127.0.0.1|LOOPBACK&amp;quot; | awk &#039;/^[0-9]+:/ {sub(/:/,&amp;quot;&amp;quot;,$2); print $2}&#039; | sort -u | while read NIC ; do echo &#039;*&#039; $NIC ; nmcli -f DHCP4 device show $NIC ; done&lt;br /&gt;
&lt;br /&gt;
==Make network a bridge interface==&lt;br /&gt;
 sudo nmcli con add ifname br0 type bridge con-name br0&lt;br /&gt;
 sudo nmcli con add type bridge-slave ifname &amp;lt;network_card&amp;gt; master br0&lt;br /&gt;
 sudo nmcli con modify br0 bridge.stp no&lt;br /&gt;
 sudo nmcli con down &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
 sudo nmcli con up br0&lt;br /&gt;
==modify(change) vlan id==&lt;br /&gt;
 nmcli connection modify &amp;lt;connection_name&amp;gt; vlan.id &amp;lt;new_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=nohup=&lt;br /&gt;
Start binary under nohup and tail log.&lt;br /&gt;
 nohup ./run.sh &amp;amp; sleep 1 ; tail -1000f nohup.out&lt;br /&gt;
Start process and log to specified file.&lt;br /&gt;
 nohup daemon &amp;gt; /path/daemon.log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=nping=&lt;br /&gt;
 nping -c 1 --tcp -p 80 www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=nth=&lt;br /&gt;
Name That Hash&lt;br /&gt;
 nth --text &#039;$y$j9T$jogs61gwDHB6L1oEwHeR00$L4cfYqkxKzS8dtkC5hPXFRMOIcEl6q5VKIkngrRGFM0&#039;&lt;br /&gt;
=ntfs-3g=&lt;br /&gt;
mount ntfs filesystem. read and write.&lt;br /&gt;
 yum install fuse fuse-libs ntfs-3g&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -r -o umask=0222,locale=en_US&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -rw -o umask=0000,locale=en_US&lt;br /&gt;
 fstab read and write.&lt;br /&gt;
 /dev/sda3   /media/e_drive     ntfs-3g    ro,defaults,umask=0222 0 0&lt;br /&gt;
 /dev/sda1   /media/c_drive     ntfs-3g    rw,defaults,umask=0000 0 0&lt;br /&gt;
Create ntfs partition.&lt;br /&gt;
 fdisk 7/gdisk 0700&lt;br /&gt;
 mkfs.ntfs /dev/sdx1 -Q&lt;br /&gt;
&lt;br /&gt;
=numbers=&lt;br /&gt;
series of numbers&lt;br /&gt;
 bash:&lt;br /&gt;
 echo {1..10}&lt;br /&gt;
=numfmt=&lt;br /&gt;
iec=accept optional single letter suffix. No output suffix. Remove B from input. change format of output, mb ,gb and so on.&lt;br /&gt;
 numfmt --from=iec --to=none --suffix=B 8.7KB&lt;br /&gt;
&lt;br /&gt;
=nwipe (dban)=&lt;br /&gt;
Wipe your disk&lt;br /&gt;
 nwipe --nogui --nowait --autonuke /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=omping=&lt;br /&gt;
multicast ping&lt;br /&gt;
  omping -c10 10.111.222.118 10.111.222.121&lt;br /&gt;
=openvpn3=&lt;br /&gt;
==Install openvpn fedora 38+ /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:dsommers\:openvpn3-devsnapshots.repo==&lt;br /&gt;
 [copr:copr.fedorainfracloud.org:dsommers:openvpn3-devsnapshots]&lt;br /&gt;
 name=Copr repo for openvpn3-devsnapshots owned by dsommers&lt;br /&gt;
 baseurl=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/fedora-$releasever-$basearch/&lt;br /&gt;
 type=rpm-md&lt;br /&gt;
 skip_if_unavailable=True&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 gpgkey=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/pubkey.gpg&lt;br /&gt;
 repo_gpgcheck=0&lt;br /&gt;
 enabled=1&lt;br /&gt;
 enabled_metadata=1&lt;br /&gt;
==Install package from above.==&lt;br /&gt;
 dnf install openvpn3-client&lt;br /&gt;
==Add configuration==&lt;br /&gt;
 OPENVPN_CONFIG=&amp;lt;name&amp;gt; ; openvpn3 config-import --name &amp;quot;$OPENVPN_CONFIG&amp;quot; --persistent --config &amp;quot;$OPENVPN_CONFIG&amp;quot;.ovpn&lt;br /&gt;
==List configs==&lt;br /&gt;
 openvpn3 configs-list&lt;br /&gt;
 openvpn3 configs-list --verbose&lt;br /&gt;
&lt;br /&gt;
==Remove config==&lt;br /&gt;
 openvpn3 config-remove --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==show full config==&lt;br /&gt;
 openvpn3 config-dump --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect==&lt;br /&gt;
 openvpn3 session-start --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Disconnect==&lt;br /&gt;
 openvpn3 session-manage --config &amp;lt;config-name&amp;gt; --disconnect&lt;br /&gt;
==Connect to the log with debug enabled. This can be run in a different terminal window after the connection has been started.==&lt;br /&gt;
 openvpn3 log --config &amp;lt;config-name&amp;gt; --log-level 6&lt;br /&gt;
==Show active sessions==&lt;br /&gt;
 openvpn3 sessions-list&lt;br /&gt;
==Show statistics for an active session==&lt;br /&gt;
 openvpn3 session-stats --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Show configuration settings==&lt;br /&gt;
 openvpn3 config-manage --config &amp;lt;config-name&amp;gt; --show&lt;br /&gt;
==sessions disconnect==&lt;br /&gt;
 openvpn3 sessions-list | grep Path | awk &#039;{print $2}&#039; | while read OPENVPN_PATH ; do echo $OPENVPN_PATH ; openvpn3 session-manage --session-path $OPENVPN_PATH --disconnect ; done&lt;br /&gt;
==View config files==&lt;br /&gt;
 sudo find /var/lib/openvpn3/configs/ -type f&lt;br /&gt;
&lt;br /&gt;
=openssl=&lt;br /&gt;
==Grab the public key.==&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443 &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -ne &#039;/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p&#039;&lt;br /&gt;
==What does the ssl cert look like.==&lt;br /&gt;
 HOST=www.halfface.se ; PORT=443 ; echo | openssl s_client -connect ${HOST}:${PORT} -servername ${HOST}| openssl x509 -ext subjectAltName -noout -startdate -enddate -subject -issuer -nameopt RFC2253,sep_comma_plus_space&lt;br /&gt;
&lt;br /&gt;
==What does crl look like. (Certificate Revocation List)==&lt;br /&gt;
 openssl crl -inform PEM -text -noout -in crl.pem&lt;br /&gt;
&lt;br /&gt;
==Connect to ssl server==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect to ssl server -cipher NULL,LOW==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect with openssl v3==&lt;br /&gt;
 openssl s_client -ssl3 -connect ipmon01.dupont:443&lt;br /&gt;
==Connect with low security cipher==&lt;br /&gt;
 echo X | openssl s_client -cipher NULL,LOW -connect www.halfface.se:8140&lt;br /&gt;
==PEM convert to DER==&lt;br /&gt;
 openssl x509 -inform PEM -in /file.pem -outform DER file.der&lt;br /&gt;
==p12 to cer==&lt;br /&gt;
 openssl pkcs12 -in infile.p12 -out outfile.cer -nodes&lt;br /&gt;
Export public&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.pem -clcerts -nokeys -passin pass:${PASS}&lt;br /&gt;
Export private&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.key -clcerts -nodes -passin pass:${PASS}&lt;br /&gt;
==p7b to pem==&lt;br /&gt;
 openssl pkcs7 -print_certs -in &amp;lt;certificate&amp;gt;.p7b -out certificate.pem&lt;br /&gt;
==pem to p12==&lt;br /&gt;
Using file containing private, public and chain.&lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
&lt;br /&gt;
==pfx to pem==&lt;br /&gt;
 env FILE=&amp;quot;&amp;lt;file&amp;gt;&amp;quot; PASSWORD=&amp;quot;&amp;lt;password&amp;gt;&amp;quot; bash -c &#039;openssl pkcs12 -in &amp;quot;$FILE&amp;quot; -out &amp;quot;${FILE//\//_}.pem&amp;quot; -nodes -password pass:&amp;quot;$PASSWORD&amp;quot;&#039;&lt;br /&gt;
Complete file.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -out cert.pem -nodes&lt;br /&gt;
Get private cert. Then remove password. Decrypt&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -nocerts -out key.pem&lt;br /&gt;
 openssl rsa -in key.pem -out server.key&lt;br /&gt;
Get public cert.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem&lt;br /&gt;
&lt;br /&gt;
==Extract p12 password protected keys in==&lt;br /&gt;
 openssl pkcs12 -in /file.p12 -passin file:/password -nokey -nodes -out /file.nokeys&lt;br /&gt;
 openssl pkcs12 -info -in &amp;lt;/path/to/file.pfx&amp;gt; -passin pass:&amp;lt;pfx&#039;s password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Encrypt file==&lt;br /&gt;
 openssl aes-256-cbc -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Decrypte file==&lt;br /&gt;
 openssl aes-256-cbc -d -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Install new root ca==&lt;br /&gt;
 # Change to the directory:&lt;br /&gt;
 cd /etc/pki/tls/certs&lt;br /&gt;
 # Next download the College root certificate:&lt;br /&gt;
 wget https://icca2.ic.ac.uk/certenroll/ic-root.crt&lt;br /&gt;
 # Convert the certificate to PEM format:&lt;br /&gt;
 openssl x509 -inform der -in ic-root.crt -out ic-root.pem&lt;br /&gt;
 # Create a link with the certificate hash:&lt;br /&gt;
 ln -s ic-root.pem `openssl x509 -hash -noout -in ic-root.pem`.0&lt;br /&gt;
 # Create sha256 base64 encoded hash&lt;br /&gt;
 openssl dgst -binary -sha256 | openssl base64&lt;br /&gt;
 # Verify root ca.&lt;br /&gt;
 openssl verify -CApath /etc/pki/tls/certs ic-inter-root.pem&lt;br /&gt;
 icrootca.cer: OK&lt;br /&gt;
The server certificate is the first certificate returned, and will be PEM formatted. The CA certificate is the final certificate returned, and is also PEM formatted.&lt;br /&gt;
 openssl&#039;: echo | openssl s_client -connect www.sslsite.com:443 -showcerts&lt;br /&gt;
Check ca store files.&lt;br /&gt;
 find . -name &#039;*.pem&#039; | while read PEM ; do echo &#039;###&#039; ${PEM} &#039;###&#039;;ls -la &amp;quot;${PEM}&amp;quot; ; set -x ; curl --cacert &amp;quot;${PEM}&amp;quot; https://site.test.net/index.htm.&lt;br /&gt;
==Verify pop3 connectivity.==&lt;br /&gt;
 openssl s_client -crlf -connect mail.tele2.se:110 -starttls pop3&lt;br /&gt;
 USER yiming&lt;br /&gt;
 PASS foobar&lt;br /&gt;
 LIST – lists the messages available in the user’s account, returning a status message and list with each row containing a message number and the size of that message in bytes&lt;br /&gt;
 STAT – returns a status message, the number of messages in the mailbox, and the size of the mailbox in bytes&lt;br /&gt;
 RETR [message_num] – returns the message identified by the message number, which is the same as the message number shown in the LIST command output&lt;br /&gt;
 TOP [message_num] [n] – returns the top n lines of the message denoted by message number.&lt;br /&gt;
 QUIT command will end the session.&lt;br /&gt;
==Create wildcard self signed certificate.==&lt;br /&gt;
 openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout wildcard.test.internal.zone.key -out wildcard.test.internal.zone.crt&lt;br /&gt;
 Common Name (eg, your name or your server&#039;s hostname) []:*.test.internal.zone&lt;br /&gt;
==Verify certificate chain==&lt;br /&gt;
 openssl verify -CAfile Thawte_Primary_Root_CA.pem -untrusted thawte_SSL_CA_G2.cer www.halfface.se.pem&lt;br /&gt;
Look at certificate chain.&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443&lt;br /&gt;
 CONNECTED(00000003)&lt;br /&gt;
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=1 C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=0 CN = www.halfface.se&lt;br /&gt;
 verify return:1&lt;br /&gt;
 ---&lt;br /&gt;
 Certificate chain&lt;br /&gt;
  0 s:CN = www.halfface.se&lt;br /&gt;
    i:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
  1 s:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
    i:O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 ---&lt;br /&gt;
Verify chain.&lt;br /&gt;
 openssl s_client -showcerts -verify 5 -connect www.halfface.se:443 &amp;lt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
==Connect to smtp server via ssl.==&lt;br /&gt;
 openssl s_client -crlf -ign_eof -connect www.halfface.se:25 -starttls smtp -quiet&lt;br /&gt;
 EHLO halfface.se&lt;br /&gt;
 AUTH LOGIN&lt;br /&gt;
 $(echo -n &amp;quot;username&amp;quot; | base64)&lt;br /&gt;
 $(echo -n &amp;quot;password&amp;quot; | base64)&lt;br /&gt;
 MAIL FROM:anden@halfface.se&lt;br /&gt;
 RCPT TO:&amp;lt;anden@halfface.se&amp;gt;&lt;br /&gt;
 DATA&lt;br /&gt;
 Subject: Test from cli. &lt;br /&gt;
 &lt;br /&gt;
 This is a test email.&lt;br /&gt;
 .&lt;br /&gt;
 QUIT&lt;br /&gt;
&lt;br /&gt;
==Connect to imap==&lt;br /&gt;
 openssl s_client -crlf -connect www.halfface.se:993&lt;br /&gt;
 openssl s_client -showcerts -connect www.halfface.se:143 -starttls imap&lt;br /&gt;
Login&lt;br /&gt;
 tag login abjorklund ${PASSWORD}&lt;br /&gt;
List mailboxes&lt;br /&gt;
 tag LIST &amp;quot;&amp;quot; &amp;quot;*&amp;quot;&lt;br /&gt;
Log out&lt;br /&gt;
 tag LOGOUT&lt;br /&gt;
&lt;br /&gt;
==compare two certifactes==&lt;br /&gt;
Compare the use case for the certificate.&lt;br /&gt;
  sdiff &amp;lt;(openssl x509 -in server.crt -noout -issuer -subject -enddate -purpose) &amp;lt;(openssl x509 -in uc_activemq.crt -noout -issuer -subject -enddate -purpose)| less&lt;br /&gt;
==create a csr==&lt;br /&gt;
 openssl req -new -sha256 -nodes -out www.halfface.se.csr -newkey rsa:2048 -keyout www.halfface.se.key -config &amp;lt;(&lt;br /&gt;
 cat &amp;lt;&amp;lt;-EOF&lt;br /&gt;
 [req]&lt;br /&gt;
 default_bits = 2048&lt;br /&gt;
 prompt = no&lt;br /&gt;
 default_md = sha256&lt;br /&gt;
 req_extensions = req_ext&lt;br /&gt;
 distinguished_name = dn&lt;br /&gt;
 [ dn ]&lt;br /&gt;
 O=Organisation: halfface&lt;br /&gt;
 C=SE&lt;br /&gt;
 ST=Stockholm&lt;br /&gt;
 L=Stockholm&lt;br /&gt;
 CN = www.halfface.se&lt;br /&gt;
 [ req_ext ]&lt;br /&gt;
 subjectAltName = @alt_names&lt;br /&gt;
 [ alt_names ]&lt;br /&gt;
 DNS.1 = halfface.se&lt;br /&gt;
 DNS.2 = ldap.halfface.se&lt;br /&gt;
 DNS.3 = mqtt.halfface.se&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
==csr information==&lt;br /&gt;
 openssl req -noout -text -in file.csr | grep -vE &#039;  [0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:&#039;&lt;br /&gt;
&lt;br /&gt;
==look at content of private key==&lt;br /&gt;
 openssl rsa -text -noout -in key.pem&lt;br /&gt;
&lt;br /&gt;
==confirm that public private and csr match==&lt;br /&gt;
 # For your SSL certificate: &lt;br /&gt;
 CERT_PUBLIC=$(ls *.crt)&lt;br /&gt;
 echo $(openssl x509 -noout -modulus -in &amp;quot;${CERT_PUBLIC}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PUBLIC}&amp;quot;,public cert.&lt;br /&gt;
 # For your RSA private key: &lt;br /&gt;
 CERT_PRIVATE=$(ls *.key)&lt;br /&gt;
 echo $(openssl rsa -noout -modulus -in &amp;quot;${CERT_PRIVATE}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PRIVATE}&amp;quot;,private key&lt;br /&gt;
 # For your CSR: &lt;br /&gt;
 CERT_CSR=$(ls *.csr)&lt;br /&gt;
 echo $(openssl req -noout -modulus -in &amp;quot;${CERT_CSR}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_CSR}&amp;quot;,certificate signing request&lt;br /&gt;
&lt;br /&gt;
==connect with ca private and public key==&lt;br /&gt;
 openssl s_client -CAfile ca.pem -cert public.crt -key private.key -connect 10.12.118.184:1023 -tls1_2&lt;br /&gt;
==create a ca==&lt;br /&gt;
===Create ca and certificates.===&lt;br /&gt;
 # Create folder structure.&lt;br /&gt;
 mkdir /root/ca/&lt;br /&gt;
 mkdir /root/ca/certs/&lt;br /&gt;
 mkdir /root/ca/crl/&lt;br /&gt;
 mkdir /root/ca/newcerts/&lt;br /&gt;
 mkdir /root/ca/private/&lt;br /&gt;
 mkdir /root/ca/requests/&lt;br /&gt;
 touch /root/ca/index.txt&lt;br /&gt;
 echo 1000 &amp;gt; /root/ca/serial&lt;br /&gt;
 chmod 600 /root/ca&lt;br /&gt;
 # Create private key for the CA certificate. pass phrase: $(pwgen 15)&lt;br /&gt;
 cd /root/ca/&lt;br /&gt;
 openssl genrsa -aes256 -out private/cakey.pem 4096&lt;br /&gt;
 # Create a public certificate for the CA.&lt;br /&gt;
 openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 36525&lt;br /&gt;
&lt;br /&gt;
 Country Name (2 letter code) [AU]:SE&lt;br /&gt;
 State or Province Name (full name) [Some-State]:Stockholm&lt;br /&gt;
 Locality Name (eg, city) []:Stockholm&lt;br /&gt;
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company&lt;br /&gt;
 Organizational Unit Name (eg, section) []:Company&lt;br /&gt;
 Common Name (e.g. server FQDN or YOUR name) []:Certificate Authority&lt;br /&gt;
 Email Address []:anden@halfface.se&lt;br /&gt;
&lt;br /&gt;
 # Copy system openssl.cnf to /root/ca dir. Then change dir in config.&lt;br /&gt;
 vim openssl.cnf&lt;br /&gt;
 [ CA_default ]&lt;br /&gt;
 dir = /root/ca # Where everything is kept&lt;br /&gt;
&lt;br /&gt;
===Create signed certificate keypair===&lt;br /&gt;
 cd requests/&lt;br /&gt;
 # Create csr&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -nodes -keyout &amp;lt;client&amp;gt;.key -out &amp;lt;client&amp;gt;.csr -config ../openssl.cnf&lt;br /&gt;
 # Issue certificate for csr.&lt;br /&gt;
 openssl ca -in &amp;lt;client&amp;gt;.csr -out &amp;lt;client&amp;gt;.crt -config ../openssl.cnf -days 36525&lt;br /&gt;
&lt;br /&gt;
==talk http via openssl==&lt;br /&gt;
 openssl s_client -crlf -quiet -connect www.halfface.se:443 &amp;lt;&amp;lt;EOF&lt;br /&gt;
 GET / HTTP/2.0&lt;br /&gt;
 Host: www.halfface.se&lt;br /&gt;
 &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==look at cert==&lt;br /&gt;
 openssl asn1parse -in rb-ca.crt.2021-02-28&lt;br /&gt;
==performance testing==&lt;br /&gt;
 openssl speed -evp aes-256-ecb&lt;br /&gt;
==confirm that ca is correct==&lt;br /&gt;
 echo | openssl s_client -CAfile Sectigo_RSA_Domain_Validation_Secure_Server_CA.pem -no-CAfile -no-CApath -tls1_2 -connect 172.30.32.141:5044 2&amp;gt;&amp;amp;1 | grep Verification&lt;br /&gt;
 Verification: OK&lt;br /&gt;
==openssl s_server==&lt;br /&gt;
Setup server listening as http server.&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert host.inter.net.crt -key host.inter.net.key&lt;br /&gt;
Setup https server listening on https on port 4433 providing complete chain&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert halfface.se.pem -cert_chain halfface.se.intermediate.pem -key halfface.se.key -accept 4433&lt;br /&gt;
&lt;br /&gt;
==othername:&amp;lt;unsupported&amp;gt;==&lt;br /&gt;
You will have to locate the &amp;quot;OCTET STRING&amp;quot; line just below the &amp;quot;OBJECT :X509v3 Subject Alternative Name&amp;quot; line then strpars&lt;br /&gt;
 # print section offset via&lt;br /&gt;
 openssl asn1parse -in yourcert.pem&lt;br /&gt;
 # parse otherName from &amp;quot;OCTET STRING&amp;quot; &amp;lt;offset&amp;gt; is the value in the beginning of the line.&lt;br /&gt;
 openssl asn1parse -in yourcert.pem -strparse &amp;lt;offset&amp;gt;&lt;br /&gt;
Another way of seeing same data is through &lt;br /&gt;
 openssl asn1parse -in /tmp/tmp -dump -strictpem&lt;br /&gt;
&lt;br /&gt;
=create password string=&lt;br /&gt;
 openssl passwd -6 -salt $RANDOM $PASSWORD&lt;br /&gt;
&lt;br /&gt;
=pactl=&lt;br /&gt;
Pulse Audio cli tool.&lt;br /&gt;
List output devices.&lt;br /&gt;
 pactl list short sinks&lt;br /&gt;
Set default output device&lt;br /&gt;
 pactl set-default-sink $i&lt;br /&gt;
List where applications send output.&lt;br /&gt;
 pactl list short sink-inputs&lt;br /&gt;
Move application to other output device.&lt;br /&gt;
 pactl move-sink-input $applicaiton $sink&lt;br /&gt;
&lt;br /&gt;
=pam=&lt;br /&gt;
Troubleshooting pam.&lt;br /&gt;
 /etc/syslog.conf&lt;br /&gt;
 # Get debugging data.&lt;br /&gt;
 *.debug     /var/log/debug.log&lt;br /&gt;
Create logfile and restart *syslog.&lt;br /&gt;
 touch /var/log/debug.log&lt;br /&gt;
 service syslog restart&lt;br /&gt;
Put pam in debug mode.&lt;br /&gt;
 touch /etc/pam_debug&lt;br /&gt;
OR you can enable debugging only for the modules you&#039;re interested in by adding &amp;quot;debug&amp;quot; to the end of the relevant lines in /etc/pam.d/system-auth or the other /etc/pam.d/* files:&lt;br /&gt;
 login   auth    required    pam_unix.so debug&lt;br /&gt;
Debugging is found in /var/log/debug.log.&lt;br /&gt;
&lt;br /&gt;
=pam_tally2=&lt;br /&gt;
Configured here.&lt;br /&gt;
 /etc/pam.d/password-auth:auth        required      pam_tally2.so file=/var/log/tallylog onerr=fail per_user deny=6 no_magic_root&lt;br /&gt;
What is status from account?&lt;br /&gt;
 pam_tally2 --user=user1&lt;br /&gt;
 Login           Failures Latest failure     From&lt;br /&gt;
 user1             8    04/20/15 11:39:54  192.168.1.1&lt;br /&gt;
&lt;br /&gt;
=parallel=&lt;br /&gt;
Run command 10 times in parallel.&lt;br /&gt;
 seq 10 | parallel -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Run command 10 times in parallel dryrun.&lt;br /&gt;
 seq 10 | parallel --dry-run -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Compress logfiles in parallel.&lt;br /&gt;
 parallel gzip ::: *.log&lt;br /&gt;
=partprobe=&lt;br /&gt;
Rescan block device to setup device files&lt;br /&gt;
 partprobe /dev/sde&lt;br /&gt;
=partx=&lt;br /&gt;
 partx /dev/sda -l ; partx /dev/sda -u ; partx /dev/sda -l&lt;br /&gt;
&lt;br /&gt;
=paste=&lt;br /&gt;
Combine to files to one in multiple column. Replace tab with spaces.&lt;br /&gt;
 paste /tmp/check_name_nagios /tmp/filename | column -t -s $&#039;\t&#039;&lt;br /&gt;
Combine every second line with a space in between.&lt;br /&gt;
 paste -d&#039; &#039; - -&lt;br /&gt;
&lt;br /&gt;
=pcregrep=&lt;br /&gt;
Multiline grep&lt;br /&gt;
 pcregrep -M &#039;pattern: line1\nPattern lin2&#039; /temp/files_*&lt;br /&gt;
=pdftotext=&lt;br /&gt;
grab text from pdf document.&lt;br /&gt;
 pdftotext document.pdf&lt;br /&gt;
=pdftk=&lt;br /&gt;
Rotate clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endwest output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Rotate counter clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endeast output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Create one pdf from others.&lt;br /&gt;
 pdftk &amp;lt;file.pdf&amp;gt;* cat output &amp;lt;file_combo.pdf&amp;gt;&lt;br /&gt;
Extract one page from pdf.&lt;br /&gt;
 pdftk input.pdf cat 11 output page11.pdf&lt;br /&gt;
Extract series of pages from pdf&lt;br /&gt;
 pdftk input.pdf cat 3-7 output pages_3-7.pdf&lt;br /&gt;
&lt;br /&gt;
=pidof=&lt;br /&gt;
which pids has a program stared. Find pid.&lt;br /&gt;
&lt;br /&gt;
=ping=&lt;br /&gt;
Ping ipv6 loopback&lt;br /&gt;
 ping6 ::1 -c1&lt;br /&gt;
Ping ipv6 broadcast&lt;br /&gt;
 ping6 ff02::1%2 | cut -d\  -f4&lt;br /&gt;
Ping short output&lt;br /&gt;
 export ADDRESS=2001:4860:4860::8888 ; PING=$(ping6 -w1 -q -c1 -i10 ${ADDRESS} 2&amp;gt;&amp;amp;1) ; RTT=$( grep rtt &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot; | awk -F/ &#039;{print $6}&#039;) ; RECEIVED=$(grep received &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot;) ; echo $ADDRESS $RECEIVED, rtt=${RTT}&lt;br /&gt;
Ping to discover mtu. 1460, 1450. When reply increase with 2. when found highest value increase with 28 to get mtu.&lt;br /&gt;
 ping -M do -s 1472 123.45.56.78&lt;br /&gt;
&lt;br /&gt;
=pip=&lt;br /&gt;
==which versions of django exist==&lt;br /&gt;
 pip install pylibmc&lt;br /&gt;
==which versions are installed==&lt;br /&gt;
 pip list&lt;br /&gt;
&lt;br /&gt;
==which files does pip package provide.==&lt;br /&gt;
 pip show -f $package&lt;br /&gt;
==Uppgrade package.==&lt;br /&gt;
 pip install $package --upgrade&lt;br /&gt;
==where your own packages might end up==&lt;br /&gt;
 /usr/local/lib/python3.9&lt;br /&gt;
 /usr/lib/python2.7/site-packages/&lt;br /&gt;
==upgrade pip==&lt;br /&gt;
 ls -la /usr/lib64/libldap_r.so /usr/lib64/libldap.so&lt;br /&gt;
==do not use cache==&lt;br /&gt;
 pip3 install -r requirements.txt --no-cache-dir&lt;br /&gt;
&lt;br /&gt;
=pgrep=&lt;br /&gt;
Grep any processlines including 1066&lt;br /&gt;
 pgrep -lf 1066&lt;br /&gt;
=pmap=&lt;br /&gt;
Look at memory usage of process.&lt;br /&gt;
 sudo pmap 2258&lt;br /&gt;
&lt;br /&gt;
=postfix=&lt;br /&gt;
remove mails in queue.&lt;br /&gt;
 mailq | grep ^[A-F0-9] | awk &#039;{print $1}&#039; | postsuper -d -&lt;br /&gt;
list mails in queue&lt;br /&gt;
 mailq | grep &amp;quot;^[A-F0-9]&amp;quot;&lt;br /&gt;
Get mails in better output to better decide what to do with mails.&lt;br /&gt;
 mailq | grep -v -- &amp;quot;-Queue ID-&amp;quot; |  sed &#039;s/^$/\x0/g&#039; | tr -d &#039;\n&#039; | sed &#039;s/\x0/\n/g&#039;&lt;br /&gt;
Remove stuck emails.&lt;br /&gt;
 postsuper -d ALL deferred&lt;br /&gt;
List email&lt;br /&gt;
 postcat -q E55692442F&lt;br /&gt;
Read mail&lt;br /&gt;
 postcat -vq [message-id]&lt;br /&gt;
&lt;br /&gt;
=pr=&lt;br /&gt;
Print two files between each other.&lt;br /&gt;
 pr -w200 -m -t /tmp/1 /tmp/2&lt;br /&gt;
=printf=&lt;br /&gt;
Convert octal to utf-8&lt;br /&gt;
 printf &#039;\360\237\222\200&#039;&lt;br /&gt;
decimal to integral&lt;br /&gt;
 printf &amp;quot;%.0f&amp;quot; &amp;lt;decimal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=printscreen=&lt;br /&gt;
 import -window root test.png&lt;br /&gt;
Gnome copy graphics to paste buffer. Copy selected portion of screen.&lt;br /&gt;
 gnome-screenshot -a&lt;br /&gt;
&lt;br /&gt;
=/proc=&lt;br /&gt;
*/proc/meminfo&lt;br /&gt;
MemTotal — Total amount of physical RAM, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
MemFree — The amount of physical RAM, in kilobytes, left unused by the system.&lt;br /&gt;
&lt;br /&gt;
Buffers — The amount of physical RAM, in kilobytes, used for file buffers.&lt;br /&gt;
&lt;br /&gt;
Cached — The amount of physical RAM, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
SwapCached — The amount of swap, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
Active — The total amount of buffer or page cache memory, in kilobytes, that is in active use. This is memory that has been recently used and is usually not reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
Inactive — The total amount of buffer or page cache memory, in kilobytes, that are free and available. This is memory that has not been recently used and can be reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
HighTotal and HighFree — The total and free amount of memory, in kilobytes, that is not directly mapped into kernel space. The HighTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
LowTotal and LowFree — The total and free amount of memory, in kilobytes, that is directly mapped into kernel space. The LowTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
SwapTotal — The total amount of swap available, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
SwapFree — The total amount of swap free, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
Dirty — The total amount of memory, in kilobytes, waiting to be written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Writeback — The total amount of memory, in kilobytes, actively being written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Mapped — The total amount of memory, in kilobytes, which have been used to map devices, files, or libraries using the mmap command.&lt;br /&gt;
&lt;br /&gt;
Slab — The total amount of memory, in kilobytes, used by the kernel to cache data structures for its own use.&lt;br /&gt;
&lt;br /&gt;
Committed_AS — The total amount of memory, in kilobytes, estimated to complete the workload. This value represents the worst case scenario value, and also includes swap memory.&lt;br /&gt;
&lt;br /&gt;
PageTables — The total amount of memory, in kilobytes, dedicated to the lowest page table level.&lt;br /&gt;
&lt;br /&gt;
VMallocTotal — The total amount of memory, in kilobytes, of total allocated virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocUsed — The total amount of memory, in kilobytes, of used virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocChunk — The largest contiguous block of memory, in kilobytes, of available virtual address space.&lt;br /&gt;
&lt;br /&gt;
HugePages_Total — The total number of hugepages for the system. The number is derived by dividing Hugepagesize by the megabytes set aside for hugepages specified in /proc/sys/vm/hugetlb_pool. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
HugePages_Free — The total number of hugepages available for the system. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
Hugepagesize — The size for each hugepages unit in kilobytes. By default, the value is 4096 KB on uniprocessor kernels for 32 bit architectures. For SMP, hugemem kernels, and AMD64, the default is 2048 KB. For Itanium architectures, the default is 262144 KB. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
=ps=&lt;br /&gt;
==Process list in tree view.==&lt;br /&gt;
 ps axfww&lt;br /&gt;
==Process sort by cpu usage.==&lt;br /&gt;
 ps auxwww --sort -%cpu | head&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 ps -p 1 -o etime=&lt;br /&gt;
==Process list sorted after memory usage.==&lt;br /&gt;
 ps aux --sort=size&lt;br /&gt;
==Process show memory usage... sort...==&lt;br /&gt;
 ps axo rss,%cpu,pid,euser,cmd | sort -nr | head -n 10 | less -ISRM&lt;br /&gt;
==Process sort by mem usage.==&lt;br /&gt;
 ps auxwww --sort -rss | head&lt;br /&gt;
==Processes sorted by time running.==&lt;br /&gt;
 ps aux --sort -time&lt;br /&gt;
==Processes sorted by time started==&lt;br /&gt;
 ps -auxwww --sort=start_time&lt;br /&gt;
==ps showing threads.==&lt;br /&gt;
 ps -efL&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 echo -n $(( ($(date +%s) - $( stat -c%X /proc/$(pgrep -f [a]ctivemq.jar))) / 3600 ))&lt;br /&gt;
==ps long usernames==&lt;br /&gt;
 ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm&lt;br /&gt;
==ps including nice==&lt;br /&gt;
 ps -eo pid,user,ni,comm&lt;br /&gt;
&lt;br /&gt;
=pstack=&lt;br /&gt;
 print a stack trace of a running process&lt;br /&gt;
&lt;br /&gt;
=pulseaudio=&lt;br /&gt;
# Is pulseaudio running?&lt;br /&gt;
 ps uxawww| grep -E pulseaudi[o]&lt;br /&gt;
# stop pulseaudio&lt;br /&gt;
 pulseaudio -k&lt;br /&gt;
# start pulseaudio as found by ps | grep pulseaudio&lt;br /&gt;
 /usr/bin/pulseaudio --start --log-target=syslog&lt;br /&gt;
&lt;br /&gt;
=putty=&lt;br /&gt;
Run putty from cli with login&lt;br /&gt;
 &amp;quot;C:\Program Files\PuTTY\putty.exe&amp;quot; -l &amp;lt;username&amp;gt; -pw &amp;lt;password&amp;gt; &amp;lt;host_url&amp;gt;&lt;br /&gt;
Always setup stay alive.&lt;br /&gt;
 connection -&amp;gt; keepalive -&amp;gt; 60&lt;br /&gt;
set up tunnel&lt;br /&gt;
 putty -load blt.homeip.net -l bjorklun -pw password -L 19242:192.168.0.42:3389 blt.homeip.net&lt;br /&gt;
putty without taking tty.&lt;br /&gt;
 plink -load www.halfface.se -l user_name -pw password -R *:3389:localhost:3389 -2 -4 -N&lt;br /&gt;
reverse tunnel. Connect remote host 3400 to machine running putty localhost:3389.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; &amp;quot;Source Port&amp;quot; = 3400 -&amp;gt; destination = localhost:3389 -&amp;gt; remote.&lt;br /&gt;
socks server.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; Source port: 3128 , Destination: localhost:3128, Dynamic:true -&amp;gt; add -&amp;gt; apply.&lt;br /&gt;
Change font size&lt;br /&gt;
 echo Windows Registry Editor Version 5.00 &amp;gt; putty.reg &amp;amp;&amp;amp; echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings] &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;Font&amp;quot;=&amp;quot;Courier New&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;FontHeight&amp;quot;=&amp;quot;12&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; reg import putty.reg&lt;br /&gt;
&lt;br /&gt;
=pv=&lt;br /&gt;
throughput in pipe. speed.&lt;br /&gt;
 pv&lt;br /&gt;
 pv -cN&lt;br /&gt;
make a dd and limit througput to 20MB/s.&lt;br /&gt;
 dd if=${HOST}.qcow2 bs=4k conv=noerror,sync | pv -L 20M | dd of=${HOST}.dd_noerror.qcow2&lt;br /&gt;
=pwgen=&lt;br /&gt;
Create less complicated password.&lt;br /&gt;
 pwgen -sy 15 -r \&#039;\&amp;quot;\^\(\)\`\~\;\[\]\{\}\,&lt;br /&gt;
&lt;br /&gt;
=qalculate=&lt;br /&gt;
 qalc&lt;br /&gt;
 &amp;gt; 40 euro to SEK&lt;br /&gt;
 40 * euro = approx. SEK 417.36&lt;br /&gt;
=readpst=&lt;br /&gt;
output pst file in separate files in out directory&lt;br /&gt;
 readpst -S -o out/ outlook.pst&lt;br /&gt;
=reboot=&lt;br /&gt;
 Hard reboot mean that shutdown scripts will not run and machine reboot immediately without syncing hard disk drives.&lt;br /&gt;
 This commands enable sysrq and after this call fast reboot. &lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq&lt;br /&gt;
 echo b &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Force shutdown&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq &lt;br /&gt;
 echo o &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Kernel panic&lt;br /&gt;
 echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
==List last reboots==&lt;br /&gt;
 last --time-format iso reboot&lt;br /&gt;
&lt;br /&gt;
=rename=&lt;br /&gt;
Recursive lowercase to uppercase&lt;br /&gt;
 for i in $(find * -depth); do (mv $i $(echo $i | sed &#039;s%[^/][^/]*$%%&#039;)$(echo $i | sed &#039;s!.*/!!&#039; | tr [:upper:] [:lower:])); done&lt;br /&gt;
Upper to lower case&lt;br /&gt;
 for f in `find .`; do mv -v &amp;quot;$f&amp;quot; &amp;quot;`echo $f | tr &#039;[A-Z]&#039; &#039;[a-z]&#039;`&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
=reposync=&lt;br /&gt;
 reposync -n -c /etc/yum/yum.conf -p /repos/centos6 -d -r base -r updates -r extras -r centosplus -r contrib&lt;br /&gt;
 createrepo -g /repos/centos6/base/repodata/comps.xml /repos/centos6/base&lt;br /&gt;
 createrepo /repos/centos6/updates&lt;br /&gt;
 createrepo /repos/centos6/extras&lt;br /&gt;
 createrepo /repos/centos6/centosplus&lt;br /&gt;
halfface -&amp;gt; sync repo. -d delete what is not on remote, -n only newest version, -p store here, -r which repos to sync&lt;br /&gt;
 reposync -d -n -p /install/system/linux/fedora/24/repo/ -r updates -r fedora -r rpmfusion-free -r rpmfusion-free-updates -r rpmfusion-nonfree -r rpmfusion-nonfree-updates&lt;br /&gt;
halfface -&amp;gt; create repository&lt;br /&gt;
 REPODIR=/install/system/linux/fedora/24/repo ; for REPO in $(cd $REPODIR; ls) ; do echo $REPO ; createrepo_c ${REPODIR}/${REPO} ;done&lt;br /&gt;
=reptyr=&lt;br /&gt;
 Reparent a running program to a new terminal. (move tty)&lt;br /&gt;
&lt;br /&gt;
=rfcomm=&lt;br /&gt;
list usb devices&lt;br /&gt;
 hcitool scan&lt;br /&gt;
What properties does the device have.&lt;br /&gt;
 sdptool browse 00:0D:B5:30:07:79&lt;br /&gt;
connect bluetooth device virtual servial.&lt;br /&gt;
 rfcomm bind /dev/rfcomm0 00:0D:B5:30:07:79 1&lt;br /&gt;
=rkhunter=&lt;br /&gt;
Run rkhunter full scan no keypresses needed&lt;br /&gt;
 sudo rkhunter --checkall --skip-keypress -x&lt;br /&gt;
Update database&lt;br /&gt;
 sudo rkhunter --propupd&lt;br /&gt;
Search for what triggered alarm.&lt;br /&gt;
 sudo grep -E &#039;Warning|Suspicious&#039; /var/log/rkhunter/rkhunter.log&lt;br /&gt;
&lt;br /&gt;
=dnf update rkhunter. Update dnf after rkhunter scan=&lt;br /&gt;
 tail -1 /etc/sysconfig/rkhunter &lt;br /&gt;
 sleep 300 &amp;amp;&amp;amp; ( dnf -e 0 -y update ; rkhunter --propupd ) &amp;gt;&amp;gt; /tmp/dnf_update_rkhunter--propupd.$(date +%F_%H-%M-%S).log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=rotatelogs=&lt;br /&gt;
Write standard output to logfile. Rotate at 100M. Keep 3 files.&lt;br /&gt;
 your_script.sh | rotatelogs -n3 /var/log/your.log 100M&lt;br /&gt;
=route=&lt;br /&gt;
The route to a network is behind 10.111.222.7&lt;br /&gt;
 route add -net 10.111.223.0 netmask 255.255.255.0 gw 10.111.222.7&lt;br /&gt;
Add default route&lt;br /&gt;
 route add default gw 192.168.122.1&lt;br /&gt;
Permanent route under redhat&lt;br /&gt;
 /etc/sysconfig/static-routes&lt;br /&gt;
 any net 198.18.129.0/24 gw 10.240.175.12&lt;br /&gt;
/etc/sysconfig/network-scripts/route-eth1&lt;br /&gt;
 1.2.3.4/23 via 1.2.3.1&lt;br /&gt;
Drop packages to ip.&lt;br /&gt;
 route add -host 192.168.1.51 reject&lt;br /&gt;
Remove reject rule.&lt;br /&gt;
 route del -host 192.168.1.51 reject&lt;br /&gt;
Remove route&lt;br /&gt;
 route -n&lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0&lt;br /&gt;
 10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0&lt;br /&gt;
 0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 eth0&lt;br /&gt;
 route del -net 10.0.0.0    gw    0.0.0.0   netmask      255.0.0.0 dev eth0&lt;br /&gt;
&lt;br /&gt;
=rpm=&lt;br /&gt;
==install src.rpm==&lt;br /&gt;
 rpmbuild --rebuild alien-6.51-1.src.rpm&lt;br /&gt;
 rpm -i /usr/src/redhat/RPMS/x86_64/alien-6.51-1.rpm&lt;br /&gt;
==List contents of rpm.==&lt;br /&gt;
 rpm -qlp myfile.rpm&lt;br /&gt;
==Extract single file from rpm.==&lt;br /&gt;
 rpm2cpio package.rpm | cpio -idv ./search_path_to_file_from_listing_above.txt&lt;br /&gt;
==List information about non installed rpm.==&lt;br /&gt;
 rpm -qip foo.rpm&lt;br /&gt;
==Extract contents of rpm.==&lt;br /&gt;
 rpm2cpio *.rpm | cpio -i --make-directories&lt;br /&gt;
==Which version of rpm is installed.==&lt;br /&gt;
/etc/rpm/macros ~/.rpmmacros&lt;br /&gt;
 %_query_all_fmt         %%{name}-%%{version}-%%{release}.%%{arch}&lt;br /&gt;
==list architecture==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{n}-%{v}-%{r}.%{arch}\n&amp;quot;&lt;br /&gt;
==List only name of installed rpms.==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{NAME}\n&amp;quot;&lt;br /&gt;
==Extract rpms in subdirectories.==&lt;br /&gt;
 for RPM in $(ls *|sed &#039;s_\.rpm$__g&#039;);do echo $RPM; mkdir $RPM; rpm2cpio $RPM.rpm | (cd $RPM &amp;amp;&amp;amp; cpio -i --make-directories);done&lt;br /&gt;
==Verify content of rpm==&lt;br /&gt;
 rpm -V package&lt;br /&gt;
 # What does those cryptic letters mean from rpm -V:&lt;br /&gt;
 S file Size differs&lt;br /&gt;
 M Mode differs (includes permissions and file type)&lt;br /&gt;
 5 MD5 sum differs&lt;br /&gt;
 D Device major/minor number mismatch&lt;br /&gt;
 L readlink(2) path mismatch&lt;br /&gt;
 U User ownership differs&lt;br /&gt;
 G Group ownership differs&lt;br /&gt;
 T mTime differs&lt;br /&gt;
==Reinstall rpm==&lt;br /&gt;
 rpm -iv --replacepkgs package.rpm&lt;br /&gt;
==Dependencies of rpm==&lt;br /&gt;
 rpm -qpR ${rpm}&lt;br /&gt;
 rpm -qR ${packagename}&lt;br /&gt;
 rpm -qp mypackage.rpm --provides&lt;br /&gt;
 rpm -qp mypackage.rpm --requires&lt;br /&gt;
==Rebuild rpm database.==&lt;br /&gt;
 \rm /var/lib/rpm/__db*&lt;br /&gt;
 rpm --rebuilddb&lt;br /&gt;
&lt;br /&gt;
==Update minor release.==&lt;br /&gt;
 yum --releasever=6.11 update sl-release&lt;br /&gt;
 yum clean all&lt;br /&gt;
 yum update&lt;br /&gt;
==Downgrade rpm.==&lt;br /&gt;
 rpm -Uvh --oldpackage /tmp/app.x86_64.rpm&lt;br /&gt;
==Which rpm:s are required by rpm. Can be used to install rpm on machine without access to yum repo.==&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==CVE:s fixed by rpm==&lt;br /&gt;
 rpm -qi --changelog openssh-server | grep -i CVE&lt;br /&gt;
&lt;br /&gt;
=rsync=&lt;br /&gt;
Syncronize folders. Delete non existing files on remote host. Compress.&lt;br /&gt;
 rsync --delete -az -e ssh bjorklun@semco.homeip.net:/install/program/windows/&lt;br /&gt;
Syncronize files over ssh on port 2222. Show progress. Syncronize even empty directories.&lt;br /&gt;
 rsync -Pae &#039;ssh -p 2222&#039; localhost:/opt/techops/bin/ /opt/techops/bin/&lt;br /&gt;
rsync with total progress bar.&lt;br /&gt;
 rsync -a --info=progress2 /dir1/ /dir2/&lt;br /&gt;
Run rsync in both ends but transfer data with normal user.&lt;br /&gt;
 sudo rsync -aP /tmp/andreas/ andreasbj@localhost:/tmp/andreas2/ --rsync-path=&#039;sudo rsync&#039;&lt;br /&gt;
rsync with limit of 8 MB/s.&lt;br /&gt;
 rsync -aP --bwlimit=8000 /source/ /destination/&lt;br /&gt;
rsync excluding directory&lt;br /&gt;
 rsync -r --exclude=.svn /source/ /destination/&lt;br /&gt;
rsync including selinux information. Preserve hard links.&lt;br /&gt;
 rsync -aPXH /source /destination&lt;br /&gt;
rsync don&#039;t keep links. Copy files referenced.&lt;br /&gt;
 rsync -rLP /source/ /destination&lt;br /&gt;
Record which files to sync.&lt;br /&gt;
 rsync -r -ptgo --delete -P --size-only -n www.halfface.se:/mp3/ /mp3/ -n | tee /temp/mp3_$(date +%Y-%m-%d)_diff.txt&lt;br /&gt;
Rsync new files.&lt;br /&gt;
 rsync -RDa0P --files-from=&amp;lt;(find /sourcedir -mtime -7 -print0) . /targetdir/&lt;br /&gt;
rsync ignore existing files.&lt;br /&gt;
 rsync -P --ignore-existing /source/* /destination/ -n&lt;br /&gt;
rsync excluding directories matching pattern.&lt;br /&gt;
 SOURCE=/apps/IP400 ; DESTINATION=/apps/IP400.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; rsync -aP &amp;quot;${SOURCE}&amp;quot;/ &amp;quot;${DESTINATION}&amp;quot;/ --exclude-from=&amp;lt;(cd &amp;quot;${SOURCE}&amp;quot; ; find -type d -name log | sed -e &#039;s|./||&#039;)&lt;br /&gt;
Sync files partially.&lt;br /&gt;
 rsync -avz --partial --inplace&lt;br /&gt;
which files differ between hosts.&lt;br /&gt;
 rsync -nrlptDqv --delete --exclude napsjb/server/naps/tmp/ /opt/ongame/ 10.6.21.11:/opt/ongame | less&lt;br /&gt;
 -n dry run.&lt;br /&gt;
 -r recursive&lt;br /&gt;
 -l copy symlinks av symlinks.&lt;br /&gt;
 -p preserve permission&lt;br /&gt;
 -t preserve tims.&lt;br /&gt;
 -D --device --special. Keep special files.&lt;br /&gt;
 -q quiet&lt;br /&gt;
 -v verbose&lt;br /&gt;
&lt;br /&gt;
=sar=&lt;br /&gt;
Old sar information.&lt;br /&gt;
 sar -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
load average.&lt;br /&gt;
 sar -q -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
All information.&lt;br /&gt;
 sar -A -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
View network statistics.&lt;br /&gt;
 LANG=c sar -n DEV | grep eth0&lt;br /&gt;
realtime summary.&lt;br /&gt;
 sar 4 5&lt;br /&gt;
=script=&lt;br /&gt;
Run command under shell even if it does not exist.&lt;br /&gt;
 script -q -f -c &amp;quot;commands or scripts to run&amp;quot;&lt;br /&gt;
Run session under screen in script.&lt;br /&gt;
 screen -dm bash -c &#039;script --timing=script1.tm script1.out&#039;&lt;br /&gt;
Replay script recorded file&lt;br /&gt;
 scriptreplay --timing script1.tm --typescript script1.out&lt;br /&gt;
=scp=&lt;br /&gt;
Limit to 1.2MB/s.&lt;br /&gt;
 scp -l 10240 Rocky-8.5-x86_64-minimal.iso halfface.se:/temp/&lt;br /&gt;
&lt;br /&gt;
=search&amp;amp;replace=&lt;br /&gt;
perl&lt;br /&gt;
 grep -rsl &#039;10.6.4.102&#039; * | xargs perl -pi -e &#039;s/10.6.4.102/10.6.4.103/&#039;&lt;br /&gt;
sed&lt;br /&gt;
 find . -type f -exec sed -i &#039;s/string1/string2/g&#039; {} \;&lt;br /&gt;
Grep for regexp starting with CN= and stop at first occurrence of ,. not greedy&lt;br /&gt;
 grep -oE &#039;CN=[^,]*,&#039;&lt;br /&gt;
=set=&lt;br /&gt;
Look at current settings. Expanded or simple view.&lt;br /&gt;
 set -o&lt;br /&gt;
 echo $-&lt;br /&gt;
&lt;br /&gt;
=setfacl=&lt;br /&gt;
Add rwx permission for user_name recursivly from /directory&lt;br /&gt;
 setfacl -Rm u:user_name:rwx /directory&lt;br /&gt;
Remove acl:s&lt;br /&gt;
 setfacl -bn foobar&lt;br /&gt;
=setpriv=&lt;br /&gt;
Dump your privileges.&lt;br /&gt;
 setpriv -d&lt;br /&gt;
&lt;br /&gt;
=shred=&lt;br /&gt;
Recurse remove dir&lt;br /&gt;
 find /tmp/secret -type f -exec shred {} \;&lt;br /&gt;
&lt;br /&gt;
=shuf=&lt;br /&gt;
Pick random line in file.&lt;br /&gt;
 shuf -n1 /file&lt;br /&gt;
Get random number&lt;br /&gt;
 shuf -i 10-120 -n1&lt;br /&gt;
&lt;br /&gt;
=sms=&lt;br /&gt;
Mail to sms gateway.&lt;br /&gt;
 tele2&lt;br /&gt;
 07XXXXXXXX@sms.tele2.se&lt;br /&gt;
&lt;br /&gt;
 Comviq&lt;br /&gt;
 467xxxxxxxx@sms.comviq.se&lt;br /&gt;
&lt;br /&gt;
 Europolitan&lt;br /&gt;
 4670xxxxxxx@europolitan.se&lt;br /&gt;
&lt;br /&gt;
=snmptrap=&lt;br /&gt;
 # send more than one string.&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &amp;quot;&amp;quot; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -c xxxxxxx localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 .1.3.6.1.4.1.5089.2.0.999 s &amp;quot;Hej Hej&amp;quot;&lt;br /&gt;
Simple trap&lt;br /&gt;
 snmptrap  -v 1 -c public  localhost   &#039;&#039;  0 0  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=snmptrapd=&lt;br /&gt;
 # Enable logfile. /etc/sysconfig/snmptrapd&lt;br /&gt;
 OPTIONS=&amp;quot;-Lf /var/log/snmptrapd.log&amp;quot;&lt;br /&gt;
 # Disable authorization and put in logfile. /etc/snmp/snmptrapd.conf&lt;br /&gt;
 disableAuthorization yes&lt;br /&gt;
 authCommunity log public&lt;br /&gt;
&lt;br /&gt;
=snmpwalk=&lt;br /&gt;
Get information from an oid.&lt;br /&gt;
 snmpwalk -v 1 -c public snmp.device.net .1.3.6.1.4.1.2021.84&lt;br /&gt;
Do tcpdump while running.&lt;br /&gt;
 tcpdump -i eth0 -n -s0 -v host snmp.device.net and port snmp&lt;br /&gt;
=socat=&lt;br /&gt;
Create a tunnel between localhost 2222 to remote host 2222&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.111.222.2:2222&lt;br /&gt;
 socat TCP-LISTEN:22,fork,bind=127.0.0.1 TCP:192.168.0.15:5900&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.8.110.20:22,bind=172.19.14.251&lt;br /&gt;
Listen on 10.120.50.12:9090 and forward to 127.0.0.1:9090&lt;br /&gt;
 socat TCP-LISTEN:9090,bind=10.120.50.12,fork TCP:127.0.0.1:9090&lt;br /&gt;
Create tunnel via systemctl&lt;br /&gt;
Create file similar to this. /etc/systemd/system/socat_win.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/socat TCP-LISTEN:3389,fork TCP:192.168.122.204:3389&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
Enable new file.&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
Start new daemon&lt;br /&gt;
 systemctl start socat_win&lt;br /&gt;
&lt;br /&gt;
=sort=&lt;br /&gt;
Sort ip address.&lt;br /&gt;
 sort -t. +0n -1 +1n -2 +2n -3 +3n -4&lt;br /&gt;
 sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n&lt;br /&gt;
sort on fift column&lt;br /&gt;
 sort -t, -k5n,5 /tmp/gfp&lt;br /&gt;
Get a list of configured ip for a set of hosts. Sort on domain then hostname&lt;br /&gt;
 pdsh ^/host_list &#039;ip route get 8.8.8.8 | awk &amp;quot;NR==1 {print \$NF}&amp;quot;&#039; | sort -t . -k 2 -k 1&lt;br /&gt;
Sort on first column only.&lt;br /&gt;
 sort -n -k 1,1&lt;br /&gt;
&lt;br /&gt;
=spawn=&lt;br /&gt;
Encode wav to ogg in parallel.&lt;br /&gt;
  # ls -1 *.wav | while read ; do echo &amp;quot;oggenc -q6 \&amp;quot;$REPLY\&amp;quot;&amp;quot; ; done | spawn -j4&lt;br /&gt;
=split=&lt;br /&gt;
Devide file into parts containing 100 lines.&lt;br /&gt;
 split -l 100 create_updated_2013-10-29_sort_created_ci_id_name.txt --numeric-suffixes --suffix-length=3 Cleanup.&lt;br /&gt;
Devide file in 10 parts. Suffix length 4.&lt;br /&gt;
 split -n 10 -a 3 bigfile.tar.gz&lt;br /&gt;
&lt;br /&gt;
=sqlite=&lt;br /&gt;
Is db broken?&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;PRAGMA integrity_check&amp;quot;&lt;br /&gt;
recover db&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;.dump&amp;quot; | sqlite3 new.db&lt;br /&gt;
 sqlite3 stellar.db .recover | sqlite3 stellar_2.db&lt;br /&gt;
Show databases&lt;br /&gt;
 sqlite&amp;gt; .databases&lt;br /&gt;
 main: /var/lib/tuptime/tuptime.db&lt;br /&gt;
List tables&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
 tuptime&lt;br /&gt;
Run sql command&lt;br /&gt;
 sqlite&amp;gt; select * from tuptime;&lt;br /&gt;
 1544984636|2387765.42|-1|0|0.0|Linux-4.19.8-200.fc28.x86_64-x86_64-with-fedora-28-Twenty_Eight&lt;br /&gt;
exit|quit&lt;br /&gt;
 .quit&lt;br /&gt;
==vacuum==&lt;br /&gt;
 /usr/local/openvpn_as/bin/sqlite3 /usr/local/openvpn_as/etc/db/log.db &amp;quot;VACUUM&amp;quot;&lt;br /&gt;
==count tables==&lt;br /&gt;
 DB=files.db ; for TABLE in $( sqlite3 $DB &amp;quot;.tables&amp;quot;) ; do echo -e $TABLE\\t$(sqlite3 $DB &amp;quot;SELECT COUNT(1) FROM $TABLE;&amp;quot;) ; done | column_tab&lt;br /&gt;
&lt;br /&gt;
=ss=&lt;br /&gt;
List all connections.&lt;br /&gt;
 ss -an&lt;br /&gt;
List processes and which port they listen too. Grep process.&lt;br /&gt;
 ss -tulpn | grep 5405&lt;br /&gt;
&lt;br /&gt;
=ssh=&lt;br /&gt;
==ssh-keygen==&lt;br /&gt;
Create key pair without input.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KEYNAME=cluster-info-reporting ; KEYNAME_PATH=/tmp/${KEYNAME}-$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; ssh-keygen -q -t ed25519 -N &#039;&#039; -C $KEYNAME &amp;lt;&amp;lt;&amp;lt; $&#039;\ny&#039; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 -f &amp;quot;${KEYNAME_PATH}&amp;quot; ; echo Keys: $(ls &amp;quot;${KEYNAME_PATH}&amp;quot;*)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==which private ssh keys are password protected==&lt;br /&gt;
 ls ${HOME}/.ssh/* | grep -Ev &#039;pub$|authorized_keys|config|known_hosts|ssh-agent.sock&#039; | while read i ; do SSH_PASSWORD=$(ssh-keygen -y -P &amp;quot;&amp;quot; -f &amp;quot;$i&amp;quot; 2&amp;gt;&amp;amp;1 | grep &amp;quot;incorrect passphrase supplied to decrypt private key&amp;quot;) ; if [ -z &amp;quot;${SSH_PASSWORD}&amp;quot; ] ; then echo No password encrypted ssh private key: $i ; fi ; done&lt;br /&gt;
&lt;br /&gt;
==Remove pass phrase==&lt;br /&gt;
 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&lt;br /&gt;
&lt;br /&gt;
==view fingerprint==&lt;br /&gt;
 ssh-keygen -l -E md5 -f /tmp/ssh-keygen.pub&lt;br /&gt;
&lt;br /&gt;
==change the name of private key==&lt;br /&gt;
 ssh-keygen -c -C &amp;quot;first.lastname@example.com&amp;quot; -f ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
==Copy public key to authorized_keys==&lt;br /&gt;
 ssh-copy-id user@host&lt;br /&gt;
List supported ciphers&lt;br /&gt;
 ssh -Q cipher&lt;br /&gt;
List supported MACs&lt;br /&gt;
 ssh -Q mac&lt;br /&gt;
List supported public key type&lt;br /&gt;
 ssh -Q key&lt;br /&gt;
List supported key exchange algorithms&lt;br /&gt;
 ssh -Q kex&lt;br /&gt;
List supported ciphers, macs and kexalgorithms.&lt;br /&gt;
 sshd -T | grep &amp;quot;\(ciphers\|macs\|kexalgorithms\)&amp;quot;&lt;br /&gt;
Run command each time you login via ssh.&lt;br /&gt;
 $HOME/.ssh/rc&lt;br /&gt;
&lt;br /&gt;
==Tunnel==&lt;br /&gt;
 sudo ssh -nNTx -R 2222:localhost:22 andreasbj@www.halfface.se&lt;br /&gt;
Reverse tunnel.&lt;br /&gt;
 ssh -D \*:666 www.halfface.se&lt;br /&gt;
 ssh -N ipmon10.ny1.ip-soft.net -L43389:ippc01.ongame.ip-soft.net:3389&lt;br /&gt;
 -n	Dont take console. Good for background.&lt;br /&gt;
 -N	Do not execute a remote command&lt;br /&gt;
 -T	Disable pseudo-tty allocation.&lt;br /&gt;
 -x	Disables X11 forwarding.&lt;br /&gt;
 -R port:host:hostport&lt;br /&gt;
 sudo ssh -N -L 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 443:satellite.ongame.com:443 root@10.0.254.30 # Tunnel 443 over ssh from remote host via local host.&lt;br /&gt;
Open tunnel on remote host. Start remote proxy server forwarding to internal network.&lt;br /&gt;
 ssh remotehost -R remoteport:localhost:localport &amp;quot;ssh -D 9050 localhost:remoteport&amp;quot;&lt;br /&gt;
Multiple reverse tunnel controled by autossh. (-M)Control port,(-f)background, (-N) no remote command, reverse tunnel (-R)&lt;br /&gt;
 autossh -M 41000 -f -N -R 0.0.0.0:8001:192.168.1.10:80 -R 0.0.0.0:8002:192.168.1.20:80 user@remotehost&lt;br /&gt;
&lt;br /&gt;
==reverse tunnel bound to all interfaces==&lt;br /&gt;
The config has to allow to bind to * interface. /etc/ssh/sshd_config  GatewayPorts yes&lt;br /&gt;
 sudo ssh -i ${HOME}/.ssh/id_dsa -N -R \*:2222:localhost:22 ${USER}@www.halfface.se&lt;br /&gt;
&lt;br /&gt;
==Create an ssh tunnel link==&lt;br /&gt;
 https://help.ubuntu.com/community/SSH_VPN&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 vim /etc/ssh/sshd_config  PermitTunnel=yes&lt;br /&gt;
 sudo ssh -NTCf -w 0:0 1.2.3.4&lt;br /&gt;
 sudo ssh -v -w any:any www.halfface.se&lt;br /&gt;
 ###&lt;br /&gt;
 local:&lt;br /&gt;
 ip link set tun0 up&lt;br /&gt;
 ip addr add 169.254.0.1/32 peer 169.254.0.2 dev tun0&lt;br /&gt;
 ip route add 192.168.0/24 via 169.254.0.2&lt;br /&gt;
 remote:&lt;br /&gt;
 ip link set tun1 up&lt;br /&gt;
 ip addr add 169.254.0.2/32 peer 169.254.0.1 dev tun1&lt;br /&gt;
 arp -sD 169.254.0.2 eth1 pub&lt;br /&gt;
 ### Change default gateway. In this case, 192.168.0.1 is Machine B&#039;s current default gateway; it is the gateway on Network B that provides internet connectivity&lt;br /&gt;
 ip route add 1.2.3.4/32 via 192.168.0.1&lt;br /&gt;
 ip route replace default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
==Limit ssh access with pam_access==&lt;br /&gt;
 /etc/security/access.conf&lt;br /&gt;
&lt;br /&gt;
==Proxycommand without nc==&lt;br /&gt;
 Host server1&lt;br /&gt;
  Hostname 10.0.1.1&lt;br /&gt;
  ProxyCommand ssh -q -x jumphost -W %h:22&lt;br /&gt;
&lt;br /&gt;
==ssh over ipv6 via 2 network interface.==&lt;br /&gt;
 ssh -6 fe80::1ec1:deff:fecb:6ce%2&lt;br /&gt;
&lt;br /&gt;
==ssh options==&lt;br /&gt;
None interactive. Dont ask for password.&lt;br /&gt;
 -o BatchMode=yes&lt;br /&gt;
Accept all keys.&lt;br /&gt;
 -o StrictHostKeyChecking=no&lt;br /&gt;
&lt;br /&gt;
==ssh via proxy/squid==&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc --proxy proxy.inter.net:3128 --proxy-type http %h %p&#039; host.inter.net hostname&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc -X connect -x proxy.inter.net:3128 %h %p&#039; host.inter.net hostname&lt;br /&gt;
&lt;br /&gt;
==brow.sh==&lt;br /&gt;
browser in terminal window.&lt;br /&gt;
 ssh brow.sh&lt;br /&gt;
&lt;br /&gt;
==jail==&lt;br /&gt;
/etc/sshd/sshd_config &lt;br /&gt;
 Match group mychroot &lt;br /&gt;
 ChrootDirectory /jail/ &lt;br /&gt;
 X11Forwarding no &lt;br /&gt;
 AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
==sshd debug==&lt;br /&gt;
Start deamon once in debug mode and put output to your console.&lt;br /&gt;
 /etc/sysconfig/sshd&lt;br /&gt;
 OPTIONS=&amp;quot;-ddd&amp;quot;&lt;br /&gt;
Kill of sshd which is listening for new connections. Start sshd with the following command. Debug level can bee changed.&lt;br /&gt;
 /usr/sbin/sshd -De -o LogLevel=DEBUG3&lt;br /&gt;
&lt;br /&gt;
==ssh multiple jumps one cli==&lt;br /&gt;
Jump through host1.net to get to host2.net&lt;br /&gt;
 ssh -t host1.net ssh -t host2&lt;br /&gt;
Jump through host1.net to host2.net and bring port 8080 with you.&lt;br /&gt;
 ssh -t host1.net -L 8080:localhost:8080 ssh -t host2.net -L 8080:localhost:8080&lt;br /&gt;
&lt;br /&gt;
==ssh force password login==&lt;br /&gt;
 ssh -o StrictHostKeyChecking=no -o ControlPath=none -o ControlMaster=no -o PubkeyAuthentication=no user@host&lt;br /&gt;
&lt;br /&gt;
==ssh via jumphost==&lt;br /&gt;
 ssh -J core@1.1.1.1 core@2.2.2.2&lt;br /&gt;
&lt;br /&gt;
==socks==&lt;br /&gt;
 # Setup socks server exiting on remote host&lt;br /&gt;
 ssh -D &#039;*:3128&#039; halfface.se&lt;br /&gt;
 # Use socks setup above.&lt;br /&gt;
 curl --socks5 localhost:3128 https://ifconfig.me&lt;br /&gt;
&lt;br /&gt;
==Create public key from private==&lt;br /&gt;
 ssh-keygen -y -f &amp;lt;private_key_with_return_at_end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshfs mount filesystem over ssh=&lt;br /&gt;
 sshfs name@server:/path/to/folder /path/to/mount/point&lt;br /&gt;
=sshpass=&lt;br /&gt;
ssh with password provided on the command line.&lt;br /&gt;
 sshpass -p P@ssW0rd ssh -t -o ControlPath=none -o PreferredAuthentications=password -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Error user@localhost hostname&lt;br /&gt;
=specify key=&lt;br /&gt;
 ssh -o &amp;quot;IdentitiesOnly=yes&amp;quot; -i &amp;lt;private key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshuttle=&lt;br /&gt;
create a network route over ssh.&lt;br /&gt;
 sshuttle -D -r user@remotehost:2222 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
=stat=&lt;br /&gt;
View file permissions only.&lt;br /&gt;
 stat -c &amp;quot;%a %n&amp;quot; /usr/bin/bash&lt;br /&gt;
 Access - the last time the file was read&lt;br /&gt;
 Modify - the last time the file was modified (content has been modified)&lt;br /&gt;
 Change - the last time meta data of the file was changed (e.g. permissions)&lt;br /&gt;
Copy permissions from one location to another.&lt;br /&gt;
 rpm -qlp package.rpm | while read FILE ; do echo chmod $(stat -c &amp;quot;%a&amp;quot; $FILE) \&amp;quot;$FILE\&amp;quot;;done &amp;gt; /tmp/copy_permissions.sh&lt;br /&gt;
&lt;br /&gt;
=strace=&lt;br /&gt;
==File open activity.==&lt;br /&gt;
 strace -e open -f ls -la /temp/&lt;br /&gt;
==File open activity under directory.==&lt;br /&gt;
  strace -e open -P /temp/ -f ls -la /temp/&lt;br /&gt;
==More file activity.==&lt;br /&gt;
 strace -e trace=file -p 1234&lt;br /&gt;
 strace -e trace=desc -p 1234&lt;br /&gt;
==Trace network activity.==&lt;br /&gt;
 sudo strace -f -e trace=network -p 1476&lt;br /&gt;
 # 1024 long strings.&lt;br /&gt;
 sudo strace -s 1024 -f -e trace=network -p 1476&lt;br /&gt;
 # strace follow process with matching regex.&lt;br /&gt;
 strace -f -e poll,select,connect,recvfrom,sendto -p $(pgrep -f login-sync.xml)&lt;br /&gt;
 # trace nework activity&lt;br /&gt;
 strace -f -e trace=network -s 1000000 nc localhost 3333&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
 sudo strace -f -e trace=memory -p $(pgrep -f firefox)&lt;br /&gt;
==What is taking time==&lt;br /&gt;
 [root@util01 abjorklund]# strace -f -c -p 9657&lt;br /&gt;
  % time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
  88.11   11.614155        1644      7065      1565 futex&lt;br /&gt;
   9.94    1.310794       16183        81        73 restart_syscall&lt;br /&gt;
   1.86    0.245018          86      2850           recvfrom&lt;br /&gt;
   0.05    0.006784          30       228           poll&lt;br /&gt;
   0.03    0.004006           2      1838           sendto&lt;br /&gt;
   0.00    0.000271           1       253           sched_yield&lt;br /&gt;
   0.00    0.000134          12        11           mmap&lt;br /&gt;
   0.00    0.000107           0      5176           ioctl&lt;br /&gt;
   0.00    0.000026           0       148       148 stat&lt;br /&gt;
   0.00    0.000000           0         1           read&lt;br /&gt;
   0.00    0.000000           0       254           write&lt;br /&gt;
   0.00    0.000000           0        44           mprotect&lt;br /&gt;
   0.00    0.000000           0         1           rt_sigreturn&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
 100.00   13.181295                 17950      1786 total&lt;br /&gt;
&lt;br /&gt;
==strace multiple processes==&lt;br /&gt;
 strace -s 1024 -f -o /tmp/strace $(pidof Process_name | sed &#039;s/\([0-9]*\)/-p \1/g&#039;)&lt;br /&gt;
==strace to hex output. Convert to utf8.==&lt;br /&gt;
 strace -xx -f -o/tmp/strace -s0 echo bajskorv&lt;br /&gt;
 cat /tmp/strace | while read -r line; do printf &amp;quot;%b\n&amp;quot; &amp;quot;$line&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=stty=&lt;br /&gt;
List settings&lt;br /&gt;
 stty -a&lt;br /&gt;
 speed 38400 baud; rows 50; columns 200; line = 0;&lt;br /&gt;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;&lt;br /&gt;
 -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts&lt;br /&gt;
 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8&lt;br /&gt;
 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc&lt;br /&gt;
Set terminal properties.&lt;br /&gt;
 stty rows 50 cols 200&lt;br /&gt;
&lt;br /&gt;
=sudo=&lt;br /&gt;
Enable sudo logging&lt;br /&gt;
 sed -i &amp;quot;$(( $(grep -n ^Defaults /etc/sudoers | tail -1 | awk -F: &#039;{print $1}&#039;) + 1 ))iDefaults    log_output\nDefaults    log_input&amp;quot; /etc/sudoers&lt;br /&gt;
Command above adds the following to /etc/sudoers&lt;br /&gt;
 Defaults    log_output&lt;br /&gt;
 Defaults    log_input&lt;br /&gt;
List sudo-io logs.&lt;br /&gt;
 sudoreplay -l&lt;br /&gt;
Search for string in logs.&lt;br /&gt;
 zgrep search_string $(find /var/log/sudo-io/ -type f)&lt;br /&gt;
Replay session. Max wait 1s. 5 times the speed.&lt;br /&gt;
 sudoreplay -m1 -s5 000002&lt;br /&gt;
Replay session including stdin&lt;br /&gt;
 sudo sudoreplay -m1 -s5 -f stdin,stdout,stderr,ttyin,ttyout 000001&lt;br /&gt;
Which rules apply to user&lt;br /&gt;
 sudo -l -U username&lt;br /&gt;
==Add user to sudoers.d so you do not need to add password for that user.==&lt;br /&gt;
 SUDO_USER=&amp;lt;user&amp;gt; ; echo -e &amp;quot;# Adding $SUDO_USER user to sudo users.\n$SUDO_USER ALL=(ALL) NOPASSWD:ALL&amp;quot; &amp;gt; /etc/sudoers.d/90-${SUDO_USER//./_} ; chmod 440 /etc/sudoers.d/90-${SUDO_USER//./_}&lt;br /&gt;
&lt;br /&gt;
=swapon/swapof=&lt;br /&gt;
Free swap&lt;br /&gt;
 (swapoff -a; swapon -a) &amp;amp; watch free -m&lt;br /&gt;
&lt;br /&gt;
=sysbench=&lt;br /&gt;
cpu test.&lt;br /&gt;
 sysbench cpu --cpu-max-prime=20000 --threads=32 run | grep &amp;quot;events per second&amp;quot;&lt;br /&gt;
ram test&lt;br /&gt;
 sysbench memory --threads=32 run | grep sec&lt;br /&gt;
disk test&lt;br /&gt;
 RAM_TWO=$(( $(grep MemTotal /proc/meminfo | awk &#039;{print $2}&#039;) * 2 ))kb&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} prepare &amp;gt; /dev/null&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} --file-test-mode=rndrw --time=300 --max-requests=0 run|grep -E &#039; read, | written, &#039;&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} cleanup &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
=sysctl=&lt;br /&gt;
Rename machine.&lt;br /&gt;
 sysctl kernel.hostname=ipmonxx.${CLIENT}.ip-soft.net&lt;br /&gt;
Set tcp keepalive&lt;br /&gt;
 $ sysctl -a | grep tcp_keepalive&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 1800&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 9&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 75&lt;br /&gt;
 sudo sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 60&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 3&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 10&lt;br /&gt;
Reload config files&lt;br /&gt;
 sysctl --system&lt;br /&gt;
&lt;br /&gt;
=systemctl=&lt;br /&gt;
==init 3== &lt;br /&gt;
 systemctl isolate runlevel3.target&lt;br /&gt;
 systemctl isolate multi-user.target&lt;br /&gt;
 systemctl set-default multi-user.target&lt;br /&gt;
&lt;br /&gt;
==init 5==&lt;br /&gt;
 systemctl isolate runlevel5.target&lt;br /&gt;
 systemctl isolate graphical.target&lt;br /&gt;
 systemctl set-default graphical.target&lt;br /&gt;
&lt;br /&gt;
==When you have made changes to  /etc/systemd/system/*.service==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==List all units==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==List units with problems==&lt;br /&gt;
 systemctl list-units --failed&lt;br /&gt;
==create service==&lt;br /&gt;
cd /etc/systemd/system ; vim $service.service ; systemctl daemon-reload&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Set laptop brightness&lt;br /&gt;
 After=multi-user.target &lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 ExecStart=/bin/sh -c &#039;echo 1000 &amp;gt; /sys/class/backlight/intel_backlight/brightness&#039;&lt;br /&gt;
 LimitNOFILE=65535&lt;br /&gt;
 LimitNPROC=65535&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=default.target&lt;br /&gt;
&lt;br /&gt;
==Add groups to processes started by services script==&lt;br /&gt;
 [Service]&lt;br /&gt;
 SupplementaryGroups=33 518&lt;br /&gt;
==takes a long time to login==&lt;br /&gt;
 systemctl daemon-reexec&lt;br /&gt;
 systemctl restart systemd-logind&lt;br /&gt;
&lt;br /&gt;
=strace process started by systemctl=&lt;br /&gt;
 strace -f -o /tmp/strace.log -s 2048 -p 1 &amp;amp; systemctl restart httpd.service&lt;br /&gt;
=systemctl show puma=&lt;br /&gt;
Show variables of service&lt;br /&gt;
 systemctl show puma&lt;br /&gt;
&lt;br /&gt;
=systemd-analyze=&lt;br /&gt;
What takes time at startup.&lt;br /&gt;
 systemd-analyze plot &amp;gt; /tmp/systemd-analyze-plot.svg ; chrome /tmp/systemd-analyze-plot.svg&lt;br /&gt;
=systemd-resolved=&lt;br /&gt;
 resolvectl status&lt;br /&gt;
clear cache.&lt;br /&gt;
 sudo systemd-resolve --flush-caches&lt;br /&gt;
Look at stats.&lt;br /&gt;
 systemd-resolve --statistics&lt;br /&gt;
==restart daemon to apply settings==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart systemd-networkd&lt;br /&gt;
 systemctl restart systemd-resolved&lt;br /&gt;
=systemctl show=&lt;br /&gt;
will show all available properties&lt;br /&gt;
 systemctl show $service&lt;br /&gt;
&lt;br /&gt;
=tail=&lt;br /&gt;
Tail from line number 21.&lt;br /&gt;
 tail -n +21 /file&lt;br /&gt;
=talk=&lt;br /&gt;
Talks swedish.&lt;br /&gt;
 espeak -v swedish -f /tmp/file&lt;br /&gt;
&lt;br /&gt;
=tar=&lt;br /&gt;
Make a backup of a directory or disk.&lt;br /&gt;
 server: tar -cpsf - $dir | pv -b | nc -l 3333&lt;br /&gt;
 client: nc server 3333 | pv -b | tar -xpst -&lt;br /&gt;
Inline tar archive.&lt;br /&gt;
 awk &#039;/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }&#039; $0&lt;br /&gt;
 tail -n $0 &amp;gt; archive.tar # tail -n +347 Filename&lt;br /&gt;
Backup dir but exclude files within&lt;br /&gt;
 tar zcf /tmp/backup_$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).tar.gz /apps/app --exclude=/apps/app/var/* --exclude=/apps/app/logs/*&lt;br /&gt;
extract files remove 5 path element components.&lt;br /&gt;
 tar xf archive.tar --strip-components 5&lt;br /&gt;
extract to other directory.&lt;br /&gt;
 tar -xzf bar.tar.gz -C foo&lt;br /&gt;
extract files excluding path.&lt;br /&gt;
 tar xf $file.tar.gz --transform=&#039;s/.*\///&#039;&lt;br /&gt;
&lt;br /&gt;
=tcpdump=&lt;br /&gt;
dump trafic information, -e Print the link-level header on each dump line, -vvv verbose.&lt;br /&gt;
 tcpdump -e -vvv port 21&lt;br /&gt;
dump all trafic to and from machine. -w write to file, -s0 size of package, host to listen from.&lt;br /&gt;
 time tcpdump -w ssl_dump -s0 host test.x30.webservices.itsfogo.com&lt;br /&gt;
dump all trafic into files of max 100MB. 270MB in reality.&lt;br /&gt;
 tcpdump -w snoop -s0 -C 100000000&lt;br /&gt;
dump all trafic. compress logfiles. Create 10 files which are 10 MB big. Dont convert numbers to names. Dont truncate frames create logfile with this name.&lt;br /&gt;
 tcpdump -z gzip -i wlan0 -C 10 -W 10 -n -s0 -w /tmp/tcpdump.log&lt;br /&gt;
Which machines send a syn packet.&lt;br /&gt;
 sudo tcpdump -nn -i eth0 &#039;tcp[13] = 2&#039;&lt;br /&gt;
Show information about all traffic on interface.&lt;br /&gt;
 tcpdump -s0 -i eth1 -vv&lt;br /&gt;
Show information about communication over port 514&lt;br /&gt;
 tcpdump -Xni any port 514&lt;br /&gt;
listen on port 1023 for incoming trafic. disable local subnets.&lt;br /&gt;
 sudo tcpdump -n -i eth0 tcp and dst host 172.17.17.6 and not src net 172.17.17.0/24 and not src net 158.0.0.0/8 and &#039;port 1023&#039;&lt;br /&gt;
listen after torrent traffic.&lt;br /&gt;
 sudo tcpdump -Xni any portrange 6882-6999&lt;br /&gt;
View content of http trafic&lt;br /&gt;
 sudo tcpdump -i any -A -s 1500 dst 89.253.75.84 and port 80&lt;br /&gt;
View post in utf-8 format.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tcpdump -lnp -i any -A -s 1500 dst 89.253.75.84 and port 80 -w - | tr -t &#039;[^[:print:]]&#039; &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get cookie&lt;br /&gt;
 tcpdump -i lo -A -l dst port 8000 |     grep &amp;quot;^Cookie: &amp;quot;&lt;br /&gt;
 To create cookie for curl: https://xiix.wordpress.com/2006/03/23/mozillafirefox-cookie-format/&lt;br /&gt;
Look at traffic from specific ip&lt;br /&gt;
 tcpdump -n -i any -n host 198.18.130.9&lt;br /&gt;
Eavesdrop password&lt;br /&gt;
 tcpdump -i any -A -s0 port 8030 | grep Authorization:&lt;br /&gt;
==flags==&lt;br /&gt;
tcpdump -enni eth0 host 172.30.142.11 port 5432&lt;br /&gt;
 F - FIN&lt;br /&gt;
 S - SYN&lt;br /&gt;
 R - RST&lt;br /&gt;
 P - PSH&lt;br /&gt;
 U - URG&lt;br /&gt;
 E - ECN Echo&lt;br /&gt;
 W - ECN Cwnd Reduced&lt;br /&gt;
 . - ACK only&lt;br /&gt;
==get ftp username/password==&lt;br /&gt;
 sudo tcpdump -n -vvv -i any -A -f &amp;quot;port 21&amp;quot; | grep -i &amp;quot;user\|pass&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=tcptraceroute=&lt;br /&gt;
 tcptraceroute -n -q 1 192.168.0.1 -p 22&lt;br /&gt;
=teamdctl=&lt;br /&gt;
 teamdctl team0 state view -v&lt;br /&gt;
=tee=&lt;br /&gt;
Feed tee with an unbuffered stream.&lt;br /&gt;
 sar -n DEV 2 | stdbuf -oL grep wlp0s20f3 | tee /temp/sar_-n_wlp0s20f3.$(date)&lt;br /&gt;
&lt;br /&gt;
=telnet=&lt;br /&gt;
Look at world map. a - z zoom.&lt;br /&gt;
 telnet mapscii.me&lt;br /&gt;
=testssl=&lt;br /&gt;
test ssl certificate&lt;br /&gt;
 testssl www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=tftp=&lt;br /&gt;
 # Download test.file&lt;br /&gt;
 tftp -v 172.17.17.6 -c get test.file&lt;br /&gt;
 # Upload file.&lt;br /&gt;
 tftp -v 172.17.17.6 -c put /tmp/test.put test.put&lt;br /&gt;
 # Enable upload file in in.tftpd&lt;br /&gt;
 /etc/xinetd.d/tftp&lt;br /&gt;
 server_args        = -c -s /var/lib/tftpboot&lt;br /&gt;
=tibco=&lt;br /&gt;
show permissions.&lt;br /&gt;
 help permissions&lt;br /&gt;
Create user&lt;br /&gt;
 create user surveillance &amp;quot;Surveillance user&amp;quot; password=surveillance&lt;br /&gt;
Grant user permission to view all&lt;br /&gt;
 grant admin user=surveillance view-all&lt;br /&gt;
=tif=&lt;br /&gt;
cli image viewer.&lt;br /&gt;
 tif $IMAGE.jpg&lt;br /&gt;
&lt;br /&gt;
=time=&lt;br /&gt;
Time in a loop.&lt;br /&gt;
 { time sleep 2 &amp;gt;&amp;gt; ${LOG} ; } 2&amp;gt;&amp;gt; ${LOG}&lt;br /&gt;
How long did a command take&lt;br /&gt;
 TIME=$( { /usr/bin/time -f &amp;quot;%e&amp;quot; sleep 1.5 ;} 2&amp;gt;&amp;amp;1 ) ; echo $TIME&lt;br /&gt;
Built in time command. 3 decimals in seconds.&lt;br /&gt;
 TIMEFORMAT=&#039;%3R&#039;; time ( sleep 61.22222 )&lt;br /&gt;
=timedatectl=&lt;br /&gt;
Show info how clock is synced.&lt;br /&gt;
 timedatectl timesync-status&lt;br /&gt;
Which time zones exist&lt;br /&gt;
 timedatectl list-timezones | cat -v | grep -i stockholm&lt;br /&gt;
Set timezone.&lt;br /&gt;
 timedatectl set-timezone &amp;quot;Europe/Stockholm&amp;quot;&lt;br /&gt;
Show ntp servers&lt;br /&gt;
 timedatectl show-timesync --all&lt;br /&gt;
Sync clock&lt;br /&gt;
 timedatectl set-ntp true&lt;br /&gt;
Enable clock sync.&lt;br /&gt;
 systemctl enable systemd-timesyncd --now&lt;br /&gt;
&lt;br /&gt;
=timeout=&lt;br /&gt;
limit waiting for a period.&lt;br /&gt;
 timeout 2s sleep 100&lt;br /&gt;
Run function under timeout&lt;br /&gt;
 export -f my_function ; timeout 1 bash -c &#039;my_function options&#039;&lt;br /&gt;
Run loop for some time then exit.&lt;br /&gt;
 timeout 172800 bash -c -- &#039;while true ; do echo $(TZ=UTC date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;) $(ping -w1 -q -c1 -i10 192.168.10.120 | grep received) ; sleep 1 ; done| tee /tmp/ping_192.168.10.120.log&#039;&lt;br /&gt;
&lt;br /&gt;
=tnef=&lt;br /&gt;
List content of winmail.dat. Remove options to extract to current dir.&lt;br /&gt;
 tnef -t -f winmail.dat&lt;br /&gt;
=toilet=&lt;br /&gt;
Generate graphics text similar to banner.&lt;br /&gt;
 toilet -F gay -f mono12 &amp;quot;Some Funky Text&amp;quot;&lt;br /&gt;
=tor=&lt;br /&gt;
Select outgoing country. https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2&lt;br /&gt;
Set country in:&lt;br /&gt;
 torrc&lt;br /&gt;
One or several exit countries.&lt;br /&gt;
 ExitNodes {us}&lt;br /&gt;
 ExitNodes {kr},{ru},{sy},{cn}&lt;br /&gt;
test exit node&lt;br /&gt;
 ifconfig.me&lt;br /&gt;
=toolbox=&lt;br /&gt;
 toolbox create --distro rhel --release 9.5&lt;br /&gt;
==running rocky==&lt;br /&gt;
 podman pull docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
 toolbox create --image docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
&lt;br /&gt;
=top(the command)=&lt;br /&gt;
Top batch mode run one iteration&lt;br /&gt;
 top -bn1&lt;br /&gt;
Sort by memory usage&lt;br /&gt;
 for i in {1..10};do date; top -c -b -o +%MEM | head -n 17|tail -11;sleep 5;done&lt;br /&gt;
Top used in openshift.&lt;br /&gt;
 top -bcn1 -w512 | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=top derivates=&lt;br /&gt;
 apachetop&lt;br /&gt;
 dnstop&lt;br /&gt;
 iftop&lt;br /&gt;
 latencytop&lt;br /&gt;
 glances&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 touch -am 0910120003    Give a new access time on a file 0910120003MMDDhhmmyy&lt;br /&gt;
linux&lt;br /&gt;
 touch -t 197102162324 *&lt;br /&gt;
&lt;br /&gt;
=tput=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
Line wraps&lt;br /&gt;
 tput smam&lt;br /&gt;
invisible cursor&lt;br /&gt;
 tput civis&lt;br /&gt;
visible cursor&lt;br /&gt;
 tput cnorm&lt;br /&gt;
reset is a good command to reset shell&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
=tr=&lt;br /&gt;
translate capital to lower letter.&lt;br /&gt;
 tr &#039;[:upper:]&#039; &#039;[:lower:]&#039;&lt;br /&gt;
null character to new line&lt;br /&gt;
 tr &#039;\000&#039; &#039;\n&#039; &amp;lt; /proc/3575/environ&lt;br /&gt;
Remove unprintable characters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tr -dc &#039;[[:print:]]&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trickle=&lt;br /&gt;
Speed limit for download&lt;br /&gt;
 rsync -ae &amp;quot;trickle -d 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Speed limit for upload.&lt;br /&gt;
 rsync -ae &amp;quot;trickle -u 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Limit wget to 64kbit upload and download.&lt;br /&gt;
 trickle -d 64 -u 64 wget &amp;quot;https://www.halfface.se/file.txt&amp;quot;&lt;br /&gt;
=ts=&lt;br /&gt;
timestamp&lt;br /&gt;
 ls -la | ts &#039;%F %H:%M:%S&#039;&lt;br /&gt;
&lt;br /&gt;
=tune2fs(tunefs)=&lt;br /&gt;
 tune2fs -m 0 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=type=&lt;br /&gt;
What kind of command do we use. builtin or some file?&lt;br /&gt;
 type ls&lt;br /&gt;
&lt;br /&gt;
=udevadm=&lt;br /&gt;
Monitor udev events.&lt;br /&gt;
 udevadm monitor&lt;br /&gt;
udevadm info --query=all --name=sda&lt;br /&gt;
 look at values for disk. Can be used to locate san source.&lt;br /&gt;
&lt;br /&gt;
=udr=&lt;br /&gt;
rsync over udp.&lt;br /&gt;
 udr -a 57621 -b 57631 rsync -rP host.inter.net:/source/ /destination/&lt;br /&gt;
=ulimt=&lt;br /&gt;
Look at current limits for logged in user.&lt;br /&gt;
 ulimit -a&lt;br /&gt;
Look at limits for process with pid 12345.&lt;br /&gt;
 cat /proc/12345/limits&lt;br /&gt;
=unalias=&lt;br /&gt;
Unalias all aliases&lt;br /&gt;
 unalias -a&lt;br /&gt;
=unhide=&lt;br /&gt;
Find hidden ports.&lt;br /&gt;
 unhide -v proc&lt;br /&gt;
&lt;br /&gt;
=unetbootin=&lt;br /&gt;
 Boot iso image from usb memory.&lt;br /&gt;
=update-crypto-policies=&lt;br /&gt;
Change crypt policies so that I am able to start openvpn connection.&lt;br /&gt;
 sudo update-crypto-policies --set DEFAULT:SHA1&lt;br /&gt;
&lt;br /&gt;
=upower=&lt;br /&gt;
 # Powerstatus of the system. battery charge.&lt;br /&gt;
 upower --dump&lt;br /&gt;
=uptime=&lt;br /&gt;
Uptime in seconds.&lt;br /&gt;
 awk -F . &#039;{print $1}&#039; /proc/uptime&lt;br /&gt;
&lt;br /&gt;
=urldecode/urlencode=&lt;br /&gt;
Encode&lt;br /&gt;
 perl -pe&#039;s/([^-_.~A-Za-z0-9])/sprintf(&amp;quot;%%%02X&amp;quot;, ord($1))/seg&#039;&lt;br /&gt;
 jq -sRr @uri&lt;br /&gt;
Decode&lt;br /&gt;
 perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;&lt;br /&gt;
 jq -r @uri&lt;br /&gt;
&lt;br /&gt;
=useradd=&lt;br /&gt;
 useradd --uid 666 --gid 666 --comment &#039;devil&#039; devil &amp;amp;&amp;amp; echo &#039;devil:VerySecretPassword&#039; | chpasswd&lt;br /&gt;
&lt;br /&gt;
=v4l2=&lt;br /&gt;
Video player&lt;br /&gt;
 qv4l2&lt;br /&gt;
List available formatats and resolutions.&lt;br /&gt;
 v4l2-ctl --list-formats-ext&lt;br /&gt;
List available formats&lt;br /&gt;
 v4l2-ctl --list-formats&lt;br /&gt;
Set camera to h264&lt;br /&gt;
 v4l2-ctl --set-fmt-video=width=800,height=448,pixelformat=1&lt;br /&gt;
Set framerate.&lt;br /&gt;
 v4l2-ctl --set-parm=30&lt;br /&gt;
List video parameters&lt;br /&gt;
 v4l2-ctl --get-fmt-video&lt;br /&gt;
List video output&lt;br /&gt;
 v4l2-ctl --all&lt;br /&gt;
Disable autofocus&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_auto=0&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_absolute=0&lt;br /&gt;
=version of linux=&lt;br /&gt;
 cat /etc/os-release&lt;br /&gt;
&lt;br /&gt;
=vi=&lt;br /&gt;
 :set ignorecase&lt;br /&gt;
 :set list        show all keys.&lt;br /&gt;
 :set nolist      show their representative.&lt;br /&gt;
=wipefs=&lt;br /&gt;
Wipe removes information about file system without removing actual data.&lt;br /&gt;
 wipefs -a /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=vmstat=&lt;br /&gt;
top over time.&lt;br /&gt;
 vmstat -n 5&lt;br /&gt;
Description:&lt;br /&gt;
 r=procs waiting for cpu time.&lt;br /&gt;
 b=procs in sleep mode.&lt;br /&gt;
 swpd=virtual memory in use in swap.&lt;br /&gt;
 free=memory free.&lt;br /&gt;
 buff=memory used by buffers&lt;br /&gt;
 cache=memory used as cache.&lt;br /&gt;
 si=swap in.&lt;br /&gt;
 so=swap out.&lt;br /&gt;
 bi=io block in.&lt;br /&gt;
 bo=io block out.&lt;br /&gt;
 in=interups&lt;br /&gt;
 cs=contex switching.&lt;br /&gt;
 us=cpu user space&lt;br /&gt;
 sy=cpu system usage to serve.&lt;br /&gt;
 id=cpu idle&lt;br /&gt;
 wa=cpu waiting for input output. iowait.&lt;br /&gt;
 st=cpu time stolen from a virtual machine&lt;br /&gt;
&lt;br /&gt;
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----&lt;br /&gt;
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st&lt;br /&gt;
  2  1 814984 167992  26820 999460    0    0     1     0 2467 5088  2  2 95  1  0   &lt;br /&gt;
  0  0 814984 168100  26820 999540    0    0     2   150 2467 5026  1  2 97  0  0&lt;br /&gt;
=w3m(elinks)=&lt;br /&gt;
 curl -s https://google.com | w3m -T text/html -dump&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 wget -r -nH -np --cut-dirs=1 --no-check-certificate -U Mozilla --user={uname} --password={pwd} https://my-host/my-webdav-dir/my-dir-in-webdav&lt;br /&gt;
wget to standard output.&lt;br /&gt;
 wget --no-check-certificate -S -O- http://inter.net&lt;br /&gt;
Special heather&lt;br /&gt;
 wget &#039;http://halfface.se&#039; --header=&#039;Cookie: has_js=1&#039;&lt;br /&gt;
Mirror&lt;br /&gt;
 wget &#039;https://halfface.se/test&#039; -r -l 3 --convert-links -o log  --html-extension&lt;br /&gt;
&lt;br /&gt;
=whois=&lt;br /&gt;
 # When does a domain expire.&lt;br /&gt;
 whois -h whois.iana.org sivberg.se&lt;br /&gt;
 # which ipranges does an ipaddress belong too. In this case looking at google.&lt;br /&gt;
 whois -h whois.radb.net -- &amp;quot;-i origin $(whois -s -h whois.radb.net 172.217.26.68 | grep ^origin | awk &#039;{print $2}&#039; | tail -1)&amp;quot; | grep ^route | awk &#039;{print $2}&#039;&lt;br /&gt;
 # Who to find address range for site.&lt;br /&gt;
 host www.facebook.com&lt;br /&gt;
 whois 157.240.194.35 | grep CIDR&lt;br /&gt;
&lt;br /&gt;
=wireshark=&lt;br /&gt;
 find packet&lt;br /&gt;
 packet details&lt;br /&gt;
 string&lt;br /&gt;
==ssl decryption==&lt;br /&gt;
 export SSLKEYLOGFILE=/tmp/sslkeylog ; curl -sv -d &amp;quot;blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla&amp;quot; https://www.halfface.se&lt;br /&gt;
 wireshark. Edit - Preferences - Protocols - TLS - (Pre) -master-Secret log file.&lt;br /&gt;
==tshark==&lt;br /&gt;
cli version&lt;br /&gt;
 tshark -V -r $dump.pcap&lt;br /&gt;
=wlr-randr=&lt;br /&gt;
Change dpi in wayland.&lt;br /&gt;
 wlr-randr --output eDP-1 --scale 2&lt;br /&gt;
Change resolution&lt;br /&gt;
 wlr-randr --output DP-1 --mode 1920x1080&lt;br /&gt;
&lt;br /&gt;
=wodim=&lt;br /&gt;
Burning disks.&lt;br /&gt;
 wodim -scanbus    # Scan scsi bus for burners.&lt;br /&gt;
 wodim --devices   # Discover basic information.&lt;br /&gt;
 wodim -checkdrive # Information about burner.&lt;br /&gt;
 wodim -tao speed=0 dev=/dev/sr0 -v -data /temp/files/                      # Burn disk containing structure from /temp/files/&lt;br /&gt;
 wodim -eject  -tao speed=0 dev=/dev/scd0 -v -data /my/directory/image.iso   # Burn image to disc.&lt;br /&gt;
=write=&lt;br /&gt;
Send message to someone via tty.&lt;br /&gt;
 who | grep user&lt;br /&gt;
write message end with CTRL + d&lt;br /&gt;
 write abjorklund pts/2&lt;br /&gt;
&lt;br /&gt;
=xargs=&lt;br /&gt;
locate case insensetive, regular expression. xargs string to replace imput. Print output to standard error.&lt;br /&gt;
 locate -ir &amp;quot;.*\.crt$&amp;quot; | xargs -I &#039;{}&#039; -t cp {} /temp/ssl/&lt;br /&gt;
Do something on everything from standard input.&lt;br /&gt;
 ls -la | xargs -i% echo &#039;# beginning #&#039; % &#039;# end of line #&#039;&lt;br /&gt;
split several lines into groups.&lt;br /&gt;
 for i in {00..99} ; do echo $i, ; done | xargs -L 20&lt;br /&gt;
&lt;br /&gt;
=xdotool=&lt;br /&gt;
When you have to move your mouse but you dont want to push it.&lt;br /&gt;
 xdotool mousemove_relative -- -1 -1&lt;br /&gt;
 xdotool mousemove_relative 1 1&lt;br /&gt;
Send ab to window.&lt;br /&gt;
 xdotool search --onlyvisible --name freerdp key a key b&lt;br /&gt;
=xfs=&lt;br /&gt;
 xfs_repair -L /dev/mapper/vg00-root&lt;br /&gt;
&lt;br /&gt;
=xinput=&lt;br /&gt;
 # List xinputs.&lt;br /&gt;
 xinput list&lt;br /&gt;
 # List properties.&lt;br /&gt;
 xinput list-props &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot;&lt;br /&gt;
 # Middle button emulation.&lt;br /&gt;
 xinput set-prop &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot; &amp;quot;Evdev Middle Button Emulation&amp;quot; 1&lt;br /&gt;
 xinput set-prop 12 &amp;quot;libinput Middle Emulation Enabled&amp;quot; 1&lt;br /&gt;
=xkill=&lt;br /&gt;
Kill xorg process with id 0xb6ffa0&lt;br /&gt;
 xkill -id 0xb6ffa0&lt;br /&gt;
List x applictions&lt;br /&gt;
 xwininfo&lt;br /&gt;
Get recursive list of x applications.&lt;br /&gt;
 xwininfo -root -tree&lt;br /&gt;
&lt;br /&gt;
=xmllint=&lt;br /&gt;
prettify xml&lt;br /&gt;
 xmllint --format -&lt;br /&gt;
&lt;br /&gt;
=xset=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 xset -dpms ; xset s noblank ;xset s off&lt;br /&gt;
Disable repeat&lt;br /&gt;
 xset r off&lt;br /&gt;
Enable repeat&lt;br /&gt;
 xset r on&lt;br /&gt;
&lt;br /&gt;
=xxd=&lt;br /&gt;
Hex to binary&lt;br /&gt;
 xxd -r -p hex.txt output.bin&lt;br /&gt;
Hex to binary in pipe&lt;br /&gt;
 echo &amp;quot;$HEX&amp;quot; | xxd -r -p -&lt;br /&gt;
=yum=&lt;br /&gt;
download src rpm&lt;br /&gt;
 yumdownloader --source net-snmp&lt;br /&gt;
Reinstall default repos.&lt;br /&gt;
 yum reinstall yum-conf-sl6x-1-2&lt;br /&gt;
This will give you a directory with all rpm:s that are required to install rpm.&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=6 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==broken repos==&lt;br /&gt;
 yum install bareos-client --disablerepo=* --enablerepo=bareos&lt;br /&gt;
==search for different versions==&lt;br /&gt;
 yum --showduplicates search percona-xtrabackup&lt;br /&gt;
==Add repos to centos 6==&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-epel-eol.repo --output /etc/yum.repos.d/epel.repo&lt;br /&gt;
==fix yum in Centos 7, 8==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i &#039;s%^enabled=.%enabled=0%&#039; /etc/yum/pluginconf.d/subscription-manager.conf&lt;br /&gt;
sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get variables to test /etc/yum-repos.d/&amp;lt;file&amp;gt;.conf files==&lt;br /&gt;
 export releasever=$(lsb_release -r | awk &#039;{print $NF}&#039; | awk -F . &#039;{print $1}&#039;)&lt;br /&gt;
 export basearch=$(uname -m)&lt;br /&gt;
&lt;br /&gt;
=zip=&lt;br /&gt;
Zip directory exclude files .svn directory.&lt;br /&gt;
 zip -r /temp/ssl.zip . -x &amp;quot;.svn/*&amp;quot;&lt;br /&gt;
List contents of zip archive.&lt;br /&gt;
 unzip -l archive.zip&lt;br /&gt;
Unzip single file&lt;br /&gt;
 unzip file.zip file/you/want/to/extract/the_file.txt&lt;br /&gt;
unzip excluding path.&lt;br /&gt;
 unzip -j file.zip&lt;br /&gt;
&lt;br /&gt;
=zdump=&lt;br /&gt;
View information from timezone tz.&lt;br /&gt;
 zdump -v /etc/localtime&lt;br /&gt;
Change timezone on host&lt;br /&gt;
 ln -sfT ../usr/share/zoneinfo/Europe/Stockholm localtime&lt;br /&gt;
&lt;br /&gt;
=zfs=&lt;br /&gt;
==Get sync==&lt;br /&gt;
 zfs get sync datapool/netstorage/dog/prod&lt;br /&gt;
 NAME                          PROPERTY  VALUE     SOURCE&lt;br /&gt;
 datapool/netstorage/dog/prod  sync      standard  default&lt;br /&gt;
==set sync==&lt;br /&gt;
 zfs set sync=disabled datapool/netstorage/dog/prod&lt;br /&gt;
==List snapshots(can take time)==&lt;br /&gt;
 zfs list -t snapshot&lt;br /&gt;
==List snapshots for one mount point.==&lt;br /&gt;
 zfs list -r -t snapshot -o name,creation datapool/netstorage/bro/prod&lt;br /&gt;
==Displays the detailed health status==&lt;br /&gt;
 zpool status&lt;br /&gt;
==List datasets==&lt;br /&gt;
 zfs list&lt;br /&gt;
==Create dataset==&lt;br /&gt;
 zfs create datapool/netstorage/media&lt;br /&gt;
==zdb==&lt;br /&gt;
display zpool debugging and consistency information&lt;br /&gt;
 zdb -d dataset&lt;br /&gt;
==zpool list==&lt;br /&gt;
Lists the given pools along with a health status and space usage.&lt;br /&gt;
==iostat==&lt;br /&gt;
Get iostat with values since last second.&lt;br /&gt;
 zpool iostat are -y 1 -l&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Unix]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Windows&amp;diff=16582</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Windows&amp;diff=16582"/>
		<updated>2026-03-19T13:25:08Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* wget */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=connect to windows from windows(rdp)=&lt;br /&gt;
 mstsc /v:172.30.142.11&lt;br /&gt;
Login with password.&lt;br /&gt;
 # Define the server and credentials&lt;br /&gt;
 $server = &amp;quot;&amp;lt;server&amp;gt;&amp;quot;&lt;br /&gt;
 $username = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;br /&gt;
 $password = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
 # Create credentials using cmdkey&lt;br /&gt;
 cmdkey /generic:&amp;quot;TERMSRV/$server&amp;quot; /user:$username /pass:$password&lt;br /&gt;
 # Start MSTSC to connect to the server&lt;br /&gt;
 Start-Process &amp;quot;mstsc&amp;quot; -ArgumentList &amp;quot;/v:$server&amp;quot;&lt;br /&gt;
 # Delete the credentials after MSTSC session is done&lt;br /&gt;
 cmdkey /delete:TERMSRV/&amp;lt;servername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=which version of powershell is installed=&lt;br /&gt;
 $PSVersionTable&lt;br /&gt;
&lt;br /&gt;
=hibernate=&lt;br /&gt;
 powercfg.exe -h off&lt;br /&gt;
&lt;br /&gt;
=enable powershell=&lt;br /&gt;
 set-executionpolicy unrestricted&lt;br /&gt;
=List network interfaces with ips=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress&lt;br /&gt;
=List network interfaces and routes=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress | Format-Table ; Get-NetRoute | Format-Table&lt;br /&gt;
&lt;br /&gt;
=Configure network=&lt;br /&gt;
# Static ip.&lt;br /&gt;
 netsh interface ip set address name=&amp;quot;Local Area Connection&amp;quot; static 192.168.122.41 255.255.255.0 192.168.122.1 1&lt;br /&gt;
# Dhcp&lt;br /&gt;
 netsh interface is set address name=&amp;quot;Local Area Connection&amp;quot; dhcp&lt;br /&gt;
# Verify mtu settings.&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
# Set correct mtu.&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1000&lt;br /&gt;
&lt;br /&gt;
=extract msi=&lt;br /&gt;
 msiexec /a &amp;quot;C:\software.msi&amp;quot; /qb TARGETDIR=&amp;quot;C:\Folder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=restart network=&lt;br /&gt;
 netsh interface set interface extbond admin = disabled&lt;br /&gt;
 ping 127.0.0.1 -n 6&lt;br /&gt;
 netsh interface set interface extbond admin = enabled&lt;br /&gt;
&lt;br /&gt;
=Profile=&lt;br /&gt;
# Profile&lt;br /&gt;
 C:\Users\abjorklund\AppData\Roaming\Microsoft\Windows\Start Menu&lt;br /&gt;
&lt;br /&gt;
=restart via rdesktop=&lt;br /&gt;
 CTRL + ALT + END&lt;br /&gt;
=alternative shutdown=&lt;br /&gt;
Shutdown with restart&lt;br /&gt;
 shutdown /t 0 /r /f&lt;br /&gt;
Shutdown&lt;br /&gt;
 shutdown /t 0 /s /f&lt;br /&gt;
logoff/logout&lt;br /&gt;
 shutdown /l /f&lt;br /&gt;
&lt;br /&gt;
=mount drive=&lt;br /&gt;
 net use z: \\www.halfface.se\storage /user:alex &amp;lt;password&amp;gt; /persistent:no&lt;br /&gt;
=change password=&lt;br /&gt;
Start a command prompt as administrator.&lt;br /&gt;
 net user username password&lt;br /&gt;
&lt;br /&gt;
=activate account=&lt;br /&gt;
 net user username /active:yes&lt;br /&gt;
&lt;br /&gt;
=remove cached passwords=&lt;br /&gt;
list/remove cached passwords graphically&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
list/remove cached passwords cli&lt;br /&gt;
 cmdkey /list&lt;br /&gt;
&lt;br /&gt;
=is your account locked. bat file=&lt;br /&gt;
 @echo off&lt;br /&gt;
 :again&lt;br /&gt;
 date /t &amp;amp; time /t&lt;br /&gt;
 net user /domain mdinkel &amp;gt; c:\temp\mdinkel&lt;br /&gt;
 find &amp;quot;active&amp;quot; c:\temp\mdinkel&lt;br /&gt;
 timeout 10&lt;br /&gt;
 goto again&lt;br /&gt;
&lt;br /&gt;
=unlock account=&lt;br /&gt;
 Net user username /DOMAIN /active:YES&lt;br /&gt;
&lt;br /&gt;
=Browse active dirctory structure=&lt;br /&gt;
 adsiedit.msc&lt;br /&gt;
=time zone conversion=&lt;br /&gt;
Here you can convert from Windows to unix time zones tz.&lt;br /&gt;
 http://www.unicode.org/cldr/charts/latest/supplemental/zone_tzid.html&lt;br /&gt;
=uptime=&lt;br /&gt;
 net statistics server&lt;br /&gt;
Uptime and other information&lt;br /&gt;
 systeminfo /FO CSV | ConvertFrom-CSV&lt;br /&gt;
&lt;br /&gt;
=credetial manager empty cache=&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
=remote powershell pssession=&lt;br /&gt;
Create pssession.&lt;br /&gt;
 $secpasswd = ConvertTo-SecureString &amp;quot;*************&amp;quot; -AsPlainText -Force&lt;br /&gt;
 $mycreds = New-Object System.Management.Automation.PSCredential (&amp;quot;domain\user&amp;quot;, $secpasswd)&lt;br /&gt;
 New-PSSession -ComputerName 10.111.222.5 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
get pssessions.&lt;br /&gt;
 get-pssession&lt;br /&gt;
&lt;br /&gt;
enter pssession&lt;br /&gt;
 Enter-PSSession -Name&lt;br /&gt;
 Enter-PSSession -ComputerName 10.50.197.70&lt;br /&gt;
 Enter-PSSession 172.18.1.198 -Credential domain\uer&lt;br /&gt;
&lt;br /&gt;
remove pssession&lt;br /&gt;
 remove-pssession -name Session15&lt;br /&gt;
&lt;br /&gt;
Run remote command.&lt;br /&gt;
 Invoke-Command -name &amp;quot;Session14&amp;quot; -ScriptBlock { hostname }&lt;br /&gt;
&lt;br /&gt;
Login to remote machine&lt;br /&gt;
 Enter-PSSession 10.50.197.70 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
=PowerShell=&lt;br /&gt;
=gc=&lt;br /&gt;
Get-content. Print content of file.&lt;br /&gt;
 gc c:\temp\file.txt&lt;br /&gt;
=Set-content=&lt;br /&gt;
 Set-Content -path REMOTE\Filename.txt&lt;br /&gt;
=Out-File=&lt;br /&gt;
 Out-File -Encoding UTF8&lt;br /&gt;
&lt;br /&gt;
=replace text in file=&lt;br /&gt;
 Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace &amp;quot;OLD&amp;quot;, &amp;quot;NEW&amp;quot; } | Set-Content REMOTE\Filename.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=get-service=&lt;br /&gt;
Status of one service.&lt;br /&gt;
 get-service ipeventwatcher&lt;br /&gt;
status of all services. list services.&lt;br /&gt;
 Get-Service&lt;br /&gt;
find service&lt;br /&gt;
 get-service *service_to_find* | select -expand name&lt;br /&gt;
=get failed services=&lt;br /&gt;
 Get-Service | Where-Object {$_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;}&lt;br /&gt;
=failed service from boot=&lt;br /&gt;
 Write-Host &amp;quot;`n=== Stopped Automatic Services ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-Service | Where-Object { $_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Disabled Scheduled Tasks ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-ScheduledTask | Where-Object {$_.State -eq &#039;Disabled&#039;} | Select-Object TaskName, TaskPath | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Recent Service Failures (Event Log) ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-EventLog -LogName System -Source &amp;quot;Service Control Manager&amp;quot; -EntryType Error -Newest 10 | Select-Object TimeGenerated, Message | Format-List&lt;br /&gt;
&lt;br /&gt;
=stop-service=&lt;br /&gt;
 stop-service ipeventwatcher&lt;br /&gt;
=restart-service=&lt;br /&gt;
 restart-service ipremote -force&lt;br /&gt;
 restart-service check_mk_agent -force&lt;br /&gt;
 Restart-Service -Force -Name &amp;quot;TermService&amp;quot;&lt;br /&gt;
=tell windows to restart service automatically=&lt;br /&gt;
 $serviceName = &amp;quot;icinga2&amp;quot;&lt;br /&gt;
 sc.exe failure $serviceName reset= 86400 actions= restart/60000/restart/60000/restart/60000&lt;br /&gt;
&lt;br /&gt;
=start-service=&lt;br /&gt;
 start-service ipeventwatcher&lt;br /&gt;
=autostart service=&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
&lt;br /&gt;
=variable=&lt;br /&gt;
Set variable to content of file.&lt;br /&gt;
 $a = gc IPremote.exe.config&lt;br /&gt;
=md5sum=&lt;br /&gt;
 [CmdletBinding(SupportsShouldProcess=$False)]&lt;br /&gt;
 param([string]$File)&lt;br /&gt;
 &lt;br /&gt;
 function Get-Checksum([string]$strInFile)&lt;br /&gt;
 {&lt;br /&gt;
 	    $objCrypto = New-Object &amp;quot;System.Security.Cryptography.MD5CryptoServiceProvider&amp;quot;&lt;br /&gt;
 	    $objFile = Get-Item $strInFile&lt;br /&gt;
 	    $objStream = $objFile.OpenRead()&lt;br /&gt;
 	    $objBytes = $objCrypto.ComputeHash($objStream)&lt;br /&gt;
 	    $strChecksum = &amp;quot;&amp;quot;&lt;br /&gt;
 	    foreach($objByte in $objBytes) {&lt;br /&gt;
 		        $strChecksum += $objByte.ToString(&#039;x2&#039;)&lt;br /&gt;
 	    }&lt;br /&gt;
 	    $objStream.Close() | Out-Null&lt;br /&gt;
 	    return $strChecksum&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $strFileToCheck = $File&lt;br /&gt;
 if(Test-Path($strFileToCheck)) {&lt;br /&gt;
 	    Get-Checksum $strFileToCheck&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get md5sum of all files.&lt;br /&gt;
 gci * | Get-FileHash -Algorithm md5 | ft Hash,@{n=&amp;quot;File&amp;quot;;e={(Get-item $_.Path).Name}}&lt;br /&gt;
&lt;br /&gt;
=tcp connect port=&lt;br /&gt;
netcat nc &lt;br /&gt;
 (New-Object Net.Sockets.TcpClient).Connect(&amp;quot;1.2.3.4&amp;quot;,80)&lt;br /&gt;
 $Tcp = New-Object Net.Sockets.TcpClient;$Tcp.BeginConnect(&amp;quot;1.2.3.4&amp;quot;, 80, $null, $null).AsyncWaitHandle.WaitOne(5000);$Tcp.Close()&lt;br /&gt;
 New-Object System.Net.Sockets.TCPClient -ArgumentList &amp;quot;1.2.3.4&amp;quot;,3389&lt;br /&gt;
 &lt;br /&gt;
 Test-NetConnection -ComputerName 192.168.122.1 -InformationLevel Detailed -port 23&lt;br /&gt;
Latest and greatest.&lt;br /&gt;
 $Computer=&amp;quot;127.0.0.1&amp;quot;; $Port=20010; $Socket = New-Object Net.Sockets.TcpClient;($Socket.BeginConnect($Computer, $Port, $Null, $Null)).AsyncWaitHandle.WaitOne(200);$Socket.Close();&lt;br /&gt;
&lt;br /&gt;
=What is using tcp connections=&lt;br /&gt;
 Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name=&amp;quot;ProcessName&amp;quot;;Expression={(Get-Process -PID ($_.Name.Split(&#039;,&#039;)[-1].Trim(&#039; &#039;))).Name}}, Group | Sort Count -Descending&lt;br /&gt;
=grep=&lt;br /&gt;
 gc IPremoteDebug.log | select-string &amp;quot;ip2date&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=List all processes. Grep for string=&lt;br /&gt;
 Get-Process -IncludeUserName |  findstr dkarlslatt&lt;br /&gt;
&lt;br /&gt;
=grep recursive=&lt;br /&gt;
 dir -Recurse | Select-String -pattern &amp;quot;192.168.19.102&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list processes=&lt;br /&gt;
 Get-Process&lt;br /&gt;
=kill processes from user=&lt;br /&gt;
 Get-Process -IncludeUserName | Where UserName -match joe | Stop-Process -force&lt;br /&gt;
&lt;br /&gt;
=restart processes=&lt;br /&gt;
 get-process -name powershellserver | stop-process&lt;br /&gt;
&lt;br /&gt;
=clear content=&lt;br /&gt;
 Clear-Content filename.doc&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 dir /a/s/b filename.txt&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 &#039;Get-ChildItem &amp;quot;c:\program files\&amp;quot; -rec | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
 &#039;Get-ChildItem . -recurse -force | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
=locate a file=&lt;br /&gt;
List recursive look for file with file name.&lt;br /&gt;
 Get-Childitem -Path C:\ -Include *filename* -Recurse -ErrorAction SilentlyContinue&lt;br /&gt;
&lt;br /&gt;
=dir filename size=&lt;br /&gt;
 &#039;get-childitem &amp;quot;C:\Program Files\directory&amp;quot; -rec | where {!$_.PSIsContainer} | select-object Name, Length&#039;&lt;br /&gt;
=find file with filename=&lt;br /&gt;
 Get-ChildItem -Path C:\ -Recurse -Filter *sshd_config* -ErrorAction SilentlyContinue&lt;br /&gt;
=find old files=&lt;br /&gt;
 Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}&lt;br /&gt;
&lt;br /&gt;
=find old files and remove them=&lt;br /&gt;
 $Folder = &amp;quot;G:\Downloads&amp;quot;&lt;br /&gt;
 #Delete files older than 6 months&lt;br /&gt;
 Get-ChildItem $Folder -Recurse -Force -ea 0 |&lt;br /&gt;
 ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-180)} |&lt;br /&gt;
  ForEach-Object {&lt;br /&gt;
    $_ | del -Force&lt;br /&gt;
    $_.FullName | Out-File C:\log\deletedlog.txt -Append&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=calculate size of directory=&lt;br /&gt;
Value returned is in Scientific notation format. Add number of zeroes to value. 1.00E-6 is 1000000.&lt;br /&gt;
 &#039;(gci &amp;quot;D:\data\db&amp;quot; | measure Length -s).Sum /1GB&#039;&lt;br /&gt;
=remove directory=&lt;br /&gt;
 rd /s /q $DIRECTORY&lt;br /&gt;
&lt;br /&gt;
=dir human readable file size=&lt;br /&gt;
function&lt;br /&gt;
 Function Format-FileSize() {&lt;br /&gt;
    Param ([int]$size)&lt;br /&gt;
    If     ($size -gt 1TB) {[string]::Format(&amp;quot;{0:0.00} TB&amp;quot;, $size / 1TB)}&lt;br /&gt;
    ElseIf ($size -gt 1GB) {[string]::Format(&amp;quot;{0:0.00} GB&amp;quot;, $size / 1GB)}&lt;br /&gt;
    ElseIf ($size -gt 1MB) {[string]::Format(&amp;quot;{0:0.00} MB&amp;quot;, $size / 1MB)}&lt;br /&gt;
    ElseIf ($size -gt 1KB) {[string]::Format(&amp;quot;{0:0.00} kB&amp;quot;, $size / 1KB)}&lt;br /&gt;
    ElseIf ($size -gt 0)   {[string]::Format(&amp;quot;{0:0.00} B&amp;quot;, $size)}&lt;br /&gt;
    Else                   {&amp;quot;&amp;quot;}&lt;br /&gt;
 }&lt;br /&gt;
command&lt;br /&gt;
 Get-ChildItem | Select-Object Name, @{Name=&amp;quot;Size&amp;quot;;Expression={Format-FileSize($_.Length)}}&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
decode base64 string&lt;br /&gt;
 [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(&amp;quot;YmxhaGJsYWg=&amp;quot;))&lt;br /&gt;
decode content of file.&lt;br /&gt;
 ssh ip_address_hostname &#039;$Text=(get-content &amp;quot;C:\Program Files\application\application.log&amp;quot;) ; $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) ; $EncodedText =[Convert]::ToBase64String($Bytes) ; $EncodedText&#039; | base64 -d&lt;br /&gt;
&lt;br /&gt;
=troubleshooting network=&lt;br /&gt;
 netstat -ano | findstr &amp;lt;ipremote-pid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=diff=&lt;br /&gt;
Compare two files.&lt;br /&gt;
 compare-object (get-content one.txt) (get-content two.txt)&lt;br /&gt;
=log file. Eventlog=&lt;br /&gt;
List event logs.&lt;br /&gt;
 Get-EventLog -list&lt;br /&gt;
List events in a log.&lt;br /&gt;
 Get-EventLog -LogName IPremoteLog&lt;br /&gt;
List events sins date.&lt;br /&gt;
 Get-EventLog -LogName Application -after &amp;quot;den 5 november 2014 10:00:00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get-winevent=&lt;br /&gt;
 # List event logs.&lt;br /&gt;
 Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}&lt;br /&gt;
 # Get latest rdp log entries.&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
 Get-Date&lt;br /&gt;
Date in iso format.&lt;br /&gt;
 Get-Date -UFormat &#039;+%Y-%m-%d %H:%M:%S.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
=full output=&lt;br /&gt;
Print all variable with full output&lt;br /&gt;
 &#039;(Get-Variable).StdOut&#039;&lt;br /&gt;
Send output to line like the following to get more output.&lt;br /&gt;
 | Ft -autosize | out-string -width 4096&lt;br /&gt;
&lt;br /&gt;
=restart services via samba=&lt;br /&gt;
install samba-common&lt;br /&gt;
 yum install samba-common&lt;br /&gt;
List services.&lt;br /&gt;
 net rpc service list -I IPADDRESS -U USERNAME%PASSWORD&lt;br /&gt;
Stop service.&lt;br /&gt;
 net rpc service start ipremote -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
Start service.&lt;br /&gt;
 net rpc service start ipeventwatcher -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
=Windows version=&lt;br /&gt;
 [System.Environment]::OSVersion.Version&lt;br /&gt;
 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx&lt;br /&gt;
 (Get-WmiObject -class Win32_OperatingSystem).Caption&lt;br /&gt;
Which architecture.&lt;br /&gt;
 gwmi win32_operatingsystem | select osarchitecture&lt;br /&gt;
&lt;br /&gt;
=set windows proxy=&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyEnable -Value 1&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyServer -Value proxy.int.redbridge.se&amp;quot;:&amp;quot;3128&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyOverride -Value &amp;quot;*.redbridge.se&amp;quot;&lt;br /&gt;
 Get-ItemProperty -Path &#039;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&#039; | findstr Proxy&lt;br /&gt;
&lt;br /&gt;
=Is proxy bypassed=&lt;br /&gt;
 $url = &amp;quot;http://10.127.12.10&amp;quot;;$webclient = New-Object System.Net.WebClient; $webclient.Proxy.IsBypassed($url)&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
 (Invoke-WebRequest http://localhost/Requests -UseBasicParsing).content&lt;br /&gt;
 curl -TimeoutSec 1 https://halfface.se&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 Invoke-WebRequest -Uri &amp;quot;http://1.2.3.4/file.txt&amp;quot; -OutFile &amp;quot;file.txt&amp;quot;&lt;br /&gt;
=webdav push file=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Configuration - replace with your actual values&lt;br /&gt;
$WebDavUrl = &amp;quot;&amp;lt;webdav_url&amp;gt;&amp;quot;&lt;br /&gt;
$FilePath = &amp;quot;C:\temp\file.txt&amp;quot;&lt;br /&gt;
$ProxyUrl = &amp;quot;http://proxy.lio.se:8080&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# WebDAV credentials&lt;br /&gt;
$WebDavUser = &amp;quot;&amp;lt;user&amp;gt;&amp;quot;&lt;br /&gt;
$WebDavPassword = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Proxy credentials&lt;br /&gt;
$ProxyUser = &amp;quot;&amp;lt;user&amp;gt;&amp;quot;&lt;br /&gt;
$ProxyPassword = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Create credential objects&lt;br /&gt;
$WebDavCredential = New-Object System.Management.Automation.PSCredential(&lt;br /&gt;
    $WebDavUser,&lt;br /&gt;
    (ConvertTo-SecureString $WebDavPassword -AsPlainText -Force)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
$ProxyCredential = New-Object System.Management.Automation.PSCredential(&lt;br /&gt;
    $ProxyUser,&lt;br /&gt;
    (ConvertTo-SecureString $ProxyPassword -AsPlainText -Force)&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
# Upload the file using PUT method (common for WebDAV)&lt;br /&gt;
try {&lt;br /&gt;
    $Response = Invoke-WebRequest -Uri $WebDavUrl `&lt;br /&gt;
        -Method Put `&lt;br /&gt;
        -InFile $FilePath `&lt;br /&gt;
        -Credential $WebDavCredential `&lt;br /&gt;
        -Proxy $ProxyUrl `&lt;br /&gt;
        -ProxyCredential $ProxyCredential `&lt;br /&gt;
        -ProxyUseDefaultCredentials:$false `&lt;br /&gt;
        -ContentType &amp;quot;application/octet-stream&amp;quot; `&lt;br /&gt;
        -UseBasicParsing  # Important on Server Core installations&lt;br /&gt;
&lt;br /&gt;
    if ($Response.StatusCode -in 200, 201, 204) {&lt;br /&gt;
        Write-Host &amp;quot;File uploaded successfully! Status: $($Response.StatusDescription)&amp;quot; -ForegroundColor Green&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
catch {&lt;br /&gt;
    Write-Host &amp;quot;Upload failed: $($_.Exception.Message)&amp;quot; -ForegroundColor Red&lt;br /&gt;
&lt;br /&gt;
    # More detailed error information&lt;br /&gt;
    if ($_.Exception.Response) {&lt;br /&gt;
        Write-Host &amp;quot;Status code: $($_.Exception.Response.StatusCode.value__)&amp;quot; -ForegroundColor Yellow&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=turn of index services when computer is not used=&lt;br /&gt;
In stopindexer enter the line&lt;br /&gt;
 net stop wsearch&lt;br /&gt;
In the startindexer enter the line&lt;br /&gt;
 net start wsearch&lt;br /&gt;
&lt;br /&gt;
=robocopy(backup)=&lt;br /&gt;
 robocopy C:\Users\user_name\Documents h:\backup\user_name /e /mir /np /log+:c:\temp\backup_log.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=number of cpus=&lt;br /&gt;
 Get-WmiObject -class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors, Addresswidth&lt;br /&gt;
&lt;br /&gt;
=cpu_usage=&lt;br /&gt;
cpu=&amp;lt;value&amp;gt;%&lt;br /&gt;
 $cpuUsage = Get-WmiObject Win32_Processor | Select-Object -ExpandProperty LoadPercentage ; $averageCpuUsage = ($cpuUsage | Measure-Object -Average).Average ; &amp;quot;cpu:{0:N0}%&amp;quot; -f $averageCpuUsage&lt;br /&gt;
 Get-Counter &#039;\Process(*)\% Processor Time&#039;| Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@{L=&#039;CPU&#039;;E={($_.Cookedvalue/100).toString(&#039;P&#039;)}} -AutoSize | Ft -autosize | out-string -width 4096&lt;br /&gt;
 Get-WmiObject win32_processor | select LoadPercentage  |fl&lt;br /&gt;
Stats and all processes. Including process running under svhost.&lt;br /&gt;
 $CpuInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Processor;$MemInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Memory;$SysInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_System;$PrcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfProc_Process;$SvcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_Service;$GeneralInfo = @{};$ProcOutput = @();$ServiceTable = @{};$GeneralInfo.Add(&amp;quot;_Name&amp;quot;, $env:COMPUTERNAME);$GeneralInfo.Add(&amp;quot;ProcessorQueueLength&amp;quot;, $SysInfo.ProcessorQueueLength);$GeneralInfo.Add(&amp;quot;PercentInterruptTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentInterruptTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;AvailableMBytes&amp;quot;, $MemInfo.AvailableMBytes);$GeneralInfo.Add(&amp;quot;PercentIdleTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentIdleTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;PercentPrivilegedTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentPrivilegedTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;TotalMemory&amp;quot;, (Get-WmiObject Win32_ComputerSystem | %{$_.TotalPhysicalMemory}));$GeneralInfo.Add(&amp;quot;PercentProcessorTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentProcessorTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CacheBytes&amp;quot;, $MemInfo.CacheBytes);$GeneralInfo.Add(&amp;quot;PercentUserTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentUserTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CommittedBytes&amp;quot;, $MemInfo.CommittedBytes);$GeneralInfo.GetEnumerator() | Sort-Object -Property Name | ForEach-Object {Write-Host -Object ($_.Name + &amp;quot;: &amp;quot;) -NoNewline; Write-Host -Object $_.Value};foreach($Service in $SvcInfo) {$ProcId = $Service.ProcessId.ToString();if($ProcId -ne &amp;quot;0&amp;quot;) {if($ServiceTable.ContainsKey($ProcId)) {$Value = $ServiceTable.Get_Item($ProcId);$Value += $Service.Name;$ServiceTable.Set_Item($ProcId, $Value);} else {$ServiceTable.Add($ProcId, @($Service.Name));}}}foreach($proc in $PrcInfo) {$Obj = New-Object psobject;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Process&amp;quot; -Value $proc.Name;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;CPU&amp;quot; -Value $proc.PercentProcessorTime;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Thread&amp;quot; -Value $proc.ThreadCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Handle&amp;quot; -Value $proc.HandleCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Services&amp;quot; -Value ($ServiceTable.Get_Item($proc.IDProcess.ToString()) -join &amp;quot;,&amp;quot;);$ProcOutput += $Obj;}$ProcOutput | ft -AutoSize&lt;br /&gt;
&lt;br /&gt;
=Sort processes by mem usage.=&lt;br /&gt;
 get-wmiobject WIN32_PROCESS | Sort-Object -Property ws -Descending|select -first 20|Select processname, @{Name=&amp;quot;Mem Usage(MB)&amp;quot;;Expression={[math]::round($_.ws / 1mb)}},@{Name=&amp;quot;ProcessID&amp;quot;;Expression={[String]$_.ProcessID}},@{Name=&amp;quot;UserID&amp;quot;;Expression={$_.getowner().user}} | Ft -autosize | out-string -width 4096&lt;br /&gt;
2&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, WorkingSet, CPU&lt;br /&gt;
3 Better formatting&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}, @{Name=&amp;quot;CPU(s)&amp;quot;;Expression={[math]::Round($_.CPU,2)}}&lt;br /&gt;
4 private memory&lt;br /&gt;
 Get-Process | Sort-Object -Property PrivateMemorySize -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;PrivateMemory(MB)&amp;quot;;Expression={[math]::Round($_.PrivateMemorySize/1MB,2)}}, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}&lt;br /&gt;
&lt;br /&gt;
=total memory in machine=&lt;br /&gt;
 Get-WMIObject -class win32_physicalmemory | Format-Table devicelocator, capacity -a&lt;br /&gt;
=how much memory is free in GB=&lt;br /&gt;
 $freemem = Get-WmiObject -Class Win32_OperatingSystem; echo ([math]::round(($freemem.FreePhysicalMemory / 1024 / 1024), 2))&lt;br /&gt;
=Memory usage, Total memory=&lt;br /&gt;
 $mem = Get-Counter &#039;\Memory\Available MBytes&#039;&lt;br /&gt;
 $usedMem = (Get-Counter &#039;\Memory\Committed Bytes&#039;).CounterSamples.CookedValue / 1MB&lt;br /&gt;
 $availableMem = $mem.CounterSamples.CookedValue&lt;br /&gt;
 $usedMem = [math]::round($usedMem, 2)&lt;br /&gt;
 $availableMem = [math]::round($availableMem, 2)&lt;br /&gt;
 [PSCustomObject]@{&lt;br /&gt;
     UsedMemoryMB = $usedMem&lt;br /&gt;
     AvailableMemoryMB = $availableMem&lt;br /&gt;
     TotalMemoryMB = (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1MB&lt;br /&gt;
 }&lt;br /&gt;
=memory usage as percent usage=&lt;br /&gt;
 $memory = Get-WmiObject Win32_OperatingSystem ; $totalMemory = $memory.TotalVisibleMemorySize ; $freeMemory = $memory.FreePhysicalMemory ; $usedMemory = $totalMemory - $freeMemory ; $memoryUsage = ($usedMemory / $totalMemory) * 100 ; &amp;quot;mem:{0:N0}%&amp;quot; -f $memoryUsage&lt;br /&gt;
&lt;br /&gt;
=disk usage=&lt;br /&gt;
 Get-PSDrive&lt;br /&gt;
=tail=&lt;br /&gt;
Get last 10 lines&lt;br /&gt;
 Get-Content [filename] | Select-Object -Last 10&lt;br /&gt;
tail -f&lt;br /&gt;
 Get-Content filename.log -Wait&lt;br /&gt;
Since PowerShell 3.&lt;br /&gt;
 gc -Tail 10 log.txt &lt;br /&gt;
=head=&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc log.txt | select -first 10&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc -TotalCount 10 log.txt&lt;br /&gt;
&lt;br /&gt;
=wc count lines=&lt;br /&gt;
 Get-Content C:\temp\ERRORLOG.5 | Measure-Object -line&lt;br /&gt;
=disable firewall=&lt;br /&gt;
From the command line&lt;br /&gt;
 netsh advfirewall set allprofiles state off&lt;br /&gt;
Using Powershell&lt;br /&gt;
  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False&lt;br /&gt;
=which firewall profiles are available=&lt;br /&gt;
 get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a&lt;br /&gt;
=which firewall profile is being used=&lt;br /&gt;
 get-NetConnectionProfile&lt;br /&gt;
&lt;br /&gt;
=which ports are open=&lt;br /&gt;
 Get-NetFirewallRule | Where { $_.Enabled -eq &amp;quot;True&amp;quot; -and $_.Direction -eq &amp;quot;Inbound&amp;quot; }&lt;br /&gt;
=which rules exist=&lt;br /&gt;
 Get-NetFirewallRule&lt;br /&gt;
=open port in firewall=&lt;br /&gt;
 netsh advfirewall firewall add rule name=&amp;quot;Open Port 80&amp;quot; dir=in action=allow protocol=TCP localport=80&lt;br /&gt;
&lt;br /&gt;
=firewall get more info about opening=&lt;br /&gt;
 get-netfirewallrule -DisplayName &amp;quot;Remote Desktop - User Mode (TCP-In)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=add administrative user=&lt;br /&gt;
Create user&lt;br /&gt;
 net user /add root [password]&lt;br /&gt;
Add user to local group.&lt;br /&gt;
 net localgroup administrators root /add&lt;br /&gt;
=list local groups=&lt;br /&gt;
 Get-LocalGroup&lt;br /&gt;
&lt;br /&gt;
=Which process is using port=&lt;br /&gt;
 # Which process is using port.&lt;br /&gt;
 netstat -nao | findstr :22&lt;br /&gt;
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1916&lt;br /&gt;
 # Which process has pid.&lt;br /&gt;
 get-process  | findstr 1916&lt;br /&gt;
 355      40    48752      56056   621     6,45   1916 PowerShellServer&lt;br /&gt;
 # which process has pid.&lt;br /&gt;
 tasklist | findstr 1916&lt;br /&gt;
 PowerShellServer.exe          1916 Services                   0     56.072 K&lt;br /&gt;
=which version is installed=&lt;br /&gt;
 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize&lt;br /&gt;
=list drives=&lt;br /&gt;
 get-psdrive&lt;br /&gt;
 wmic logicaldisk get caption&lt;br /&gt;
=svchost.exe what is happening=&lt;br /&gt;
 tasklist /svc /fi &amp;quot;IMAGENAME eq svchost.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=computer management=&lt;br /&gt;
Start computer management&lt;br /&gt;
 compmgmt.msc&lt;br /&gt;
=msinfo32=&lt;br /&gt;
Generate report.&lt;br /&gt;
 msinfo32&lt;br /&gt;
=licensing=&lt;br /&gt;
 Get-wmiobject SoftwareLicensingProduct -ComputerName localhost | Where-Object {$_.ApplicationID -eq &#039;55c92734-d682-4d71-983e-d6ec3f16059f&#039; -and $_.licensestatus -eq &#039;1&#039;} | Select name, description, @{Label=&#039;computer&#039;; Expression = {$_.PscomputerName}} | Format-List  name, description, computer&lt;br /&gt;
=add line inbetween lines=&lt;br /&gt;
 $filePath=&amp;quot;.\path_to_file&amp;quot;&lt;br /&gt;
 $textToAdd=&amp;quot;`nText to put in file&amp;quot;&lt;br /&gt;
 $fileContent = Get-Content $filePath&lt;br /&gt;
 $fileContent[$lineNumber+2] += $textToAdd&lt;br /&gt;
 $fileContent | Set-Content $filePath&lt;br /&gt;
=add line to end of file=&lt;br /&gt;
Add-Content c:\scripts\test.txt &amp;quot;The End&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get network settings=&lt;br /&gt;
Get among other things mtu&lt;br /&gt;
 Get-NetIPInterface&lt;br /&gt;
=start time of process=&lt;br /&gt;
List start time from processes found with Get-Process.&lt;br /&gt;
 get-process openvpn |select starttime&lt;br /&gt;
=list local users=&lt;br /&gt;
 Get-WmiObject -Class Win32_UserAccount -Filter  &amp;quot;LocalAccount=&#039;True&#039;&amp;quot;&lt;br /&gt;
=list logged in users=&lt;br /&gt;
 query user /server:$SERVER&lt;br /&gt;
&lt;br /&gt;
=list permissions for users=&lt;br /&gt;
 Accesschk &amp;quot;NKS01579\ipwinpsr&amp;quot; -accepteula -a *&lt;br /&gt;
&lt;br /&gt;
=create windows boot media under linux=&lt;br /&gt;
 woeusb  --target-filesystem NTFS --device /install/system/win10/Win10_1909_EnglishInternational_x64.iso  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=rename computer=&lt;br /&gt;
 $NewName=&amp;quot;alva&amp;quot;&lt;br /&gt;
 $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem&lt;br /&gt;
 $ComputerInfo.Rename($NewName)&lt;br /&gt;
 Restart-Computer&lt;br /&gt;
=startup dir=&lt;br /&gt;
The All Users Startup Folder is located at the following path:&lt;br /&gt;
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp&lt;br /&gt;
The Current User Startup Folder is located here:&lt;br /&gt;
 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;br /&gt;
=cmd scroll mode=&lt;br /&gt;
 Alt+Space -&amp;gt; E -&amp;gt; L&lt;br /&gt;
=enable rdp=&lt;br /&gt;
 Set-ItemProperty -Path &#039;HKLM:\System\CurrentControlSet\Control\Terminal Server&#039; -name &amp;quot;fDenyTSConnections&amp;quot; -value 0&lt;br /&gt;
 Enable-NetFirewallRule -DisplayGroup &amp;quot;Remote Desktop&amp;quot;&lt;br /&gt;
=rdp allow many sessions=&lt;br /&gt;
 https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip&lt;br /&gt;
&lt;br /&gt;
=disable defender=&lt;br /&gt;
 Set-MpPreference -DisableRealtimeMonitoring $true&lt;br /&gt;
 REG ADD &amp;quot;hklm\software\policies\microsoft\windows defender&amp;quot; /v DisableAntiSpyware /t REG_DWORD /d 1 /F&lt;br /&gt;
&lt;br /&gt;
=list scheduled tasks=&lt;br /&gt;
 &#039;Get-ScheduledTask | Ft -autosize | out-string -width 4096&#039;&lt;br /&gt;
=scheduled tasks enable disable=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive*&lt;br /&gt;
 TaskPath                                       TaskName                          State     &lt;br /&gt;
 --------                                       --------                          -----     &lt;br /&gt;
 \Microsoft\Windows\User Profile Service\       HiveUploadTask                    Disabled  &lt;br /&gt;
=Enable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Enable-ScheduledTask&lt;br /&gt;
=Disable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Disable-ScheduledTask&lt;br /&gt;
=Start scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Start-ScheduledTask&lt;br /&gt;
=Look at scheduled task=&lt;br /&gt;
 Get-ScheduledTask -TaskName Hive* | Format-List *&lt;br /&gt;
&lt;br /&gt;
=Get output from last scheduled command execution=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Get-ScheduledTaskInfo&lt;br /&gt;
=scheduled task add=&lt;br /&gt;
 $action = New-ScheduledTaskAction -Execute &#039;Powershell.exe&#039; -Argument &#039;-NoProfile -WindowStyle Hidden -command &amp;quot;net user /add special_user PassW0rd ; net localgroup administrators special_user /add&amp;quot;&#039;&lt;br /&gt;
 $trigger = New-ScheduledTaskTrigger -Daily -At 12am&lt;br /&gt;
 $task = Register-ScheduledTask -RunLevel &amp;quot;Highest&amp;quot; -TaskName &amp;quot;Add special_user&amp;quot; -Trigger $trigger -Action $action&lt;br /&gt;
 $task.Triggers.Repetition.Duration = &amp;quot;P1D&amp;quot; # Repeat for a duration of one day&lt;br /&gt;
 $task.Triggers.Repetition.Interval = &amp;quot;PT1H&amp;quot; # Repeat every 30 minutes, use PT1H for every hour&lt;br /&gt;
 $task.Principal = New-ScheduledTaskPrincipal -UserID &amp;quot;NT AUTHORITY\SYSTEM&amp;quot; -LogonType ServiceAccount -RunLevel Highest&lt;br /&gt;
 $task | Set-ScheduledTask&lt;br /&gt;
With script.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$action = New-ScheduledTaskAction -Execute &#039;powershell.exe&#039; -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -Command `&amp;quot;&amp;amp; &#039;C:\temp\troubleshooting.ps1&#039; &amp;gt;&amp;gt; &#039;C:\temp\troubleshooting.log&#039;`&amp;quot;&amp;quot;&lt;br /&gt;
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)&lt;br /&gt;
$principal = New-ScheduledTaskPrincipal -GroupId &amp;quot;BUILTIN\Administrators&amp;quot; -RunLevel Highest&lt;br /&gt;
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)&lt;br /&gt;
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings&lt;br /&gt;
Register-ScheduledTask -TaskName &#039;troubleshooting-abjorklund&#039; -InputObject $task -User &amp;quot;System&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=remove scheduled task=&lt;br /&gt;
 Unregister-ScheduledTask -TaskName Hive* -Confirm:$false&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 echo $null &amp;gt;&amp;gt; filename&lt;br /&gt;
=bitlocker read from linux=&lt;br /&gt;
 https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/&lt;br /&gt;
=runas(sudo)=&lt;br /&gt;
Run command as other user.&lt;br /&gt;
 runas /user:%computername%\root cmd&lt;br /&gt;
&lt;br /&gt;
=install sshd=&lt;br /&gt;
 On Windows 10 version 1803 and newer&lt;br /&gt;
 In Settings app, go to Apps &amp;gt; Apps &amp;amp; features &amp;gt; Manage optional features.&lt;br /&gt;
 Locate &amp;quot;OpenSSH server&amp;quot; feature, expand it, and select Install.&lt;br /&gt;
 Binaries are installed to %WINDIR%\System32\OpenSSH. Configuration file (sshd_config) and host keys are installed to %ProgramData%\ssh (only after the server is started for the first time).&lt;br /&gt;
&lt;br /&gt;
You may still want to use the following manual installation, if you want to install a newer version of OpenSSH than the one built into Windows 10.&lt;br /&gt;
 https://github.com/PowerShell/Win32-OpenSSH/releases (package OpenSSH-Win64.zip or OpenSSH-Win32.zip)&lt;br /&gt;
 As the Administrator, extract the package to C:\Program Files\OpenSSH&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1&lt;br /&gt;
Configuring SSH server&lt;br /&gt;
Allow incoming connections to SSH server in Windows Firewall:&lt;br /&gt;
 New-NetFirewallRule -Name sshd -DisplayName &#039;OpenSSH SSH Server&#039; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22&lt;br /&gt;
or go to Control Panel &amp;gt; System and Security &amp;gt; Windows Firewall1 &amp;gt; Advanced Settings &amp;gt; Inbound Rules and add a new rule for port 22.&lt;br /&gt;
Start the service and/or configure automatic start:&lt;br /&gt;
 start-service &amp;quot;OpenSSH SSH Server&amp;quot;&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
=installing built in ssh server to be able to login without password=&lt;br /&gt;
 # setup ssh C:\ProgramData\ssh\sshd_config&lt;br /&gt;
 SyslogFacility LOCAL0&lt;br /&gt;
 LogLevel Debug3&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 PubkeyAuthentication yes&lt;br /&gt;
 AuthorizedKeysFile      .ssh/authorized_keys&lt;br /&gt;
 # Put authorized_keys here.&lt;br /&gt;
 c:/ProgramData/ssh/administrators_authorized_keys&lt;br /&gt;
&lt;br /&gt;
=route=&lt;br /&gt;
==show routes==&lt;br /&gt;
Powershell&lt;br /&gt;
 Get-NetRoute&lt;br /&gt;
One interface index&lt;br /&gt;
 Get-NetRoute -InterfaceIndex 12&lt;br /&gt;
cmd&lt;br /&gt;
 route print -4&lt;br /&gt;
==Add route==&lt;br /&gt;
Powershell&lt;br /&gt;
 New-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1&lt;br /&gt;
cmd&lt;br /&gt;
 route -p ADD 10.255.240.0 MASK 255.255.255.0 172.30.103.4&lt;br /&gt;
 route -p add 0.0.0.0 mask 0.0.0.0 172.30.103.10&lt;br /&gt;
==Remove route==&lt;br /&gt;
 Remove-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1 -Confirm:$false&lt;br /&gt;
==Get routing information.==&lt;br /&gt;
 Find-NetRoute -RemoteIPAddress &amp;quot;10.0.0.34&amp;quot; | Select-Object ifIndex,DestinationPrefix,NextHop,RouteMetric -Last 1&lt;br /&gt;
&lt;br /&gt;
=last login on local machine=&lt;br /&gt;
 get-localuser | Select Name,LastLogon | sort LastLogon&lt;br /&gt;
=last logged in user and grep for user=&lt;br /&gt;
 Function Get-LoginEvents {&lt;br /&gt;
    Param (&lt;br /&gt;
        [Parameter(&lt;br /&gt;
            ValueFromPipeline = $true,&lt;br /&gt;
            ValueFromPipelineByPropertyName = $true&lt;br /&gt;
        )]&lt;br /&gt;
        [Alias(&#039;Name&#039;)]&lt;br /&gt;
        [string]$ComputerName = $env:ComputerName&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$StartTime&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$EndTime&lt;br /&gt;
    )&lt;br /&gt;
    Begin {&lt;br /&gt;
        enum LogonTypes {&lt;br /&gt;
            Interactive = 2&lt;br /&gt;
            Network = 3&lt;br /&gt;
            Batch = 4&lt;br /&gt;
            Service = 5&lt;br /&gt;
            Unlock = 7&lt;br /&gt;
            NetworkClearText = 8&lt;br /&gt;
            NewCredentials = 9&lt;br /&gt;
            RemoteInteractive = 10&lt;br /&gt;
            CachedInteractive = 11&lt;br /&gt;
        }&lt;br /&gt;
        $filterHt = @{&lt;br /&gt;
            LogName = &#039;Security&#039;&lt;br /&gt;
            ID = 4624&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;StartTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;StartTime&#039;] = $StartTime&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;EndTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;EndTime&#039;] = $EndTime&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Process {&lt;br /&gt;
        Get-WinEvent -MaxEvents 100 -ComputerName $ComputerName -FilterHashtable $filterHt | foreach-Object {&lt;br /&gt;
            [pscustomobject]@{&lt;br /&gt;
                ComputerName = $ComputerName&lt;br /&gt;
                UserAccount = $_.Properties.Value[5]&lt;br /&gt;
                UserDomain = $_.Properties.Value[6]&lt;br /&gt;
                LogonType = [LogonTypes]$_.Properties.Value[8]&lt;br /&gt;
                WorkstationName = $_.Properties.Value[11]&lt;br /&gt;
                SourceNetworkAddress = $_.Properties.Value[19]&lt;br /&gt;
                TimeStamp = $_.TimeCreated&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    End{}&lt;br /&gt;
 }&lt;br /&gt;
 Get-LoginEvents &amp;gt; login&lt;br /&gt;
 gc login | select-string dabuzaid -Context 5&lt;br /&gt;
&lt;br /&gt;
=powersave disable=&lt;br /&gt;
 powercfg /x -hibernate-timeout-ac 0&lt;br /&gt;
 powercfg /x -hibernate-timeout-dc 0&lt;br /&gt;
 powercfg /x -disk-timeout-ac 0&lt;br /&gt;
 powercfg /x -disk-timeout-dc 0&lt;br /&gt;
 powercfg /x -monitor-timeout-ac 0&lt;br /&gt;
 powercfg /x -monitor-timeout-dc 0&lt;br /&gt;
 Powercfg /x -standby-timeout-ac 0&lt;br /&gt;
 powercfg /x -standby-timeout-dc 0&lt;br /&gt;
=hostname=&lt;br /&gt;
Get fqdn&lt;br /&gt;
 [System.Net.Dns]::GetHostByName($env:computerName).HostName&lt;br /&gt;
 &amp;quot;$env:computername.$env:userdnsdomain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=resolve hostname=&lt;br /&gt;
 Resolve-DnsName -server 8.8.8.8 smtp.google.com | Format-Table Name, IPAddress -HideTableHeaders&lt;br /&gt;
&lt;br /&gt;
=clear screen reset=&lt;br /&gt;
 cls&lt;br /&gt;
=top(-wikipedia)=&lt;br /&gt;
 While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}&lt;br /&gt;
&lt;br /&gt;
=get users sid=&lt;br /&gt;
 wmic useraccount where name=&#039;dkarlslatt&#039; get sid&lt;br /&gt;
=traceroute=&lt;br /&gt;
 Test-NetConnection &amp;quot;IPaddress/HOSTaname&amp;quot; -TraceRoute&lt;br /&gt;
=name of ad servers=&lt;br /&gt;
 nslookup -type=srv _ldap._tcp.dc._msdcs.${AD}&lt;br /&gt;
=manage ad users and computers=&lt;br /&gt;
 dsa.msc&lt;br /&gt;
&lt;br /&gt;
=iis logfiles=&lt;br /&gt;
Read last lines from iis log.&lt;br /&gt;
 gc -Tail 10 &amp;quot;C:\InetPub\Logs\LogFiles\W3SVC1\u_ex$(Get-Date -F &#039;yyMMdd&#039;).log&amp;quot;&lt;br /&gt;
=join domain=&lt;br /&gt;
 netdom join %computername% /domain:your.ADDomainToJoin.net /UserD:LoginWithJoinPermissions /PasswordD:%password%&lt;br /&gt;
=windows update info=&lt;br /&gt;
 wmic qfe list&lt;br /&gt;
=patch=&lt;br /&gt;
Update release area Windows.&lt;br /&gt;
 servicepack.exe -s:z:\w2k3&lt;br /&gt;
=get date in iso format=&lt;br /&gt;
 Get-Date (Get-Date) -UFormat &#039;+%Y-%m-%d %H:%M:%S&#039;&lt;br /&gt;
 (Get-Date).ToString(&amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=format-list(fl)=&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
=whoami=&lt;br /&gt;
 echo &amp;quot;$env:UserDomain $env:UserName $env:ComputerName&amp;quot;&lt;br /&gt;
=group=&lt;br /&gt;
 (New-Object System.DirectoryServices.DirectorySearcher(&amp;quot;(&amp;amp;(objectCategory=User)(samAccountName=$($env:username)))&amp;quot;)).FindOne().GetDirectoryEntry().memberOf&lt;br /&gt;
=unzip=&lt;br /&gt;
 Expand-Archive C:\a.zip&lt;br /&gt;
=take ownership and remove=&lt;br /&gt;
 Remove-Item -Recurse -Force &amp;lt;directory&amp;gt;&lt;br /&gt;
 takeown /a /r /d Y /f &amp;lt;directory&amp;gt;&lt;br /&gt;
=print info to remove directories=&lt;br /&gt;
Prepare with two lists. One with users who are suitable to have their directories removed. And one list with the output from dir in c:\users.&lt;br /&gt;
 cat uc-remote01_login.txt | while read WIN_USER WIN_DATE ; do echo &#039;#&#039; $WIN_USER $WIN_DATE ; DIRECTORY=$(grep &amp;quot; $WIN_USER&amp;quot; uc-remote01_users.txt) ; if [ &amp;quot;${DIRECTORY}&amp;quot; ] ; then echo Remove-Item -Recurse -Force $WIN_USER \; takeown /a /r /d Y /f $WIN_USER \; Remove-Item -Recurse -Force $WIN_USER ; fi ; done&lt;br /&gt;
=list environments variables=&lt;br /&gt;
 dir env:&lt;br /&gt;
=list shares=&lt;br /&gt;
 Get-SmbShare&lt;br /&gt;
=Stop grouping applications on task bar=&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&amp;quot; -Name &amp;quot;TaskbarGlomLevel&amp;quot; -Value 2&lt;br /&gt;
 Stop-Process -Name explorer -Force&lt;br /&gt;
 Start-Process explorer&lt;br /&gt;
=autohide taskbar=&lt;br /&gt;
 $p=&#039;HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3&#039;;$v=(Get-ItemProperty -Path $p).Settings;$v[8]=($v[8] -bor 1);Set-ItemProperty -Path $p -Name Settings -Value $v;Stop-Process -f -ProcessName explorer&lt;br /&gt;
&lt;br /&gt;
=install cmdlet=&lt;br /&gt;
  install-module sqlserver&lt;br /&gt;
=install chocolate=&lt;br /&gt;
 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))&lt;br /&gt;
=manage jobs=&lt;br /&gt;
Start job&lt;br /&gt;
 Start-Job -FilePath C:\temp\cronjob.ps1&lt;br /&gt;
List jobs&lt;br /&gt;
 Get-Job&lt;br /&gt;
Stop jobs&lt;br /&gt;
 Stop-Job -Id &amp;lt;JobID&amp;gt;&lt;br /&gt;
 Stop-Job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
Delete Jobs&lt;br /&gt;
 Remove-job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=timezone=&lt;br /&gt;
List timezones&lt;br /&gt;
 Get-TimeZone -ListAvailable | grep -A10 -B10 Stockholm&lt;br /&gt;
Set Stockholm time.&lt;br /&gt;
 Set-TimeZone -Name &amp;quot;W. Europe Standard Time&amp;quot;&lt;br /&gt;
=locale=&lt;br /&gt;
 $env:LANG = &#039;en-US&#039;&lt;br /&gt;
=path variable=&lt;br /&gt;
 echo $env:path&lt;br /&gt;
=tweak windows=&lt;br /&gt;
 https://winaerotweaker.com/&lt;br /&gt;
=autologin=&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v AutoAdminLogon /t REG_SZ /d 1 /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultUserName /t REG_SZ /d &amp;quot;name@outlook.com&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultPassword /t REG_SZ /d &amp;quot;YourPassword123&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultDomainName /t REG_SZ /d &amp;quot;MicrosoftAccount&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v ForceAutoLogon /t REG_SZ /d 1 /f&lt;br /&gt;
=expand disk=&lt;br /&gt;
 diskmgmt.msc&lt;br /&gt;
=create user from existing=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Define parameters for the new user&lt;br /&gt;
$newUser = @{&lt;br /&gt;
    Name              = &amp;quot;&amp;lt;Full Name&amp;gt;&amp;quot;&lt;br /&gt;
    GivenName         = &amp;quot;&amp;lt;First&amp;gt;&amp;quot;&lt;br /&gt;
    Surname           = &amp;quot;&amp;lt;LastName&amp;gt;&amp;quot;&lt;br /&gt;
    SamAccountName    = &amp;quot;andreas.stenudd&amp;quot;&lt;br /&gt;
    UserPrincipalName = &amp;quot;andreas.stenudd@xpdo.xpeedio.local&amp;quot;&lt;br /&gt;
    AccountPassword   = (ConvertTo-SecureString &amp;quot;&amp;lt;password&amp;gt;&amp;quot; -AsPlainText -Force)&lt;br /&gt;
    Enabled           = $true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Specify the existing user to copy from (replace with actual SAM account name)&lt;br /&gt;
$templateUserSam = &amp;quot;andreas.bjorklund&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the template user&#039;s properties&lt;br /&gt;
$templateUser = Get-ADUser -Identity $templateUserSam -Properties *&lt;br /&gt;
&lt;br /&gt;
# Create the new user, copying the OU (Path) from the template user&lt;br /&gt;
$newUserParams = $newUser.Clone()&lt;br /&gt;
$newUserParams.Path = $templateUser.DistinguishedName -replace &#039;^CN=.*?,&#039;, &#039;&#039;  # Extract OU from template user&#039;s DN&lt;br /&gt;
&lt;br /&gt;
# Create the new user&lt;br /&gt;
New-ADUser @newUserParams&lt;br /&gt;
&lt;br /&gt;
# Copy group memberships from the template user&lt;br /&gt;
$templateUser.MemberOf | ForEach-Object {&lt;br /&gt;
    Add-ADGroupMember -Identity $_ -Members $newUser.SamAccountName&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;User $($newUser.Name) created successfully with group memberships copied from $templateUserSam.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=mount iso=&lt;br /&gt;
 Mount-DiskImage -ImagePath  &#039;z:\temp\torrentz\The.Sims.4.Enchanted.by.Nature-RUNE\rune-the.sims.4.enchanted.by.nature.iso&#039;&lt;br /&gt;
=list disks including devicename=&lt;br /&gt;
 mountvol&lt;br /&gt;
=list shadowcopy=&lt;br /&gt;
 Get-WmiObject -Class Win32_ShadowCopy&lt;br /&gt;
=list dedup=&lt;br /&gt;
 Get-Dedupstatus&lt;br /&gt;
==dedup garbagecollection==&lt;br /&gt;
 Start-DedupJob -volume f: -type garbagecollection&lt;br /&gt;
=keyboard=&lt;br /&gt;
List keyboards and lang.&lt;br /&gt;
 Get-WinUserLanguageList&lt;br /&gt;
Install English menus and Swedish keyboard.&#039;&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 $LangList.Add(&amp;quot;en-SE&amp;quot;)&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
Uninstall keyboards&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 # Remove en-US entirely&lt;br /&gt;
 $LangList = $LangList | Where-Object { $_.LanguageTag -ne &amp;quot;en-GB&amp;quot; }&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
=curl/vim=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$binPath = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
if (-not (Test-Path $binPath -PathType Container)) {&lt;br /&gt;
  New-Item -ItemType Directory -Path $binPath&lt;br /&gt;
  Write-Host &amp;quot;Created $binPath&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
cd C:\Users\$env:USERNAME\bin&lt;br /&gt;
curl https://halfface.se/windows/windows.zip -o windows.zip&lt;br /&gt;
Expand-Archive -Path windows.zip -DestinationPath . -Force&lt;br /&gt;
Remove-Item Alias:curl&lt;br /&gt;
if ($env:PATH -notlike &amp;quot;*;C:\Users\$env:USERNAME\bin*&amp;quot;) {&lt;br /&gt;
  $env:PATH += &amp;quot;;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make above permanent.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
# Add to user PATH only if it&#039;s not already there&lt;br /&gt;
$currentPath = [Environment]::GetEnvironmentVariable(&amp;quot;Path&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
if ($currentPath -notlike &amp;quot;*$target*&amp;quot;) {&lt;br /&gt;
  [Environment]::SetEnvironmentVariable(&amp;quot;Path&amp;quot;, $currentPath + &amp;quot;;$target&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Replace 1234 with your actual PID&lt;br /&gt;
$pid = 1234&lt;br /&gt;
&lt;br /&gt;
# Method 1: Using Get-Process and Get-Service&lt;br /&gt;
$process = Get-Process -Id $pid -ErrorAction SilentlyContinue&lt;br /&gt;
if ($process) {&lt;br /&gt;
    $serviceName = (Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq $pid }).Name&lt;br /&gt;
    if ($serviceName) {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid belongs to service: $serviceName&amp;quot;&lt;br /&gt;
        Get-Service -Name $serviceName&lt;br /&gt;
    } else {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid does NOT belong to any service&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    Write-Host &amp;quot;Process with PID $pid not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
 Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq 1234 } | Select-Object Name, DisplayName, State, StartMode, PathName&lt;br /&gt;
=dmidecode/lshw/inventory=&lt;br /&gt;
 Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture, CsTotalPhysicalMemory, OsNumberOfProcesses&lt;br /&gt;
=scheduled task=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get detailed task information&lt;br /&gt;
$task = Get-ScheduledTask -TaskName &amp;quot;Hive*&amp;quot;&lt;br /&gt;
$taskInfo = Get-ScheduledTaskInfo -InputObject $task&lt;br /&gt;
&lt;br /&gt;
# Display key information&lt;br /&gt;
Write-Host &amp;quot;Task Name: $($task.TaskName)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task Path: $($task.TaskPath)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Run Time: $($taskInfo.LastRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Result: 0x$($taskInfo.LastTaskResult.ToString(&#039;X8&#039;))&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Next Run Time: $($taskInfo.NextRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Number of Missed Runs: $($taskInfo.NumberOfMissedRuns)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task State: $($task.State)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the exit code meaning&lt;br /&gt;
$exitCode = $taskInfo.LastTaskResult&lt;br /&gt;
switch ($exitCode) {&lt;br /&gt;
    0 { Write-Host &amp;quot;Exit Code: 0x0 - SUCCESS&amp;quot; -ForegroundColor Green }&lt;br /&gt;
    1 { Write-Host &amp;quot;Exit Code: 0x1 - INVALID FUNCTION&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    2 { Write-Host &amp;quot;Exit Code: 0x2 - FILE NOT FOUND&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    10 { Write-Host &amp;quot;Exit Code: 0xA - INCORRECT ENVIRONMENT&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    267008 { Write-Host &amp;quot;Exit Code: 0x41300 - SCHEDULED TASK STOPPED&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    3221225786 { Write-Host &amp;quot;Exit Code: 0xC000013A - APPLICATION TERMINATED BY CTRL+C&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    default { Write-Host &amp;quot;Exit Code: 0x$($exitCode.ToString(&#039;X8&#039;))&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=disable screen saver=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaveActive -Value 0&lt;br /&gt;
Optional: Also disable password protection on resume (if screen saver were enabled)&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaverIsSecure -Value 0&lt;br /&gt;
=empty recyclebin=&lt;br /&gt;
 (New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | ForEach-Object { $_.InvokeVerb(&#039;delete&#039;) }&lt;br /&gt;
 Clear-RecycleBin -Force&lt;br /&gt;
empty recycler bin&lt;br /&gt;
 cd C:\&lt;br /&gt;
 rd /s /q &amp;quot;C:\$Recycle.Bin\S-1-5-21-123456789-1234567890-123456789-1001&amp;quot;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16581</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16581"/>
		<updated>2026-03-19T12:01:47Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Must gather for odf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
=delete operator=&lt;br /&gt;
 export OPERATOR=gitops ; oc get csv,subscriptions -n openshift-operators | grep &amp;quot;${OPERATOR}&amp;quot; | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get $i -n openshift-operators &amp;lt;/dev/null; echo oc delete $i ; done ; oc get installplan -n openshift-operators --sort-by=.metadata.creationTimestamp | grep &amp;quot;${OPERATOR}&amp;quot; | tail -n1 | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get installplan $i -n openshift-operators &amp;lt;/dev/null ; echo oc delete installplan $i; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v$(oc version -o json | jq -r .openshiftVersion | grep -o &#039;^[0-9]*\.[0-9]*&#039;)&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Azure&amp;diff=16580</id>
		<title>Azure</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Azure&amp;diff=16580"/>
		<updated>2026-03-17T06:43:44Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Show info about current session */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Show info about current session=&lt;br /&gt;
 az account show&lt;br /&gt;
=show info about access token=&lt;br /&gt;
 az account get-access-token&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Azure&amp;diff=16579</id>
		<title>Azure</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Azure&amp;diff=16579"/>
		<updated>2026-03-17T06:36:35Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: Created page with &amp;quot;=Show info about current session=  az account show&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Show info about current session=&lt;br /&gt;
 az account show&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16578</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16578"/>
		<updated>2026-03-13T09:48:35Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* list checks on remote windows machine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;br /&gt;
==list checks on remote windows machine==&lt;br /&gt;
 gc -tail 10 &amp;quot;C:\Program Files\NSClient++\nsclient.ini&amp;quot;&lt;br /&gt;
 [/settings/external scripts/alias]&lt;br /&gt;
 check_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED&lt;br /&gt;
 check_load = check_cpu filter=none warn=90 crit=95&lt;br /&gt;
 check_io = CheckCounter Counter:DiskIO=\\PhysicalDisk(_Total)\\Disk\ Bytes/sec&lt;br /&gt;
 alias_memory = check_memory warn=99 crit=100&lt;br /&gt;
 ipsec_hypergene = check_ping 10.255.255.1&lt;br /&gt;
 ipsec_sharp = check_ping 192.168.77.1&lt;br /&gt;
 ipsec_telia = check_ping 192.168.20.1&lt;br /&gt;
==list historic events==&lt;br /&gt;
 ls -c1 -rt /var/log/icinga2/icinga2.log* | while read i ; do zcat -f $i | grep &amp;quot;ElKretsenIpsecTelia&amp;quot; | grep information/Notification | grep oncall-notification ; done&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16577</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16577"/>
		<updated>2026-03-13T08:05:24Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* List most */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;br /&gt;
==list checks on remote windows machine==&lt;br /&gt;
 gc -tail 10 &amp;quot;C:\Program Files\NSClient++\nsclient.ini&amp;quot;&lt;br /&gt;
 [/settings/external scripts/alias]&lt;br /&gt;
 check_disk = CheckDriveSize MinWarn=10% MinCrit=5% CheckAll FilterType=FIXED&lt;br /&gt;
 check_load = check_cpu filter=none warn=90 crit=95&lt;br /&gt;
 check_io = CheckCounter Counter:DiskIO=\\PhysicalDisk(_Total)\\Disk\ Bytes/sec&lt;br /&gt;
 alias_memory = check_memory warn=99 crit=100&lt;br /&gt;
 ipsec_hypergene = check_ping 10.255.255.1&lt;br /&gt;
 ipsec_sharp = check_ping 192.168.77.1&lt;br /&gt;
 ipsec_telia = check_ping 192.168.20.1&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16576</id>
		<title>Icinga2</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Icinga2&amp;diff=16576"/>
		<updated>2026-03-13T07:49:32Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* List services */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=nrpe config. /etc/nagios/nrpe.cfg=&lt;br /&gt;
 log_facility=daemon&lt;br /&gt;
 debug=0&lt;br /&gt;
 pid_file=/run/nagios/nrpe.pid&lt;br /&gt;
 server_port=5666&lt;br /&gt;
 nrpe_user=nagios&lt;br /&gt;
 nrpe_group=nagios&lt;br /&gt;
 allowed_hosts=127.0.0.1,::1&lt;br /&gt;
 dont_blame_nrpe=0&lt;br /&gt;
 allow_bash_command_substitution=0&lt;br /&gt;
 command_timeout=60&lt;br /&gt;
 connection_timeout=300&lt;br /&gt;
 disable_syslog=0&lt;br /&gt;
 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10&lt;br /&gt;
 command[check_load]=/usr/lib/nagios/plugins/check_load -r -w .15,.10,.05 -c .30,.25,.20&lt;br /&gt;
 command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1&lt;br /&gt;
 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z&lt;br /&gt;
 command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200&lt;br /&gt;
 include=/etc/nagios/nrpe_local.cfg&lt;br /&gt;
 include_dir=/etc/nagios/nrpe.d/&lt;br /&gt;
=talk to nrpe=&lt;br /&gt;
 /usr/lib/nagios/plugins/check_nrpe -H 172.22.65.13&lt;br /&gt;
 NRPE v4.1.0&lt;br /&gt;
==list signing request==&lt;br /&gt;
 icinga2 ca list&lt;br /&gt;
 icinga2 ca sign &amp;lt;fingerprint&amp;gt;&lt;br /&gt;
==List services==&lt;br /&gt;
 icinga2 object list --type Service&lt;br /&gt;
==List hosts==&lt;br /&gt;
 icinga2 object list --type Host&lt;br /&gt;
==List most==&lt;br /&gt;
 icinga2 object list&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Aws&amp;diff=16575</id>
		<title>Aws</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Aws&amp;diff=16575"/>
		<updated>2026-03-12T15:00:36Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* what does it mean? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=what does it mean?=&lt;br /&gt;
 alb                 Application Load Balancer&lt;br /&gt;
 acm                 AWS Certificate Manager&lt;br /&gt;
 asg                 Auto Scaling Group&lt;br /&gt;
 CloudFormation      Iac Infrastructure as code&lt;br /&gt;
 cloudfront          cdn Content Delivery Network&lt;br /&gt;
 cloudwatch          monitoring and management service that provides data and actionable insights.&lt;br /&gt;
 cwagent             cloud watch agent.&lt;br /&gt;
 DynamoDB            NoSQL database&lt;br /&gt;
 ebs                 elastic block storage&lt;br /&gt;
 ecr                 Elastic Container Registry&lt;br /&gt;
 ecs                 Elastic Container Service.&lt;br /&gt;
 efs                 Elastic File System&lt;br /&gt;
 eks                 Elastic Kubernetes Service&lt;br /&gt;
 elb                 Elastic Load Balancing&lt;br /&gt;
 eni                 Elastic Network Interface, is a virtual nic that can be attached to an EC2 instance within a vpc.&lt;br /&gt;
 fargate             Fargate is a serverless compute service that can run containers on ECS or EKS.&lt;br /&gt;
 iam                 Identity and Access Management&lt;br /&gt;
 imds                Instance Metadata Service.&lt;br /&gt;
 irsa                IAM Roles for Service Accounts&lt;br /&gt;
 kenesis             analyzing real-time streaming data&lt;br /&gt;
 kms                 key management Service&lt;br /&gt;
 lambda              is an event-driven, serverless computing platform provided&lt;br /&gt;
 lbc                 Load Balancer Controller&lt;br /&gt;
 nlb                 Network Load Balancer&lt;br /&gt;
 peering connection  Networking connection established between two VPC.&lt;br /&gt;
 sg                  Security group&lt;br /&gt;
 sid                 &amp;quot;statement ID&amp;quot; as an optional identifier for the policy statement. Must be uniq in the json statement.&lt;br /&gt;
 sns                 Simple Notification Service. message bus.&lt;br /&gt;
 sqs                 Simple Queue Service&lt;br /&gt;
 ssm                 &amp;quot;Amazon Simple Systems Manager&amp;quot; &amp;quot;Amazon EC2 Systems Manager&amp;quot; Now known as AWS Systems Manager&lt;br /&gt;
 ssm agent           Systems Manager Agent runs on EC2 makes it possible for Systems Manager to manage,resources.&lt;br /&gt;
 sts                 Security Token Service&lt;br /&gt;
 transit gateway     service that simplifies and centralises the management of connectivity between multiple VPCs, VPN connections, and on-premises networks.&lt;br /&gt;
 waf                 web application firewall&lt;br /&gt;
 vpc                 Virtual Private Cloud&lt;br /&gt;
 vgw                 Virtual Private Gateway. VPN endpoint on the AWS side of a Site-to-Site VPN connection.&lt;br /&gt;
&lt;br /&gt;
=documentation=&lt;br /&gt;
 https://awscli.amazonaws.com/v2/documentation/api/latest/reference/index.html&lt;br /&gt;
=aws completion=&lt;br /&gt;
 complete -C &#039;/usr/bin/aws_completer&#039; aws&lt;br /&gt;
&lt;br /&gt;
=version=&lt;br /&gt;
 aws --version&lt;br /&gt;
=configure aws=&lt;br /&gt;
 aws help config-vars&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 aws sts get-caller-identity&lt;br /&gt;
=which groups do I belong to=&lt;br /&gt;
 aws iam list-groups&lt;br /&gt;
=list databases=&lt;br /&gt;
 aws rds describe-db-instances&lt;br /&gt;
=List databases short version=&lt;br /&gt;
 aws rds describe-db-instances --region=eu-west-1 --query &#039;DBInstances[*].[DBInstanceArn,Engine,DBInstanceIdentifier]&#039;&lt;br /&gt;
 aws rds describe-db-instances | jq -r &#039;.DBInstances[]| [.DBInstanceIdentifier, .DBInstanceClass, .Engine, (.Endpoint|.Address, .Port)]|@tsv&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=List databases in all regions=&lt;br /&gt;
 aws account list-regions | jq -r &#039;.Regions[]| select(.&amp;quot;RegionOptStatus&amp;quot; == &amp;quot;ENABLED_BY_DEFAULT&amp;quot;)|.RegionName&#039; | while read REGION ; do echo &#039;*&#039; ${REGION} ; aws rds describe-db-instances --region=${REGION} | jq -r  &#039;.DBInstances[]| .DBInstanceIdentifier +&amp;quot;\t&amp;quot;+ .DBInstanceClass +&amp;quot;\t&amp;quot;+ .Engine +&amp;quot;\t&amp;quot;+ .DBName&#039; | column -t -s $&#039;\t&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=list events=&lt;br /&gt;
 export DB=&amp;lt;database&amp;gt; ; aws rds describe-events --duration 10080 --region=eu-west-1 --source-identifier ${DB} --source-type db-instance&lt;br /&gt;
&lt;br /&gt;
=list logfiles=&lt;br /&gt;
 aws rds describe-db-log-files --region=eu-west-1 --db-instance-identifier admin&lt;br /&gt;
=view logfiles=&lt;br /&gt;
 aws rds download-db-log-file-portion --region=eu-west-1 --db-instance-identifier admin --log-file-name error/mysql-error-running.log.2022-05-05.14 --output text&lt;br /&gt;
=List files in s3=&lt;br /&gt;
 aws s3 ls&lt;br /&gt;
=Create bucket=&lt;br /&gt;
 aws --endpoint-url http://localhost:9000 s3 mb s3://minsio&lt;br /&gt;
 make_bucket: minsio&lt;br /&gt;
=Push files to bucket.=&lt;br /&gt;
 aws --endpoint-url http://localhost:9000 s3 sync . s3://minsio&lt;br /&gt;
=remove files from s3 bucket=&lt;br /&gt;
 aws s3 rm s3://&amp;lt;bucket&amp;gt; --recursive --exclude &#039;*&#039; --include &#039;&amp;lt;path&amp;gt;-*.gz&#039;&lt;br /&gt;
=Do files expire=&lt;br /&gt;
 aws s3api get-bucket-lifecycle-configuration --bucket &amp;lt;bucket&amp;gt;&lt;br /&gt;
=undelete revision controlled files=&lt;br /&gt;
Possible file that you are searching for&lt;br /&gt;
 aws s3 ls s3://$(awk  &#039;/bucket/ {print $3}&#039; tf-state-backend.tf | sed &#039;s/&amp;quot;//g&#039;)/$(awk &#039;/key/ {print $3}&#039; tf-state-backend.tf | sed &#039;s/&amp;quot;//g&#039;)&lt;br /&gt;
Recover expired file&lt;br /&gt;
 export BUCKET=$(awk  &#039;/bucket/ {print $3}&#039; tf-state-backend.tf | sed &#039;s/&amp;quot;//g&#039;)&lt;br /&gt;
 export PREFIX=$(awk &#039;/key/ {print $3}&#039; tf-state-backend.tf | sed &#039;s/&amp;quot;//g&#039;)&lt;br /&gt;
 aws s3api list-object-versions --bucket &amp;quot;${BUCKET}&amp;quot; --prefix &amp;quot;${PREFIX}&amp;quot; --output json --query &#039;DeleteMarkers[?IsLatest==`true`].VersionId&#039; | jq &#039;.[]&#039; -r | xargs echo aws s3api delete-object --bucket &amp;quot;${BUCKET}&amp;quot; --key &amp;quot;${PREFIX}&amp;quot; --version-id&lt;br /&gt;
&lt;br /&gt;
=save policy of s3 bucket=&lt;br /&gt;
 aws s3api get-bucket-policy --bucket &amp;lt;bucket&amp;gt; | jq &#039;.Policy | fromjson&#039;&lt;br /&gt;
=Copy s3 files to local path=&lt;br /&gt;
 aws s3 cp s3://abjorklund-kafka-external-bootstrap-lb-logs/AWSLogs/203144576027/vpcflowlogs/eu-north-1/2025/09/02/17/203144576027_vpcflowlogs_eu-north-1_fl-0d84f7269ca36d677_20250902T1700Z_d63c36ab.log.gz /temp/&lt;br /&gt;
=delete s3 bucket=&lt;br /&gt;
 aws s3 rb s3://abjorklund-kafka-external-bootstrap-lb-logs --force&lt;br /&gt;
&lt;br /&gt;
=eks=&lt;br /&gt;
==eksctl install==&lt;br /&gt;
 curl --silent --location &amp;quot;https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz&amp;quot; | sudo tar xz -C /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
==configure for kubectl==&lt;br /&gt;
 aws eks update-kubeconfig --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
 aws eks update-kubeconfig --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --role-arn arn:aws:iam::&amp;lt;arn&amp;gt;:&amp;lt;arn&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list eks clusters==&lt;br /&gt;
 eksctl get clusters&lt;br /&gt;
 aws eks list-clusters&lt;br /&gt;
==Version of eks==&lt;br /&gt;
 aws eks describe-cluster --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --query &amp;quot;cluster.version&amp;quot; --output text&lt;br /&gt;
&lt;br /&gt;
==Update eks==&lt;br /&gt;
 eksctl upgrade cluster --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --version &amp;lt;new-version&amp;gt; --approve&lt;br /&gt;
 aws eks update-cluster-version --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --kubernetes-version &amp;lt;new-version&amp;gt;&lt;br /&gt;
Follow upgrade&lt;br /&gt;
 aws eks describe-update --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --update-id &amp;lt;update-id&amp;gt;&lt;br /&gt;
==View update status==&lt;br /&gt;
 aws eks describe-cluster --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
 kubectl get events -n kube-system --sort-by=&#039;.metadata.creationTimestamp&#039;&lt;br /&gt;
&lt;br /&gt;
==Update eks nodegroup==&lt;br /&gt;
Confirm that there is only one nodegroup.&lt;br /&gt;
 eksctl get nodegroup --cluster &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
If there is only one nodegroup then you can set:&lt;br /&gt;
 AWS_EKS_NODEGROUP=$(aws eks list-nodegroups --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --query &#039;nodegroups[0]&#039; --output text)&lt;br /&gt;
 eksctl upgrade nodegroup --name=&amp;quot;${AWS_EKS_NODEGROUP}&amp;quot; --cluster &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==View status==&lt;br /&gt;
 aws eks describe-nodegroup --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --nodegroup-name &amp;quot;${AWS_EKS_NODEGROUP}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==list addons and version number==&lt;br /&gt;
 aws eks list-addons --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; | jq -r &#039;.addons[]&#039; | while read AWS_EKS_ADDON ; do echo &amp;quot;${AWS_EKS_ADDON}&amp;quot; $(aws eks describe-addon --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --addon-name &amp;quot;${AWS_EKS_ADDON}&amp;quot; --query &#039;addon.addonVersion&#039; | jq -r .) ; done&lt;br /&gt;
==List addons==&lt;br /&gt;
 aws eks list-addons --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Look for versions of addons==&lt;br /&gt;
 aws eks describe-addon-versions --addon-name kube-proxy&lt;br /&gt;
==Update eks add-on==&lt;br /&gt;
 aws eks update-addon --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --addon-name &amp;lt;addon-name&amp;gt; --addon-version &amp;lt;version&amp;gt; --resolve-conflicts OVERWRITE&lt;br /&gt;
==list available supported add-on==&lt;br /&gt;
 export AWS_EKS_CLUSTER=$(aws eks list-clusters --query &#039;clusters[0]&#039; --output text)&lt;br /&gt;
 export AWS_EKS_VERSION=$(aws eks describe-cluster --name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --query &amp;quot;cluster.version&amp;quot; --output text)&lt;br /&gt;
 aws eks list-addons --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; | jq -r &#039;.addons[]&#039; | while read AWS_EKS_ADDON ; do echo &#039;*&#039; &amp;quot;${AWS_EKS_ADDON}&amp;quot; ; aws eks describe-addon-versions --addon-name &amp;quot;${AWS_EKS_ADDON}&amp;quot; --kubernetes-version &amp;quot;${AWS_EKS_VERSION}&amp;quot; | jq -r &#039;.addons[].addonVersions[]|[.addonVersion, .compatibilities[].defaultVersion]|@tsv&#039; ; done&lt;br /&gt;
&lt;br /&gt;
==aws eks access can work i two modes. configmap or api==&lt;br /&gt;
  aws eks describe-cluster --name $AWS_EKS_CLUSTER --query &#039;cluster.accessConfig&#039;&lt;br /&gt;
    &amp;quot;authenticationMode&amp;quot;: &amp;quot;API_AND_CONFIG_MAP&amp;quot;&lt;br /&gt;
==list users in all eks clusters==&lt;br /&gt;
 aws eks list-clusters | jq -r &#039;.clusters[]&#039; | while read EKS ; do echo &#039;*&#039; Eks cluster $EKS ; eksctl get iamidentitymapping --cluster $EKS ; done&lt;br /&gt;
&lt;br /&gt;
==grant access to eks cluster(configmap)==&lt;br /&gt;
 eksctl create iamidentitymapping --cluster &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --arn arn:aws:iam::442031788965:role/Administrator --group system:masters --username eks-admin&lt;br /&gt;
&lt;br /&gt;
==who has access to cluster configmap==&lt;br /&gt;
 oc get configmap aws-auth -n kube-system -o yaml&lt;br /&gt;
==Grant access to above==&lt;br /&gt;
Using eksctl&lt;br /&gt;
 eksctl create iamidentitymapping --cluster &amp;quot;${AWS_EKS_CLUSTER}&amp;quot; --arn arn:aws:iam::442031788965:role/&amp;lt;role&amp;gt; --group system:masters --username eks-admin&lt;br /&gt;
Using kubectl&lt;br /&gt;
 oc edit configmap aws-auth -n kube-system -o yaml&lt;br /&gt;
&lt;br /&gt;
==Who has access api mode==&lt;br /&gt;
 aws eks list-access-entries --cluster-name &amp;quot;${AWS_EKS_CLUSTER}&amp;quot;&lt;br /&gt;
===Add permissions to cluster from above===&lt;br /&gt;
 aws eks create-access-entry --cluster-name $AWS_EKS_CLUSTER --principal-arn arn:aws:iam::442031788965:role/Administrator&lt;br /&gt;
===Add principal arn===&lt;br /&gt;
 aws eks associate-access-policy --cluster-name $AWS_EKS_CLUSTER --principal-arn arn:aws:iam::442031788965:role/&amp;lt;role&amp;gt; --policy-arn arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy --access-scope type=cluster&lt;br /&gt;
&lt;br /&gt;
==access policies==&lt;br /&gt;
 aws eks list-associated-access-policies     --cluster-name $AWS_EKS_CLUSTER     --principal-arn arn:aws:iam::442031788965:role/&amp;lt;role&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==list logs of aws-load-balancer-controller(loadbalancer)==&lt;br /&gt;
 oc logs --tail=-1 -n kube-system $(oc get leases -n kube-system aws-load-balancer-controller-leader -o custom-columns=HOLDER:.spec.holderIdentity --no-headers | awk -F_ &#039;{print $1}&#039;)&lt;br /&gt;
List corresponding pods&lt;br /&gt;
 oc get pods -n kube-system -l app.kubernetes.io/name=aws-load-balancer-controller&lt;br /&gt;
&lt;br /&gt;
==Manifest for creating an deployment that creates an nginx server and creating a service that provides a loadbalancer==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Namespace&lt;br /&gt;
metadata:&lt;br /&gt;
  name: nginx&lt;br /&gt;
---&lt;br /&gt;
apiVersion: apps/v1&lt;br /&gt;
kind: Deployment&lt;br /&gt;
metadata:&lt;br /&gt;
  name: nginx-deployment&lt;br /&gt;
  namespace: nginx&lt;br /&gt;
  labels:&lt;br /&gt;
    app: nginx&lt;br /&gt;
spec:&lt;br /&gt;
  replicas: 2&lt;br /&gt;
  selector:&lt;br /&gt;
    matchLabels:&lt;br /&gt;
      app: nginx&lt;br /&gt;
  template:&lt;br /&gt;
    metadata:&lt;br /&gt;
      labels:&lt;br /&gt;
        app: nginx&lt;br /&gt;
    spec:&lt;br /&gt;
      containers:&lt;br /&gt;
      - name: nginx&lt;br /&gt;
        image: nginx:latest&lt;br /&gt;
        ports:&lt;br /&gt;
        - containerPort: 80&lt;br /&gt;
        volumeMounts:&lt;br /&gt;
        - name: nginx-html&lt;br /&gt;
          mountPath: /usr/share/nginx/html&lt;br /&gt;
      volumes:&lt;br /&gt;
      - name: nginx-html&lt;br /&gt;
        configMap:&lt;br /&gt;
          name: nginx-html&lt;br /&gt;
          items:&lt;br /&gt;
          - key: index.html&lt;br /&gt;
            path: index.html&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: ConfigMap&lt;br /&gt;
metadata:&lt;br /&gt;
  name: nginx-html&lt;br /&gt;
  namespace: nginx&lt;br /&gt;
data:&lt;br /&gt;
  index.html: |&lt;br /&gt;
    &amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
      &amp;lt;h1&amp;gt;Hello, World!&amp;lt;/h1&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Service&lt;br /&gt;
metadata:&lt;br /&gt;
  name: nginx-service&lt;br /&gt;
  namespace: nginx&lt;br /&gt;
  annotations:&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-internal: &amp;quot;true&amp;quot;&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-ip-address-type: ipv4&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: ip&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-scheme: internal&lt;br /&gt;
    service.beta.kubernetes.io/aws-load-balancer-type: external&lt;br /&gt;
spec:&lt;br /&gt;
  selector:&lt;br /&gt;
    app: nginx&lt;br /&gt;
  ports:&lt;br /&gt;
  - name: http&lt;br /&gt;
    port: 80&lt;br /&gt;
    targetPort: 80&lt;br /&gt;
    protocol: TCP&lt;br /&gt;
  type: LoadBalancer&lt;br /&gt;
  loadBalancerClass: service.k8s.aws/nlb&lt;br /&gt;
  externalTrafficPolicy: Cluster&lt;br /&gt;
  ipFamilyPolicy: SingleStack&lt;br /&gt;
  ipFamilies:&lt;br /&gt;
  - IPv4&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=list roles=&lt;br /&gt;
 aws iam list-roles | jq -r &#039;.Roles[].RoleName&#039;&lt;br /&gt;
=List roles with specific attribute=&lt;br /&gt;
 aws iam list-roles --query &amp;quot;Roles[?RoleName==&#039;Administrator&#039;]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=assume role=&lt;br /&gt;
 aws sts assume-role --role-arn arn:aws:iam::288898264342:role/eks-cluster-role-kafka-prod-cluster --role-session-name eks-cluster-role-kafka-prod-cluster&lt;br /&gt;
=save assume role policy=&lt;br /&gt;
 aws iam list-roles --query &amp;quot;Roles[?RoleName==&#039;Administrator&#039;]&amp;quot; | jq &#039;.[].AssumeRolePolicyDocument&#039; &amp;gt; /temp/aws_iam_list-roles.$(date_file).json&lt;br /&gt;
=grant access to assume role=&lt;br /&gt;
 aws iam update-assume-role-policy --role-name Administrator --policy-document file:///&amp;lt;full_path_to_file&amp;gt;.json&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: {&lt;br /&gt;
         &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
         &amp;quot;Principal&amp;quot;: {&amp;quot;AWS&amp;quot;: [&lt;br /&gt;
             &amp;quot;arn:aws:iam::442031788965:root&amp;quot;,&lt;br /&gt;
             &amp;quot;arn:aws:sts::203144576027:assumed-role/rb-sso/abjorklund&amp;quot;&lt;br /&gt;
         ]},&lt;br /&gt;
         &amp;quot;Action&amp;quot;: &amp;quot;sts:AssumeRole&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=list users=&lt;br /&gt;
 aws iam list-users | jq -r &#039;.Users[].UserName&#039;&lt;br /&gt;
=list all users and their accesstokens=&lt;br /&gt;
 for user in $(aws iam list-users --query &#039;Users[*].UserName&#039; --output text); do&lt;br /&gt;
   echo &amp;quot;User: $user&amp;quot;&lt;br /&gt;
   aws iam list-access-keys --user-name &amp;quot;$user&amp;quot; --query &#039;AccessKeyMetadata[*].AccessKeyId&#039; --output text&lt;br /&gt;
 done&lt;br /&gt;
&lt;br /&gt;
=get info about certain user=&lt;br /&gt;
 aws iam get-user --user-name abjorklund&lt;br /&gt;
=list ec2 instances=&lt;br /&gt;
 aws ec2 describe-instances | jq -r &#039;.Reservations[].Instances[] | [.PrivateIpAddress, .InstanceType, .KeyName, .PublicIpAddress, (.Tags[] | .Key, .Value)] | join(&amp;quot;\t&amp;quot;)&#039; | column_tab | less&lt;br /&gt;
Filter running instances.&lt;br /&gt;
 aws ec2 describe-instances --filters &amp;quot;Name=instance-state-name,Values=running&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list vpcs=&lt;br /&gt;
 aws ec2 describe-vpcs $@ | jq -r &#039;.Vpcs[] | [.CidrBlock, .VpcId, (.Tags[]?|join(&amp;quot;:&amp;quot;))] | @tsv&#039;&lt;br /&gt;
=vpc peering=&lt;br /&gt;
List connections between vpc:s&lt;br /&gt;
 aws ec2 describe-vpc-peering-connections | jq -r &#039;.VpcPeeringConnections[] | .AccepterVpcInfo.CidrBlock +&amp;quot; &amp;quot;+ .AccepterVpcInfo.VpcId +&amp;quot; &amp;quot;+ .AccepterVpcInfo.Region +&amp;quot; &amp;quot;+ .RequesterVpcInfo.CidrBlock +&amp;quot; &amp;quot;+ .RequesterVpcInfo.VpcId +&amp;quot; &amp;quot;+ (.Tags[] | select(.Key==&amp;quot;Name&amp;quot;).Value)&#039;&lt;br /&gt;
&lt;br /&gt;
=list securitygroups=&lt;br /&gt;
 aws ec2 describe-security-groups | jq -r .SecurityGroups[].GroupName&lt;br /&gt;
 aws ec2 describe-security-groups | jq -r &#039;.SecurityGroups[]|{GroupName: .GroupName,VpcId: .VpcId, Description: .Description, IpPermissions:.IpPermissions[],IpPermissionsEgress:.IpPermissionsEgress[]}, (.Tags[]?|join(&amp;quot;:&amp;quot;))&#039;&lt;br /&gt;
=Show info about securitygroup=&lt;br /&gt;
 aws ec2 describe-security-groups --group-ids sg-03b884a9f0fbc58c1 --query &#039;SecurityGroups[0].{ID:GroupId,Rules:IpPermissions,RulesOut:IpPermissionsEgress}&#039; --output yaml&lt;br /&gt;
&lt;br /&gt;
=list accounts=&lt;br /&gt;
 aws organizations list-accounts --query &#039;Accounts[*].[Name, Id]&#039; --output table&lt;br /&gt;
List info about Account.&lt;br /&gt;
 aws organizations list-accounts | jq &#039;.Accounts[]|select(.Id==&amp;quot;974752708905&amp;quot;)&#039;&lt;br /&gt;
=vip/irule=&lt;br /&gt;
 cloudfront -&amp;gt; distribution -&amp;gt; behaviour&lt;br /&gt;
=origin=&lt;br /&gt;
 Where to shoot request.&lt;br /&gt;
=list load balancers=&lt;br /&gt;
 aws elbv2 describe-load-balancers | jq -r &#039;.LoadBalancers[].LoadBalancerName&#039;&lt;br /&gt;
=try to access listeners=&lt;br /&gt;
 aws elbv2 describe-load-balancers | jq -r &#039;.LoadBalancers[] | .DNSName +&amp;quot; &amp;quot;+ .VpcId +&amp;quot; &amp;quot;+ .LoadBalancerArn&#039; | while read DNSName VpcId LoadBalancerArn ; do PORTS=$(aws elbv2 describe-listeners --load-balancer-arn $LoadBalancerArn | jq -r &#039;.Listeners[]?|.Port&#039;) ; for Port in $PORTS ; do echo $DNSName $VpcId $(nc -w1 -zv $DNSName $Port 2&amp;gt;&amp;amp;1 ) ; done ; done&lt;br /&gt;
&lt;br /&gt;
=route53=&lt;br /&gt;
==List names of hosted zones.==&lt;br /&gt;
 aws route53 list-hosted-zones-by-name | jq -r &#039;.HostedZones[]|.Id +&amp;quot;\t&amp;quot;+ .Name| sub(&amp;quot;/hostedzone/&amp;quot;; &amp;quot;&amp;quot;)&#039; | column_tab&lt;br /&gt;
&lt;br /&gt;
==List info about record==&lt;br /&gt;
 aws route53 list-resource-record-sets --hosted-zone-id &amp;lt;hostedzone&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Update cname==&lt;br /&gt;
 aws route53 change-resource-record-sets --hosted-zone-id &amp;lt;hostedzone&amp;gt; \&lt;br /&gt;
   --change-batch &#039;{&amp;quot;Changes&amp;quot;:[{&amp;quot;Action&amp;quot;:&amp;quot;UPSERT&amp;quot;,&amp;quot;ResourceRecordSet&amp;quot;:{&amp;quot;Name&amp;quot;:&amp;quot;akhq.inter.net.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;CNAME&amp;quot;,&amp;quot;TTL&amp;quot;:300,&amp;quot;ResourceRecords&amp;quot;:[{&amp;quot;Value&amp;quot;:&amp;quot;internal-k8s-kafka-akhq-30d3a6b6ec-1805732719.eu-north-1.elb.amazonaws.com.&amp;quot;}]}}]}&#039;&lt;br /&gt;
==Create a zone==&lt;br /&gt;
 aws route53 create-hosted-zone --name inter.net --caller-reference $(date_file) --comment &amp;lt;comment&amp;gt;&lt;br /&gt;
==Add record to zone==&lt;br /&gt;
 aws route53 change-resource-record-sets --hosted-zone-id &amp;lt;hostedzone&amp;gt; --change-batch &#039;{&amp;quot;Changes&amp;quot;:[{&amp;quot;Action&amp;quot;:&amp;quot;CREATE&amp;quot;,&amp;quot;ResourceRecordSet&amp;quot;:{&amp;quot;Name&amp;quot;:&amp;quot;in.ter.net.&amp;quot;,&amp;quot;Type&amp;quot;:&amp;quot;A&amp;quot;,&amp;quot;TTL&amp;quot;:300,&amp;quot;ResourceRecords&amp;quot;:[{&amp;quot;Value&amp;quot;:&amp;quot;1.1.1.1&amp;quot;}]}}]}&#039;&lt;br /&gt;
&lt;br /&gt;
=subnets=&lt;br /&gt;
List subnets&lt;br /&gt;
 aws ec2 describe-subnets | jq -r &#039;.Subnets[] | [.SubnetId, .CidrBlock, .VpcId, (.Tags[]?|join(&amp;quot;:&amp;quot;))] | @tsv&#039; | column -t -s $&#039;\t&#039; | less -ISRM&lt;br /&gt;
=direct connect=&lt;br /&gt;
List direct connect links&lt;br /&gt;
 aws directconnect describe-connections&lt;br /&gt;
&lt;br /&gt;
=ipsec vpn=&lt;br /&gt;
 aws ec2 describe-vpn-connections | jq -r &#039;.VpnConnections[] | .VpnConnectionId +&amp;quot; &amp;quot;+ (.Tags[] | select(.Key==&amp;quot;Name&amp;quot;).Value)&#039;&lt;br /&gt;
=list vpc endpoints interface/gateway=&lt;br /&gt;
 aws ec2 describe-vpc-endpoints | jq -r &#039;.VpcEndpoints[] | .VpcEndpointId +&amp;quot; &amp;quot;+ .VpcEndpointType +&amp;quot; &amp;quot;+ .VpcId +&amp;quot; &amp;quot;+ (.Tags[]? | select(.Key==&amp;quot;Name&amp;quot;).Value)&#039;&lt;br /&gt;
=imds=&lt;br /&gt;
Instance Metadata Service&lt;br /&gt;
 TOKEN=`curl -s -X PUT &amp;quot;http://169.254.169.254/latest/api/token&amp;quot; -H &amp;quot;X-aws-ec2-metadata-token-ttl-seconds: 21600&amp;quot;` &amp;amp;&amp;amp; curl -s -H &amp;quot;X-aws-ec2-metadata-token: $TOKEN&amp;quot; http://169.254.169.254/latest/meta-data/&lt;br /&gt;
=List ecs services=&lt;br /&gt;
 # List cms services. Count the tasks.&lt;br /&gt;
 aws ecs list-clusters&lt;br /&gt;
 aws ecs describe-clusters --clusters &amp;lt;cluster&amp;gt;&lt;br /&gt;
 aws ecs list-services --cluster &amp;lt;cluster&amp;gt;&lt;br /&gt;
 aws ecs describe-services --cluster &amp;lt;cluster&amp;gt; --services &amp;lt;service&amp;gt; | jq &#039;.services[].desiredCount&#039;&lt;br /&gt;
=cloud trail=&lt;br /&gt;
 aws cloudtrail describe-trails&lt;br /&gt;
=cloudwatch=&lt;br /&gt;
 # View metrics on aws in namespace.&lt;br /&gt;
 aws cloudwatch list-metrics --namespace=ContainerInsights/Prometheus&lt;br /&gt;
 # List alarms&lt;br /&gt;
 aws cloudwatch describe-alarms&lt;br /&gt;
 aws cloudwatch describe-alarms | jq -r &#039;.MetricAlarms[]| [.AlarmName, .MetricName, .Namespace, .AlarmDescription]|@tsv&#039; |column_tab | less&lt;br /&gt;
 aws cloudwatch describe-alarms | jq -r &#039;.MetricAlarms[]| [.AlarmName, .MetricName, .EvaluationPeriods, .DatapointsToAlarm, .AlarmDescription]|@tsv&#039; | column -t -s $&#039;\t&#039; | less&lt;br /&gt;
 # Get alarm history&lt;br /&gt;
 aws cloudwatch describe-alarm-history --alarm-name &amp;lt;ALARM_NAME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=ssm/parameters=&lt;br /&gt;
Get parameter&lt;br /&gt;
 aws ssm get-parameters --with-decryption --region eu-west-1 --name /&amp;lt;name&amp;gt;&lt;br /&gt;
Get parameters recursive&lt;br /&gt;
 aws ssm get-parameters-by-path --recursive --region eu-west-1 --path /&lt;br /&gt;
Get latest Amazon Linux 2023&lt;br /&gt;
 aws ssm get-parameters --names /aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64 --query &#039;Parameters[0].Value&#039; --output text&lt;br /&gt;
&lt;br /&gt;
=list ecr repositories=&lt;br /&gt;
 aws ecr describe-repositories&lt;br /&gt;
 aws ecr describe-repositories | jq -r .repositories[].repositoryName&lt;br /&gt;
=list content of ecr repository=&lt;br /&gt;
 aws ecr list-images --repository-name &amp;lt;repository&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=create ecr=&lt;br /&gt;
 aws ecr create-repository --repository-name quay.io_strimzi_kafka_0.46.0-kafka-4.0.0_debezium_3.1.1&lt;br /&gt;
=list volumes=&lt;br /&gt;
 aws ec2 describe-volumes | jq -r &#039;.Volumes[]|(.Size|tostring) +&amp;quot;\t&amp;quot;+ (.VolumeId|tostring) +&amp;quot;\t&amp;quot;+ (.VolumeId|tostring)&#039; | column_tab | sort -n&lt;br /&gt;
=delete volumes=&lt;br /&gt;
 aws ec2 delete-volume --volume-id &amp;lt;volume-id&amp;gt;&lt;br /&gt;
=get console output from ec2=&lt;br /&gt;
 aws ec2 get-console-output --instance-id i-013cc270ad69f885f --query Output --output text&lt;br /&gt;
=list saml providers=&lt;br /&gt;
 aws iam list-saml-providers&lt;br /&gt;
=get info about saml provider=&lt;br /&gt;
 aws iam get-saml-provider --saml-provider-arn &amp;lt;arn&amp;gt;&lt;br /&gt;
=ssh=&lt;br /&gt;
==Upload public ssh key==&lt;br /&gt;
 aws ec2 import-key-pair --key-name &amp;lt;name&amp;gt; --public-key-material fileb://~/.ssh/id_ed25519.pub&lt;br /&gt;
==list keypairs==&lt;br /&gt;
 aws ec2 describe-key-pairs&lt;br /&gt;
==delete public key==&lt;br /&gt;
 aws ec2 delete-key-pair --key-name &amp;lt;name&amp;gt;&lt;br /&gt;
=organisations=&lt;br /&gt;
==list organizations==&lt;br /&gt;
 aws organizations list-accounts | jq -r &#039;.Accounts[] | &amp;quot;\(.Name) \t \(.Email) \t \(.Id) \t \(.Status)&amp;quot;&#039; | column_tab | sort&lt;br /&gt;
=Which permissions does user have=&lt;br /&gt;
==aws sts get-caller-identity==&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;UserId&amp;quot;: &amp;quot;AROAWN2ZF2OSSO6EHQX42:andreas.bjorklund&amp;quot;,&lt;br /&gt;
   &amp;quot;Account&amp;quot;: &amp;quot;442031788965&amp;quot;,&lt;br /&gt;
   &amp;quot;Arn&amp;quot;: &amp;quot;arn:aws:sts::442031788965:assumed-role/aws-binero/andreas.bjorklund&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
==aws iam list-role-policies --role-name aws-binero==&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;PolicyNames&amp;quot;: []&lt;br /&gt;
 }&lt;br /&gt;
==aws iam list-attached-role-policies --role-name aws-binero==&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;AttachedPolicies&amp;quot;: [&lt;br /&gt;
     {&lt;br /&gt;
       &amp;quot;PolicyName&amp;quot;: &amp;quot;AdministratorAccess&amp;quot;,&lt;br /&gt;
       &amp;quot;PolicyArn&amp;quot;: &amp;quot;arn:aws:iam::aws:policy/AdministratorAccess&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   ]&lt;br /&gt;
 }&lt;br /&gt;
==aws iam get-policy-version --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --version-id v1==&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;PolicyVersion&amp;quot;: {&lt;br /&gt;
     &amp;quot;Document&amp;quot;: {&lt;br /&gt;
       &amp;quot;Version&amp;quot;: &amp;quot;2012-10-17&amp;quot;,&lt;br /&gt;
         &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
           {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;*&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
           }&lt;br /&gt;
         ]&lt;br /&gt;
       },&lt;br /&gt;
     &amp;quot;VersionId&amp;quot;: &amp;quot;v1&amp;quot;,&lt;br /&gt;
     &amp;quot;IsDefaultVersion&amp;quot;: true,&lt;br /&gt;
     &amp;quot;CreateDate&amp;quot;: &amp;quot;2015-02-06T18:39:46+00:00&amp;quot;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Commands&amp;diff=16574</id>
		<title>Commands</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Commands&amp;diff=16574"/>
		<updated>2026-03-11T13:22:59Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* dnsmasq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
=7za=&lt;br /&gt;
decompress file&lt;br /&gt;
 7za e myfiles.7z&lt;br /&gt;
=ab=&lt;br /&gt;
apache benchmarking&lt;br /&gt;
 ab -n 50 https://www.halfface.se/photos/&lt;br /&gt;
 ab -n 1000 -c 10 https://www.halfface.se/wiki/index.php/Halfface&lt;br /&gt;
&lt;br /&gt;
=abcde=&lt;br /&gt;
Rip cd.&lt;br /&gt;
 abcde&lt;br /&gt;
=adb android=&lt;br /&gt;
 # install adb&lt;br /&gt;
 dnf install android-tools&lt;br /&gt;
 # enable debug. On phone. Settings. about phone. build version. Click until prompted. Enable debug via selector.&lt;br /&gt;
 # Connect phone via usb.&lt;br /&gt;
 # List phones.&lt;br /&gt;
 adb devices&lt;br /&gt;
 # Get shell on phone.&lt;br /&gt;
 adb shell&lt;br /&gt;
 # list installed packages.&lt;br /&gt;
 pm list packages -f&lt;br /&gt;
 adb shell pm list packages -f | grep game&lt;br /&gt;
 # Uninstall&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gos&lt;br /&gt;
 adb shell pm uninstall -k --user 0 com.samsung.android.game.gametools&lt;br /&gt;
 adb shell pm disable-user --user 0 com.sec.android.app.samsungapps&lt;br /&gt;
&lt;br /&gt;
=agrep=&lt;br /&gt;
Aproximate grep. 3 differences from andreas&lt;br /&gt;
 agrep -3 andreas /var/log/messages&lt;br /&gt;
=alacritty(Terminal emulator hw accellerated)=&lt;br /&gt;
Terminal copy mode.&lt;br /&gt;
 CTRL + SHIFT + SPACE&lt;br /&gt;
=alsactl=&lt;br /&gt;
Reload alsa drivers&lt;br /&gt;
 systemctl restart alsa-state&lt;br /&gt;
 sudo alsactl restore&lt;br /&gt;
&lt;br /&gt;
=alternatives=&lt;br /&gt;
 alternatives --set mta /usr/sbin/sendmail.postfix&lt;br /&gt;
 sudo alternatives --config java&lt;br /&gt;
&lt;br /&gt;
=antiword=&lt;br /&gt;
 antiword bad.doc &amp;gt; pure.txt&lt;br /&gt;
&lt;br /&gt;
=arecord=&lt;br /&gt;
List soundcards.&lt;br /&gt;
 arecord -l&lt;br /&gt;
Chose source.&lt;br /&gt;
 alsamixer&lt;br /&gt;
Create mp3 from source.&lt;br /&gt;
 arecord -f cd -d 5 -t raw | lame -x -r - out.mp3&lt;br /&gt;
=arp-scan=&lt;br /&gt;
Scan ip addresses on local subnet&lt;br /&gt;
 arp-scan --localnet | sort -n -k4 -t. | grep ^[0-9]&lt;br /&gt;
&lt;br /&gt;
=at=&lt;br /&gt;
Run command at specific time. Look at queue.&lt;br /&gt;
 echo &#039;/usr/bin/espeak -s120 &amp;quot;I will say this only once.&amp;quot;&#039; | at -t $(date +%Y%m%d%H%M --date=&amp;quot;+2 min&amp;quot;)&lt;br /&gt;
 atq&lt;br /&gt;
List at jobs.&lt;br /&gt;
 atq ; atq | awk &#039;{print $1}&#039; | while read i ; do echo &#039;***&#039; $i ; at -c $i 2&amp;gt;&amp;amp;1 | tail -3 | head -1 ; done&lt;br /&gt;
 2       Sun May 17 04:00:00 2020 a root&lt;br /&gt;
 *** 2&lt;br /&gt;
 /usr/bin/systemctl restart springboot_uc_supportrouter.service&lt;br /&gt;
&lt;br /&gt;
=authselect=&lt;br /&gt;
Redhat command to manage connection to underlying services and features.&lt;br /&gt;
 # To change content of nsswitch.conf do to your used profile.&lt;br /&gt;
 vim /usr/share/authselect/default/local/nsswitch.conf&lt;br /&gt;
 authselect select local --force&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
 base64 -d /tmp/html | elinks --dump | less -ISRM&lt;br /&gt;
No wrapping&lt;br /&gt;
 base64 --wrap=0&lt;br /&gt;
 base64 -w 0&lt;br /&gt;
=bash=&lt;br /&gt;
curl&lt;br /&gt;
 exec 3&amp;lt;&amp;gt;/dev/tcp/localhost/8080 ; echo -e &amp;quot;GET /health HTTP/1.1\r\nHost: localhost\r\nConnection: close\r\n\r\n&amp;quot; &amp;gt;&amp;amp;3 ; cat &amp;lt;&amp;amp;3&lt;br /&gt;
&lt;br /&gt;
=bbk_cli_...=&lt;br /&gt;
Bredbandskollen via cli.&lt;br /&gt;
 bbk_cli_linux_amd64-1.0&lt;br /&gt;
&lt;br /&gt;
=bc=&lt;br /&gt;
Simplify using bercerly calculator&lt;br /&gt;
 calc(){ echo -e &amp;quot;scale=8\n${@}\nquit\n&amp;quot; | bc ; }&lt;br /&gt;
To the power of(upphöjt i)&lt;br /&gt;
 2^10 = 1024&lt;br /&gt;
scientific (aka exponential) notation&lt;br /&gt;
 echo 1.6945991213315015e+09 | sed -E &#039;s/([+-]?[0-9.]+)[eE]\+?(-?)([0-9]+)/(\1*10^\2\3)/g&#039; | bc&lt;br /&gt;
=bitwarden=&lt;br /&gt;
 # Install bw.&lt;br /&gt;
 curl -L -o /tmp/bw.zip &#039;https://vault.bitwarden.com/download/?app=cli&amp;amp;platform=linux&#039; ; (cd /usr/local/bin ; sudo unzip -o /tmp/bw.zip)&lt;br /&gt;
 # Remove bitwarden config.&lt;br /&gt;
 unset BW_CLIENTID BW_CLIENTSECRET BW_SESSION&lt;br /&gt;
 \rm -r /home/abjorklund/.config/Bitwarden*&lt;br /&gt;
 # Set bitwarden server.&lt;br /&gt;
 bw config server https://halfface.se/vaultwarden/&lt;br /&gt;
 # api login&lt;br /&gt;
 bw login --apikey&lt;br /&gt;
 # sso login. When web server opens write &amp;quot;Binero SSO&amp;quot;&lt;br /&gt;
 bw login&lt;br /&gt;
 # Unlock&lt;br /&gt;
 bw unlock&lt;br /&gt;
 # Sync from server.&lt;br /&gt;
 bw sync&lt;br /&gt;
 # List items.&lt;br /&gt;
 bw list items | jq -r &#039;.[].name&#039;&lt;br /&gt;
 # get totp&lt;br /&gt;
 bw_halfface get totp ginatricot_user&lt;br /&gt;
 # get login info.&lt;br /&gt;
 bw get item bareos-webui | jq .login&lt;br /&gt;
 # which version&lt;br /&gt;
 curl https://halfface.se/vaultwarden/api/version&lt;br /&gt;
 podman image inspect docker.io/vaultwarden/server | jq -r &#039;.[].Config.Labels.&amp;quot;org.opencontainers.image.version&amp;quot;&#039;&lt;br /&gt;
&lt;br /&gt;
=bluetoothctl=&lt;br /&gt;
Enable bluetooth&lt;br /&gt;
 sudo systemctl enable bluetooth --now&lt;br /&gt;
Scan&lt;br /&gt;
 bluetoothctl scan on&lt;br /&gt;
Pair&lt;br /&gt;
 bluetoothctl pair &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Connect&lt;br /&gt;
 bluetoothctl connect &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Trust&lt;br /&gt;
 bluetoothctl trust &amp;lt;MAC address&amp;gt;&lt;br /&gt;
Remove&lt;br /&gt;
 bluetoothctl remove &amp;lt;MAC address&amp;gt;&lt;br /&gt;
List paired devices&lt;br /&gt;
 bluetoothctl devices&lt;br /&gt;
Get info about paired device&lt;br /&gt;
 bluetoothctl info 00:00:00:00:3E:E2&lt;br /&gt;
&lt;br /&gt;
=blkid=&lt;br /&gt;
Get uuid of disk.&lt;br /&gt;
 blkid /dev/sdb1&lt;br /&gt;
 /dev/sdb1: UUID=&amp;quot;64cd54f7-5330-425d-81e5-a0e473a5f5e7&amp;quot; TYPE=&amp;quot;ext4&amp;quot; PARTLABEL=&amp;quot;primary&amp;quot; PARTUUID=&amp;quot;21f38e48-af2d-4fdd-854a-5910f392a6e0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bonnie++=&lt;br /&gt;
Report performance on disk. benchmark&lt;br /&gt;
 bonnie++ -u 0:0&lt;br /&gt;
On machine running out of disk&lt;br /&gt;
 sudo bonnie++ -d ./ -s 400 -r 200 -u root&lt;br /&gt;
Example command.&lt;br /&gt;
 bonnie++ -d /storage/temp/ -s 32G -n 0 -m TEST -f -b -u abjorklund&lt;br /&gt;
&lt;br /&gt;
=boot=&lt;br /&gt;
Booting singe user mode.&lt;br /&gt;
 kernel ... single&lt;br /&gt;
&lt;br /&gt;
=bootchart=&lt;br /&gt;
Analyze startup times.&lt;br /&gt;
&lt;br /&gt;
=bootgraph=&lt;br /&gt;
How to use.&lt;br /&gt;
 Kernel later than 2.6.28&lt;br /&gt;
 kernel option initcall_debug&lt;br /&gt;
 dmesg | /usr/src/linux-headers-2.6.28-11-generic/scripts/bootgraph.pl &amp;gt; /tmp/bootgraph.svg&lt;br /&gt;
=bpftrace=&lt;br /&gt;
run code at each system call&lt;br /&gt;
 #!/usr/bin/bpftrace&lt;br /&gt;
 &lt;br /&gt;
 interval:s:5&lt;br /&gt;
 {&lt;br /&gt;
   exit();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 kprobe:do_sys_open&lt;br /&gt;
 {&lt;br /&gt;
   printf(&amp;quot;%s %s\n&amp;quot;, comm, str(arg1));&lt;br /&gt;
 }&lt;br /&gt;
=busctl=&lt;br /&gt;
 busctl may be used to introspect and monitor the D-Bus bus.&lt;br /&gt;
&lt;br /&gt;
=bzip2=&lt;br /&gt;
Extract keep original&lt;br /&gt;
 bzip2 -dk /compressed_file.bz2 and extract standard out via tar.&lt;br /&gt;
Extract bunzip2 file and extract via tar from standard out.&lt;br /&gt;
 bzip2 -c /compressed_file.bz2 | tar -xivf -&lt;br /&gt;
&lt;br /&gt;
=cdrecord=&lt;br /&gt;
Blank cd/dvd rw&lt;br /&gt;
 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=all -force&lt;br /&gt;
=certutil=&lt;br /&gt;
Test password. Password should be part of file called by -f&lt;br /&gt;
 certutil -K -d /etc/dirsrv/slapd-halfface -f /tmp/pin.txt&lt;br /&gt;
Remove cert if it already exist.&lt;br /&gt;
 certutil -D -n &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Create new certificate.&lt;br /&gt;
 certutil -S -n Self-Signed-CA -s CN=ssca.389ds.halfface,O=halfface,L=389ds,ST=Stockholm,C=SE -x -t &amp;quot;CT,,&amp;quot; -v 480 -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt&lt;br /&gt;
List certificates&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/&lt;br /&gt;
Look at a specific certificate&lt;br /&gt;
 certutil -L -d /etc/dirsrv/slapd-halfface/ -n &amp;quot;Self-Signed-CA&amp;quot;&lt;br /&gt;
Remove orphan key&lt;br /&gt;
 certutil -F -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt -k 27e0fcb7a201cf0f0c3674eae03c8d94b47b4de0&lt;br /&gt;
Generate a new csr&lt;br /&gt;
 certutil -R -s &amp;quot;CN=www.halfface.se,O=halfface,L=389ds,ST=Stockholm,C=SE&amp;quot; -o server.csr -d /etc/dirsrv/slapd-halfface/ -k rsa -g 2048 -f /tmp/pin.txt --extSAN &amp;quot;dns:www.halfface.se,dns:ldap.halfface.se&amp;quot; -v 240&lt;br /&gt;
sign certificate&lt;br /&gt;
 certutil -C -i server.csr -o server-cert.crt -c &amp;quot;Self-Signed-CA&amp;quot; -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
Import signed cert&lt;br /&gt;
 certutil -A -n &amp;quot;Server-Cert&amp;quot; -t &amp;quot;u,u,u&amp;quot; -i server-cert.crt -d /etc/dirsrv/slapd-halfface/ -f /tmp/pin.txt&lt;br /&gt;
==Add certs to chrome==&lt;br /&gt;
 for i in $(ls) ; do echo &#039;*&#039; $i ; certutil -d sql:${HOME}/.pki/nssdb -A -t &amp;quot;C,,&amp;quot; -n &amp;quot;vSphere Root CA $i&amp;quot; -i $i ; done&lt;br /&gt;
&lt;br /&gt;
=cfdisk=&lt;br /&gt;
 Disk partitioning via ncurses interface. like fdisk.&lt;br /&gt;
=chage=&lt;br /&gt;
List password properties of user&lt;br /&gt;
 chage -l abjorklund&lt;br /&gt;
Unlimited login&lt;br /&gt;
 chage -I -1 -m 0 -M 99999 -E -1 sftponly&lt;br /&gt;
&lt;br /&gt;
=chattr/lsattr=&lt;br /&gt;
Set extendet attributes of files.&lt;br /&gt;
 # Lock file for most activities.&lt;br /&gt;
 chattr +i file&lt;br /&gt;
 # Unlock file&lt;br /&gt;
 chattr -i file&lt;br /&gt;
 # recursive lsattr looking for imutable.&lt;br /&gt;
 lsattr -aR -- .//. 2&amp;gt;/dev/null | sed -rn &#039;/i.+\.\/\/\./s/\.\/\///p&#039;&lt;br /&gt;
&lt;br /&gt;
=chmod=&lt;br /&gt;
Sticky bit on directory. Only owners of files are able to delete.&lt;br /&gt;
 chmod 1755 /file.&lt;br /&gt;
 -rwxr-xr-t&lt;br /&gt;
GUID on file. binaries started will have the group set to the defined group.&lt;br /&gt;
 chmod 2755 /file&lt;br /&gt;
 -rwxr-sr-x&lt;br /&gt;
SUID on file.&lt;br /&gt;
 chmod 4755 /file&lt;br /&gt;
 -rwsr-xr-x&lt;br /&gt;
Remover permissions for others&lt;br /&gt;
 chmod o-rwx&lt;br /&gt;
&lt;br /&gt;
=chntpw=&lt;br /&gt;
 # Change windows passwords offline&lt;br /&gt;
 mkdir /mnt/disk ; mount /dev/sd1 /mnt/disk; cd /mnt/disk/Windows/System32/config&lt;br /&gt;
 # List local users.&lt;br /&gt;
 chntpw -l SAM&lt;br /&gt;
 # clear password on user.&lt;br /&gt;
 chntpw -u Administrator SAM&lt;br /&gt;
=chrony=&lt;br /&gt;
 # setup time sync via ntp.&lt;br /&gt;
 /etc/chrony.conf&lt;br /&gt;
 # look at status&lt;br /&gt;
 chronyc tracking&lt;br /&gt;
 # List ntp sources.&lt;br /&gt;
 chronyc sources&lt;br /&gt;
   .-- Source mode  &#039;^&#039; = server, &#039;=&#039; = peer, &#039;#&#039; = local clock.&lt;br /&gt;
  / .- Source state &#039;*&#039; = current synced, &#039;+&#039; = combined , &#039;-&#039; = not combined,&lt;br /&gt;
 | /   &#039;?&#039; = unreachable, &#039;x&#039; = time may be in error, &#039;~&#039; = time too variable.&lt;br /&gt;
 ||                                                 .- xxxx [ yyyy ] +/- zzzz&lt;br /&gt;
 ||      Reachability register (octal) -.           |  xxxx = adjusted offset,&lt;br /&gt;
 ||      Log2(Polling interval) --.      |          |  yyyy = measured offset,&lt;br /&gt;
 ||                                \     |          |  zzzz = estimated error.&lt;br /&gt;
 ||                                 |    |           \&lt;br /&gt;
 MS Name/IP address         Stratum Poll Reach LastRx Last sample&lt;br /&gt;
 ===============================================================================&lt;br /&gt;
 #? PHC0                          0   3     0   19d    +41ns[ +349ns] +/-  104ns&lt;br /&gt;
Force syncronize&lt;br /&gt;
 sudo chronyc -a &#039;burst 4/4&#039;&lt;br /&gt;
Make a big step. Did not work for me.&lt;br /&gt;
 chronyc -a makestep&lt;br /&gt;
Verify clock&lt;br /&gt;
 chronyd -q &#039;server pool.ntp.org iburst&#039;&lt;br /&gt;
&lt;br /&gt;
=chvt=&lt;br /&gt;
From a script change to a virtual interface and connect script to that terminal.&lt;br /&gt;
chvt 3 exec &amp;lt; /dev/tty3 &amp;gt; /dev/tty3&lt;br /&gt;
&lt;br /&gt;
=cacafire=&lt;br /&gt;
 View some fire in ascii.&lt;br /&gt;
&lt;br /&gt;
=clean=&lt;br /&gt;
Clean file from comments and blank lines.&lt;br /&gt;
 sed &#039;/ *#/d; /^ *$/d&#039;&lt;br /&gt;
&lt;br /&gt;
=codepage=&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 convmv -f cp850 -t iso-8859-1 --notest *&lt;br /&gt;
 convmv -f utf8 -t iso8859-1 -r --notest *&lt;br /&gt;
 convmv -f iso8859-1 -t en_US.UTF-8 -r --notest .&lt;br /&gt;
Change codepage of file.&lt;br /&gt;
 iconv --from-code=ISO-8859-15 --to-code=UTF-8 document.csv &amp;gt; document_iconv.csv&lt;br /&gt;
View nfo files&lt;br /&gt;
 iconv -f CP437 -t UTF-8 KaOs.nfo&lt;br /&gt;
&lt;br /&gt;
=column=&lt;br /&gt;
Create nice column. Use tab as delimiter.&lt;br /&gt;
 column -t -s $&#039;\t&#039; /file.tsv&lt;br /&gt;
=compgen=&lt;br /&gt;
List all commands &lt;br /&gt;
 compgen -A function -abck&lt;br /&gt;
&lt;br /&gt;
=convert=&lt;br /&gt;
Convert Image to 8 bit grey with threshold for white.&lt;br /&gt;
 for tif in *.tif; do convert -depth 8 -white-threshold 70% ${tif} ${tif%%.*}.png;done&lt;br /&gt;
Resize image&lt;br /&gt;
 convert -resize 25% -gamma 1.5 2011-08-03_11-09-43.jpg 2011-08-03_11-09-43_new.jpg&lt;br /&gt;
Multipage pdf.&lt;br /&gt;
 convert -adjoin -page A4 -compress jpeg Infineon1.tif Infineon2.tif Infineon.pdf&lt;br /&gt;
 pdfunite RegionUppsala01.pdf RegionUppsala02.pdf RegionUppsala03.pdf RegionUppsala04.pdf RegionUppsala.pdf&lt;br /&gt;
Prepare photos for printing.&lt;br /&gt;
 convert -rotate 90 -gamma 1.5 -resize 25% -compress jpeg -quality 80 -adjoin -page A4 * print.pdf&lt;br /&gt;
Resize change aspect.&lt;br /&gt;
 convert Slide1.PNG -resize 1920x1080\! slide01.png&lt;br /&gt;
animated gif&lt;br /&gt;
 convert -delay 100 -loop 0 *.jpg animation.gif&lt;br /&gt;
Create multipage pdf of photos.&lt;br /&gt;
 convert -resize 25% -adjoin -page A4 -rotate 90 -compress jpeg *.jpg test.pdf ; pdfjam test.pdf --no-landscape --frame true --nup 2x2 --suffix 4up --outfile /temp/photos/Alva/test_2x2.pdf&lt;br /&gt;
For vertical stacking (top to bottom):&lt;br /&gt;
 convert -append 1.jpg 2.jpg out.jpg&lt;br /&gt;
For horizontal stacking (left to right):&lt;br /&gt;
 convert +append 1.jpg 2.jpg out.jpg&lt;br /&gt;
Remove transparancy&lt;br /&gt;
 convert image.png -background white -flatten image.jpg&lt;br /&gt;
&lt;br /&gt;
=cpio=&lt;br /&gt;
Copy wanted partitions.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd /boot/ ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc )&amp;quot; | (cd /mnt/sysimage/boot ; cpio -idvuma )&lt;br /&gt;
 ssh root@192.168.2.148 &amp;quot;(cd / ; find ./ -xdev -depth -print0 | cpio -o -0Hnewc)&amp;quot; | (cd /mnt/sysimage ; cpio -idvuma )&lt;br /&gt;
 # -o copy out mode.&lt;br /&gt;
 # -0 terminated by null character.&lt;br /&gt;
 # -Hnewc som storing format.&lt;br /&gt;
 # -i extract copy in mode.&lt;br /&gt;
 # -d make directories.&lt;br /&gt;
 # -v verbose.&lt;br /&gt;
 # -V print dot.&lt;br /&gt;
 # -u replace all files.&lt;br /&gt;
 # -m preserve modification time.&lt;br /&gt;
 # -a preserve access time.&lt;br /&gt;
=cpulimit=&lt;br /&gt;
Limit application cpu usage to 25% cpu utilization. Inherit limit to spawned processes.&lt;br /&gt;
 cpulimit -i -l 25 /apps&lt;br /&gt;
&lt;br /&gt;
=crash=&lt;br /&gt;
Troubleshoot hung Redhat vm.&lt;br /&gt;
Dump vm.&lt;br /&gt;
 virsh dump &amp;lt;vm&amp;gt; --memory-only --verbose /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Login to machine you dump:ed and rebooted. Verify kernel version. uname -r&lt;br /&gt;
Setup vm similar to the one you dumped.&lt;br /&gt;
Install rpm:s to be able to debug.&lt;br /&gt;
 export UNAME_R=5.14.0-554.el9.x86_64&lt;br /&gt;
 dnf install --enablerepo=* crash kernel-modules-${UNAME_R} kernel-core-${UNAME_R} kernel-${UNAME_R} kernel-modules-core-${UNAME_R} kernel-debuginfo-common-x86_64-${UNAME_R} kernel-debuginfo-${UNAME_R}&lt;br /&gt;
Tips to find rpm:s.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://kojihub.stream.centos.org/koji/builds -&amp;gt; Dropdown: builds -&amp;gt; Search: kernel-5.14.0-554.el9&lt;br /&gt;
https://kojihub.stream.centos.org/kojifiles/packages/kernel/ -&amp;gt; find your way down the tree.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Start crash. Write help to give advice. LLMS are quite useful for troubleshooting advice.&lt;br /&gt;
 crash /usr/lib/debug/lib/modules/${UNAME_R}/vmlinux /tmp/&amp;lt;vm&amp;gt;.core&lt;br /&gt;
Scripting with crash&lt;br /&gt;
 cd /temp/ ;cat commands.txt ; for i in $(ls instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04*) ; do crash -i commands.txt /usr/lib/debug/lib/modules/5.14.0-554.el9.x86_64/vmlinux /temp/instance-0002da2b_osc-compute27-sto1-prod.cloud.binero.net_okd01-ppj65-master-0_2025-04-15_15-03-04.core &amp;gt; $i.log &amp;lt;/dev/null ; done&lt;br /&gt;
 ps&lt;br /&gt;
 runq&lt;br /&gt;
&lt;br /&gt;
=cronie=&lt;br /&gt;
Start cronie in foreground. Write what it is doing.&lt;br /&gt;
 /usr/sbin/crond -n -x sch&lt;br /&gt;
&lt;br /&gt;
=crontab/cron=&lt;br /&gt;
crontab.&lt;br /&gt;
 * * * * *  command to be executed&lt;br /&gt;
 - - - - -&lt;br /&gt;
 | | | | |&lt;br /&gt;
 | | | | +----- day of week (0 - 6) (Sunday=0)&lt;br /&gt;
 | | | +------- month (1 - 12)&lt;br /&gt;
 | | +--------- day of month (1 - 31)&lt;br /&gt;
 | +----------- hour (0 - 23)&lt;br /&gt;
 +------------- min (0 - 59)&lt;br /&gt;
 0 Sunday&lt;br /&gt;
 1 Monday&lt;br /&gt;
 2 Tuesday&lt;br /&gt;
 3 Wednesday&lt;br /&gt;
 4 Thursday&lt;br /&gt;
 5 Friday&lt;br /&gt;
 6 Saturday&lt;br /&gt;
 @reboot &amp;quot;run command at reboot&amp;quot;&lt;br /&gt;
 If you need % in crontab escape it. \%&lt;br /&gt;
&lt;br /&gt;
Run command every 10 minutes.&lt;br /&gt;
 */10 * * * * command&lt;br /&gt;
&lt;br /&gt;
Run command at 12:00 and 24:00 hours.&lt;br /&gt;
 00 0,12 * * *      command&lt;br /&gt;
&lt;br /&gt;
Run command between 8-17 every 2 hours.&lt;br /&gt;
 0 8-17/2 * * * /path/command&lt;br /&gt;
 0 8,10,12,14,16 * * * /path/command&lt;br /&gt;
&lt;br /&gt;
Start program under crontab.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 COMMAND=&amp;quot;screen -L -d -m ping www.dn.se&amp;quot;&lt;br /&gt;
 if [ &amp;quot;$(ps -ef | grep -i ping | grep -v grep)&amp;quot; ]&lt;br /&gt;
 then&lt;br /&gt;
   echo &amp;quot;\&amp;quot;${COMMAND}\&amp;quot; already running.&amp;quot;&lt;br /&gt;
 else&lt;br /&gt;
   echo &amp;quot;Starting \&amp;quot;${COMMAND}\&amp;quot;.&amp;quot;&lt;br /&gt;
   cd /tmp&lt;br /&gt;
   ${COMMAND}&lt;br /&gt;
 fi&lt;br /&gt;
&lt;br /&gt;
=crudini=&lt;br /&gt;
Edit ini files och cli.&lt;br /&gt;
 crudini --set /lib/systemd/system/icinga2.service Service Nice -10 ; systemctl daemon-reload ; systemctl restart icinga2.service&lt;br /&gt;
&lt;br /&gt;
=cryptsetup=&lt;br /&gt;
luks. Process to unlock disk. Mount it and unmount and encrypt.&lt;br /&gt;
 cryptsetup luksOpen /dev/nvme0n1p3 secure&lt;br /&gt;
 mount /dev/mapper/secure /mnt&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 cryptsetup luksClose secure&lt;br /&gt;
==create luks encrypted disk==&lt;br /&gt;
 # Add block device and add gpt label. Create partition.&lt;br /&gt;
 cfdisk /dev/sde&lt;br /&gt;
 # Encypt partition&lt;br /&gt;
 sudo cryptsetup luksFormat /dev/vdb1&lt;br /&gt;
 # open encrypted disk&lt;br /&gt;
 sudo cryptsetup open /dev/vdb1 encrypted-disk&lt;br /&gt;
 # Format disk&lt;br /&gt;
 sudo mkfs.ext4 /dev/mapper/encrypted-disk&lt;br /&gt;
 # Info about partition&lt;br /&gt;
 sudo blkid /dev/vdb1 &lt;br /&gt;
 /dev/vdb1: UUID=&amp;quot;cb2e7238-8245-41cb-9811-6804f602e5e8&amp;quot; TYPE=&amp;quot;crypto_LUKS&amp;quot; PARTUUID=&amp;quot;56b829b6-8295-4963-9562-29e8937819a8&amp;quot;&lt;br /&gt;
 # Setup crypttab if you want to decrypt at boot splash&lt;br /&gt;
 echo &#039;encrypted-disk UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 none luks&#039; | sudo tee -a /etc/crypttab&lt;br /&gt;
 # Manually unlock luks partition&lt;br /&gt;
 sudo cryptsetup luksOpen UUID=cb2e7238-8245-41cb-9811-6804f602e5e8 encrypted-disk&lt;br /&gt;
 # Manuall lock luks partition&lt;br /&gt;
 sudo cryptsetup luksClose encrypted-disk&lt;br /&gt;
 # Add disk to fstab&lt;br /&gt;
 echo &#039;/dev/mapper/encrypted-disk /mnt/encrypted-disk ext4 noauto 0 2&#039; | sudo tee -a /etc/fstab&lt;br /&gt;
 # Create mount point&lt;br /&gt;
 sudo mkdir /mnt/encrypted-disk ; sudo chmod 777 /mnt/encrypted-disk&lt;br /&gt;
 # mount disk&lt;br /&gt;
 sudo umount /mnt/encrypted-disk&lt;br /&gt;
 # Change password of luks partition&lt;br /&gt;
 sudo cryptsetup luksAddKey UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup --test-passphrase -v open UUID=cb2e7238-8245-41cb-9811-6804f602e5e8&lt;br /&gt;
 sudo cryptsetup luksRemoveKey UUID=cb2e7238-8245-4&lt;br /&gt;
&lt;br /&gt;
=cups=&lt;br /&gt;
Install cups&lt;br /&gt;
 dnf install cups&lt;br /&gt;
enable cups&lt;br /&gt;
 systemctl enable cups.service --now&lt;br /&gt;
Configure printer in cups.&lt;br /&gt;
 http://localhost:631/&lt;br /&gt;
&lt;br /&gt;
=cut=&lt;br /&gt;
Cuf everything from field 5.&lt;br /&gt;
 cut -f5- -d &#039; &#039;&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
==Get http return code.==&lt;br /&gt;
 curl --connect-timeout 3 --max-time 9 -ksL -w &#039;%{http_code}\n&#039; &#039;http://www.dn.se&#039; -o /dev/null&lt;br /&gt;
==get external ip. what is my ip==&lt;br /&gt;
 curl ifconfig.me &lt;br /&gt;
==get external ip and all related browser information.==&lt;br /&gt;
 curl ifconfig.me/all &lt;br /&gt;
==Alternative address for domain.==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -sk --resolve www.halfface.se:80:127.0.0.1 http://www.halfface.se&lt;br /&gt;
 curl http://127.0.0.1/ -H &amp;quot;Host: halfface.se&amp;quot; -H &amp;quot;X-Forwarded-Proto: https&amp;quot; -I&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get header / mime type==&lt;br /&gt;
 curl -I http://url.se&lt;br /&gt;
==post file==&lt;br /&gt;
 curl -X POST -d @myfilename http://user:pass@myhost/hudson/job/_jobName_/postBuildResult&lt;br /&gt;
==post file via ftp using proxy==&lt;br /&gt;
 curl -p --proxy http://proxy.example.se:3128 -v -T backup.tar ftp://user:password@ftp.example.se/directory/&lt;br /&gt;
&lt;br /&gt;
==cookie format. tab delimited.==&lt;br /&gt;
 domain     - The domain that created AND that can read the variable. .halfface.se&lt;br /&gt;
 flag       - A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for domain.&lt;br /&gt;
 path       - The path within the domain that the variable is valid for.&lt;br /&gt;
 secure     - A TRUE/FALSE value indicating if a secure connection with the domain is needed to access the variable.&lt;br /&gt;
 expiration - The UNIX time that the variable will expire on. UNIX time is defined as the number of seconds since Jan 1, 1970 0:00:00 GMT.&lt;br /&gt;
 name       - The name of the variable.&lt;br /&gt;
 value      - The value of the variable.&lt;br /&gt;
&lt;br /&gt;
==add certificate authority to openssl==&lt;br /&gt;
Redhat based os:es this file gets updated. /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt&lt;br /&gt;
 cp /tmp/ca.crt /etc/pki/ca-trust/source/anchors/&lt;br /&gt;
 update-ca-trust&lt;br /&gt;
Debian based&lt;br /&gt;
 cp /tmp/ca.crt /usr/share/ca-certificates/extra&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
Debian 2 &lt;br /&gt;
 cp foo.crt /usr/local/share/ca-certificates/foo.crt&lt;br /&gt;
 update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
==curl ipv6==&lt;br /&gt;
 curl -6 -g &amp;quot;http://[::1]:80/&amp;quot;&lt;br /&gt;
 curl -g &amp;quot;http://[2001:9b1:402d:0:ffff:f038:ec3e:b5d4]/&amp;quot;&lt;br /&gt;
==proxy==&lt;br /&gt;
 curl  --proxy http://proxy.se:3128 -sk &amp;quot;http://mirrorlist.centos.org&amp;quot;&lt;br /&gt;
===no_proxy===&lt;br /&gt;
 export https_proxy=http://proxy.se:3128 ; export http_proxy=$https_proxy ; export HTTPS_PROXY=$https_proxy ; export HTTP_PROXY=$https_proxy ; export no_proxy=localhost,127.0.0.1,.inter.net,$(echo 10.217.{4..5}.{1..254}, 10.217.5.255) ; export NO_PROXY=$no_proxy&lt;br /&gt;
===time spent===&lt;br /&gt;
 -w &amp;quot;time_namelookup: %{time_namelookup}, time_connect: %{time_connect}, time_appconnect: %{time_appconnect}, time_pretransfer: %{time_pretransfer}, time_redirect: %{time_redirect}, time_starttransfer: %{time_starttransfer}, time_total: %{time_total}\n&amp;quot;&lt;br /&gt;
=Is it a free day?=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
curl -sk https://sholiday.faboul.se/dagar/v2.1/2023 | jq -r &#039;.dagar[] |select(.&amp;quot;arbetsfri dag&amp;quot;==&amp;quot;Ja&amp;quot;)|.datum&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=qr code=&lt;br /&gt;
encode&lt;br /&gt;
 qrencode &amp;quot;Andreas&amp;quot; -o /tmp/qr_Andreas.png&lt;br /&gt;
decode&lt;br /&gt;
 zbarimg /tmp/qr_Andreas.png&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
Get date in requested format.&lt;br /&gt;
 date &#039;+%Y-%m-%d %H:%M&#039;&lt;br /&gt;
 date +%Y-%m-%d-%H%M&lt;br /&gt;
 date &amp;quot;+%F_%T&amp;quot; # 2017-01-16_19:41:41&lt;br /&gt;
&lt;br /&gt;
date 033121422003.55&lt;br /&gt;
 Mon Mar 31 21:42:55 PST 2003&lt;br /&gt;
 date MMDDhhmmCCYY.ss&lt;br /&gt;
&lt;br /&gt;
Whats the date in 1000 years. Or any other increment.&lt;br /&gt;
 date --date=&amp;quot;+1000 years&amp;quot; +%C%y-%m-%d&lt;br /&gt;
 date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
 TZ=CEST date --date=&amp;quot;-2 hour&amp;quot; +%C%y-%m-%d\ %H:%M&lt;br /&gt;
&lt;br /&gt;
What is the time in other timezone given in unixtime/epoch.&lt;br /&gt;
 TZ=GMT date -d &#039;@1345064585&#039;&lt;br /&gt;
 Wed Aug 15 21:03:05 GMT 2012&lt;br /&gt;
&lt;br /&gt;
Unix time.&lt;br /&gt;
 date +%s&lt;br /&gt;
Unix to normal&lt;br /&gt;
 date -d @1234567890&lt;br /&gt;
&lt;br /&gt;
scew clock by a second.&lt;br /&gt;
 DATE_OFF=$(date --date=&amp;quot;-5 second&amp;quot; +%C%y-%m-%d\ %H:%M:%S\ %Z) ; date --set=&amp;quot;${DATE_OFF}&amp;quot;&lt;br /&gt;
Set clock&lt;br /&gt;
 date &#039;+%Y-%m-%d %T %Z&#039; -s &amp;quot;2008-11-28 08:08:08 UTC&amp;quot;&lt;br /&gt;
=datefudge=&lt;br /&gt;
Fake date for command.&lt;br /&gt;
 datefudge &amp;quot;2020-04-01 10:23&amp;quot; date&lt;br /&gt;
&lt;br /&gt;
=dateseq=&lt;br /&gt;
Create date sequense.&lt;br /&gt;
 dateseq 2017-04-01 2017-04-05&lt;br /&gt;
&lt;br /&gt;
=db2=&lt;br /&gt;
Empty catalog remove node&lt;br /&gt;
 for DB2 in $(db2 list node directory | grep &amp;quot;Node name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog node $DB2;done&lt;br /&gt;
Empty catalog remove db&lt;br /&gt;
 for DB2 in $(db2 list db directory | grep &amp;quot;Database name&amp;quot; | awk &#039;{print $4}&#039;) ; do db2 uncatalog db $DB2;done&lt;br /&gt;
# Load db2 environment.&lt;br /&gt;
 . /home/db2/sqllib/db2profile&lt;br /&gt;
&lt;br /&gt;
# Connect to database.&lt;br /&gt;
 db2 connect to ${database_name} user ${user} using ${password}&lt;br /&gt;
&lt;br /&gt;
# Test query.&lt;br /&gt;
 SELECT service_level, fixpack_num, bld_level FROM TABLE (sysproc.env_get_inst_info()) as A;&lt;br /&gt;
&lt;br /&gt;
# System Database Directory&lt;br /&gt;
 db2 list db directory&lt;br /&gt;
&lt;br /&gt;
# Node Directory&lt;br /&gt;
 db2 list node directory&lt;br /&gt;
&lt;br /&gt;
# setup directory&lt;br /&gt;
 db2 &amp;quot;catalog tcpip node db2datan remote 1.2.3.4 server 5000&amp;quot;&lt;br /&gt;
 db2 &amp;quot;catalog db db2datadb as db2datadb at node db2datan&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Drop connection.&lt;br /&gt;
 db2 terminate&lt;br /&gt;
&lt;br /&gt;
=dbus-monitor=&lt;br /&gt;
 dbus-monitor   # Monitor activity on the dbus to see what system and sessions are doing.&lt;br /&gt;
&lt;br /&gt;
=dd=&lt;br /&gt;
output your microphone to a remote computer&#039;s speaker&lt;br /&gt;
 dd if=/dev/dsp | ssh -c arcfour -C username@host dd of=/dev/dsp&lt;br /&gt;
Add 2GB to disk image.&lt;br /&gt;
 dd if=/dev/zero of=/system_image.img bs=1M oflag=append conv=notrunc count=2000&lt;br /&gt;
dd with progress bar.&lt;br /&gt;
 dd if=kali.iso of=/dev/sdc status=progress&lt;br /&gt;
 pv -ptre /install/backup/machine/raspberry/ipcenter_view.img | sudo dd of=/dev/mmcblk0 bs=1M&lt;br /&gt;
dd to position on disk&lt;br /&gt;
 dd of=/dev/disk1 if=/dev/urandom obs=500000 seek=1 bs=1MB count=1 conv=notrunc&lt;br /&gt;
==consume 100GB ram==&lt;br /&gt;
 mount -o remount,size=300G /dev/shm&lt;br /&gt;
 dd if=/dev/zero of=/dev/shm/$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) bs=1073741824 count=100 status=progress&lt;br /&gt;
&lt;br /&gt;
=debugfs=&lt;br /&gt;
 ctime:  Shows file change time.&lt;br /&gt;
 atime:  Shows file access time.&lt;br /&gt;
 mtime:  Shows file modification time.&lt;br /&gt;
 crtime: Shows file creation time. Birth.&lt;br /&gt;
Example&lt;br /&gt;
 debugfs -R &#039;stat /etc/exports.bkp-2021-11-17_10-07-46&#039; /dev/mapper/vg_rbnetstorage0-lv_root&lt;br /&gt;
 debugfs 1.41.12 (17-May-2010)&lt;br /&gt;
 Inode: 924905   Type: regular    Mode:  0644   Flags: 0x80000&lt;br /&gt;
 Generation: 2068409071    Version: 0x00000000:00000001&lt;br /&gt;
 User:     0   Group:     0   Size: 4775&lt;br /&gt;
 File ACL: 0    Directory ACL: 0&lt;br /&gt;
 Links: 1   Blockcount: 16&lt;br /&gt;
 Fragment:  Address: 0    Number: 0    Size: 0&lt;br /&gt;
  ctime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
  atime: 0x6193bd7f:c4faf658 -- Tue Nov 16 15:17:35 2021&lt;br /&gt;
  mtime: 0x61925419:34c06f18 -- Mon Nov 15 13:35:37 2021&lt;br /&gt;
 crtime: 0x6194c662:deae4368 -- Wed Nov 17 10:07:46 2021&lt;br /&gt;
 Size of extra inode fields: 28&lt;br /&gt;
 Extended attributes stored in inode body: &lt;br /&gt;
   selinux = &amp;quot;unconfined_u:object_r:etc_t:s0\000&amp;quot; (31)&lt;br /&gt;
 EXTENTS:&lt;br /&gt;
 (0-1): 3718194-3718195&lt;br /&gt;
=ddclient=&lt;br /&gt;
Debug&lt;br /&gt;
 ddclient -daemon=0 -debug -verbose -noquiet&lt;br /&gt;
&lt;br /&gt;
=df=&lt;br /&gt;
df output one per line. Without header.&lt;br /&gt;
 df -Plk / /apps | tail -n+2&lt;br /&gt;
&lt;br /&gt;
=dhclient=&lt;br /&gt;
[root@wall sysconfig]# cat /etc/dhclient.conf&lt;br /&gt;
 interface &amp;quot;eth0&amp;quot; {&lt;br /&gt;
          prepend domain-name-servers 127.0.0.1;&lt;br /&gt;
          supersede domain-name &amp;quot;bltprojektering.se&amp;quot;;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=dialog=&lt;br /&gt;
Create dialog in terminal. Example a progressbar.&lt;br /&gt;
 for i in {0..100} ; do echo $i | dialog --gauge &amp;quot;Please wait&amp;quot; 7 70 1 ; sleep .1 ; done&lt;br /&gt;
=diff=&lt;br /&gt;
 sdiff &amp;lt;(echo -e &#039;hej\nda\nvi\nses\ni\nmorgon&#039;) &amp;lt;(echo -e &#039;hej\ndå\nvi\nSES\ni\nmorgon&#039;)&lt;br /&gt;
Only show files that differ.&lt;br /&gt;
 -q  --brief&lt;br /&gt;
Only show change between files.&lt;br /&gt;
 diff -u file1.txt file2.txt | grep -vE &#039;^(---|\+\+\+|@@|\+|-)&#039;&lt;br /&gt;
&lt;br /&gt;
=dig=&lt;br /&gt;
==Get all dns information about host.==&lt;br /&gt;
 dig any www.halfface.se&lt;br /&gt;
==Trace dns lookups from root dns. Use 8.8.8.8 for lookups.==&lt;br /&gt;
 dig +trace @8.8.8.8 www.halfface.se&lt;br /&gt;
==Recursive lookup.==&lt;br /&gt;
 dig -tAXFR halfface.se&lt;br /&gt;
==backward resolve==&lt;br /&gt;
 dig -x 89.253.75.84&lt;br /&gt;
==get ttl==&lt;br /&gt;
 dig +nocmd +multiline +noall +answer any halfface.se&lt;br /&gt;
==Get external ip.==&lt;br /&gt;
 dig +short myip.opendns.com @resolver1.opendns.com&lt;br /&gt;
==Get txt record.==&lt;br /&gt;
 dig google.com txt&lt;br /&gt;
==You can find the authoritative servers by asking for the NS records for a domain==&lt;br /&gt;
 dig example.com NS&lt;br /&gt;
==dig using alternative port==&lt;br /&gt;
 dig +short -p 5353 halfface.se @10.130.0.35&lt;br /&gt;
&lt;br /&gt;
=digitemp=&lt;br /&gt;
 digitemp_DS9097 -c /etc/.digitemprc -t0&lt;br /&gt;
&lt;br /&gt;
=disk=&lt;br /&gt;
disk usage&lt;br /&gt;
 baobab&lt;br /&gt;
foremost&lt;br /&gt;
 recover deleted files.&lt;br /&gt;
=disown=&lt;br /&gt;
Disconnect process(pid) so that is survives a logout.&lt;br /&gt;
 disown %2&lt;br /&gt;
&lt;br /&gt;
=display=&lt;br /&gt;
Change resolution&lt;br /&gt;
 xrandr --output LVDS --mode 1280x800&lt;br /&gt;
 xrandr --output default --mode 1280x1024&lt;br /&gt;
Query graphics card capabilities.&lt;br /&gt;
 xrandr -q&lt;br /&gt;
Change dpi&lt;br /&gt;
 xrandr --dpi 138/eDP1&lt;br /&gt;
=du=&lt;br /&gt;
 du -amx / | sort -n | tail -5&lt;br /&gt;
=duplicity=&lt;br /&gt;
Encrypted backups over rsync&lt;br /&gt;
&lt;br /&gt;
=dmesg=&lt;br /&gt;
dmesg with iso time format&lt;br /&gt;
 dmesg --ctime --time-format iso&lt;br /&gt;
Write to dmesg&lt;br /&gt;
 echo &amp;quot;$USER $(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;)&amp;quot; | sudo tee /dev/kmsg&lt;br /&gt;
&lt;br /&gt;
=dmidecode=&lt;br /&gt;
List memory banks&lt;br /&gt;
 sudo dmidecode -t 17&lt;br /&gt;
&lt;br /&gt;
=dnf=&lt;br /&gt;
install skip if not exist&lt;br /&gt;
 sudo dnf install --setopt=strict=0 $(sort -u /temp/other_machine_rpm)&lt;br /&gt;
==update system==&lt;br /&gt;
 dnf -y upgrade --refresh&lt;br /&gt;
 reboot&lt;br /&gt;
 dnf -y install dnf-plugin-system-upgrade&lt;br /&gt;
 dnf -y system-upgrade download --refresh --allowerasing --releasever=43&lt;br /&gt;
 # Before 42:&lt;br /&gt;
 dnf -y system-upgrade reboot&lt;br /&gt;
 # From 42 and onward&lt;br /&gt;
 dnf5 offline reboot&lt;br /&gt;
 # broken deps.&lt;br /&gt;
 dnf repoquery --unsatisfied&lt;br /&gt;
 # look for duplicates&lt;br /&gt;
 dnf repoquery --duplicated&lt;br /&gt;
 # which rpms do not exit in repo.&lt;br /&gt;
 dnf list extras&lt;br /&gt;
 # remove no longer used.&lt;br /&gt;
 dnf autoremove&lt;br /&gt;
 dnf remove $(rpm -qa| grep \.fc23)&lt;br /&gt;
 # reinstall rpm&lt;br /&gt;
 dnf reinstall sssd-common&lt;br /&gt;
&lt;br /&gt;
==auto update==&lt;br /&gt;
 # Install auto updates.&lt;br /&gt;
 dnf install dnf-automatic&lt;br /&gt;
 # Enable auto update.&lt;br /&gt;
 sed -i &amp;quot;s/apply_updates = no/apply_updates = yes/g;s/email_from = root@example.com/email_from = root@${HOSTNAME}/g;s/email_to = root/email_to = anden@halfface.se/g&amp;quot; /etc/dnf/automatic.conf&lt;br /&gt;
 # Enable timer.&lt;br /&gt;
 systemctl enable dnf-automatic.timer &amp;amp;&amp;amp; systemctl start dnf-automatic.timer&lt;br /&gt;
 # Trigger timer.&lt;br /&gt;
 systemctl start  dnf-automatic.timer&lt;br /&gt;
 # Check status of dnf-automatic:&lt;br /&gt;
 systemctl list-timers *dnf-*&lt;br /&gt;
==build environment==&lt;br /&gt;
 dnf group install &amp;quot;C Development Tools and Libraries&amp;quot;&lt;br /&gt;
==update to specific version==&lt;br /&gt;
View available version.&lt;br /&gt;
 dnf --showduplicates list  gitlab-ee&lt;br /&gt;
Update to specific version&lt;br /&gt;
 dnf install gitlab-ee-13.12.15-ee.0.el8&lt;br /&gt;
&lt;br /&gt;
=Setup dnsmasq on ubuntu=&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
# Install dnsmasq&lt;br /&gt;
apt install dnsmasq&lt;br /&gt;
systemctl enable dnsmasq --now&lt;br /&gt;
# Disable systemd-resolved.&lt;br /&gt;
sudo systemctl disable --now systemd-resolved&lt;br /&gt;
# Make NetworkManager ignore dns.&lt;br /&gt;
sudo tee /etc/NetworkManager/conf.d/no-dns.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
[main]&lt;br /&gt;
dns=none&lt;br /&gt;
EOF&lt;br /&gt;
systemctl restart NetworkManager&lt;br /&gt;
# Fix /etc/resolv.conf&lt;br /&gt;
sudo \rm /etc/resolv.conf&lt;br /&gt;
sudo tee /etc/resolv.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
nameserver 127.0.0.1&lt;br /&gt;
search int.redbridge.se halfface.se cloud.binero.net&lt;br /&gt;
options timeout:1 attempts:1&lt;br /&gt;
EOF&lt;br /&gt;
# Create config&lt;br /&gt;
sudo tee /etc/dnsmasq.d/custom.conf &amp;lt;&amp;lt;&#039;EOF&#039; &lt;br /&gt;
listen-address=127.0.0.1&lt;br /&gt;
bind-interfaces&lt;br /&gt;
server=/redbridge.se/185.53.164.25&lt;br /&gt;
#server=/halfface.se/10.111.222.2&lt;br /&gt;
server=8.8.8.8&lt;br /&gt;
EOF&lt;br /&gt;
# Restart dnsmasq&lt;br /&gt;
systemctl restart dnsmasq&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dovecot=&lt;br /&gt;
 # List files with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm mailbox list&lt;br /&gt;
 # Remove mails with doveadm&lt;br /&gt;
 MAIL=mbox:/var/vmail/fordonskontroll.app doveadm expunge -u n&lt;br /&gt;
&lt;br /&gt;
=dracut=&lt;br /&gt;
Dracut is a tool used to create an initial RAM filesystem (initramfs) for Linux systems.&lt;br /&gt;
&lt;br /&gt;
=dvgrab=&lt;br /&gt;
Capture dv material&lt;br /&gt;
 dvgrab -f dv2 -i -showstatus -s 0 -timestamp California-2&lt;br /&gt;
&lt;br /&gt;
=e2fsck=&lt;br /&gt;
Scan for bad blocks.&lt;br /&gt;
 e2fsck -ycv /dev/VolGroup00/LogVol00&lt;br /&gt;
&lt;br /&gt;
=edid/ddc=&lt;br /&gt;
 startx -- -logverbose 5.&lt;br /&gt;
 The EDID information turns up in /var/log/Xorg.0.log.&lt;br /&gt;
=enca=&lt;br /&gt;
detect and convert encoding of text files. (codepage utf)&lt;br /&gt;
 enca -L none /temp/locale2&lt;br /&gt;
=esmtp=&lt;br /&gt;
 # Install dependency&lt;br /&gt;
 dnf install procmail&lt;br /&gt;
 # Put the following config in either /etc/esmtprc or more specific ~/.esmtprc. chmod 644.&lt;br /&gt;
 SMTP_SERVER=halfface.se&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; ~/.esmtprc&lt;br /&gt;
 hostname = $SMTP_SERVER:25&lt;br /&gt;
 # Set the Mail Delivery Agent (MDA)&lt;br /&gt;
 mda = &amp;quot;/usr/bin/procmail -d %T&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 chmod 0710 ~/.esmtprc&lt;br /&gt;
&lt;br /&gt;
=etckeeper=&lt;br /&gt;
 Keep your /etc/ directory under git revision control.&lt;br /&gt;
What has happened.&lt;br /&gt;
 git log -p /etc/resolv.conf&lt;br /&gt;
Wipe /etc/.git&lt;br /&gt;
 etckeeper uninit &lt;br /&gt;
 etckeeper init&lt;br /&gt;
&lt;br /&gt;
=ethtool=&lt;br /&gt;
show-features&lt;br /&gt;
 ethtool -k &amp;lt;device&amp;gt;&lt;br /&gt;
 generic-segmentation-offload = gso&lt;br /&gt;
 tcp-segmentation-offload     = tso&lt;br /&gt;
 ...&lt;br /&gt;
Enable wake on lan magic package.&lt;br /&gt;
 ethtool --change &amp;lt;interface&amp;gt; wol g&lt;br /&gt;
Permanently add wol&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039; | while read i ; do INTERFACE_INFO=$(ip address show $i) ; MAC=$(grep link/ether  &amp;lt;&amp;lt;&amp;lt; &amp;quot;${INTERFACE_INFO}&amp;quot; | awk &#039;{print $2}&#039;) ; echo &amp;quot;# /etc/systemd/network/50-wired.link&lt;br /&gt;
 [Match]&lt;br /&gt;
 MACAddress=$MAC&lt;br /&gt;
 &lt;br /&gt;
 [Link]&lt;br /&gt;
 NamePolicy=kernel database onboard slot path&lt;br /&gt;
 MACAddressPolicy=persistent&lt;br /&gt;
 WakeOnLan=magic&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=exiftool=&lt;br /&gt;
Change meta data for files, exif, jpg, mp3...&lt;br /&gt;
Get info from file.&lt;br /&gt;
 exiftool $file.mp4&lt;br /&gt;
gps format&lt;br /&gt;
 41°24&#039;12.2&amp;quot;N 2°10&#039;26.5&amp;quot;E&lt;br /&gt;
gps format known to maps.google.com&lt;br /&gt;
 exiftool -c &amp;quot;%.6f&amp;quot; 2022-03-06_10-39-40.mp4 | grep -i gps&lt;br /&gt;
&lt;br /&gt;
=exportfs=&lt;br /&gt;
Install server&lt;br /&gt;
 dnf install nfs-utils&lt;br /&gt;
Start nfs server&lt;br /&gt;
 systemctl enable nfs-server --now&lt;br /&gt;
Reexport everything.&lt;br /&gt;
 exportfs -avr&lt;br /&gt;
Example export.&lt;br /&gt;
 *(rw,no_root_squash,async,insecure)&lt;br /&gt;
 rw              rewritable&lt;br /&gt;
 no_root_squash  Allow root on remote machine same permissions as local root&lt;br /&gt;
 async&lt;br /&gt;
 insecure        NFS version 2 and 3 servers only provide (insecure) host-based authentication: Hosts are allowed/denied based on hostnames and/or IP addresses. Authorization of users is controlled on the clients using the permissions of the files based on user/group IDs. allows clients with NFS implementations that don&#039;t use a reserved port for NFS&lt;br /&gt;
&lt;br /&gt;
=fdupes=&lt;br /&gt;
Find duplicate files.&lt;br /&gt;
 fdupes -r /home&lt;br /&gt;
=feh=&lt;br /&gt;
Image viewer&lt;br /&gt;
&lt;br /&gt;
=ffmpeg=&lt;br /&gt;
ffmpeg&lt;br /&gt;
 ffmpeg -y -deinterlace -aspect 16:9 -author &amp;quot;Andreas Bjorklund&amp;quot; -title &amp;quot;Tanzania&amp;quot; -year 2007 -i Tanzania.m2t -acodec mp3 -vcodec mpeg4 -b 3000k -s 720x540 test.avi&lt;br /&gt;
Create swf/flv from mpeg2 stream&lt;br /&gt;
 ffmpeg -deinterlace -i VTS_01_1.VOB -ab 56 -ar 22050 -b 500000 -r 15 -s 360x288  sisyfos.swf&lt;br /&gt;
Create horse movie.&lt;br /&gt;
 ffmpeg -deinterlace -i /temp/VTS_01_1.VOB -ab 100 -ar 22050 -b 1200000 -r 25 -s 360x288 3horses.swf&lt;br /&gt;
Cut video from command prompt.&lt;br /&gt;
 ffmpeg -i video.avi -vcodec copy -acodec copy -ss 00:00:00 -t 00:00:04 trimmed_video.avi&lt;br /&gt;
Record desktop.&lt;br /&gt;
 ffmpeg -f alsa -ac 2 -i pulse -f x11grab -r 5 -s 1920x1080 -i :0.0 -acodec pcm_s16le -vcodec libx264 -threads 0 -y output.mkv&lt;br /&gt;
 ffmpeg -f x11grab -s $(xrandr | grep \*+|awk &#039;{print $1}&#039;) -r 25 -i :0.0 -sameq /tmp/out.mpg&lt;br /&gt;
Change container.&lt;br /&gt;
  ffmpeg -i film.mov -vcodec copy -acodec copy film.mp4&lt;br /&gt;
Transcode to h264 aac&lt;br /&gt;
 ffmpeg -i original.avi -vcodec libx264 -acodec aac -strict experimental new_file.mp4&lt;br /&gt;
Transcode mp3 to ogg vorbis&lt;br /&gt;
 for file in *.mp3;   do ffmpeg -i &amp;quot;${file}&amp;quot; -acodec libvorbis &amp;quot;${file/%mp3/ogg}&amp;quot;;done&lt;br /&gt;
Take one photo from video stream.&lt;br /&gt;
 ffmpeg -ss 00:00:01 -i &amp;lt;video input&amp;gt; -frames:v 1 -q:v 2 &amp;lt;photo created&amp;gt;&lt;br /&gt;
Take photo&lt;br /&gt;
 ffmpeg -f video4linux2 -s 1280x720 -i /dev/video0 -f image2 snapshot.jpg&lt;br /&gt;
 ls /dev/video* | while read i ; do echo $i ; ffmpeg -f video4linux2 -i $i -vframes 1 -q:v 2 /tmp/${i//\//%}.$(date +%F_%H-%M-%S).jpg ; done ; ls -la /tmp/%*&lt;br /&gt;
Take a photo from a video steam every 10 seconds.&lt;br /&gt;
 ffmpeg -i video.mp4 -r 0.1 -f image2 %03dandreas.jpg&lt;br /&gt;
Take a photo every 1 put it in a file.&lt;br /&gt;
 ffmpeg -y -i http://balcony.halfface.se:8080 -r 1 -f image2 -update 1 stream_image.jpg -probesize 5e+07&lt;br /&gt;
Rotate 180 degrees.&lt;br /&gt;
 ffmpeg -i input.mp4 -filter:v &amp;quot;transpose=1,transpose=1&amp;quot; output.mp4&lt;br /&gt;
Change rotation without transcoding.&lt;br /&gt;
 ffmpeg -i IMG_0703.MOV -metadata:s:v rotate=&amp;quot;&amp;quot; -codec copy rotate_IMG_0703.MOV&lt;br /&gt;
Concaternate videos.&lt;br /&gt;
 ffmpeg -f concat -safe 0 -i mylist.txt -c copy output&lt;br /&gt;
&lt;br /&gt;
=find=&lt;br /&gt;
==Find exluding directory==&lt;br /&gt;
 find . -wholename &#039;/var/&#039; -prune -o -ls&lt;br /&gt;
==Find text file in directoy execpt directory. Grep for text in that file and show it with colours in less==&lt;br /&gt;
 find /opt/ongame/ -wholename &#039;/opt/ongame/napsjb/server/naps/tmp&#039; -prune -o -type f -exec grep --color=always -r &#039;/fraud&#039; /dev/null {} \; | less -SR&lt;br /&gt;
==Find excluding several directories==&lt;br /&gt;
 find / -type d \( -path /proc -o -path /dev -o -path /net \) -prune -o -gid 1002 -exec chgrp -h 1001 {} \;&lt;br /&gt;
==Find excluding svn==&lt;br /&gt;
 find . -path &#039;*/.svn&#039; -prune -o -type f -print&lt;br /&gt;
==Searches for files modified up to 4 days ago==&lt;br /&gt;
 find ./ -type f -mtime -4&lt;br /&gt;
==Searches for files modified between certain dates. Here for files older than 30 days but younger than 60 (penultimate month)==&lt;br /&gt;
 find ./ -type f -mtime -60 ! -mtime -30&lt;br /&gt;
 sudo find . -newermt &amp;quot;2014-10-19 09:30&amp;quot; ! -newermt &amp;quot;2014-10-19 09:35&amp;quot;&lt;br /&gt;
==Find which dir is consuming inodes==&lt;br /&gt;
 find /var -xdev -printf &#039;%h\n&#039; | sort | uniq -c | sort -k 1 -n&lt;br /&gt;
 for i in $(ls) ; do echo $(find $i | wc -l) $i ; done | sort -n&lt;br /&gt;
==How much data is consumed by pattern==&lt;br /&gt;
 export NFS_DIR=/netstorage/cam/ocp-01 ; find ${NFS_DIR} -maxdepth 1 | grep ^${NFS_DIR}/archived- | while read NFS_DIR_REMOVE ; do du -sk &amp;quot;${NFS_DIR_REMOVE}&amp;quot; ; done | awk &#039;{ SUM +=  $1} END { print SUM &amp;quot;KiB&amp;quot; }&#039; | numfmt --from=auto --to=iec-i --suffix=B&lt;br /&gt;
==find search small files==&lt;br /&gt;
 find . -type f -size -1M -exec grep -H &#039;your_search_pattern&#039; {} +&lt;br /&gt;
=find physical network interfaces=&lt;br /&gt;
 find /sys/class/net -type l -not -lname &#039;*virtual*&#039; -printf &#039;%f\n&#039;&lt;br /&gt;
&lt;br /&gt;
=findmnt=&lt;br /&gt;
view the mount tree&lt;br /&gt;
 findmnt&lt;br /&gt;
&lt;br /&gt;
=flash=&lt;br /&gt;
When firefox is complaining about outdated flash plugin&lt;br /&gt;
 rm pluginreg.dat&lt;br /&gt;
=flatpak=&lt;br /&gt;
=Install flatpak=&lt;br /&gt;
 sudo apt install -y flatpak gnome-software-plugin-flatpak&lt;br /&gt;
 sudo flatpak remote-add --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo&lt;br /&gt;
=Install flatpak application and replace system binary=&lt;br /&gt;
 sudo flatpak install -y flathub com.freerdp.FreeRDP&lt;br /&gt;
 cat &amp;lt;&amp;lt;&#039;EOF&#039; | sudo tee /usr/local/bin/xfreerdp&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 flatpak run com.freerdp.FreeRDP &amp;quot;$@&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 sudo chmod 755 /usr/local/bin/xfreerdp&lt;br /&gt;
 hash -r&lt;br /&gt;
=Run other binary from flatpack=&lt;br /&gt;
 flatpak run --command=xfreerdp com.freerdp.FreeRDP&lt;br /&gt;
&lt;br /&gt;
=List installed applications.=&lt;br /&gt;
 flatpak list --app&lt;br /&gt;
&lt;br /&gt;
=flock=&lt;br /&gt;
used to use cript that only used 1 time concurrently.&lt;br /&gt;
 flock&lt;br /&gt;
&lt;br /&gt;
=fmt=&lt;br /&gt;
Join lines&lt;br /&gt;
 ifconfig -a | fmt -w 300&lt;br /&gt;
&lt;br /&gt;
=fold=&lt;br /&gt;
Fold long lines. Break at 80 and blank spaces.&lt;br /&gt;
 fold -w 80 -s text.txt&lt;br /&gt;
=forward traffic=&lt;br /&gt;
 service x11&lt;br /&gt;
 {&lt;br /&gt;
         disable = no&lt;br /&gt;
         socket_type = stream&lt;br /&gt;
         protocol = tcp&lt;br /&gt;
         wait = no&lt;br /&gt;
         user = root&lt;br /&gt;
         server = /usr/bin/nc&lt;br /&gt;
         server_args = 172.28.37.152 6000&lt;br /&gt;
 }&lt;br /&gt;
=fping=&lt;br /&gt;
 fping --timeout=10 --elapsed --netdata &amp;lt;fqdn&amp;gt;&lt;br /&gt;
Example of testing connectivity.&lt;br /&gt;
 for i in $(grep -E &#039;ocp-[0-9]{2}-&#039; /etc/hosts | awk &#039;{print $2}&#039;) ; do echo -e &amp;quot;$(fping --timeout=10 --elapsed $i)\t$(nc -v -w1 $i 22 &amp;lt;/dev/null 2&amp;gt;&amp;amp;1 | strings | xargs)&amp;quot; ; done | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=free=&lt;br /&gt;
You have 15956MB physical ram. 9033MB is used by applications. 6922MB is free.&lt;br /&gt;
 free -m&lt;br /&gt;
              total       used       free     shared    buffers     cached&lt;br /&gt;
 Mem:         15956      15755        200          0        300       6421&lt;br /&gt;
 -/+ buffers/cache:       9033       6922&lt;br /&gt;
 Swap:        19998       2405      17593&lt;br /&gt;
&lt;br /&gt;
=free new=&lt;br /&gt;
Total memory 8076624k and 5169152 free.&lt;br /&gt;
              total        used        free      shared  buff/cache   available&lt;br /&gt;
 Mem:        8076624     2536328     1069132      284152     4471164     5169152&lt;br /&gt;
 Swap:       7815164     2809244     5005920&lt;br /&gt;
&lt;br /&gt;
Free memory usage from /proc/zoneinfo and /proc/meminfo&lt;br /&gt;
 awk -v low=$(grep low /proc/zoneinfo | awk &#039;{k+=$2}END{print k}&#039;)  &#039;{a[$1]=$2} END{print a[&amp;quot;MemFree:&amp;quot;]+a[&amp;quot;Active(file):&amp;quot;]+a[&amp;quot;Inactive(file):&amp;quot;]+a[&amp;quot;SReclaimable:&amp;quot;]-(12*low);}&#039; /proc/meminfo&lt;br /&gt;
 5168456&lt;br /&gt;
==physical memory==&lt;br /&gt;
Show physical memory in machine. Consider points below.&lt;br /&gt;
 grep MemTotal /proc/meminfo&lt;br /&gt;
meminfo:&lt;br /&gt;
 Provides information about distribution and utilisation of memory. This varies by architecture and compile options...&lt;br /&gt;
MemTotal: &lt;br /&gt;
 Total usable ram (i.e. physical ram minus a few reserved bits and the kernel binary code)&lt;br /&gt;
Gives more information not really sure how.&lt;br /&gt;
 dmesg|grep Memory:&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 dmidecode -t memory&lt;br /&gt;
 lshw -class memory&lt;br /&gt;
&lt;br /&gt;
=fstab=&lt;br /&gt;
Use ram for some logfiles.&lt;br /&gt;
 none             /var/log/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /tmp/                  tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/tmp/              tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
 none             /var/spool/            tmpfs   defauls,noatime,size=10%                 0       0&lt;br /&gt;
&lt;br /&gt;
=fswebcam=&lt;br /&gt;
Capture photo.&lt;br /&gt;
 fswebcam -r 1920x1080 --jpeg 85 -D 1 --quiet --no-banner shot.jpg&lt;br /&gt;
 fswebcam -d /dev/video0 -i 0 -r 2592x1944 -p YUYV /net/10.111.222.1/storage/temp/logitech.jpg&lt;br /&gt;
=fwupdmgr=&lt;br /&gt;
 fwupdmgr get-devices --show-all-devices&lt;br /&gt;
 fwupdmgr get-upgrades&lt;br /&gt;
 fwupdmgr update $device_id&lt;br /&gt;
&lt;br /&gt;
=genisoimage=&lt;br /&gt;
 genisoimage -o nuc.iso nuc&lt;br /&gt;
=gnome-font-viewer=&lt;br /&gt;
view fonts&lt;br /&gt;
 gnome-font-viewer /file.woff2&lt;br /&gt;
=gnome-monitor-config=&lt;br /&gt;
Set one monitor. Disable all others.&lt;br /&gt;
 gnome-monitor-config set -LpM HDMI-2&lt;br /&gt;
Get monitor settings&lt;br /&gt;
 WINDOWS + p&lt;br /&gt;
&lt;br /&gt;
=gpg=&lt;br /&gt;
Password encryption decryption with gnupg.&lt;br /&gt;
 gpg -c --force-mdc /temp/shadow&lt;br /&gt;
 echo &amp;quot;$(gpg -qd /temp/shadow.gpg)&amp;quot;&lt;br /&gt;
==create keys==&lt;br /&gt;
 gpg --full-generate-key&lt;br /&gt;
==list secret keys==&lt;br /&gt;
 gpg --list-secret-keys --keyid-format LONG&lt;br /&gt;
==delete secret keys==&lt;br /&gt;
 gpg --delete-secret-key liza&lt;br /&gt;
&lt;br /&gt;
==list public keys==&lt;br /&gt;
 gpg --list-public-keys --keyid-format LONG&lt;br /&gt;
&lt;br /&gt;
==export public key==&lt;br /&gt;
 gpg --armor --export 3AA5C34371567BD2&lt;br /&gt;
==export private key==&lt;br /&gt;
 gpg --armor --export-secret-keys 3AA5C34371567BD2&lt;br /&gt;
==export secret subkey==&lt;br /&gt;
 gpg --armor --export-secret-subkeys 3AA5C34371567BD2&lt;br /&gt;
==import keys==&lt;br /&gt;
 gpg --import pub.key&lt;br /&gt;
 gpg --import sec.key&lt;br /&gt;
 gpg --import sub.key&lt;br /&gt;
==add trust to private key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669 trust quit # 5 y&lt;br /&gt;
&lt;br /&gt;
==edit gpg key==&lt;br /&gt;
 gpg --edit-key 6252FC9A029A2669&lt;br /&gt;
==send gpg key==&lt;br /&gt;
 gpg --send-key 6252FC9A029A2669&lt;br /&gt;
==delete public key==&lt;br /&gt;
 gpg --delete-key &amp;quot;User Name&amp;quot;&lt;br /&gt;
==change trust level on  all keys==&lt;br /&gt;
 gpg --list-keys --fingerprint |grep pub -A 1|egrep -Ev &amp;quot;pub|--&amp;quot;|tr -d &#039; &#039;  | awk &#039;BEGIN { FS = &amp;quot;\n&amp;quot; } ; { print $1&amp;quot;:6:&amp;quot; } &#039; | gpg --import-ownertrust&lt;br /&gt;
==get info about gpg encrypted file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp&lt;br /&gt;
==list keys in gpg file==&lt;br /&gt;
 gpg --list-packets crypto-text.pgp # | grep keyid&lt;br /&gt;
==get public key from command above==&lt;br /&gt;
 gpg --recv-keys 754817487F42735A&lt;br /&gt;
==encrypt file==&lt;br /&gt;
 gpg --encrypt --recipient user1@inter.net --recipient user2@inter.net --recipient user3@inter.net file.txt&lt;br /&gt;
&lt;br /&gt;
==decrypt gpg file==&lt;br /&gt;
 gpg --decrypt vpn-0ea602e33ab9c49fd.txt.gpg&lt;br /&gt;
&lt;br /&gt;
==who has encrypted file==&lt;br /&gt;
 gpg --pinentry-mode cancel --list-packets file.gpg&lt;br /&gt;
==remove expired public keys==&lt;br /&gt;
 for i in $(gpg --list-public-keys --keyid-format LONG 2&amp;gt;&amp;amp;1 | grep -A1 -B1 expired | grep -Ev &#039;^$|^pub|^uid&#039;) ; do gpg --delete-key $i ; done&lt;br /&gt;
&lt;br /&gt;
=pgpdump=&lt;br /&gt;
 pgpdump &amp;lt;(curl -sS https://download.spotify.com/debian/pubkey_C85668DF69375001.gpg)&lt;br /&gt;
=gphoto2=&lt;br /&gt;
Capture photo from the command line linux.&lt;br /&gt;
 gphoto2 --camera=&#039;Canon EOS 40D (PTP mode)&#039; --port=usb: --capture-image-and-download&lt;br /&gt;
&lt;br /&gt;
=graphviz=&lt;br /&gt;
Create graph.&lt;br /&gt;
 dot -Tps /flow -o /tmp/flow.ps&lt;br /&gt;
&lt;br /&gt;
=grep=&lt;br /&gt;
Colorize grep output.&lt;br /&gt;
 grep --color=always -r &#039;10\.7\.&#039; /opt/ongame/&lt;br /&gt;
Show non comment lines ending with a blank.&lt;br /&gt;
 find . -name &#039;*.properties&#039; -exec grep --color=always -E &#039;^[^#].*\ $&#039; {} \; | less -SR&lt;br /&gt;
grep ipaddress from message file.&lt;br /&gt;
 sudo grep DHCP /var/log/messages | grep -oir --color=always &#039;192\.168\.[0-9]*\.[0-9]*&#039; | sort -u&lt;br /&gt;
 grep -E &#039;([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))&#039;&lt;br /&gt;
grep ipaddress from file&lt;br /&gt;
 grep -E &#039;[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}&#039;&lt;br /&gt;
grep for tab&lt;br /&gt;
 grep 10.199.2.1$&#039;\t&#039; /etc/hosts&lt;br /&gt;
grep from word containing regex space separated.&lt;br /&gt;
 grep -oE &#039;\S*regex\S*&#039; /file&lt;br /&gt;
When grep start to complain about file being binary run the following command to define where.&lt;br /&gt;
 grep -Pa &#039;\x00&#039; /temp/file_name&lt;br /&gt;
Remove binary part of file.&lt;br /&gt;
 sed -i &#039;s/\x00//g&#039; /temp/file_name&lt;br /&gt;
Grep email addresses.&lt;br /&gt;
 grep -E -o &amp;quot;\b[a-zA-Z0-9.-]+@[a-zA-Z0-9.-]+\.[a-zA-Z0-9.-]+\b&amp;quot; filename.txt&lt;br /&gt;
Grep for exact string like \&lt;br /&gt;
 grep -F \\ blabla.json&lt;br /&gt;
=grepcidr=&lt;br /&gt;
 grepcidr -v 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16&lt;br /&gt;
&lt;br /&gt;
=growpart=&lt;br /&gt;
 growpart /dev/vda 5&lt;br /&gt;
 btrfs filesystem resize max /&lt;br /&gt;
&lt;br /&gt;
=gsettings=&lt;br /&gt;
Emulate 3 button mouse&lt;br /&gt;
 gsettings set org.gnome.settings-daemon.peripherals.mouse middle-button-enabled true&lt;br /&gt;
Blinking cursor disable&lt;br /&gt;
 gsettings set org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default|tr -d \&#039;)/ cursor-blink-mode off&lt;br /&gt;
List settings&lt;br /&gt;
 gsettings list-recursively&lt;br /&gt;
&lt;br /&gt;
=gsync=&lt;br /&gt;
Install gsync&lt;br /&gt;
 git clone https://github.com/iwonbigbro/gsync.git&lt;br /&gt;
 cd gsync/&lt;br /&gt;
 sudo python setup.py install&lt;br /&gt;
Download data.&lt;br /&gt;
 gsync -u -r -t -v --progress --delete -l -s drive://motion/ /temp/motion2/&lt;br /&gt;
&lt;br /&gt;
=gzip=&lt;br /&gt;
Compress a stream.&lt;br /&gt;
 find . | gzip -9 &amp;gt; /tmp/file_list.gz&lt;br /&gt;
&lt;br /&gt;
=gscan2pdf=&lt;br /&gt;
Scan and ocr pdf dokuments&lt;br /&gt;
&lt;br /&gt;
=Handbrake=&lt;br /&gt;
Compress dvd&lt;br /&gt;
#Rip dvd.&lt;br /&gt;
 sudo vobcopy -o /storage/temp/ -v -x -l&lt;br /&gt;
#compress video.&lt;br /&gt;
 HandBrakeCLI -e x264 -Z Normal -i source.vob -o destination.mkv -a 2 -r 25 -E faac -f mkv -d -S 600 --crop 0:0:0:0&lt;br /&gt;
#Create film for android.&lt;br /&gt;
 HandBrakeCLI -i 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.vob -o 01.Alla.Vi.Barn.I.Bullerbyn.1986.SWEDiSH.mp4 -x level=30:bframes=0:cabac=0:ref=1:vbv-maxrate=1500:vbv-bufsize=2000:analyse=all:me=umh:no-fast-pskip=1 -e x264 --vb 300 -E faac --ab 128 --maxWidth 320 -2 -T -d&lt;br /&gt;
# Compress.&lt;br /&gt;
 SOURCE=/ssd/temp ; DESTINATION=/temp ; for FILM in $(cd ${SOURCE}; ls *.mov | sed &#039;s/\.mov$//g&#039;); do HandBrakeCLI -e x264 -q 20 -B 160 -i ${SOURCE}/${FILM}.mov -o ${DESTINATION}/${FILM}.mp4 ;done&lt;br /&gt;
# High profile&lt;br /&gt;
 HandBrakeCLI -i DVD -o ~/Movies/movie.mp4  -e x264 -q 20.0 -a 1 -E faac -B 160 -6 dpl2 -R Auto -D 0.0 -f mp4 --strict-anamorphic -m -x ref=2:bframes=2:subme=6:mixed-refs=0:weightb=0:8x8dct=0:trellis=0&lt;br /&gt;
=hashid=&lt;br /&gt;
Identify hash strings.&lt;br /&gt;
 hashid&lt;br /&gt;
&lt;br /&gt;
=heif-convert=&lt;br /&gt;
 heif-convert image.HEIC new-image.jpg&lt;br /&gt;
=hostnamectl=&lt;br /&gt;
 hostnamectl set-hostname rocky_8_1&lt;br /&gt;
&lt;br /&gt;
=htmldoc=&lt;br /&gt;
Convert html document to pdf&lt;br /&gt;
 htmldoc --webpage -f php_html_doc.pdf /home/andreasbj/php_manual_en.html 2&amp;gt;/tmp/htmldoc&lt;br /&gt;
=htpasswd=&lt;br /&gt;
Add user to htpasswd file.&lt;br /&gt;
 htpasswd -b /etc/httpd/conf/htpasswd &amp;lt;username&amp;gt; &amp;lt;password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=hunspell=&lt;br /&gt;
 hunspell -d sv_SE swedish.txt&lt;br /&gt;
=hydra=&lt;br /&gt;
Password checking.&lt;br /&gt;
 hydra -l root -P /etc/passwdknown -t 5 192.168.29.62 ssh2&lt;br /&gt;
&lt;br /&gt;
=ifconfig=&lt;br /&gt;
Configure network.&lt;br /&gt;
 ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up&lt;br /&gt;
ip address alias&lt;br /&gt;
 ifconfig eth0:0 192.168.1.2 netmask 255.255.255.0&lt;br /&gt;
Network configuration Full config.&lt;br /&gt;
 echo -e &amp;quot;options timeout:1 attempts:1&lt;br /&gt;
 domain halfface.se&lt;br /&gt;
 nameserver 84.246.88.10&lt;br /&gt;
 nameserver 84.246.88.20&amp;quot; &amp;gt; /etc/resolv.conf&lt;br /&gt;
 ifconfig eth0 89.253.75.84 netmask 255.255.255.224 up&lt;br /&gt;
 route add default gw 89.253.75.65 eth0&lt;br /&gt;
Vip on loopback /etc/sysconfig/network-scripts/ifcfg-lo:ipdbm&lt;br /&gt;
 DEVICE=lo:ipdbm&lt;br /&gt;
 IPADDR=192.168.122.2&lt;br /&gt;
 NETMASK=255.255.255.255&lt;br /&gt;
 NETWORK=192.168.122.0&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
Setting up multiple addresses. ifcfg-eth0-range0 &lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR_START=192.168.122.3&lt;br /&gt;
 IPADDR_END=192.168.122.15&lt;br /&gt;
ifcfg-eth0&lt;br /&gt;
 DEVICE=eth0&lt;br /&gt;
 BOOTPROTO=static&lt;br /&gt;
 ONBOOT=yes&lt;br /&gt;
 TYPE=Ethernet&lt;br /&gt;
 IPADDR=10.111.222.2&lt;br /&gt;
 NETMASK=255.255.255.0&lt;br /&gt;
 GATEWAY=10.111.222.1&lt;br /&gt;
 DNS1=10.111.222.253&lt;br /&gt;
 DNS2=10.111.222.254&lt;br /&gt;
 DOMAIN=&amp;quot;halfface.se subdomain.halfface.se&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=imv=&lt;br /&gt;
Image viewer for wayland&lt;br /&gt;
 imv . -f -s full&lt;br /&gt;
&lt;br /&gt;
=ilo=&lt;br /&gt;
log in to ilo&lt;br /&gt;
 env -u LANG ssh -v Ongame@10.1.1.94&lt;br /&gt;
restart ilo&lt;br /&gt;
 reset map1&lt;br /&gt;
start system&lt;br /&gt;
 start system1&lt;br /&gt;
&lt;br /&gt;
=install=&lt;br /&gt;
Crete directory&lt;br /&gt;
 install -d --mode=755 --owner=user --group=group /apps/IP/IPim/var/log&lt;br /&gt;
Create empty file&lt;br /&gt;
 install -o 0664 -o user -g group /dev/null ${ALFRESCO_DIR}/logs/catalina.out&lt;br /&gt;
=inotifywathc=&lt;br /&gt;
Se what access /dev/random&lt;br /&gt;
 inotifywatch -v -t 60 /dev/random&lt;br /&gt;
&lt;br /&gt;
=inxi=&lt;br /&gt;
inventory report.&lt;br /&gt;
 inxi -Frmxx&lt;br /&gt;
=iostat=&lt;br /&gt;
 iostat -xtc 5&lt;br /&gt;
 -x extended statistics.&lt;br /&gt;
 -t print time for each report.&lt;br /&gt;
 -c display the cpu utalization report.&lt;br /&gt;
 -y Omit first report with statistics since the system boot&lt;br /&gt;
==iostat -xty 5 1 dm-3==&lt;br /&gt;
 Linux 2.6.32-573.7.1.el6.x86_64 (machine.se)      12/30/2021      _x86_64_        (12 CPU)&lt;br /&gt;
 12/30/2021 11:47:42 AM&lt;br /&gt;
 avg-cpu:  %user   %nice %system %iowait  %steal   %idle&lt;br /&gt;
            0.12    0.00    2.01    4.23    0.00   93.65&lt;br /&gt;
 Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util&lt;br /&gt;
 dm-3              0.00     0.00 5806.20    0.00 1485056.00     0.00   255.77     1.54    0.27   0.17  97.44&lt;br /&gt;
&lt;br /&gt;
 # Explained.&lt;br /&gt;
 rrqm/s   The number of read requests merged per second that were queued to the device.&lt;br /&gt;
 wrqm/s   The number of write requests merged per second that were queued to the device.&lt;br /&gt;
 r/s      The number of read requests that were issued to the device per second.&lt;br /&gt;
 w/s      The number of write requests that were issued to the device per second.&lt;br /&gt;
 rsec/s   The number of sectors read from the device per second.&lt;br /&gt;
 wsec/s   The number of sectors written to the device per second.&lt;br /&gt;
 avgrq-sz The average size (in sectors) of the requests that were issued to the device.&lt;br /&gt;
 avgqu-sz The average queue length of the requests that were issued to the device.&lt;br /&gt;
 await    The average time (in milliseconds) for I/O requests issued to the device to be served. This includes the time spent by the requests in queue and the time spent servicing them.&lt;br /&gt;
 svctm    The average service time (in milliseconds) for I/O requests that were issued to the device. Warning! Do not trust this field any more. This field will be removed in a future sysstat version.&lt;br /&gt;
 %util    Percentage of elapsed time during which I/O requests were issued to the device (bandwidth utilization for the device). Device saturation occurs when this value is close to 100%.&lt;br /&gt;
&lt;br /&gt;
=iotop=&lt;br /&gt;
iotop with dates for output to logfile.&lt;br /&gt;
 DATE=$(date &#039;+%Y-%m-%d %H:%M:%S %Z&#039;) ; sudo iotop -kbon1 | head -2 | while read i ; do echo $DATE $i ; done&lt;br /&gt;
&lt;br /&gt;
=ip=&lt;br /&gt;
==Add vlan 23==&lt;br /&gt;
 ip link add link eno1 name eno1.23 type vlan id 23&lt;br /&gt;
==View vlan protocol==&lt;br /&gt;
 ip -d link show eno1.23&lt;br /&gt;
==Configure vlan==&lt;br /&gt;
 ip addr add 10.151.23.101/24 brd 10.151.23.255 dev eno1.23&lt;br /&gt;
 ip link set dev eno1.23 up&lt;br /&gt;
==create default route==&lt;br /&gt;
 ip route add default via 192.168.1.254&lt;br /&gt;
==show routing==&lt;br /&gt;
 ip route show&lt;br /&gt;
more info&lt;br /&gt;
 ip route show table all&lt;br /&gt;
==Add static route==&lt;br /&gt;
 ip route add 10.10.20.0/24 via 192.168.50.100 dev eth0&lt;br /&gt;
==Remove static route.==&lt;br /&gt;
 ip route del 10.10.20.0/24&lt;br /&gt;
==which outgoing interfaces are available.==&lt;br /&gt;
 ip r l| awk &#039;/src/{print $9}&#039;&lt;br /&gt;
==Which route is used for ip.==&lt;br /&gt;
 ip route get 192.168.122.252&lt;br /&gt;
==route subnet over interface.==&lt;br /&gt;
 sudo ip route add 145.251.242.0/24 dev tun0&lt;br /&gt;
==Show ipaddress on interface tun0==&lt;br /&gt;
 ip address show tun0&lt;br /&gt;
==vlan tag interface.==&lt;br /&gt;
 ip link add link eth0 name eth0.8 type vlan id 8&lt;br /&gt;
==set ip on interface.==&lt;br /&gt;
 ip addr add 192.168.50.5 dev eth1&lt;br /&gt;
 ip addr add 192.168.50.5/24 dev eth1&lt;br /&gt;
==set secondary ip on interface==&lt;br /&gt;
 ip addr add 192.168.1.2/24 dev eth0&lt;br /&gt;
==remove ip address.==&lt;br /&gt;
 ip addr del 192.168.50.5/24 dev eth1&lt;br /&gt;
==enable interface==&lt;br /&gt;
 ip link set eth1 up&lt;br /&gt;
==disable interface==&lt;br /&gt;
 ip link set eth1 down&lt;br /&gt;
==list arp entries.==&lt;br /&gt;
 ip neigh show&lt;br /&gt;
==local routing table==&lt;br /&gt;
 ip route list table local&lt;br /&gt;
==rule base routing. List rules==&lt;br /&gt;
 ip rule show&lt;br /&gt;
==show multicast networks==&lt;br /&gt;
 ip maddr show&lt;br /&gt;
==Disable traffic to an ipaddress.==&lt;br /&gt;
 ip route add blackhole 10.151.19.151&lt;br /&gt;
==dynamic/random mac wifi disable==&lt;br /&gt;
 MAC=$(ip link show | grep link/ | grep -v 00:00:00:00:00:00 | awk &#039;{print $2}&#039;) ; nmcli -f TYPE,NAME connection show | grep ^wifi | sed &#039;s/^wifi *//g&#039; | while read i ; do echo &#039;*&#039; $i ; nmcli connection modify &amp;quot;${i}&amp;quot; 802-11-wireless.cloned-mac-address $MAC ; done&lt;br /&gt;
==change mtu==&lt;br /&gt;
 sudo ip link set dev ens3 mtu 1400&lt;br /&gt;
==network namespaces==&lt;br /&gt;
 ip netns list&lt;br /&gt;
&lt;br /&gt;
=ip2location=&lt;br /&gt;
 ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB&lt;br /&gt;
 sed &#039;s/ \+/\t/g&#039; haproxy.log | cut -f 9 | sort -u | while read IP ; do ip2location -d /usr/share/IP2Location/IP2LOCATION-LITE-DB5.BIN -p $IP -e country_name,city_name,ip --format TAB | tail -n1 ; done | column_tab | sort&lt;br /&gt;
=ipcalc=&lt;br /&gt;
 ipcalc -n 192.121.85.96/27 -m&lt;br /&gt;
&lt;br /&gt;
=iperf=&lt;br /&gt;
start server on client A.&lt;br /&gt;
 iperf -s&lt;br /&gt;
start measure from the other host. Limit bandwidth to 10k.&lt;br /&gt;
 iperf -c 10.20.30.40 --bandwidth 10K&lt;br /&gt;
==Multicast test.==&lt;br /&gt;
On the listener side:&lt;br /&gt;
 iperf -s -u -B 224.1.1.1 -i 1&lt;br /&gt;
On sender&lt;br /&gt;
 iperf -c 224.1.1.1 -u -T 32 -t 3 -i 1&lt;br /&gt;
&lt;br /&gt;
=ipmitool=&lt;br /&gt;
What is the power consumtion of dell server.&lt;br /&gt;
 ipmitool -I lanplus -H 127.0.0.1 -U root -P calvin delloem powermonitor&lt;br /&gt;
 ipmitool lan print&lt;br /&gt;
 ipmitool sdr list&lt;br /&gt;
&lt;br /&gt;
=iptables=&lt;br /&gt;
==Show iptables OUTPUT, PREROUTING and POSTROUTING==&lt;br /&gt;
 iptables --table nat --list --exact --verbose --numeric --line-number&lt;br /&gt;
==Show config==&lt;br /&gt;
 iptables -L -t nat -n&lt;br /&gt;
==Dnat to localhost.==&lt;br /&gt;
 iptables -t nat -I PREROUTING --source 131.115.115.53 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
 iptables -t nat -I OUTPUT --source 131.115.115.53 --destination 127.0.0.1 -p tcp --dport 22 -j REDIRECT --to-ports 222&lt;br /&gt;
==Flush all rules.==&lt;br /&gt;
 &lt;br /&gt;
 iptables -F&lt;br /&gt;
 iptables -X&lt;br /&gt;
 iptables -t nat -F&lt;br /&gt;
 iptables -t nat -X&lt;br /&gt;
 iptables -t mangle -F&lt;br /&gt;
 iptables -t mangle -X&lt;br /&gt;
 iptables -P INPUT ACCEPT&lt;br /&gt;
 iptables -P FORWARD ACCEPT&lt;br /&gt;
 iptables -P OUTPUT ACCEPT&lt;br /&gt;
&lt;br /&gt;
==Block==&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j DROP&lt;br /&gt;
 iptables -A OUTPUT -p tcp -d 131.115.248.82 --dport 8080 -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block outgoing mail==&lt;br /&gt;
 iptables -A OUTPUT -p tcp --dport 25 -o $INTERFACE -j REJECT&lt;br /&gt;
&lt;br /&gt;
==Block all traffic except ssh in/out log to syslog.==&lt;br /&gt;
 iptables -P INPUT DROP&lt;br /&gt;
 iptables -P OUTPUT DROP&lt;br /&gt;
 iptables -P FORWARD DROP&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT&lt;br /&gt;
 iptables -A INPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A INPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-in&amp;quot;&lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --dport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m tcp -p tcp --sport 22 -j ACCEPT &lt;br /&gt;
 iptables -A OUTPUT -m state --state NEW -m tcp -p tcp -j LOG --log-level info --log-prefix &amp;quot;dropped-out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Block traffic on certain port.==&lt;br /&gt;
 iptables -A INPUT -p tcp --dport 7009 -j REJECT&lt;br /&gt;
==Fake source==&lt;br /&gt;
 iptables -t nat -A POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot; &amp;amp;&amp;gt;/dev/null&lt;br /&gt;
 # Remove the current rules&lt;br /&gt;
 iptables -t nat -D POSTROUTING -d &amp;quot;${DST}&amp;quot; -p udp --dport 162 -j SNAT --to &amp;quot;${SRC}&amp;quot;&lt;br /&gt;
==redirect ip==&lt;br /&gt;
Send traffic destined for one ip and port to another ip and port.&lt;br /&gt;
 iptables -t nat -A OUTPUT -p tcp -d 146.213.6.7 --dport 1023 -j DNAT --to-destination 10.199.150.111:1023&lt;br /&gt;
 iptables -t nat -A OUTPUT -p icmp -d 146.213.6.7 -j DNAT --to-destination 10.199.150.111&lt;br /&gt;
==allow trafic from subnet==&lt;br /&gt;
 iptables -A INPUT -s 172.16.27.0/24 -j ACCEPT&lt;br /&gt;
==allow ssh from all==&lt;br /&gt;
 iptables -A INPUT -p tcp -dport 22 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
 iptables -A OUTPUT -p tcp -dport 22 -m conntrack --ctstate ESTABLISHED -j ACCEPT&lt;br /&gt;
or&lt;br /&gt;
 -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
 -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT&lt;br /&gt;
==find which rule is blocking by removing one at a time. Better way is to enable logging==&lt;br /&gt;
 iptables -L -n --line-numbers&lt;br /&gt;
 iptables -D &amp;lt;line-number&amp;gt;&lt;br /&gt;
==List rules from OUTPUT chain with line number==&lt;br /&gt;
 iptables -t filter -L OUTPUT --line-numbers -n&lt;br /&gt;
&lt;br /&gt;
==Add rule to specific row number==&lt;br /&gt;
 iptables -I OUTPUT $ROW_NUMBER -d 54.72.175.186/32 -p tcp -m tcp --dport 443 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
=irc=&lt;br /&gt;
Close private messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close public messages&lt;br /&gt;
 /window close&lt;br /&gt;
Close a query&lt;br /&gt;
 /q&lt;br /&gt;
=jmtpfs=&lt;br /&gt;
Mount disk&lt;br /&gt;
 jmtpfs /mnt/mtp&lt;br /&gt;
Umount disk&lt;br /&gt;
 fusermount -u /mnt/mtp&lt;br /&gt;
&lt;br /&gt;
=john=&lt;br /&gt;
Test performance&lt;br /&gt;
 john -test&lt;br /&gt;
Recover passwords with password list.&lt;br /&gt;
 john -wordlist:password.lst passfile.txt&lt;br /&gt;
=journalctl=&lt;br /&gt;
==View log from last day.==&lt;br /&gt;
 journalctl --since yesterday&lt;br /&gt;
==List all units.==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==Current disk usage.==&lt;br /&gt;
 journalctl --disk-usage&lt;br /&gt;
==Show only certain error level. (err crit)==&lt;br /&gt;
 journalctl -p err&lt;br /&gt;
==List boots==&lt;br /&gt;
 journalctl --list-boots&lt;br /&gt;
==Show events between two time stamps.==&lt;br /&gt;
 journalctl --since &amp;quot;2017-01-23 05:56:42&amp;quot; --until &amp;quot;2017-01-23 07:56:42&amp;quot;&lt;br /&gt;
==show entries for one unit.==&lt;br /&gt;
 journalctl -u openvpn-server@server&lt;br /&gt;
 journalctl -u sshd  -f&lt;br /&gt;
==iptables logs==&lt;br /&gt;
 journalctl -k -f | grep -i iptables&lt;br /&gt;
==wipe logs==&lt;br /&gt;
 journalctl --vacuum-time=1h&lt;br /&gt;
==compare two different boots==&lt;br /&gt;
 journalctl --since &amp;quot;$(date &#039;+%F %H:%M:%S&#039; --date &#039;-10 hour&#039;)&amp;quot; -u NetworkManager -b -1  -o cat | sed &#039;s/\[[0-9.]*\]//g&#039;&lt;br /&gt;
&lt;br /&gt;
==persistent logging==&lt;br /&gt;
Enable persistent logging in systemd-journald. grep journal /usr/lib/tmpfiles.d/systemd.conf. Install syslog instead.&lt;br /&gt;
 mkdir /var/log/journal &lt;br /&gt;
 chmod 2755 /var/log/journal&lt;br /&gt;
 chown root:systemd-journal /var/log/journal&lt;br /&gt;
 killall -USR1 systemd-journald&lt;br /&gt;
&lt;br /&gt;
=jpegtran=&lt;br /&gt;
 # to lossless cut a file.&lt;br /&gt;
 jpegtran -crop 700x400+2150+1500 2012-05-19_20-39-35.jpg &amp;gt; /photos/Sweden/2012/2012-05-19/2012-05-19_20-39-35.jpg&lt;br /&gt;
 # Rotate counter clockwise.&lt;br /&gt;
 jpegtran  -copy all -rotate 270 2012-08-18_15-06-43.jpg &amp;gt; 2012-08-18_15-06-43_270.jpg&lt;br /&gt;
=kdump=&lt;br /&gt;
Change action to dump memory.&lt;br /&gt;
 /etc/kdump.conf&lt;br /&gt;
 core_collector true&lt;br /&gt;
Reload config.&lt;br /&gt;
 systemctl restart kdump&lt;br /&gt;
=keepass=&lt;br /&gt;
Create database&lt;br /&gt;
 printf &#039;%s\n&#039; &#039;P@55Word&#039;{,} | keepassxc-cli db-create -p -q keepassxc_abjorklund.kdbx&lt;br /&gt;
Add entry to database.&lt;br /&gt;
 keepassxc-cli add keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
Copy password from password entry&lt;br /&gt;
 keepassxc-cli clip keepassxc_abjorklund.kdbx abjorklund&lt;br /&gt;
&lt;br /&gt;
=keyboard=&lt;br /&gt;
 keymaps &lt;br /&gt;
 dumpkeys&lt;br /&gt;
 loadkeys sv-latin1&lt;br /&gt;
 loadkeys us&lt;br /&gt;
 setxkbmap en&lt;br /&gt;
 setxkbmap -layout se -variant nodeadkeys&lt;br /&gt;
reset corrupt keyboard after using vmware.&lt;br /&gt;
 setxkbmap&lt;br /&gt;
&lt;br /&gt;
=kill=&lt;br /&gt;
suspend/resume a jobb.&lt;br /&gt;
 # kill -STOP PID&lt;br /&gt;
 # kill -CONT PID&lt;br /&gt;
=kpartx=&lt;br /&gt;
 # Create device files from disk image.&lt;br /&gt;
 sudo kpartx -av disk_image.raw &lt;br /&gt;
 # Remove device files.&lt;br /&gt;
 sudo kpartx -d disk_image.raw&lt;br /&gt;
&lt;br /&gt;
=lastb=&lt;br /&gt;
Show failed ssh logins.&lt;br /&gt;
 lastb&lt;br /&gt;
=less=&lt;br /&gt;
Toggle line wrap&lt;br /&gt;
 - -&amp;gt; S&lt;br /&gt;
tail with less. CTRL + c = scroll around. SHIFT + f = to tail again.&lt;br /&gt;
 less +F -B /tmp/tmp&lt;br /&gt;
=lftp=&lt;br /&gt;
 lftp -u &amp;lt;user&amp;gt;,&amp;lt;password&amp;gt; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
With proxy.&lt;br /&gt;
 lftp -e &amp;quot;set ftp:proxy http://&amp;lt;url&amp;gt;:3128 ; set ssl:verify-certificate no; open -u user,password ftp://ftp.example.se/&amp;quot;&lt;br /&gt;
Workaround.&lt;br /&gt;
 lftp -e &#039;set ftp:use-feat false; set ftp:ssl-allow false&#039; -u user,passwor ftp.example.se&lt;br /&gt;
Run commands from cli.&lt;br /&gt;
 lftp -u &#039;&amp;lt;user&amp;gt;,&amp;lt;password&amp;gt;&#039; -e &#039;set ssl:verify-certificate no ; ls -la ; quit&#039; &amp;lt;ftp_server&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=ln=&lt;br /&gt;
Create link even if it exists.&lt;br /&gt;
 ln -sfT /destination link&lt;br /&gt;
&lt;br /&gt;
=locale=&lt;br /&gt;
To show 24 hour format.&lt;br /&gt;
 LC_ALL=C&lt;br /&gt;
=localectl=&lt;br /&gt;
Change keyboard.&lt;br /&gt;
 localectl list-keymaps&lt;br /&gt;
 localectl set-keymap se-nodeadkeys&lt;br /&gt;
 localectl set-x11-keymap se-nodeadkeys&lt;br /&gt;
&lt;br /&gt;
=lock=&lt;br /&gt;
locking keyboard under linux.&lt;br /&gt;
 lock-keyboard-for-baby&lt;br /&gt;
=logging=&lt;br /&gt;
bash create log.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 exec &amp;gt; /logfile&lt;br /&gt;
alternative&lt;br /&gt;
 exec 2&amp;gt;/tmp/log&lt;br /&gt;
Read logs on system.&lt;br /&gt;
 tail -f $(lsof | grep log$ |awk &#039;{ print $NF }&#039; | sort -u |xargs)&lt;br /&gt;
=logrotate=&lt;br /&gt;
Test dry run logrotate file. -d=debug -f=force&lt;br /&gt;
 logrotate -d -f /etc/logrotate.conf&lt;br /&gt;
Force logrotate in verbose mode.&lt;br /&gt;
 logrotate -v -f /etc/logrotate.conf&lt;br /&gt;
Create logrotate config entry.&lt;br /&gt;
 # Configure log rotation.&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF &amp;gt; /etc/logrotate.d/ipmonperfj_cleanupdaemon&lt;br /&gt;
 /directory/logs/cleanupdaemon.log {&lt;br /&gt;
    copytruncate&lt;br /&gt;
    size 100M&lt;br /&gt;
    rotate 60&lt;br /&gt;
    compress&lt;br /&gt;
    missingok&lt;br /&gt;
    olddir old&lt;br /&gt;
 }&lt;br /&gt;
 EOF&lt;br /&gt;
Disable logrotate. Look for file extension to ignore.&lt;br /&gt;
 man logrotate.conf, you can read find tabooext&lt;br /&gt;
 Ex. mv /etc/logrotate.d/mysql{,.rpmsave}&lt;br /&gt;
&lt;br /&gt;
=losetup=&lt;br /&gt;
Create loopback devices for partitions in image. Force the kernel to scan the partition table on a newly created loop device&lt;br /&gt;
 losetup -P /dev/loop2 harddrive.img&lt;br /&gt;
Set up next available device read only.&lt;br /&gt;
 losetup -f -r /temp/rb-slog05/sda6&lt;br /&gt;
Show all&lt;br /&gt;
 losetup -a&lt;br /&gt;
detatach&lt;br /&gt;
 losetup -d /dev/loop2&lt;br /&gt;
&lt;br /&gt;
=ls=&lt;br /&gt;
 ls -la --time-style=&amp;quot;+%Y-%m-%d %H:%M:%S&amp;quot; *.3gp&lt;br /&gt;
List processes in epoch date&lt;br /&gt;
 ( cd /proc; ls -rtd --full-time --time-style=+%s [0123456789]*; )&lt;br /&gt;
=lsblk=&lt;br /&gt;
 lsblk -d -o NAME,ROTA,MODEL&lt;br /&gt;
=lshw=&lt;br /&gt;
==List memory modules==&lt;br /&gt;
 lshw -C memory&lt;br /&gt;
&lt;br /&gt;
==Is cpu 32 or 64bit.==&lt;br /&gt;
 lshw -class processor&lt;br /&gt;
&lt;br /&gt;
=lsof=&lt;br /&gt;
List recurivly all process that have a path open.&lt;br /&gt;
 lsof +D /apps/&lt;br /&gt;
which ports has a process opened?&lt;br /&gt;
 lsof -Pan -p 13354 -i&lt;br /&gt;
=lspci=&lt;br /&gt;
List devices without drivers.&lt;br /&gt;
 lspci -nnk&lt;br /&gt;
&lt;br /&gt;
=which process listen to port=&lt;br /&gt;
 lsof -i :443&lt;br /&gt;
&lt;br /&gt;
=mail=&lt;br /&gt;
command line mail with changed from&lt;br /&gt;
 echo message$(date +%F_%H-%M-%S) | mail -s Subject$(date +%F_%H-%M-%S) -r from@inter.net reciever@inter.net&lt;br /&gt;
command line mail with changed from with attachment&lt;br /&gt;
 echo message | mail -s Subject -r from@inter.net -a /attach.ment reciever@inter.net&lt;br /&gt;
Change default sender.&lt;br /&gt;
 # ~/.mailrc &lt;br /&gt;
 # From address for mailx.&lt;br /&gt;
 set from=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot; &lt;br /&gt;
 set replyto=&amp;quot;root degn.redbridge.se &amp;lt;abjorklund@redbridge.se&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=man=&lt;br /&gt;
man correct caracters.&lt;br /&gt;
 LANG=C man passwd&lt;br /&gt;
&lt;br /&gt;
man clean for output to file.&lt;br /&gt;
 man [manual] | col -b &amp;gt; file.txt&lt;br /&gt;
Read from section 5&lt;br /&gt;
 man man.5&lt;br /&gt;
&lt;br /&gt;
=mbr=&lt;br /&gt;
backup mbr.&lt;br /&gt;
 # dd if=/dev/sdX of=/temp/sdx-mbr bs=512 count=1&lt;br /&gt;
&lt;br /&gt;
restore mbr&lt;br /&gt;
 # dd if=/temp/sdx-mbr of=/dev/sdX bs=446 count=1&lt;br /&gt;
=mdadm=&lt;br /&gt;
Add disk that was lost&lt;br /&gt;
 mdadm /dev/md125 -a /dev/vda1&lt;br /&gt;
&lt;br /&gt;
=minimodem=&lt;br /&gt;
Transmit file via audio.&lt;br /&gt;
 minimodem -t 200 &lt;br /&gt;
Recieve file via audio&lt;br /&gt;
 minimodem -r 200&lt;br /&gt;
&lt;br /&gt;
=mkfs=&lt;br /&gt;
Create fat32 file system.&lt;br /&gt;
 dd if=/dev/zero of=/tmp/sdb bs=32M status=progress conv=fdatasync count=10&lt;br /&gt;
 fdisk /tmp/sdb&lt;br /&gt;
 n&lt;br /&gt;
 &amp;lt;accept all defaults&amp;gt;&lt;br /&gt;
 t&lt;br /&gt;
 b&lt;br /&gt;
 p&lt;br /&gt;
 w&lt;br /&gt;
 mkfs.vfat -F 32 -n MYDRIVE /tmp/sdb1&lt;br /&gt;
==mkfs.ext4==&lt;br /&gt;
Create ext4 filesystem. Overwrite. Label and root reserved to 0.&lt;br /&gt;
 mkfs.ext4 -F -L looted_storage -m 0 /dev/sda1&lt;br /&gt;
&lt;br /&gt;
=mkpasswd=&lt;br /&gt;
Create a password hash&lt;br /&gt;
 echo password | mkpasswd -m sha-512 -s&lt;br /&gt;
&lt;br /&gt;
=mogrify=&lt;br /&gt;
Resize, crop... a file. Removes original.&lt;br /&gt;
 mogrify -resize 800 *.jpg&lt;br /&gt;
=mokutil(secure boot/secureboot=&lt;br /&gt;
 mokutil --sb-state&lt;br /&gt;
&lt;br /&gt;
=mount=&lt;br /&gt;
Mount a temporary ram partition&lt;br /&gt;
 mount -t tmpfs tmpfs /mnt -o size=1024&lt;br /&gt;
Mount a cifs filesystem and change owner on mountpoint.&lt;br /&gt;
 mount.cifs -o credentials=/home/user/cifs.credentials,gid=1004,uid=1004 //server/c$ /mnt/cifs&lt;br /&gt;
Disallow normal user to ps. If not belonging to gid 1001.&lt;br /&gt;
*/etc/fstab&lt;br /&gt;
 proc                    /proc                   proc    defaults,hidepid=2,gid=1001        0 0&lt;br /&gt;
&lt;br /&gt;
=movgrab=&lt;br /&gt;
List available formats&lt;br /&gt;
 movgrab -T http://youtu.be/ucivXRBrP_0&lt;br /&gt;
Get version listed.&lt;br /&gt;
 movgrab -f mp4:1920x1080 http://www.youtube.com/v/ucivXRBrP_0&lt;br /&gt;
&lt;br /&gt;
=mplayer=&lt;br /&gt;
mplayer in ascii mode.&lt;br /&gt;
 mplayer -monitoraspect 4:3 -vo aa LinaFreestyler.avi&lt;br /&gt;
 mplayer -vo aa -monitorpixelaspect 0.5 *.mp4&lt;br /&gt;
mplayer on second soundcard.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=0.0 *.mp3&lt;br /&gt;
Or, to specify a non-default (secondary) device either of the following commands can be used.&lt;br /&gt;
 mplayer -ao oss:/dev/dsp1 *.mp3&lt;br /&gt;
 mplayer -ao alsa:device=hw=1.0 *.mp3&lt;br /&gt;
play from v4l&lt;br /&gt;
 mplayer -tv device=/dev/video:driver=v4l:input=1:width=640:height=480:norm=ntsc:adevice=/dev/dsp tv://1 -zoom -aspect 4:3&lt;br /&gt;
 mplayer -fps 15 tv:// -tv driver=v4l2:width=640:height=480:device=/dev/video0play hdv material.&lt;br /&gt;
 mplayer -monitoraspect 16:9 -vf pp=lb&lt;br /&gt;
play dvd image.&lt;br /&gt;
 mplayer dvd://1 -dvd-device DVD.iso&lt;br /&gt;
play h264 webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:width=1920:height=1080:device=/dev/video0:outfmt=0x34363248 -aspect 16:10 -fs&lt;br /&gt;
play mjpeg webcam&lt;br /&gt;
 mplayer -fps 24 tv:// -tv driver=v4l2:outfmt=mjpeg:width=1920:height=1080:device=/dev/video0 -aspect 16:10 -fs&lt;br /&gt;
play mp3 in different speed keep pitch.&lt;br /&gt;
 mplayer -speed 1.5 -af scaletempo /mp3/music.mp3&lt;br /&gt;
 # list chapters.&lt;br /&gt;
 mplayer dvd://1 -dvd-device /dev/sr0 -identify -novideo -nosound &lt;br /&gt;
 # dump chapters.&lt;br /&gt;
 mplayer -dvd-device /dev/sr0 dvd://3 -dumpstream -dumpfile 3.vob&lt;br /&gt;
&lt;br /&gt;
=MP4Box=&lt;br /&gt;
Combine mp4 files&lt;br /&gt;
 MP4Box -add file1.mp4 -add file2.mp4 output.mp4&lt;br /&gt;
=mpv=&lt;br /&gt;
Video player. Enable hardware accelleration.&lt;br /&gt;
 # Install packages.&lt;br /&gt;
 dnf install intel-media-driver libva libva-utils gstreamer1-vaapi ffmpeg intel-gpu-tools mesa-dri-drivers mpv&lt;br /&gt;
 # Top for intel gpu&lt;br /&gt;
 sudo intel_gpu_top&lt;br /&gt;
 # Enable hardware accelleration for mpv.&lt;br /&gt;
 CONFIG_FILE=~/.config/mpv/mpv.conf ; if ! grep -q ^hwdec=auto ${CONFIG_FILE} ; then echo hwdec=auto ${CONFIG_FILE} ; fi&lt;br /&gt;
 # Create new initramfs&lt;br /&gt;
 sudo dracut --force&lt;br /&gt;
 # Look at browser.&lt;br /&gt;
 chrome://gpu/&lt;br /&gt;
&lt;br /&gt;
=mpstat=&lt;br /&gt;
top like output of system usage&lt;br /&gt;
 mpstat 5 5&lt;br /&gt;
&lt;br /&gt;
=mtr=&lt;br /&gt;
ping and traceroute combined.&lt;br /&gt;
 mtr -rc 10 8.8.8.8&lt;br /&gt;
&lt;br /&gt;
=mutt=&lt;br /&gt;
Put the followin in .muttrc to change From.&lt;br /&gt;
 set realname=&amp;quot;Joe User&amp;quot;&lt;br /&gt;
 set from=&amp;quot;user@host&amp;quot;&lt;br /&gt;
 set use_from=yes&lt;br /&gt;
command line mail with attachment&lt;br /&gt;
 mutt -s subject -a syslogs.tar.gz admin@domain.org &amp;lt; /dev/null&lt;br /&gt;
Change sender from command line.&lt;br /&gt;
 export EMAIL=address@inter.net &amp;amp;&amp;amp; mutt -s &amp;quot;Subject Test&amp;quot; anden@halfface.se &amp;lt; /dev/null&lt;br /&gt;
 echo &amp;quot;Test message&amp;quot; | mutt -s &amp;quot;Subject test&amp;quot; -e &amp;quot;set realname=\&amp;quot;Real Name\&amp;quot;&amp;quot; -e &amp;quot;set from=\&amp;quot;anden@halfface.se\&amp;quot;&amp;quot; -e &amp;quot;set use_from=yes&amp;quot; anden@halfface.se&lt;br /&gt;
Change envolope from&lt;br /&gt;
 export REPLYTO=email@inter.net&lt;br /&gt;
 export EMAIL=email@inter.net&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment&lt;br /&gt;
oneliner&lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; email@inter.net -a /tmp/attachment &lt;br /&gt;
 export EMAIL=email@inter.net;export REPLYTO=&amp;quot;${EMAIL}&amp;quot;;echo &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; | mutt -e &amp;quot;set envelope_from=yes&amp;quot; -s &amp;quot;${EMAIL} testing on ${HOSTNAME}&amp;quot; &amp;quot;${EMAIL}&amp;quot;&lt;br /&gt;
Dont trigger out of Out Of Office reply.&lt;br /&gt;
 echo &amp;quot;email@inter.net testing&amp;quot; | mutt -e &amp;quot;unignore list-id&amp;quot; email@inter.net&lt;br /&gt;
=multilog=&lt;br /&gt;
split standard output to logfiles. In this case keep specific size. t means to prepend a TAI timestamp on each line. 10000B. 5 logfiles. tai64nlocal program simply reads stdin and replaces TAI timestamps with human-readable ones. http://blog.teksol.info/pages/daemontools/best-practices. Compress rotated logfiles.&lt;br /&gt;
 mkdir /tmp/myapp ; ./myapp | multilog t s10000 n5 &#039;!tai64nlocal&#039; &#039;!gzip&#039; /tmp/myapp 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
=nc (netcat)=&lt;br /&gt;
==Check communication.==&lt;br /&gt;
listen on port 3333.&lt;br /&gt;
 nc -kl 3333&lt;br /&gt;
talk to port 3333.&lt;br /&gt;
 nc 192.168.0.1 3333&lt;br /&gt;
&lt;br /&gt;
==Transfer data==&lt;br /&gt;
Cat file, calculate size listen on port 3333.&lt;br /&gt;
 cat backup.iso | pv -b | nc -l 3333&lt;br /&gt;
Receive file.&lt;br /&gt;
 nc 192.168.0.1 3333 | pv -b &amp;gt; backup.iso&lt;br /&gt;
&lt;br /&gt;
==Setup telnet server==&lt;br /&gt;
 nc -L -l -p1234 -d -e cmd.exe&lt;br /&gt;
&lt;br /&gt;
==Test connection.==&lt;br /&gt;
 nc -w2 -znv 10.1.22.31 7222&lt;br /&gt;
&lt;br /&gt;
==tunnel==&lt;br /&gt;
On the server, we open a listener on the TCP port 6667 which will      forward data to UDP port 53 of a specified IP. If you want to do      DNS forwarding like me, you can take the first nameserver&#039;s IP      you will find in /etc/resolv.conf - in this      example, this is 192.168.1.1. But first, we need to      create a fifo. The fifo is necessary to have two-way      communication between the two channels. A simple shell pipe      would only communicate left process&#039; standard output to right      process&#039; standard input.&lt;br /&gt;
&lt;br /&gt;
 mkfifo /tmp/fifo&lt;br /&gt;
 nc -l -p 6667 &amp;lt; /tmp/fifo | nc -u 192.168.1.1 53 &amp;gt; /tmp/fifo&lt;br /&gt;
&lt;br /&gt;
==Dont eat up standard output.==&lt;br /&gt;
 nc -v --send-only --recv-only localhost 22&lt;br /&gt;
&lt;br /&gt;
==Talk to pop3 server over ssl.==&lt;br /&gt;
 nc --ssl mail.tele2.se 995&lt;br /&gt;
==Talk to pop server==&lt;br /&gt;
 nc -C mail.tele2.se 25&lt;br /&gt;
&lt;br /&gt;
==Talk to web server==&lt;br /&gt;
 URL_SSL=halfface.se ; echo -e &amp;quot;HEAD / HTTP/1.1\nHost: ${URL_SSL}\n\n&amp;quot; | nc --ssl ${URL_SSL} 443&lt;br /&gt;
 echo -e &#039;GET /users/password/new HTTP/1.1\r\nHost: localhost\r\nConnection: Close\r\n\r\n&#039; | nc localhost 80 | head&lt;br /&gt;
To overcome problems with nc closing connection too fast.&lt;br /&gt;
 (echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;; sleep .1) | nc 172.30.156.15 80 | head -30&lt;br /&gt;
 nc --no-shutdown -v 172.30.156.15 80 &amp;lt;&amp;lt;&amp;lt;$(echo -en &#039;GET / HTTP/1.1\r\nHost: 172.30.156.15\r\nConnection: close\r\n\r\n&#039;)&lt;br /&gt;
&lt;br /&gt;
=ncdu=&lt;br /&gt;
disk usage. Stay in one filesystem.&lt;br /&gt;
 ncdu -x /&lt;br /&gt;
=net=&lt;br /&gt;
Start service via samba.&lt;br /&gt;
 net rpc service start ipremote -I 172.17.255.99 -U &#039;domain/user%password&#039;&lt;br /&gt;
&lt;br /&gt;
=netstat=&lt;br /&gt;
Look at network connections. tcp/ip4.&lt;br /&gt;
 netstat -4anpt&lt;br /&gt;
Look at multicast groups&lt;br /&gt;
 netstat -g&lt;br /&gt;
What does it mean?=&lt;br /&gt;
   ESTABLISHED&lt;br /&gt;
          The socket has an established connection.&lt;br /&gt;
   SYN_SENT&lt;br /&gt;
          The socket is actively attempting to establish a connection.&lt;br /&gt;
   SYN_RECV&lt;br /&gt;
          A connection request has been received from the network.&lt;br /&gt;
   FIN_WAIT1&lt;br /&gt;
          The socket is closed, and the connection is shutting down.&lt;br /&gt;
   FIN_WAIT2&lt;br /&gt;
          Connection is closed, and the socket is waiting for  a  shutdown&lt;br /&gt;
          from the remote end.&lt;br /&gt;
   TIME_WAIT&lt;br /&gt;
          The socket is waiting after close to handle packets still in the&lt;br /&gt;
          network.&lt;br /&gt;
   CLOSE  The socket is not being used.&lt;br /&gt;
   CLOSE_WAIT&lt;br /&gt;
          The remote end has shut down, waiting for the socket to close.&lt;br /&gt;
   LAST_ACK&lt;br /&gt;
          The remote end has shut down, and the socket is closed.  Waiting&lt;br /&gt;
          for acknowledgement.&lt;br /&gt;
   LISTEN The  socket is listening for incoming connections.  Such sockets&lt;br /&gt;
          are  not  included  in  the  output  unless  you   specify   the&lt;br /&gt;
          --listening (-l) or --all (-a) option.&lt;br /&gt;
   CLOSING&lt;br /&gt;
          Both  sockets are shut down but we still don&#039;t have all our data&lt;br /&gt;
          sent.&lt;br /&gt;
   UNKNOWN&lt;br /&gt;
          The state of the socket is unknown.&lt;br /&gt;
==statistics==&lt;br /&gt;
 netstat -s&lt;br /&gt;
 netstat -s | retransmit&lt;br /&gt;
&lt;br /&gt;
=nft=&lt;br /&gt;
nftables list config&lt;br /&gt;
 nft -j list ruleset | jq . &lt;br /&gt;
=nmap=&lt;br /&gt;
Scan for open ssh ports.&lt;br /&gt;
 nmap -p 22 --open -sV 10.0.0.*&lt;br /&gt;
 nmap -p 22 -sV --open -oG - $(ip -4 a s $(ip route show default | awk &#039;{print $5}&#039;) | grep inet | awk &#039;{print $2}&#039;) | awk &#039;/\/open\// {print $2,$3}&#039;&lt;br /&gt;
Syn scan.&lt;br /&gt;
 nmap -P0 -sS -p1023 www.halfface.se&lt;br /&gt;
Ping scan. Do not resolve.&lt;br /&gt;
 nmap -sn -n 10.127.254.1-254&lt;br /&gt;
Which ciphers are allowed.&lt;br /&gt;
 nmap --script ssl-enum-ciphers -p 465 www.halfface.se&lt;br /&gt;
arp scan.&lt;br /&gt;
 nmap -PR 192.168.0.0/24&lt;br /&gt;
which kex_algorithms server_host_key_algorithms encryption_algorithms compression_algorithms&lt;br /&gt;
 nmap --script ssh2-enum-algos -sV -p 22 ssh.server.inter.net&lt;br /&gt;
Which manufacturer.&lt;br /&gt;
 nmap -sn 10.111.222.0/24&lt;br /&gt;
&lt;br /&gt;
=nmcli=&lt;br /&gt;
==List connections==&lt;br /&gt;
 nmcli con&lt;br /&gt;
==rename connection==&lt;br /&gt;
 nmcli connection modify &amp;lt;old_name&amp;gt; con-name &amp;lt;new_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==manage network from cli==&lt;br /&gt;
 http://fedoraproject.org/wiki/Networking/CLI&lt;br /&gt;
==Connect to a configured connection by name==&lt;br /&gt;
 nmcli connection up WireLess&lt;br /&gt;
==Disconnection by name==&lt;br /&gt;
 nmcli connection down Wireless&lt;br /&gt;
==Connect to remembered network.==&lt;br /&gt;
 nmcli con up &#039;[-_-] halfface 5&#039; &lt;br /&gt;
==List available wireless networks.==&lt;br /&gt;
 nmcli device wifi list&lt;br /&gt;
==Generate list of available wireless networks.==&lt;br /&gt;
 nmcli device wifi rescan&lt;br /&gt;
 sudo nmcli device wifi list --rescan yes&lt;br /&gt;
&lt;br /&gt;
==Create connection for wireless network.==&lt;br /&gt;
 nmcli device wifi connect Bredband password P4ssM0rd&lt;br /&gt;
==Connect to specific bssid==&lt;br /&gt;
 nmcli connection modify MyWifiConnection 802-11-wireless.bssid 00:11:22:33:44:55&lt;br /&gt;
&lt;br /&gt;
==List networks on specific interface.==&lt;br /&gt;
 nmcli device wifi list ifname wlp0s18f2u4&lt;br /&gt;
==Disconnect network interface.==&lt;br /&gt;
 nmcli device disconnect wlp0s18f2u4&lt;br /&gt;
==Manually setup interface.==&lt;br /&gt;
 nmcli con add con-name &amp;quot;static-ens32&amp;quot; ifname ens32 type ethernet ip4 xxx.xxx.120.44/24 gw4 xxx.xxx.120.1&lt;br /&gt;
 nmcli con mod &amp;quot;static-ens32&amp;quot; ipv4.dns &amp;quot;xxx.xxx.120.1,8.8.8.8&amp;quot;&lt;br /&gt;
 nmcli con up &amp;quot;static-ens32&amp;quot; iface ens32&lt;br /&gt;
==list devices.==&lt;br /&gt;
 nmcli device status&lt;br /&gt;
==list connections.==&lt;br /&gt;
 nmcli connection show&lt;br /&gt;
==delete connection==&lt;br /&gt;
 nmcli con delete &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
==add connection with static ip.==&lt;br /&gt;
 nmcli con add con-name ens224 ifname ens224 type ethernet ip4 172.30.109.16/24&lt;br /&gt;
==show properties for connection==&lt;br /&gt;
 nmcli dev show ens224&lt;br /&gt;
==set dns server==&lt;br /&gt;
 nmcli connection modify enp1s0 ipv4.dns &amp;quot;10.111.222.2,8.8.8.8&amp;quot;&lt;br /&gt;
==edit==&lt;br /&gt;
 nmcli con edit $connection&lt;br /&gt;
 print all&lt;br /&gt;
==autostart==&lt;br /&gt;
 nmcli connection modify IFNAME connection.autoconnect yes|no&lt;br /&gt;
==dhcp option==&lt;br /&gt;
 ip -4 addr show | grep -Ev &amp;quot;127.0.0.1|LOOPBACK&amp;quot; | awk &#039;/^[0-9]+:/ {sub(/:/,&amp;quot;&amp;quot;,$2); print $2}&#039; | sort -u | while read NIC ; do echo &#039;*&#039; $NIC ; nmcli -f DHCP4 device show $NIC ; done&lt;br /&gt;
&lt;br /&gt;
==Make network a bridge interface==&lt;br /&gt;
 sudo nmcli con add ifname br0 type bridge con-name br0&lt;br /&gt;
 sudo nmcli con add type bridge-slave ifname &amp;lt;network_card&amp;gt; master br0&lt;br /&gt;
 sudo nmcli con modify br0 bridge.stp no&lt;br /&gt;
 sudo nmcli con down &amp;quot;Wired connection 1&amp;quot;&lt;br /&gt;
 sudo nmcli con up br0&lt;br /&gt;
==modify(change) vlan id==&lt;br /&gt;
 nmcli connection modify &amp;lt;connection_name&amp;gt; vlan.id &amp;lt;new_id&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=nohup=&lt;br /&gt;
Start binary under nohup and tail log.&lt;br /&gt;
 nohup ./run.sh &amp;amp; sleep 1 ; tail -1000f nohup.out&lt;br /&gt;
Start process and log to specified file.&lt;br /&gt;
 nohup daemon &amp;gt; /path/daemon.log &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=nping=&lt;br /&gt;
 nping -c 1 --tcp -p 80 www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=nth=&lt;br /&gt;
Name That Hash&lt;br /&gt;
 nth --text &#039;$y$j9T$jogs61gwDHB6L1oEwHeR00$L4cfYqkxKzS8dtkC5hPXFRMOIcEl6q5VKIkngrRGFM0&#039;&lt;br /&gt;
=ntfs-3g=&lt;br /&gt;
mount ntfs filesystem. read and write.&lt;br /&gt;
 yum install fuse fuse-libs ntfs-3g&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -r -o umask=0222,locale=en_US&lt;br /&gt;
 mount /dev/sda1 /media/c_drive -t ntfs-3g -rw -o umask=0000,locale=en_US&lt;br /&gt;
 fstab read and write.&lt;br /&gt;
 /dev/sda3   /media/e_drive     ntfs-3g    ro,defaults,umask=0222 0 0&lt;br /&gt;
 /dev/sda1   /media/c_drive     ntfs-3g    rw,defaults,umask=0000 0 0&lt;br /&gt;
Create ntfs partition.&lt;br /&gt;
 fdisk 7/gdisk 0700&lt;br /&gt;
 mkfs.ntfs /dev/sdx1 -Q&lt;br /&gt;
&lt;br /&gt;
=numbers=&lt;br /&gt;
series of numbers&lt;br /&gt;
 bash:&lt;br /&gt;
 echo {1..10}&lt;br /&gt;
=numfmt=&lt;br /&gt;
iec=accept optional single letter suffix. No output suffix. Remove B from input. change format of output, mb ,gb and so on.&lt;br /&gt;
 numfmt --from=iec --to=none --suffix=B 8.7KB&lt;br /&gt;
&lt;br /&gt;
=nwipe (dban)=&lt;br /&gt;
Wipe your disk&lt;br /&gt;
 nwipe --nogui --nowait --autonuke /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=omping=&lt;br /&gt;
multicast ping&lt;br /&gt;
  omping -c10 10.111.222.118 10.111.222.121&lt;br /&gt;
=openvpn3=&lt;br /&gt;
==Install openvpn fedora 38+ /etc/yum.repos.d/_copr\:copr.fedorainfracloud.org\:dsommers\:openvpn3-devsnapshots.repo==&lt;br /&gt;
 [copr:copr.fedorainfracloud.org:dsommers:openvpn3-devsnapshots]&lt;br /&gt;
 name=Copr repo for openvpn3-devsnapshots owned by dsommers&lt;br /&gt;
 baseurl=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/fedora-$releasever-$basearch/&lt;br /&gt;
 type=rpm-md&lt;br /&gt;
 skip_if_unavailable=True&lt;br /&gt;
 gpgcheck=1&lt;br /&gt;
 gpgkey=https://download.copr.fedorainfracloud.org/results/dsommers/openvpn3-devsnapshots/pubkey.gpg&lt;br /&gt;
 repo_gpgcheck=0&lt;br /&gt;
 enabled=1&lt;br /&gt;
 enabled_metadata=1&lt;br /&gt;
==Install package from above.==&lt;br /&gt;
 dnf install openvpn3-client&lt;br /&gt;
==Add configuration==&lt;br /&gt;
 OPENVPN_CONFIG=&amp;lt;name&amp;gt; ; openvpn3 config-import --name &amp;quot;$OPENVPN_CONFIG&amp;quot; --persistent --config &amp;quot;$OPENVPN_CONFIG&amp;quot;.ovpn&lt;br /&gt;
==List configs==&lt;br /&gt;
 openvpn3 configs-list&lt;br /&gt;
 openvpn3 configs-list --verbose&lt;br /&gt;
&lt;br /&gt;
==Remove config==&lt;br /&gt;
 openvpn3 config-remove --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==show full config==&lt;br /&gt;
 openvpn3 config-dump --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Connect==&lt;br /&gt;
 openvpn3 session-start --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Disconnect==&lt;br /&gt;
 openvpn3 session-manage --config &amp;lt;config-name&amp;gt; --disconnect&lt;br /&gt;
==Connect to the log with debug enabled. This can be run in a different terminal window after the connection has been started.==&lt;br /&gt;
 openvpn3 log --config &amp;lt;config-name&amp;gt; --log-level 6&lt;br /&gt;
==Show active sessions==&lt;br /&gt;
 openvpn3 sessions-list&lt;br /&gt;
==Show statistics for an active session==&lt;br /&gt;
 openvpn3 session-stats --config &amp;lt;config-name&amp;gt;&lt;br /&gt;
==Show configuration settings==&lt;br /&gt;
 openvpn3 config-manage --config &amp;lt;config-name&amp;gt; --show&lt;br /&gt;
==sessions disconnect==&lt;br /&gt;
 openvpn3 sessions-list | grep Path | awk &#039;{print $2}&#039; | while read OPENVPN_PATH ; do echo $OPENVPN_PATH ; openvpn3 session-manage --session-path $OPENVPN_PATH --disconnect ; done&lt;br /&gt;
==View config files==&lt;br /&gt;
 sudo find /var/lib/openvpn3/configs/ -type f&lt;br /&gt;
&lt;br /&gt;
=openssl=&lt;br /&gt;
==Grab the public key.==&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443 &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -ne &#039;/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p&#039;&lt;br /&gt;
==What does the ssl cert look like.==&lt;br /&gt;
 HOST=www.halfface.se ; PORT=443 ; echo | openssl s_client -connect ${HOST}:${PORT} -servername ${HOST}| openssl x509 -ext subjectAltName -noout -startdate -enddate -subject -issuer -nameopt RFC2253,sep_comma_plus_space&lt;br /&gt;
&lt;br /&gt;
==What does crl look like. (Certificate Revocation List)==&lt;br /&gt;
 openssl crl -inform PEM -text -noout -in crl.pem&lt;br /&gt;
&lt;br /&gt;
==Connect to ssl server==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect to ssl server -cipher NULL,LOW==&lt;br /&gt;
 echo hello | openssl s_client -connect www.halfface.se:8140&lt;br /&gt;
==Connect with openssl v3==&lt;br /&gt;
 openssl s_client -ssl3 -connect ipmon01.dupont:443&lt;br /&gt;
==Connect with low security cipher==&lt;br /&gt;
 echo X | openssl s_client -cipher NULL,LOW -connect www.halfface.se:8140&lt;br /&gt;
==PEM convert to DER==&lt;br /&gt;
 openssl x509 -inform PEM -in /file.pem -outform DER file.der&lt;br /&gt;
==p12 to cer==&lt;br /&gt;
 openssl pkcs12 -in infile.p12 -out outfile.cer -nodes&lt;br /&gt;
Export public&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.pem -clcerts -nokeys -passin pass:${PASS}&lt;br /&gt;
Export private&lt;br /&gt;
 openssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes -passin pass:&amp;lt;password&amp;gt;&lt;br /&gt;
 export CERT=&amp;lt;cert&amp;gt;.p12 ; export PASS=&amp;lt;pass&amp;gt; ; openssl pkcs12 -in $CERT -out ${CERT}.key -clcerts -nodes -passin pass:${PASS}&lt;br /&gt;
==p7b to pem==&lt;br /&gt;
 openssl pkcs7 -print_certs -in &amp;lt;certificate&amp;gt;.p7b -out certificate.pem&lt;br /&gt;
==pem to p12==&lt;br /&gt;
Using file containing private, public and chain.&lt;br /&gt;
 openssl pkcs12 -export -in sulzer.pem -out sulzer.p12 -passout pass:&lt;br /&gt;
&lt;br /&gt;
==pfx to pem==&lt;br /&gt;
 env FILE=&amp;quot;&amp;lt;file&amp;gt;&amp;quot; PASSWORD=&amp;quot;&amp;lt;password&amp;gt;&amp;quot; bash -c &#039;openssl pkcs12 -in &amp;quot;$FILE&amp;quot; -out &amp;quot;${FILE//\//_}.pem&amp;quot; -nodes -password pass:&amp;quot;$PASSWORD&amp;quot;&#039;&lt;br /&gt;
Complete file.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -out cert.pem -nodes&lt;br /&gt;
Get private cert. Then remove password. Decrypt&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -nocerts -out key.pem&lt;br /&gt;
 openssl rsa -in key.pem -out server.key&lt;br /&gt;
Get public cert.&lt;br /&gt;
 openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem&lt;br /&gt;
&lt;br /&gt;
==Extract p12 password protected keys in==&lt;br /&gt;
 openssl pkcs12 -in /file.p12 -passin file:/password -nokey -nodes -out /file.nokeys&lt;br /&gt;
 openssl pkcs12 -info -in &amp;lt;/path/to/file.pfx&amp;gt; -passin pass:&amp;lt;pfx&#039;s password&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Encrypt file==&lt;br /&gt;
 openssl aes-256-cbc -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Decrypte file==&lt;br /&gt;
 openssl aes-256-cbc -d -a -salt -in file -out file,encoded -passin file:passfile&lt;br /&gt;
==Install new root ca==&lt;br /&gt;
 # Change to the directory:&lt;br /&gt;
 cd /etc/pki/tls/certs&lt;br /&gt;
 # Next download the College root certificate:&lt;br /&gt;
 wget https://icca2.ic.ac.uk/certenroll/ic-root.crt&lt;br /&gt;
 # Convert the certificate to PEM format:&lt;br /&gt;
 openssl x509 -inform der -in ic-root.crt -out ic-root.pem&lt;br /&gt;
 # Create a link with the certificate hash:&lt;br /&gt;
 ln -s ic-root.pem `openssl x509 -hash -noout -in ic-root.pem`.0&lt;br /&gt;
 # Create sha256 base64 encoded hash&lt;br /&gt;
 openssl dgst -binary -sha256 | openssl base64&lt;br /&gt;
 # Verify root ca.&lt;br /&gt;
 openssl verify -CApath /etc/pki/tls/certs ic-inter-root.pem&lt;br /&gt;
 icrootca.cer: OK&lt;br /&gt;
The server certificate is the first certificate returned, and will be PEM formatted. The CA certificate is the final certificate returned, and is also PEM formatted.&lt;br /&gt;
 openssl&#039;: echo | openssl s_client -connect www.sslsite.com:443 -showcerts&lt;br /&gt;
Check ca store files.&lt;br /&gt;
 find . -name &#039;*.pem&#039; | while read PEM ; do echo &#039;###&#039; ${PEM} &#039;###&#039;;ls -la &amp;quot;${PEM}&amp;quot; ; set -x ; curl --cacert &amp;quot;${PEM}&amp;quot; https://site.test.net/index.htm.&lt;br /&gt;
==Verify pop3 connectivity.==&lt;br /&gt;
 openssl s_client -crlf -connect mail.tele2.se:110 -starttls pop3&lt;br /&gt;
 USER yiming&lt;br /&gt;
 PASS foobar&lt;br /&gt;
 LIST – lists the messages available in the user’s account, returning a status message and list with each row containing a message number and the size of that message in bytes&lt;br /&gt;
 STAT – returns a status message, the number of messages in the mailbox, and the size of the mailbox in bytes&lt;br /&gt;
 RETR [message_num] – returns the message identified by the message number, which is the same as the message number shown in the LIST command output&lt;br /&gt;
 TOP [message_num] [n] – returns the top n lines of the message denoted by message number.&lt;br /&gt;
 QUIT command will end the session.&lt;br /&gt;
==Create wildcard self signed certificate.==&lt;br /&gt;
 openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout wildcard.test.internal.zone.key -out wildcard.test.internal.zone.crt&lt;br /&gt;
 Common Name (eg, your name or your server&#039;s hostname) []:*.test.internal.zone&lt;br /&gt;
==Verify certificate chain==&lt;br /&gt;
 openssl verify -CAfile Thawte_Primary_Root_CA.pem -untrusted thawte_SSL_CA_G2.cer www.halfface.se.pem&lt;br /&gt;
Look at certificate chain.&lt;br /&gt;
 openssl s_client -connect www.halfface.se:443&lt;br /&gt;
 CONNECTED(00000003)&lt;br /&gt;
 depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=1 C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
 verify return:1&lt;br /&gt;
 depth=0 CN = www.halfface.se&lt;br /&gt;
 verify return:1&lt;br /&gt;
 ---&lt;br /&gt;
 Certificate chain&lt;br /&gt;
  0 s:CN = www.halfface.se&lt;br /&gt;
    i:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
  1 s:C = US, O = Let&#039;s Encrypt, CN = Let&#039;s Encrypt Authority X3&lt;br /&gt;
    i:O = Digital Signature Trust Co., CN = DST Root CA X3&lt;br /&gt;
 ---&lt;br /&gt;
Verify chain.&lt;br /&gt;
 openssl s_client -showcerts -verify 5 -connect www.halfface.se:443 &amp;lt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
==Connect to smtp server via ssl.==&lt;br /&gt;
 openssl s_client -crlf -ign_eof -connect www.halfface.se:25 -starttls smtp -quiet&lt;br /&gt;
 EHLO halfface.se&lt;br /&gt;
 AUTH LOGIN&lt;br /&gt;
 $(echo -n &amp;quot;username&amp;quot; | base64)&lt;br /&gt;
 $(echo -n &amp;quot;password&amp;quot; | base64)&lt;br /&gt;
 MAIL FROM:anden@halfface.se&lt;br /&gt;
 RCPT TO:&amp;lt;anden@halfface.se&amp;gt;&lt;br /&gt;
 DATA&lt;br /&gt;
 Subject: Test from cli. &lt;br /&gt;
 &lt;br /&gt;
 This is a test email.&lt;br /&gt;
 .&lt;br /&gt;
 QUIT&lt;br /&gt;
&lt;br /&gt;
==Connect to imap==&lt;br /&gt;
 openssl s_client -crlf -connect www.halfface.se:993&lt;br /&gt;
 openssl s_client -showcerts -connect www.halfface.se:143 -starttls imap&lt;br /&gt;
Login&lt;br /&gt;
 tag login abjorklund ${PASSWORD}&lt;br /&gt;
List mailboxes&lt;br /&gt;
 tag LIST &amp;quot;&amp;quot; &amp;quot;*&amp;quot;&lt;br /&gt;
Log out&lt;br /&gt;
 tag LOGOUT&lt;br /&gt;
&lt;br /&gt;
==compare two certifactes==&lt;br /&gt;
Compare the use case for the certificate.&lt;br /&gt;
  sdiff &amp;lt;(openssl x509 -in server.crt -noout -issuer -subject -enddate -purpose) &amp;lt;(openssl x509 -in uc_activemq.crt -noout -issuer -subject -enddate -purpose)| less&lt;br /&gt;
==create a csr==&lt;br /&gt;
 openssl req -new -sha256 -nodes -out www.halfface.se.csr -newkey rsa:2048 -keyout www.halfface.se.key -config &amp;lt;(&lt;br /&gt;
 cat &amp;lt;&amp;lt;-EOF&lt;br /&gt;
 [req]&lt;br /&gt;
 default_bits = 2048&lt;br /&gt;
 prompt = no&lt;br /&gt;
 default_md = sha256&lt;br /&gt;
 req_extensions = req_ext&lt;br /&gt;
 distinguished_name = dn&lt;br /&gt;
 [ dn ]&lt;br /&gt;
 O=Organisation: halfface&lt;br /&gt;
 C=SE&lt;br /&gt;
 ST=Stockholm&lt;br /&gt;
 L=Stockholm&lt;br /&gt;
 CN = www.halfface.se&lt;br /&gt;
 [ req_ext ]&lt;br /&gt;
 subjectAltName = @alt_names&lt;br /&gt;
 [ alt_names ]&lt;br /&gt;
 DNS.1 = halfface.se&lt;br /&gt;
 DNS.2 = ldap.halfface.se&lt;br /&gt;
 DNS.3 = mqtt.halfface.se&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
==csr information==&lt;br /&gt;
 openssl req -noout -text -in file.csr | grep -vE &#039;  [0-9A-Fa-f]{2}:[0-9A-Fa-f]{2}:&#039;&lt;br /&gt;
&lt;br /&gt;
==look at content of private key==&lt;br /&gt;
 openssl rsa -text -noout -in key.pem&lt;br /&gt;
&lt;br /&gt;
==confirm that public private and csr match==&lt;br /&gt;
 # For your SSL certificate: &lt;br /&gt;
 CERT_PUBLIC=$(ls *.crt)&lt;br /&gt;
 echo $(openssl x509 -noout -modulus -in &amp;quot;${CERT_PUBLIC}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PUBLIC}&amp;quot;,public cert.&lt;br /&gt;
 # For your RSA private key: &lt;br /&gt;
 CERT_PRIVATE=$(ls *.key)&lt;br /&gt;
 echo $(openssl rsa -noout -modulus -in &amp;quot;${CERT_PRIVATE}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_PRIVATE}&amp;quot;,private key&lt;br /&gt;
 # For your CSR: &lt;br /&gt;
 CERT_CSR=$(ls *.csr)&lt;br /&gt;
 echo $(openssl req -noout -modulus -in &amp;quot;${CERT_CSR}&amp;quot; | openssl md5 | awk &#039;{print $2}&#039;),&amp;quot;${CERT_CSR}&amp;quot;,certificate signing request&lt;br /&gt;
&lt;br /&gt;
==connect with ca private and public key==&lt;br /&gt;
 openssl s_client -CAfile ca.pem -cert public.crt -key private.key -connect 10.12.118.184:1023 -tls1_2&lt;br /&gt;
==create a ca==&lt;br /&gt;
===Create ca and certificates.===&lt;br /&gt;
 # Create folder structure.&lt;br /&gt;
 mkdir /root/ca/&lt;br /&gt;
 mkdir /root/ca/certs/&lt;br /&gt;
 mkdir /root/ca/crl/&lt;br /&gt;
 mkdir /root/ca/newcerts/&lt;br /&gt;
 mkdir /root/ca/private/&lt;br /&gt;
 mkdir /root/ca/requests/&lt;br /&gt;
 touch /root/ca/index.txt&lt;br /&gt;
 echo 1000 &amp;gt; /root/ca/serial&lt;br /&gt;
 chmod 600 /root/ca&lt;br /&gt;
 # Create private key for the CA certificate. pass phrase: $(pwgen 15)&lt;br /&gt;
 cd /root/ca/&lt;br /&gt;
 openssl genrsa -aes256 -out private/cakey.pem 4096&lt;br /&gt;
 # Create a public certificate for the CA.&lt;br /&gt;
 openssl req -new -x509 -key /root/ca/private/cakey.pem -out cacert.pem -days 36525&lt;br /&gt;
&lt;br /&gt;
 Country Name (2 letter code) [AU]:SE&lt;br /&gt;
 State or Province Name (full name) [Some-State]:Stockholm&lt;br /&gt;
 Locality Name (eg, city) []:Stockholm&lt;br /&gt;
 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Company&lt;br /&gt;
 Organizational Unit Name (eg, section) []:Company&lt;br /&gt;
 Common Name (e.g. server FQDN or YOUR name) []:Certificate Authority&lt;br /&gt;
 Email Address []:anden@halfface.se&lt;br /&gt;
&lt;br /&gt;
 # Copy system openssl.cnf to /root/ca dir. Then change dir in config.&lt;br /&gt;
 vim openssl.cnf&lt;br /&gt;
 [ CA_default ]&lt;br /&gt;
 dir = /root/ca # Where everything is kept&lt;br /&gt;
&lt;br /&gt;
===Create signed certificate keypair===&lt;br /&gt;
 cd requests/&lt;br /&gt;
 # Create csr&lt;br /&gt;
 openssl req -new -newkey rsa:2048 -nodes -keyout &amp;lt;client&amp;gt;.key -out &amp;lt;client&amp;gt;.csr -config ../openssl.cnf&lt;br /&gt;
 # Issue certificate for csr.&lt;br /&gt;
 openssl ca -in &amp;lt;client&amp;gt;.csr -out &amp;lt;client&amp;gt;.crt -config ../openssl.cnf -days 36525&lt;br /&gt;
&lt;br /&gt;
==talk http via openssl==&lt;br /&gt;
 openssl s_client -crlf -quiet -connect www.halfface.se:443 &amp;lt;&amp;lt;EOF&lt;br /&gt;
 GET / HTTP/2.0&lt;br /&gt;
 Host: www.halfface.se&lt;br /&gt;
 &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==look at cert==&lt;br /&gt;
 openssl asn1parse -in rb-ca.crt.2021-02-28&lt;br /&gt;
==performance testing==&lt;br /&gt;
 openssl speed -evp aes-256-ecb&lt;br /&gt;
==confirm that ca is correct==&lt;br /&gt;
 echo | openssl s_client -CAfile Sectigo_RSA_Domain_Validation_Secure_Server_CA.pem -no-CAfile -no-CApath -tls1_2 -connect 172.30.32.141:5044 2&amp;gt;&amp;amp;1 | grep Verification&lt;br /&gt;
 Verification: OK&lt;br /&gt;
==openssl s_server==&lt;br /&gt;
Setup server listening as http server.&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert host.inter.net.crt -key host.inter.net.key&lt;br /&gt;
Setup https server listening on https on port 4433 providing complete chain&lt;br /&gt;
 openssl s_server -status_verbose -HTTP -cert halfface.se.pem -cert_chain halfface.se.intermediate.pem -key halfface.se.key -accept 4433&lt;br /&gt;
&lt;br /&gt;
==othername:&amp;lt;unsupported&amp;gt;==&lt;br /&gt;
You will have to locate the &amp;quot;OCTET STRING&amp;quot; line just below the &amp;quot;OBJECT :X509v3 Subject Alternative Name&amp;quot; line then strpars&lt;br /&gt;
 # print section offset via&lt;br /&gt;
 openssl asn1parse -in yourcert.pem&lt;br /&gt;
 # parse otherName from &amp;quot;OCTET STRING&amp;quot; &amp;lt;offset&amp;gt; is the value in the beginning of the line.&lt;br /&gt;
 openssl asn1parse -in yourcert.pem -strparse &amp;lt;offset&amp;gt;&lt;br /&gt;
Another way of seeing same data is through &lt;br /&gt;
 openssl asn1parse -in /tmp/tmp -dump -strictpem&lt;br /&gt;
&lt;br /&gt;
=create password string=&lt;br /&gt;
 openssl passwd -6 -salt $RANDOM $PASSWORD&lt;br /&gt;
&lt;br /&gt;
=pactl=&lt;br /&gt;
Pulse Audio cli tool.&lt;br /&gt;
List output devices.&lt;br /&gt;
 pactl list short sinks&lt;br /&gt;
Set default output device&lt;br /&gt;
 pactl set-default-sink $i&lt;br /&gt;
List where applications send output.&lt;br /&gt;
 pactl list short sink-inputs&lt;br /&gt;
Move application to other output device.&lt;br /&gt;
 pactl move-sink-input $applicaiton $sink&lt;br /&gt;
&lt;br /&gt;
=pam=&lt;br /&gt;
Troubleshooting pam.&lt;br /&gt;
 /etc/syslog.conf&lt;br /&gt;
 # Get debugging data.&lt;br /&gt;
 *.debug     /var/log/debug.log&lt;br /&gt;
Create logfile and restart *syslog.&lt;br /&gt;
 touch /var/log/debug.log&lt;br /&gt;
 service syslog restart&lt;br /&gt;
Put pam in debug mode.&lt;br /&gt;
 touch /etc/pam_debug&lt;br /&gt;
OR you can enable debugging only for the modules you&#039;re interested in by adding &amp;quot;debug&amp;quot; to the end of the relevant lines in /etc/pam.d/system-auth or the other /etc/pam.d/* files:&lt;br /&gt;
 login   auth    required    pam_unix.so debug&lt;br /&gt;
Debugging is found in /var/log/debug.log.&lt;br /&gt;
&lt;br /&gt;
=pam_tally2=&lt;br /&gt;
Configured here.&lt;br /&gt;
 /etc/pam.d/password-auth:auth        required      pam_tally2.so file=/var/log/tallylog onerr=fail per_user deny=6 no_magic_root&lt;br /&gt;
What is status from account?&lt;br /&gt;
 pam_tally2 --user=user1&lt;br /&gt;
 Login           Failures Latest failure     From&lt;br /&gt;
 user1             8    04/20/15 11:39:54  192.168.1.1&lt;br /&gt;
&lt;br /&gt;
=parallel=&lt;br /&gt;
Run command 10 times in parallel.&lt;br /&gt;
 seq 10 | parallel -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Run command 10 times in parallel dryrun.&lt;br /&gt;
 seq 10 | parallel --dry-run -n0 echo &amp;quot;Hello, World&amp;quot;&lt;br /&gt;
Compress logfiles in parallel.&lt;br /&gt;
 parallel gzip ::: *.log&lt;br /&gt;
=partprobe=&lt;br /&gt;
Rescan block device to setup device files&lt;br /&gt;
 partprobe /dev/sde&lt;br /&gt;
=partx=&lt;br /&gt;
 partx /dev/sda -l ; partx /dev/sda -u ; partx /dev/sda -l&lt;br /&gt;
&lt;br /&gt;
=paste=&lt;br /&gt;
Combine to files to one in multiple column. Replace tab with spaces.&lt;br /&gt;
 paste /tmp/check_name_nagios /tmp/filename | column -t -s $&#039;\t&#039;&lt;br /&gt;
Combine every second line with a space in between.&lt;br /&gt;
 paste -d&#039; &#039; - -&lt;br /&gt;
&lt;br /&gt;
=pcregrep=&lt;br /&gt;
Multiline grep&lt;br /&gt;
 pcregrep -M &#039;pattern: line1\nPattern lin2&#039; /temp/files_*&lt;br /&gt;
=pdftotext=&lt;br /&gt;
grab text from pdf document.&lt;br /&gt;
 pdftotext document.pdf&lt;br /&gt;
=pdftk=&lt;br /&gt;
Rotate clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endwest output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Rotate counter clockwise&lt;br /&gt;
 PDF=&amp;lt;file.pdf&amp;gt; ; pdftk &amp;quot;${PDF}&amp;quot; cat 1-endeast output &amp;quot;${PDF}&amp;quot;.rotate&lt;br /&gt;
Create one pdf from others.&lt;br /&gt;
 pdftk &amp;lt;file.pdf&amp;gt;* cat output &amp;lt;file_combo.pdf&amp;gt;&lt;br /&gt;
Extract one page from pdf.&lt;br /&gt;
 pdftk input.pdf cat 11 output page11.pdf&lt;br /&gt;
Extract series of pages from pdf&lt;br /&gt;
 pdftk input.pdf cat 3-7 output pages_3-7.pdf&lt;br /&gt;
&lt;br /&gt;
=pidof=&lt;br /&gt;
which pids has a program stared. Find pid.&lt;br /&gt;
&lt;br /&gt;
=ping=&lt;br /&gt;
Ping ipv6 loopback&lt;br /&gt;
 ping6 ::1 -c1&lt;br /&gt;
Ping ipv6 broadcast&lt;br /&gt;
 ping6 ff02::1%2 | cut -d\  -f4&lt;br /&gt;
Ping short output&lt;br /&gt;
 export ADDRESS=2001:4860:4860::8888 ; PING=$(ping6 -w1 -q -c1 -i10 ${ADDRESS} 2&amp;gt;&amp;amp;1) ; RTT=$( grep rtt &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot; | awk -F/ &#039;{print $6}&#039;) ; RECEIVED=$(grep received &amp;lt;&amp;lt;&amp;lt;&amp;quot;${PING}&amp;quot;) ; echo $ADDRESS $RECEIVED, rtt=${RTT}&lt;br /&gt;
Ping to discover mtu. 1460, 1450. When reply increase with 2. when found highest value increase with 28 to get mtu.&lt;br /&gt;
 ping -M do -s 1472 123.45.56.78&lt;br /&gt;
&lt;br /&gt;
=pip=&lt;br /&gt;
==which versions of django exist==&lt;br /&gt;
 pip install pylibmc&lt;br /&gt;
==which versions are installed==&lt;br /&gt;
 pip list&lt;br /&gt;
&lt;br /&gt;
==which files does pip package provide.==&lt;br /&gt;
 pip show -f $package&lt;br /&gt;
==Uppgrade package.==&lt;br /&gt;
 pip install $package --upgrade&lt;br /&gt;
==where your own packages might end up==&lt;br /&gt;
 /usr/local/lib/python3.9&lt;br /&gt;
 /usr/lib/python2.7/site-packages/&lt;br /&gt;
==upgrade pip==&lt;br /&gt;
 ls -la /usr/lib64/libldap_r.so /usr/lib64/libldap.so&lt;br /&gt;
==do not use cache==&lt;br /&gt;
 pip3 install -r requirements.txt --no-cache-dir&lt;br /&gt;
&lt;br /&gt;
=pgrep=&lt;br /&gt;
Grep any processlines including 1066&lt;br /&gt;
 pgrep -lf 1066&lt;br /&gt;
=pmap=&lt;br /&gt;
Look at memory usage of process.&lt;br /&gt;
 sudo pmap 2258&lt;br /&gt;
&lt;br /&gt;
=postfix=&lt;br /&gt;
remove mails in queue.&lt;br /&gt;
 mailq | grep ^[A-F0-9] | awk &#039;{print $1}&#039; | postsuper -d -&lt;br /&gt;
list mails in queue&lt;br /&gt;
 mailq | grep &amp;quot;^[A-F0-9]&amp;quot;&lt;br /&gt;
Get mails in better output to better decide what to do with mails.&lt;br /&gt;
 mailq | grep -v -- &amp;quot;-Queue ID-&amp;quot; |  sed &#039;s/^$/\x0/g&#039; | tr -d &#039;\n&#039; | sed &#039;s/\x0/\n/g&#039;&lt;br /&gt;
Remove stuck emails.&lt;br /&gt;
 postsuper -d ALL deferred&lt;br /&gt;
List email&lt;br /&gt;
 postcat -q E55692442F&lt;br /&gt;
Read mail&lt;br /&gt;
 postcat -vq [message-id]&lt;br /&gt;
&lt;br /&gt;
=pr=&lt;br /&gt;
Print two files between each other.&lt;br /&gt;
 pr -w200 -m -t /tmp/1 /tmp/2&lt;br /&gt;
=printf=&lt;br /&gt;
Convert octal to utf-8&lt;br /&gt;
 printf &#039;\360\237\222\200&#039;&lt;br /&gt;
decimal to integral&lt;br /&gt;
 printf &amp;quot;%.0f&amp;quot; &amp;lt;decimal&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=printscreen=&lt;br /&gt;
 import -window root test.png&lt;br /&gt;
Gnome copy graphics to paste buffer. Copy selected portion of screen.&lt;br /&gt;
 gnome-screenshot -a&lt;br /&gt;
&lt;br /&gt;
=/proc=&lt;br /&gt;
*/proc/meminfo&lt;br /&gt;
MemTotal — Total amount of physical RAM, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
MemFree — The amount of physical RAM, in kilobytes, left unused by the system.&lt;br /&gt;
&lt;br /&gt;
Buffers — The amount of physical RAM, in kilobytes, used for file buffers.&lt;br /&gt;
&lt;br /&gt;
Cached — The amount of physical RAM, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
SwapCached — The amount of swap, in kilobytes, used as cache memory.&lt;br /&gt;
&lt;br /&gt;
Active — The total amount of buffer or page cache memory, in kilobytes, that is in active use. This is memory that has been recently used and is usually not reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
Inactive — The total amount of buffer or page cache memory, in kilobytes, that are free and available. This is memory that has not been recently used and can be reclaimed for other purposes.&lt;br /&gt;
&lt;br /&gt;
HighTotal and HighFree — The total and free amount of memory, in kilobytes, that is not directly mapped into kernel space. The HighTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
LowTotal and LowFree — The total and free amount of memory, in kilobytes, that is directly mapped into kernel space. The LowTotal value can vary based on the type of kernel used.&lt;br /&gt;
&lt;br /&gt;
SwapTotal — The total amount of swap available, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
SwapFree — The total amount of swap free, in kilobytes.&lt;br /&gt;
&lt;br /&gt;
Dirty — The total amount of memory, in kilobytes, waiting to be written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Writeback — The total amount of memory, in kilobytes, actively being written back to the disk.&lt;br /&gt;
&lt;br /&gt;
Mapped — The total amount of memory, in kilobytes, which have been used to map devices, files, or libraries using the mmap command.&lt;br /&gt;
&lt;br /&gt;
Slab — The total amount of memory, in kilobytes, used by the kernel to cache data structures for its own use.&lt;br /&gt;
&lt;br /&gt;
Committed_AS — The total amount of memory, in kilobytes, estimated to complete the workload. This value represents the worst case scenario value, and also includes swap memory.&lt;br /&gt;
&lt;br /&gt;
PageTables — The total amount of memory, in kilobytes, dedicated to the lowest page table level.&lt;br /&gt;
&lt;br /&gt;
VMallocTotal — The total amount of memory, in kilobytes, of total allocated virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocUsed — The total amount of memory, in kilobytes, of used virtual address space.&lt;br /&gt;
&lt;br /&gt;
VMallocChunk — The largest contiguous block of memory, in kilobytes, of available virtual address space.&lt;br /&gt;
&lt;br /&gt;
HugePages_Total — The total number of hugepages for the system. The number is derived by dividing Hugepagesize by the megabytes set aside for hugepages specified in /proc/sys/vm/hugetlb_pool. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
HugePages_Free — The total number of hugepages available for the system. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
Hugepagesize — The size for each hugepages unit in kilobytes. By default, the value is 4096 KB on uniprocessor kernels for 32 bit architectures. For SMP, hugemem kernels, and AMD64, the default is 2048 KB. For Itanium architectures, the default is 262144 KB. This statistic only appears on the x86, Itanium, and AMD64 architectures.&lt;br /&gt;
&lt;br /&gt;
=ps=&lt;br /&gt;
==Process list in tree view.==&lt;br /&gt;
 ps axfww&lt;br /&gt;
==Process sort by cpu usage.==&lt;br /&gt;
 ps auxwww --sort -%cpu | head&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 ps -p 1 -o etime=&lt;br /&gt;
==Process list sorted after memory usage.==&lt;br /&gt;
 ps aux --sort=size&lt;br /&gt;
==Process show memory usage... sort...==&lt;br /&gt;
 ps axo rss,%cpu,pid,euser,cmd | sort -nr | head -n 10 | less -ISRM&lt;br /&gt;
==Process sort by mem usage.==&lt;br /&gt;
 ps auxwww --sort -rss | head&lt;br /&gt;
==Processes sorted by time running.==&lt;br /&gt;
 ps aux --sort -time&lt;br /&gt;
==Processes sorted by time started==&lt;br /&gt;
 ps -auxwww --sort=start_time&lt;br /&gt;
==ps showing threads.==&lt;br /&gt;
 ps -efL&lt;br /&gt;
==How long has process been running.==&lt;br /&gt;
 echo -n $(( ($(date +%s) - $( stat -c%X /proc/$(pgrep -f [a]ctivemq.jar))) / 3600 ))&lt;br /&gt;
==ps long usernames==&lt;br /&gt;
 ps axo user:20,pid,pcpu,pmem,vsz,rss,tty,stat,start,time,comm&lt;br /&gt;
==ps including nice==&lt;br /&gt;
 ps -eo pid,user,ni,comm&lt;br /&gt;
&lt;br /&gt;
=pstack=&lt;br /&gt;
 print a stack trace of a running process&lt;br /&gt;
&lt;br /&gt;
=pulseaudio=&lt;br /&gt;
# Is pulseaudio running?&lt;br /&gt;
 ps uxawww| grep -E pulseaudi[o]&lt;br /&gt;
# stop pulseaudio&lt;br /&gt;
 pulseaudio -k&lt;br /&gt;
# start pulseaudio as found by ps | grep pulseaudio&lt;br /&gt;
 /usr/bin/pulseaudio --start --log-target=syslog&lt;br /&gt;
&lt;br /&gt;
=putty=&lt;br /&gt;
Run putty from cli with login&lt;br /&gt;
 &amp;quot;C:\Program Files\PuTTY\putty.exe&amp;quot; -l &amp;lt;username&amp;gt; -pw &amp;lt;password&amp;gt; &amp;lt;host_url&amp;gt;&lt;br /&gt;
Always setup stay alive.&lt;br /&gt;
 connection -&amp;gt; keepalive -&amp;gt; 60&lt;br /&gt;
set up tunnel&lt;br /&gt;
 putty -load blt.homeip.net -l bjorklun -pw password -L 19242:192.168.0.42:3389 blt.homeip.net&lt;br /&gt;
putty without taking tty.&lt;br /&gt;
 plink -load www.halfface.se -l user_name -pw password -R *:3389:localhost:3389 -2 -4 -N&lt;br /&gt;
reverse tunnel. Connect remote host 3400 to machine running putty localhost:3389.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; &amp;quot;Source Port&amp;quot; = 3400 -&amp;gt; destination = localhost:3389 -&amp;gt; remote.&lt;br /&gt;
socks server.&lt;br /&gt;
 connection -&amp;gt; ssh -&amp;gt; tunnels -&amp;gt; Source port: 3128 , Destination: localhost:3128, Dynamic:true -&amp;gt; add -&amp;gt; apply.&lt;br /&gt;
Change font size&lt;br /&gt;
 echo Windows Registry Editor Version 5.00 &amp;gt; putty.reg &amp;amp;&amp;amp; echo [HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Default%20Settings] &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;Font&amp;quot;=&amp;quot;Courier New&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; echo &amp;quot;FontHeight&amp;quot;=&amp;quot;12&amp;quot; &amp;gt;&amp;gt; putty.reg &amp;amp;&amp;amp; reg import putty.reg&lt;br /&gt;
&lt;br /&gt;
=pv=&lt;br /&gt;
throughput in pipe. speed.&lt;br /&gt;
 pv&lt;br /&gt;
 pv -cN&lt;br /&gt;
make a dd and limit througput to 20MB/s.&lt;br /&gt;
 dd if=${HOST}.qcow2 bs=4k conv=noerror,sync | pv -L 20M | dd of=${HOST}.dd_noerror.qcow2&lt;br /&gt;
=pwgen=&lt;br /&gt;
Create less complicated password.&lt;br /&gt;
 pwgen -sy 15 -r \&#039;\&amp;quot;\^\(\)\`\~\;\[\]\{\}\,&lt;br /&gt;
&lt;br /&gt;
=qalculate=&lt;br /&gt;
 qalc&lt;br /&gt;
 &amp;gt; 40 euro to SEK&lt;br /&gt;
 40 * euro = approx. SEK 417.36&lt;br /&gt;
=readpst=&lt;br /&gt;
output pst file in separate files in out directory&lt;br /&gt;
 readpst -S -o out/ outlook.pst&lt;br /&gt;
=reboot=&lt;br /&gt;
 Hard reboot mean that shutdown scripts will not run and machine reboot immediately without syncing hard disk drives.&lt;br /&gt;
 This commands enable sysrq and after this call fast reboot. &lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq&lt;br /&gt;
 echo b &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Force shutdown&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/kernel/sysrq &lt;br /&gt;
 echo o &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
Kernel panic&lt;br /&gt;
 echo c &amp;gt; /proc/sysrq-trigger&lt;br /&gt;
==List last reboots==&lt;br /&gt;
 last --time-format iso reboot&lt;br /&gt;
&lt;br /&gt;
=rename=&lt;br /&gt;
Recursive lowercase to uppercase&lt;br /&gt;
 for i in $(find * -depth); do (mv $i $(echo $i | sed &#039;s%[^/][^/]*$%%&#039;)$(echo $i | sed &#039;s!.*/!!&#039; | tr [:upper:] [:lower:])); done&lt;br /&gt;
Upper to lower case&lt;br /&gt;
 for f in `find .`; do mv -v &amp;quot;$f&amp;quot; &amp;quot;`echo $f | tr &#039;[A-Z]&#039; &#039;[a-z]&#039;`&amp;quot;; done&lt;br /&gt;
&lt;br /&gt;
=reposync=&lt;br /&gt;
 reposync -n -c /etc/yum/yum.conf -p /repos/centos6 -d -r base -r updates -r extras -r centosplus -r contrib&lt;br /&gt;
 createrepo -g /repos/centos6/base/repodata/comps.xml /repos/centos6/base&lt;br /&gt;
 createrepo /repos/centos6/updates&lt;br /&gt;
 createrepo /repos/centos6/extras&lt;br /&gt;
 createrepo /repos/centos6/centosplus&lt;br /&gt;
halfface -&amp;gt; sync repo. -d delete what is not on remote, -n only newest version, -p store here, -r which repos to sync&lt;br /&gt;
 reposync -d -n -p /install/system/linux/fedora/24/repo/ -r updates -r fedora -r rpmfusion-free -r rpmfusion-free-updates -r rpmfusion-nonfree -r rpmfusion-nonfree-updates&lt;br /&gt;
halfface -&amp;gt; create repository&lt;br /&gt;
 REPODIR=/install/system/linux/fedora/24/repo ; for REPO in $(cd $REPODIR; ls) ; do echo $REPO ; createrepo_c ${REPODIR}/${REPO} ;done&lt;br /&gt;
=reptyr=&lt;br /&gt;
 Reparent a running program to a new terminal. (move tty)&lt;br /&gt;
&lt;br /&gt;
=rfcomm=&lt;br /&gt;
list usb devices&lt;br /&gt;
 hcitool scan&lt;br /&gt;
What properties does the device have.&lt;br /&gt;
 sdptool browse 00:0D:B5:30:07:79&lt;br /&gt;
connect bluetooth device virtual servial.&lt;br /&gt;
 rfcomm bind /dev/rfcomm0 00:0D:B5:30:07:79 1&lt;br /&gt;
=rkhunter=&lt;br /&gt;
Run rkhunter full scan no keypresses needed&lt;br /&gt;
 sudo rkhunter --checkall --skip-keypress -x&lt;br /&gt;
Update database&lt;br /&gt;
 sudo rkhunter --propupd&lt;br /&gt;
Search for what triggered alarm.&lt;br /&gt;
 sudo grep -E &#039;Warning|Suspicious&#039; /var/log/rkhunter/rkhunter.log&lt;br /&gt;
&lt;br /&gt;
=dnf update rkhunter. Update dnf after rkhunter scan=&lt;br /&gt;
 tail -1 /etc/sysconfig/rkhunter &lt;br /&gt;
 sleep 300 &amp;amp;&amp;amp; ( dnf -e 0 -y update ; rkhunter --propupd ) &amp;gt;&amp;gt; /tmp/dnf_update_rkhunter--propupd.$(date +%F_%H-%M-%S).log 2&amp;gt;&amp;amp;1 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
=rotatelogs=&lt;br /&gt;
Write standard output to logfile. Rotate at 100M. Keep 3 files.&lt;br /&gt;
 your_script.sh | rotatelogs -n3 /var/log/your.log 100M&lt;br /&gt;
=route=&lt;br /&gt;
The route to a network is behind 10.111.222.7&lt;br /&gt;
 route add -net 10.111.223.0 netmask 255.255.255.0 gw 10.111.222.7&lt;br /&gt;
Add default route&lt;br /&gt;
 route add default gw 192.168.122.1&lt;br /&gt;
Permanent route under redhat&lt;br /&gt;
 /etc/sysconfig/static-routes&lt;br /&gt;
 any net 198.18.129.0/24 gw 10.240.175.12&lt;br /&gt;
/etc/sysconfig/network-scripts/route-eth1&lt;br /&gt;
 1.2.3.4/23 via 1.2.3.1&lt;br /&gt;
Drop packages to ip.&lt;br /&gt;
 route add -host 192.168.1.51 reject&lt;br /&gt;
Remove reject rule.&lt;br /&gt;
 route del -host 192.168.1.51 reject&lt;br /&gt;
Remove route&lt;br /&gt;
 route -n&lt;br /&gt;
 Kernel IP routing table&lt;br /&gt;
 Destination     Gateway         Genmask         Flags Metric Ref    Use Iface&lt;br /&gt;
 192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 eth0&lt;br /&gt;
 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0&lt;br /&gt;
 10.0.0.0        0.0.0.0         255.0.0.0       U     0      0        0 eth0&lt;br /&gt;
 0.0.0.0         192.168.122.1   0.0.0.0         UG    0      0        0 eth0&lt;br /&gt;
 route del -net 10.0.0.0    gw    0.0.0.0   netmask      255.0.0.0 dev eth0&lt;br /&gt;
&lt;br /&gt;
=rpm=&lt;br /&gt;
==install src.rpm==&lt;br /&gt;
 rpmbuild --rebuild alien-6.51-1.src.rpm&lt;br /&gt;
 rpm -i /usr/src/redhat/RPMS/x86_64/alien-6.51-1.rpm&lt;br /&gt;
==List contents of rpm.==&lt;br /&gt;
 rpm -qlp myfile.rpm&lt;br /&gt;
==Extract single file from rpm.==&lt;br /&gt;
 rpm2cpio package.rpm | cpio -idv ./search_path_to_file_from_listing_above.txt&lt;br /&gt;
==List information about non installed rpm.==&lt;br /&gt;
 rpm -qip foo.rpm&lt;br /&gt;
==Extract contents of rpm.==&lt;br /&gt;
 rpm2cpio *.rpm | cpio -i --make-directories&lt;br /&gt;
==Which version of rpm is installed.==&lt;br /&gt;
/etc/rpm/macros ~/.rpmmacros&lt;br /&gt;
 %_query_all_fmt         %%{name}-%%{version}-%%{release}.%%{arch}&lt;br /&gt;
==list architecture==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{n}-%{v}-%{r}.%{arch}\n&amp;quot;&lt;br /&gt;
==List only name of installed rpms.==&lt;br /&gt;
 rpm -qa --qf &amp;quot;%{NAME}\n&amp;quot;&lt;br /&gt;
==Extract rpms in subdirectories.==&lt;br /&gt;
 for RPM in $(ls *|sed &#039;s_\.rpm$__g&#039;);do echo $RPM; mkdir $RPM; rpm2cpio $RPM.rpm | (cd $RPM &amp;amp;&amp;amp; cpio -i --make-directories);done&lt;br /&gt;
==Verify content of rpm==&lt;br /&gt;
 rpm -V package&lt;br /&gt;
 # What does those cryptic letters mean from rpm -V:&lt;br /&gt;
 S file Size differs&lt;br /&gt;
 M Mode differs (includes permissions and file type)&lt;br /&gt;
 5 MD5 sum differs&lt;br /&gt;
 D Device major/minor number mismatch&lt;br /&gt;
 L readlink(2) path mismatch&lt;br /&gt;
 U User ownership differs&lt;br /&gt;
 G Group ownership differs&lt;br /&gt;
 T mTime differs&lt;br /&gt;
==Reinstall rpm==&lt;br /&gt;
 rpm -iv --replacepkgs package.rpm&lt;br /&gt;
==Dependencies of rpm==&lt;br /&gt;
 rpm -qpR ${rpm}&lt;br /&gt;
 rpm -qR ${packagename}&lt;br /&gt;
 rpm -qp mypackage.rpm --provides&lt;br /&gt;
 rpm -qp mypackage.rpm --requires&lt;br /&gt;
==Rebuild rpm database.==&lt;br /&gt;
 \rm /var/lib/rpm/__db*&lt;br /&gt;
 rpm --rebuilddb&lt;br /&gt;
&lt;br /&gt;
==Update minor release.==&lt;br /&gt;
 yum --releasever=6.11 update sl-release&lt;br /&gt;
 yum clean all&lt;br /&gt;
 yum update&lt;br /&gt;
==Downgrade rpm.==&lt;br /&gt;
 rpm -Uvh --oldpackage /tmp/app.x86_64.rpm&lt;br /&gt;
==Which rpm:s are required by rpm. Can be used to install rpm on machine without access to yum repo.==&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==CVE:s fixed by rpm==&lt;br /&gt;
 rpm -qi --changelog openssh-server | grep -i CVE&lt;br /&gt;
&lt;br /&gt;
=rsync=&lt;br /&gt;
Syncronize folders. Delete non existing files on remote host. Compress.&lt;br /&gt;
 rsync --delete -az -e ssh bjorklun@semco.homeip.net:/install/program/windows/&lt;br /&gt;
Syncronize files over ssh on port 2222. Show progress. Syncronize even empty directories.&lt;br /&gt;
 rsync -Pae &#039;ssh -p 2222&#039; localhost:/opt/techops/bin/ /opt/techops/bin/&lt;br /&gt;
rsync with total progress bar.&lt;br /&gt;
 rsync -a --info=progress2 /dir1/ /dir2/&lt;br /&gt;
Run rsync in both ends but transfer data with normal user.&lt;br /&gt;
 sudo rsync -aP /tmp/andreas/ andreasbj@localhost:/tmp/andreas2/ --rsync-path=&#039;sudo rsync&#039;&lt;br /&gt;
rsync with limit of 8 MB/s.&lt;br /&gt;
 rsync -aP --bwlimit=8000 /source/ /destination/&lt;br /&gt;
rsync excluding directory&lt;br /&gt;
 rsync -r --exclude=.svn /source/ /destination/&lt;br /&gt;
rsync including selinux information. Preserve hard links.&lt;br /&gt;
 rsync -aPXH /source /destination&lt;br /&gt;
rsync don&#039;t keep links. Copy files referenced.&lt;br /&gt;
 rsync -rLP /source/ /destination&lt;br /&gt;
Record which files to sync.&lt;br /&gt;
 rsync -r -ptgo --delete -P --size-only -n www.halfface.se:/mp3/ /mp3/ -n | tee /temp/mp3_$(date +%Y-%m-%d)_diff.txt&lt;br /&gt;
Rsync new files.&lt;br /&gt;
 rsync -RDa0P --files-from=&amp;lt;(find /sourcedir -mtime -7 -print0) . /targetdir/&lt;br /&gt;
rsync ignore existing files.&lt;br /&gt;
 rsync -P --ignore-existing /source/* /destination/ -n&lt;br /&gt;
rsync excluding directories matching pattern.&lt;br /&gt;
 SOURCE=/apps/IP400 ; DESTINATION=/apps/IP400.$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; rsync -aP &amp;quot;${SOURCE}&amp;quot;/ &amp;quot;${DESTINATION}&amp;quot;/ --exclude-from=&amp;lt;(cd &amp;quot;${SOURCE}&amp;quot; ; find -type d -name log | sed -e &#039;s|./||&#039;)&lt;br /&gt;
Sync files partially.&lt;br /&gt;
 rsync -avz --partial --inplace&lt;br /&gt;
which files differ between hosts.&lt;br /&gt;
 rsync -nrlptDqv --delete --exclude napsjb/server/naps/tmp/ /opt/ongame/ 10.6.21.11:/opt/ongame | less&lt;br /&gt;
 -n dry run.&lt;br /&gt;
 -r recursive&lt;br /&gt;
 -l copy symlinks av symlinks.&lt;br /&gt;
 -p preserve permission&lt;br /&gt;
 -t preserve tims.&lt;br /&gt;
 -D --device --special. Keep special files.&lt;br /&gt;
 -q quiet&lt;br /&gt;
 -v verbose&lt;br /&gt;
&lt;br /&gt;
=sar=&lt;br /&gt;
Old sar information.&lt;br /&gt;
 sar -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
load average.&lt;br /&gt;
 sar -q -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
All information.&lt;br /&gt;
 sar -A -f /var/log/sa/sa25 -s 00:00:00 -e 23:59:00&lt;br /&gt;
View network statistics.&lt;br /&gt;
 LANG=c sar -n DEV | grep eth0&lt;br /&gt;
realtime summary.&lt;br /&gt;
 sar 4 5&lt;br /&gt;
=script=&lt;br /&gt;
Run command under shell even if it does not exist.&lt;br /&gt;
 script -q -f -c &amp;quot;commands or scripts to run&amp;quot;&lt;br /&gt;
Run session under screen in script.&lt;br /&gt;
 screen -dm bash -c &#039;script --timing=script1.tm script1.out&#039;&lt;br /&gt;
Replay script recorded file&lt;br /&gt;
 scriptreplay --timing script1.tm --typescript script1.out&lt;br /&gt;
=scp=&lt;br /&gt;
Limit to 1.2MB/s.&lt;br /&gt;
 scp -l 10240 Rocky-8.5-x86_64-minimal.iso halfface.se:/temp/&lt;br /&gt;
&lt;br /&gt;
=search&amp;amp;replace=&lt;br /&gt;
perl&lt;br /&gt;
 grep -rsl &#039;10.6.4.102&#039; * | xargs perl -pi -e &#039;s/10.6.4.102/10.6.4.103/&#039;&lt;br /&gt;
sed&lt;br /&gt;
 find . -type f -exec sed -i &#039;s/string1/string2/g&#039; {} \;&lt;br /&gt;
Grep for regexp starting with CN= and stop at first occurrence of ,. not greedy&lt;br /&gt;
 grep -oE &#039;CN=[^,]*,&#039;&lt;br /&gt;
=set=&lt;br /&gt;
Look at current settings. Expanded or simple view.&lt;br /&gt;
 set -o&lt;br /&gt;
 echo $-&lt;br /&gt;
&lt;br /&gt;
=setfacl=&lt;br /&gt;
Add rwx permission for user_name recursivly from /directory&lt;br /&gt;
 setfacl -Rm u:user_name:rwx /directory&lt;br /&gt;
Remove acl:s&lt;br /&gt;
 setfacl -bn foobar&lt;br /&gt;
=setpriv=&lt;br /&gt;
Dump your privileges.&lt;br /&gt;
 setpriv -d&lt;br /&gt;
&lt;br /&gt;
=shred=&lt;br /&gt;
Recurse remove dir&lt;br /&gt;
 find /tmp/secret -type f -exec shred {} \;&lt;br /&gt;
&lt;br /&gt;
=shuf=&lt;br /&gt;
Pick random line in file.&lt;br /&gt;
 shuf -n1 /file&lt;br /&gt;
Get random number&lt;br /&gt;
 shuf -i 10-120 -n1&lt;br /&gt;
&lt;br /&gt;
=sms=&lt;br /&gt;
Mail to sms gateway.&lt;br /&gt;
 tele2&lt;br /&gt;
 07XXXXXXXX@sms.tele2.se&lt;br /&gt;
&lt;br /&gt;
 Comviq&lt;br /&gt;
 467xxxxxxxx@sms.comviq.se&lt;br /&gt;
&lt;br /&gt;
 Europolitan&lt;br /&gt;
 4670xxxxxxx@europolitan.se&lt;br /&gt;
&lt;br /&gt;
=snmptrap=&lt;br /&gt;
 # send more than one string.&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &amp;quot;&amp;quot; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -Ci -u user -c community localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 1 s &amp;quot;This is the first string&amp;quot; 2 s &amp;quot;This is the second string&amp;quot;&lt;br /&gt;
 snmptrap -v 2c -c xxxxxxx localhost &#039;&#039; .1.3.6.1.4.1.5089.1.0.1 .1.3.6.1.4.1.5089.2.0.999 s &amp;quot;Hej Hej&amp;quot;&lt;br /&gt;
Simple trap&lt;br /&gt;
 snmptrap  -v 1 -c public  localhost   &#039;&#039;  0 0  &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=snmptrapd=&lt;br /&gt;
 # Enable logfile. /etc/sysconfig/snmptrapd&lt;br /&gt;
 OPTIONS=&amp;quot;-Lf /var/log/snmptrapd.log&amp;quot;&lt;br /&gt;
 # Disable authorization and put in logfile. /etc/snmp/snmptrapd.conf&lt;br /&gt;
 disableAuthorization yes&lt;br /&gt;
 authCommunity log public&lt;br /&gt;
&lt;br /&gt;
=snmpwalk=&lt;br /&gt;
Get information from an oid.&lt;br /&gt;
 snmpwalk -v 1 -c public snmp.device.net .1.3.6.1.4.1.2021.84&lt;br /&gt;
Do tcpdump while running.&lt;br /&gt;
 tcpdump -i eth0 -n -s0 -v host snmp.device.net and port snmp&lt;br /&gt;
=socat=&lt;br /&gt;
Create a tunnel between localhost 2222 to remote host 2222&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.111.222.2:2222&lt;br /&gt;
 socat TCP-LISTEN:22,fork,bind=127.0.0.1 TCP:192.168.0.15:5900&lt;br /&gt;
 socat TCP-LISTEN:2222,fork TCP:10.8.110.20:22,bind=172.19.14.251&lt;br /&gt;
Listen on 10.120.50.12:9090 and forward to 127.0.0.1:9090&lt;br /&gt;
 socat TCP-LISTEN:9090,bind=10.120.50.12,fork TCP:127.0.0.1:9090&lt;br /&gt;
Create tunnel via systemctl&lt;br /&gt;
Create file similar to this. /etc/systemd/system/socat_win.service&lt;br /&gt;
 [Service]&lt;br /&gt;
 ExecStart=/usr/bin/socat TCP-LISTEN:3389,fork TCP:192.168.122.204:3389&lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=multi-user.target&lt;br /&gt;
Enable new file.&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
Start new daemon&lt;br /&gt;
 systemctl start socat_win&lt;br /&gt;
&lt;br /&gt;
=sort=&lt;br /&gt;
Sort ip address.&lt;br /&gt;
 sort -t. +0n -1 +1n -2 +2n -3 +3n -4&lt;br /&gt;
 sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n&lt;br /&gt;
sort on fift column&lt;br /&gt;
 sort -t, -k5n,5 /tmp/gfp&lt;br /&gt;
Get a list of configured ip for a set of hosts. Sort on domain then hostname&lt;br /&gt;
 pdsh ^/host_list &#039;ip route get 8.8.8.8 | awk &amp;quot;NR==1 {print \$NF}&amp;quot;&#039; | sort -t . -k 2 -k 1&lt;br /&gt;
Sort on first column only.&lt;br /&gt;
 sort -n -k 1,1&lt;br /&gt;
&lt;br /&gt;
=spawn=&lt;br /&gt;
Encode wav to ogg in parallel.&lt;br /&gt;
  # ls -1 *.wav | while read ; do echo &amp;quot;oggenc -q6 \&amp;quot;$REPLY\&amp;quot;&amp;quot; ; done | spawn -j4&lt;br /&gt;
=split=&lt;br /&gt;
Devide file into parts containing 100 lines.&lt;br /&gt;
 split -l 100 create_updated_2013-10-29_sort_created_ci_id_name.txt --numeric-suffixes --suffix-length=3 Cleanup.&lt;br /&gt;
Devide file in 10 parts. Suffix length 4.&lt;br /&gt;
 split -n 10 -a 3 bigfile.tar.gz&lt;br /&gt;
&lt;br /&gt;
=sqlite=&lt;br /&gt;
Is db broken?&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;PRAGMA integrity_check&amp;quot;&lt;br /&gt;
recover db&lt;br /&gt;
 sqlite3 mydata.db &amp;quot;.dump&amp;quot; | sqlite3 new.db&lt;br /&gt;
 sqlite3 stellar.db .recover | sqlite3 stellar_2.db&lt;br /&gt;
Show databases&lt;br /&gt;
 sqlite&amp;gt; .databases&lt;br /&gt;
 main: /var/lib/tuptime/tuptime.db&lt;br /&gt;
List tables&lt;br /&gt;
 sqlite&amp;gt; .tables&lt;br /&gt;
 tuptime&lt;br /&gt;
Run sql command&lt;br /&gt;
 sqlite&amp;gt; select * from tuptime;&lt;br /&gt;
 1544984636|2387765.42|-1|0|0.0|Linux-4.19.8-200.fc28.x86_64-x86_64-with-fedora-28-Twenty_Eight&lt;br /&gt;
exit|quit&lt;br /&gt;
 .quit&lt;br /&gt;
==vacuum==&lt;br /&gt;
 /usr/local/openvpn_as/bin/sqlite3 /usr/local/openvpn_as/etc/db/log.db &amp;quot;VACUUM&amp;quot;&lt;br /&gt;
==count tables==&lt;br /&gt;
 DB=files.db ; for TABLE in $( sqlite3 $DB &amp;quot;.tables&amp;quot;) ; do echo -e $TABLE\\t$(sqlite3 $DB &amp;quot;SELECT COUNT(1) FROM $TABLE;&amp;quot;) ; done | column_tab&lt;br /&gt;
&lt;br /&gt;
=ss=&lt;br /&gt;
List all connections.&lt;br /&gt;
 ss -an&lt;br /&gt;
List processes and which port they listen too. Grep process.&lt;br /&gt;
 ss -tulpn | grep 5405&lt;br /&gt;
&lt;br /&gt;
=ssh=&lt;br /&gt;
==ssh-keygen==&lt;br /&gt;
Create key pair without input.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KEYNAME=cluster-info-reporting ; KEYNAME_PATH=/tmp/${KEYNAME}-$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;) ; ssh-keygen -q -t ed25519 -N &#039;&#039; -C $KEYNAME &amp;lt;&amp;lt;&amp;lt; $&#039;\ny&#039; &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 -f &amp;quot;${KEYNAME_PATH}&amp;quot; ; echo Keys: $(ls &amp;quot;${KEYNAME_PATH}&amp;quot;*)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==which private ssh keys are password protected==&lt;br /&gt;
 ls ${HOME}/.ssh/* | grep -Ev &#039;pub$|authorized_keys|config|known_hosts|ssh-agent.sock&#039; | while read i ; do SSH_PASSWORD=$(ssh-keygen -y -P &amp;quot;&amp;quot; -f &amp;quot;$i&amp;quot; 2&amp;gt;&amp;amp;1 | grep &amp;quot;incorrect passphrase supplied to decrypt private key&amp;quot;) ; if [ -z &amp;quot;${SSH_PASSWORD}&amp;quot; ] ; then echo No password encrypted ssh private key: $i ; fi ; done&lt;br /&gt;
&lt;br /&gt;
==Remove pass phrase==&lt;br /&gt;
 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]&lt;br /&gt;
&lt;br /&gt;
==view fingerprint==&lt;br /&gt;
 ssh-keygen -l -E md5 -f /tmp/ssh-keygen.pub&lt;br /&gt;
&lt;br /&gt;
==change the name of private key==&lt;br /&gt;
 ssh-keygen -c -C &amp;quot;first.lastname@example.com&amp;quot; -f ~/.ssh/id_ed25519&lt;br /&gt;
&lt;br /&gt;
==Copy public key to authorized_keys==&lt;br /&gt;
 ssh-copy-id user@host&lt;br /&gt;
List supported ciphers&lt;br /&gt;
 ssh -Q cipher&lt;br /&gt;
List supported MACs&lt;br /&gt;
 ssh -Q mac&lt;br /&gt;
List supported public key type&lt;br /&gt;
 ssh -Q key&lt;br /&gt;
List supported key exchange algorithms&lt;br /&gt;
 ssh -Q kex&lt;br /&gt;
List supported ciphers, macs and kexalgorithms.&lt;br /&gt;
 sshd -T | grep &amp;quot;\(ciphers\|macs\|kexalgorithms\)&amp;quot;&lt;br /&gt;
Run command each time you login via ssh.&lt;br /&gt;
 $HOME/.ssh/rc&lt;br /&gt;
&lt;br /&gt;
==Tunnel==&lt;br /&gt;
 sudo ssh -nNTx -R 2222:localhost:22 andreasbj@www.halfface.se&lt;br /&gt;
Reverse tunnel.&lt;br /&gt;
 ssh -D \*:666 www.halfface.se&lt;br /&gt;
 ssh -N ipmon10.ny1.ip-soft.net -L43389:ippc01.ongame.ip-soft.net:3389&lt;br /&gt;
 -n	Dont take console. Good for background.&lt;br /&gt;
 -N	Do not execute a remote command&lt;br /&gt;
 -T	Disable pseudo-tty allocation.&lt;br /&gt;
 -x	Disables X11 forwarding.&lt;br /&gt;
 -R port:host:hostport&lt;br /&gt;
 sudo ssh -N -L 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 2222:www.halfface.se:22 www.halfface.se&lt;br /&gt;
 sudo ssh -nNTx -R 443:satellite.ongame.com:443 root@10.0.254.30 # Tunnel 443 over ssh from remote host via local host.&lt;br /&gt;
Open tunnel on remote host. Start remote proxy server forwarding to internal network.&lt;br /&gt;
 ssh remotehost -R remoteport:localhost:localport &amp;quot;ssh -D 9050 localhost:remoteport&amp;quot;&lt;br /&gt;
Multiple reverse tunnel controled by autossh. (-M)Control port,(-f)background, (-N) no remote command, reverse tunnel (-R)&lt;br /&gt;
 autossh -M 41000 -f -N -R 0.0.0.0:8001:192.168.1.10:80 -R 0.0.0.0:8002:192.168.1.20:80 user@remotehost&lt;br /&gt;
&lt;br /&gt;
==reverse tunnel bound to all interfaces==&lt;br /&gt;
The config has to allow to bind to * interface. /etc/ssh/sshd_config  GatewayPorts yes&lt;br /&gt;
 sudo ssh -i ${HOME}/.ssh/id_dsa -N -R \*:2222:localhost:22 ${USER}@www.halfface.se&lt;br /&gt;
&lt;br /&gt;
==Create an ssh tunnel link==&lt;br /&gt;
 https://help.ubuntu.com/community/SSH_VPN&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 vim /etc/ssh/sshd_config  PermitTunnel=yes&lt;br /&gt;
 sudo ssh -NTCf -w 0:0 1.2.3.4&lt;br /&gt;
 sudo ssh -v -w any:any www.halfface.se&lt;br /&gt;
 ###&lt;br /&gt;
 local:&lt;br /&gt;
 ip link set tun0 up&lt;br /&gt;
 ip addr add 169.254.0.1/32 peer 169.254.0.2 dev tun0&lt;br /&gt;
 ip route add 192.168.0/24 via 169.254.0.2&lt;br /&gt;
 remote:&lt;br /&gt;
 ip link set tun1 up&lt;br /&gt;
 ip addr add 169.254.0.2/32 peer 169.254.0.1 dev tun1&lt;br /&gt;
 arp -sD 169.254.0.2 eth1 pub&lt;br /&gt;
 ### Change default gateway. In this case, 192.168.0.1 is Machine B&#039;s current default gateway; it is the gateway on Network B that provides internet connectivity&lt;br /&gt;
 ip route add 1.2.3.4/32 via 192.168.0.1&lt;br /&gt;
 ip route replace default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
==Limit ssh access with pam_access==&lt;br /&gt;
 /etc/security/access.conf&lt;br /&gt;
&lt;br /&gt;
==Proxycommand without nc==&lt;br /&gt;
 Host server1&lt;br /&gt;
  Hostname 10.0.1.1&lt;br /&gt;
  ProxyCommand ssh -q -x jumphost -W %h:22&lt;br /&gt;
&lt;br /&gt;
==ssh over ipv6 via 2 network interface.==&lt;br /&gt;
 ssh -6 fe80::1ec1:deff:fecb:6ce%2&lt;br /&gt;
&lt;br /&gt;
==ssh options==&lt;br /&gt;
None interactive. Dont ask for password.&lt;br /&gt;
 -o BatchMode=yes&lt;br /&gt;
Accept all keys.&lt;br /&gt;
 -o StrictHostKeyChecking=no&lt;br /&gt;
&lt;br /&gt;
==ssh via proxy/squid==&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc --proxy proxy.inter.net:3128 --proxy-type http %h %p&#039; host.inter.net hostname&lt;br /&gt;
 ssh -o &#039;ProxyCommand nc -X connect -x proxy.inter.net:3128 %h %p&#039; host.inter.net hostname&lt;br /&gt;
&lt;br /&gt;
==brow.sh==&lt;br /&gt;
browser in terminal window.&lt;br /&gt;
 ssh brow.sh&lt;br /&gt;
&lt;br /&gt;
==jail==&lt;br /&gt;
/etc/sshd/sshd_config &lt;br /&gt;
 Match group mychroot &lt;br /&gt;
 ChrootDirectory /jail/ &lt;br /&gt;
 X11Forwarding no &lt;br /&gt;
 AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
==sshd debug==&lt;br /&gt;
Start deamon once in debug mode and put output to your console.&lt;br /&gt;
 /etc/sysconfig/sshd&lt;br /&gt;
 OPTIONS=&amp;quot;-ddd&amp;quot;&lt;br /&gt;
Kill of sshd which is listening for new connections. Start sshd with the following command. Debug level can bee changed.&lt;br /&gt;
 /usr/sbin/sshd -De -o LogLevel=DEBUG3&lt;br /&gt;
&lt;br /&gt;
==ssh multiple jumps one cli==&lt;br /&gt;
Jump through host1.net to get to host2.net&lt;br /&gt;
 ssh -t host1.net ssh -t host2&lt;br /&gt;
Jump through host1.net to host2.net and bring port 8080 with you.&lt;br /&gt;
 ssh -t host1.net -L 8080:localhost:8080 ssh -t host2.net -L 8080:localhost:8080&lt;br /&gt;
&lt;br /&gt;
==ssh force password login==&lt;br /&gt;
 ssh -o StrictHostKeyChecking=no -o ControlPath=none -o ControlMaster=no -o PubkeyAuthentication=no user@host&lt;br /&gt;
&lt;br /&gt;
==ssh via jumphost==&lt;br /&gt;
 ssh -J core@1.1.1.1 core@2.2.2.2&lt;br /&gt;
&lt;br /&gt;
==socks==&lt;br /&gt;
 # Setup socks server exiting on remote host&lt;br /&gt;
 ssh -D &#039;*:3128&#039; halfface.se&lt;br /&gt;
 # Use socks setup above.&lt;br /&gt;
 curl --socks5 localhost:3128 https://ifconfig.me&lt;br /&gt;
&lt;br /&gt;
==Create public key from private==&lt;br /&gt;
 ssh-keygen -y -f &amp;lt;private_key_with_return_at_end&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshfs mount filesystem over ssh=&lt;br /&gt;
 sshfs name@server:/path/to/folder /path/to/mount/point&lt;br /&gt;
=sshpass=&lt;br /&gt;
ssh with password provided on the command line.&lt;br /&gt;
 sshpass -p P@ssW0rd ssh -t -o ControlPath=none -o PreferredAuthentications=password -o PubkeyAuthentication=no -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Error user@localhost hostname&lt;br /&gt;
=specify key=&lt;br /&gt;
 ssh -o &amp;quot;IdentitiesOnly=yes&amp;quot; -i &amp;lt;private key&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=sshuttle=&lt;br /&gt;
create a network route over ssh.&lt;br /&gt;
 sshuttle -D -r user@remotehost:2222 192.168.1.0/24&lt;br /&gt;
&lt;br /&gt;
=stat=&lt;br /&gt;
View file permissions only.&lt;br /&gt;
 stat -c &amp;quot;%a %n&amp;quot; /usr/bin/bash&lt;br /&gt;
 Access - the last time the file was read&lt;br /&gt;
 Modify - the last time the file was modified (content has been modified)&lt;br /&gt;
 Change - the last time meta data of the file was changed (e.g. permissions)&lt;br /&gt;
Copy permissions from one location to another.&lt;br /&gt;
 rpm -qlp package.rpm | while read FILE ; do echo chmod $(stat -c &amp;quot;%a&amp;quot; $FILE) \&amp;quot;$FILE\&amp;quot;;done &amp;gt; /tmp/copy_permissions.sh&lt;br /&gt;
&lt;br /&gt;
=strace=&lt;br /&gt;
==File open activity.==&lt;br /&gt;
 strace -e open -f ls -la /temp/&lt;br /&gt;
==File open activity under directory.==&lt;br /&gt;
  strace -e open -P /temp/ -f ls -la /temp/&lt;br /&gt;
==More file activity.==&lt;br /&gt;
 strace -e trace=file -p 1234&lt;br /&gt;
 strace -e trace=desc -p 1234&lt;br /&gt;
==Trace network activity.==&lt;br /&gt;
 sudo strace -f -e trace=network -p 1476&lt;br /&gt;
 # 1024 long strings.&lt;br /&gt;
 sudo strace -s 1024 -f -e trace=network -p 1476&lt;br /&gt;
 # strace follow process with matching regex.&lt;br /&gt;
 strace -f -e poll,select,connect,recvfrom,sendto -p $(pgrep -f login-sync.xml)&lt;br /&gt;
 # trace nework activity&lt;br /&gt;
 strace -f -e trace=network -s 1000000 nc localhost 3333&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
 sudo strace -f -e trace=memory -p $(pgrep -f firefox)&lt;br /&gt;
==What is taking time==&lt;br /&gt;
 [root@util01 abjorklund]# strace -f -c -p 9657&lt;br /&gt;
  % time     seconds  usecs/call     calls    errors syscall&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
  88.11   11.614155        1644      7065      1565 futex&lt;br /&gt;
   9.94    1.310794       16183        81        73 restart_syscall&lt;br /&gt;
   1.86    0.245018          86      2850           recvfrom&lt;br /&gt;
   0.05    0.006784          30       228           poll&lt;br /&gt;
   0.03    0.004006           2      1838           sendto&lt;br /&gt;
   0.00    0.000271           1       253           sched_yield&lt;br /&gt;
   0.00    0.000134          12        11           mmap&lt;br /&gt;
   0.00    0.000107           0      5176           ioctl&lt;br /&gt;
   0.00    0.000026           0       148       148 stat&lt;br /&gt;
   0.00    0.000000           0         1           read&lt;br /&gt;
   0.00    0.000000           0       254           write&lt;br /&gt;
   0.00    0.000000           0        44           mprotect&lt;br /&gt;
   0.00    0.000000           0         1           rt_sigreturn&lt;br /&gt;
 ------ ----------- ----------- --------- --------- ----------------&lt;br /&gt;
 100.00   13.181295                 17950      1786 total&lt;br /&gt;
&lt;br /&gt;
==strace multiple processes==&lt;br /&gt;
 strace -s 1024 -f -o /tmp/strace $(pidof Process_name | sed &#039;s/\([0-9]*\)/-p \1/g&#039;)&lt;br /&gt;
==strace to hex output. Convert to utf8.==&lt;br /&gt;
 strace -xx -f -o/tmp/strace -s0 echo bajskorv&lt;br /&gt;
 cat /tmp/strace | while read -r line; do printf &amp;quot;%b\n&amp;quot; &amp;quot;$line&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=stty=&lt;br /&gt;
List settings&lt;br /&gt;
 stty -a&lt;br /&gt;
 speed 38400 baud; rows 50; columns 200; line = 0;&lt;br /&gt;
 intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = &amp;lt;undef&amp;gt;; eol2 = &amp;lt;undef&amp;gt;; swtch = &amp;lt;undef&amp;gt;; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;&lt;br /&gt;
 -parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts&lt;br /&gt;
 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8&lt;br /&gt;
 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0&lt;br /&gt;
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc&lt;br /&gt;
Set terminal properties.&lt;br /&gt;
 stty rows 50 cols 200&lt;br /&gt;
&lt;br /&gt;
=sudo=&lt;br /&gt;
Enable sudo logging&lt;br /&gt;
 sed -i &amp;quot;$(( $(grep -n ^Defaults /etc/sudoers | tail -1 | awk -F: &#039;{print $1}&#039;) + 1 ))iDefaults    log_output\nDefaults    log_input&amp;quot; /etc/sudoers&lt;br /&gt;
Command above adds the following to /etc/sudoers&lt;br /&gt;
 Defaults    log_output&lt;br /&gt;
 Defaults    log_input&lt;br /&gt;
List sudo-io logs.&lt;br /&gt;
 sudoreplay -l&lt;br /&gt;
Search for string in logs.&lt;br /&gt;
 zgrep search_string $(find /var/log/sudo-io/ -type f)&lt;br /&gt;
Replay session. Max wait 1s. 5 times the speed.&lt;br /&gt;
 sudoreplay -m1 -s5 000002&lt;br /&gt;
Replay session including stdin&lt;br /&gt;
 sudo sudoreplay -m1 -s5 -f stdin,stdout,stderr,ttyin,ttyout 000001&lt;br /&gt;
Which rules apply to user&lt;br /&gt;
 sudo -l -U username&lt;br /&gt;
==Add user to sudoers.d so you do not need to add password for that user.==&lt;br /&gt;
 SUDO_USER=&amp;lt;user&amp;gt; ; echo -e &amp;quot;# Adding $SUDO_USER user to sudo users.\n$SUDO_USER ALL=(ALL) NOPASSWD:ALL&amp;quot; &amp;gt; /etc/sudoers.d/90-${SUDO_USER//./_} ; chmod 440 /etc/sudoers.d/90-${SUDO_USER//./_}&lt;br /&gt;
&lt;br /&gt;
=swapon/swapof=&lt;br /&gt;
Free swap&lt;br /&gt;
 (swapoff -a; swapon -a) &amp;amp; watch free -m&lt;br /&gt;
&lt;br /&gt;
=sysbench=&lt;br /&gt;
cpu test.&lt;br /&gt;
 sysbench cpu --cpu-max-prime=20000 --threads=32 run | grep &amp;quot;events per second&amp;quot;&lt;br /&gt;
ram test&lt;br /&gt;
 sysbench memory --threads=32 run | grep sec&lt;br /&gt;
disk test&lt;br /&gt;
 RAM_TWO=$(( $(grep MemTotal /proc/meminfo | awk &#039;{print $2}&#039;) * 2 ))kb&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} prepare &amp;gt; /dev/null&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} --file-test-mode=rndrw --time=300 --max-requests=0 run|grep -E &#039; read, | written, &#039;&lt;br /&gt;
 sysbench fileio --file-total-size=${RAM_TWO} cleanup &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
=sysctl=&lt;br /&gt;
Rename machine.&lt;br /&gt;
 sysctl kernel.hostname=ipmonxx.${CLIENT}.ip-soft.net&lt;br /&gt;
Set tcp keepalive&lt;br /&gt;
 $ sysctl -a | grep tcp_keepalive&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 1800&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 9&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 75&lt;br /&gt;
 sudo sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_probes=3 net.ipv4.tcp_keepalive_intvl=10&lt;br /&gt;
 net.ipv4.tcp_keepalive_time = 60&lt;br /&gt;
 net.ipv4.tcp_keepalive_probes = 3&lt;br /&gt;
 net.ipv4.tcp_keepalive_intvl = 10&lt;br /&gt;
Reload config files&lt;br /&gt;
 sysctl --system&lt;br /&gt;
&lt;br /&gt;
=systemctl=&lt;br /&gt;
==init 3== &lt;br /&gt;
 systemctl isolate runlevel3.target&lt;br /&gt;
 systemctl isolate multi-user.target&lt;br /&gt;
 systemctl set-default multi-user.target&lt;br /&gt;
&lt;br /&gt;
==init 5==&lt;br /&gt;
 systemctl isolate runlevel5.target&lt;br /&gt;
 systemctl isolate graphical.target&lt;br /&gt;
 systemctl set-default graphical.target&lt;br /&gt;
&lt;br /&gt;
==When you have made changes to  /etc/systemd/system/*.service==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
&lt;br /&gt;
==List all units==&lt;br /&gt;
 systemctl list-unit-files&lt;br /&gt;
==List units with problems==&lt;br /&gt;
 systemctl list-units --failed&lt;br /&gt;
==create service==&lt;br /&gt;
cd /etc/systemd/system ; vim $service.service ; systemctl daemon-reload&lt;br /&gt;
 [Unit]&lt;br /&gt;
 Description=Set laptop brightness&lt;br /&gt;
 After=multi-user.target &lt;br /&gt;
 &lt;br /&gt;
 [Service]&lt;br /&gt;
 Type=forking&lt;br /&gt;
 ExecStart=/bin/sh -c &#039;echo 1000 &amp;gt; /sys/class/backlight/intel_backlight/brightness&#039;&lt;br /&gt;
 LimitNOFILE=65535&lt;br /&gt;
 LimitNPROC=65535&lt;br /&gt;
 &lt;br /&gt;
 [Install]&lt;br /&gt;
 WantedBy=default.target&lt;br /&gt;
&lt;br /&gt;
==Add groups to processes started by services script==&lt;br /&gt;
 [Service]&lt;br /&gt;
 SupplementaryGroups=33 518&lt;br /&gt;
==takes a long time to login==&lt;br /&gt;
 systemctl daemon-reexec&lt;br /&gt;
 systemctl restart systemd-logind&lt;br /&gt;
&lt;br /&gt;
=strace process started by systemctl=&lt;br /&gt;
 strace -f -o /tmp/strace.log -s 2048 -p 1 &amp;amp; systemctl restart httpd.service&lt;br /&gt;
=systemctl show puma=&lt;br /&gt;
Show variables of service&lt;br /&gt;
 systemctl show puma&lt;br /&gt;
&lt;br /&gt;
=systemd-analyze=&lt;br /&gt;
What takes time at startup.&lt;br /&gt;
 systemd-analyze plot &amp;gt; /tmp/systemd-analyze-plot.svg ; chrome /tmp/systemd-analyze-plot.svg&lt;br /&gt;
=systemd-resolved=&lt;br /&gt;
 resolvectl status&lt;br /&gt;
clear cache.&lt;br /&gt;
 sudo systemd-resolve --flush-caches&lt;br /&gt;
Look at stats.&lt;br /&gt;
 systemd-resolve --statistics&lt;br /&gt;
==restart daemon to apply settings==&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl restart systemd-networkd&lt;br /&gt;
 systemctl restart systemd-resolved&lt;br /&gt;
=systemctl show=&lt;br /&gt;
will show all available properties&lt;br /&gt;
 systemctl show $service&lt;br /&gt;
&lt;br /&gt;
=tail=&lt;br /&gt;
Tail from line number 21.&lt;br /&gt;
 tail -n +21 /file&lt;br /&gt;
=talk=&lt;br /&gt;
Talks swedish.&lt;br /&gt;
 espeak -v swedish -f /tmp/file&lt;br /&gt;
&lt;br /&gt;
=tar=&lt;br /&gt;
Make a backup of a directory or disk.&lt;br /&gt;
 server: tar -cpsf - $dir | pv -b | nc -l 3333&lt;br /&gt;
 client: nc server 3333 | pv -b | tar -xpst -&lt;br /&gt;
Inline tar archive.&lt;br /&gt;
 awk &#039;/^__ARCHIVE_FOLLOWS__/ { print NR + 1; exit 0; }&#039; $0&lt;br /&gt;
 tail -n $0 &amp;gt; archive.tar # tail -n +347 Filename&lt;br /&gt;
Backup dir but exclude files within&lt;br /&gt;
 tar zcf /tmp/backup_$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).tar.gz /apps/app --exclude=/apps/app/var/* --exclude=/apps/app/logs/*&lt;br /&gt;
extract files remove 5 path element components.&lt;br /&gt;
 tar xf archive.tar --strip-components 5&lt;br /&gt;
extract to other directory.&lt;br /&gt;
 tar -xzf bar.tar.gz -C foo&lt;br /&gt;
extract files excluding path.&lt;br /&gt;
 tar xf $file.tar.gz --transform=&#039;s/.*\///&#039;&lt;br /&gt;
&lt;br /&gt;
=tcpdump=&lt;br /&gt;
dump trafic information, -e Print the link-level header on each dump line, -vvv verbose.&lt;br /&gt;
 tcpdump -e -vvv port 21&lt;br /&gt;
dump all trafic to and from machine. -w write to file, -s0 size of package, host to listen from.&lt;br /&gt;
 time tcpdump -w ssl_dump -s0 host test.x30.webservices.itsfogo.com&lt;br /&gt;
dump all trafic into files of max 100MB. 270MB in reality.&lt;br /&gt;
 tcpdump -w snoop -s0 -C 100000000&lt;br /&gt;
dump all trafic. compress logfiles. Create 10 files which are 10 MB big. Dont convert numbers to names. Dont truncate frames create logfile with this name.&lt;br /&gt;
 tcpdump -z gzip -i wlan0 -C 10 -W 10 -n -s0 -w /tmp/tcpdump.log&lt;br /&gt;
Which machines send a syn packet.&lt;br /&gt;
 sudo tcpdump -nn -i eth0 &#039;tcp[13] = 2&#039;&lt;br /&gt;
Show information about all traffic on interface.&lt;br /&gt;
 tcpdump -s0 -i eth1 -vv&lt;br /&gt;
Show information about communication over port 514&lt;br /&gt;
 tcpdump -Xni any port 514&lt;br /&gt;
listen on port 1023 for incoming trafic. disable local subnets.&lt;br /&gt;
 sudo tcpdump -n -i eth0 tcp and dst host 172.17.17.6 and not src net 172.17.17.0/24 and not src net 158.0.0.0/8 and &#039;port 1023&#039;&lt;br /&gt;
listen after torrent traffic.&lt;br /&gt;
 sudo tcpdump -Xni any portrange 6882-6999&lt;br /&gt;
View content of http trafic&lt;br /&gt;
 sudo tcpdump -i any -A -s 1500 dst 89.253.75.84 and port 80&lt;br /&gt;
View post in utf-8 format.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo tcpdump -lnp -i any -A -s 1500 dst 89.253.75.84 and port 80 -w - | tr -t &#039;[^[:print:]]&#039; &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Get cookie&lt;br /&gt;
 tcpdump -i lo -A -l dst port 8000 |     grep &amp;quot;^Cookie: &amp;quot;&lt;br /&gt;
 To create cookie for curl: https://xiix.wordpress.com/2006/03/23/mozillafirefox-cookie-format/&lt;br /&gt;
Look at traffic from specific ip&lt;br /&gt;
 tcpdump -n -i any -n host 198.18.130.9&lt;br /&gt;
Eavesdrop password&lt;br /&gt;
 tcpdump -i any -A -s0 port 8030 | grep Authorization:&lt;br /&gt;
==flags==&lt;br /&gt;
tcpdump -enni eth0 host 172.30.142.11 port 5432&lt;br /&gt;
 F - FIN&lt;br /&gt;
 S - SYN&lt;br /&gt;
 R - RST&lt;br /&gt;
 P - PSH&lt;br /&gt;
 U - URG&lt;br /&gt;
 E - ECN Echo&lt;br /&gt;
 W - ECN Cwnd Reduced&lt;br /&gt;
 . - ACK only&lt;br /&gt;
==get ftp username/password==&lt;br /&gt;
 sudo tcpdump -n -vvv -i any -A -f &amp;quot;port 21&amp;quot; | grep -i &amp;quot;user\|pass&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=tcptraceroute=&lt;br /&gt;
 tcptraceroute -n -q 1 192.168.0.1 -p 22&lt;br /&gt;
=teamdctl=&lt;br /&gt;
 teamdctl team0 state view -v&lt;br /&gt;
=tee=&lt;br /&gt;
Feed tee with an unbuffered stream.&lt;br /&gt;
 sar -n DEV 2 | stdbuf -oL grep wlp0s20f3 | tee /temp/sar_-n_wlp0s20f3.$(date)&lt;br /&gt;
&lt;br /&gt;
=telnet=&lt;br /&gt;
Look at world map. a - z zoom.&lt;br /&gt;
 telnet mapscii.me&lt;br /&gt;
=testssl=&lt;br /&gt;
test ssl certificate&lt;br /&gt;
 testssl www.halfface.se&lt;br /&gt;
&lt;br /&gt;
=tftp=&lt;br /&gt;
 # Download test.file&lt;br /&gt;
 tftp -v 172.17.17.6 -c get test.file&lt;br /&gt;
 # Upload file.&lt;br /&gt;
 tftp -v 172.17.17.6 -c put /tmp/test.put test.put&lt;br /&gt;
 # Enable upload file in in.tftpd&lt;br /&gt;
 /etc/xinetd.d/tftp&lt;br /&gt;
 server_args        = -c -s /var/lib/tftpboot&lt;br /&gt;
=tibco=&lt;br /&gt;
show permissions.&lt;br /&gt;
 help permissions&lt;br /&gt;
Create user&lt;br /&gt;
 create user surveillance &amp;quot;Surveillance user&amp;quot; password=surveillance&lt;br /&gt;
Grant user permission to view all&lt;br /&gt;
 grant admin user=surveillance view-all&lt;br /&gt;
=tif=&lt;br /&gt;
cli image viewer.&lt;br /&gt;
 tif $IMAGE.jpg&lt;br /&gt;
&lt;br /&gt;
=time=&lt;br /&gt;
Time in a loop.&lt;br /&gt;
 { time sleep 2 &amp;gt;&amp;gt; ${LOG} ; } 2&amp;gt;&amp;gt; ${LOG}&lt;br /&gt;
How long did a command take&lt;br /&gt;
 TIME=$( { /usr/bin/time -f &amp;quot;%e&amp;quot; sleep 1.5 ;} 2&amp;gt;&amp;amp;1 ) ; echo $TIME&lt;br /&gt;
Built in time command. 3 decimals in seconds.&lt;br /&gt;
 TIMEFORMAT=&#039;%3R&#039;; time ( sleep 61.22222 )&lt;br /&gt;
=timedatectl=&lt;br /&gt;
Show info how clock is synced.&lt;br /&gt;
 timedatectl timesync-status&lt;br /&gt;
Which time zones exist&lt;br /&gt;
 timedatectl list-timezones | cat -v | grep -i stockholm&lt;br /&gt;
Set timezone.&lt;br /&gt;
 timedatectl set-timezone &amp;quot;Europe/Stockholm&amp;quot;&lt;br /&gt;
Show ntp servers&lt;br /&gt;
 timedatectl show-timesync --all&lt;br /&gt;
Sync clock&lt;br /&gt;
 timedatectl set-ntp true&lt;br /&gt;
Enable clock sync.&lt;br /&gt;
 systemctl enable systemd-timesyncd --now&lt;br /&gt;
&lt;br /&gt;
=timeout=&lt;br /&gt;
limit waiting for a period.&lt;br /&gt;
 timeout 2s sleep 100&lt;br /&gt;
Run function under timeout&lt;br /&gt;
 export -f my_function ; timeout 1 bash -c &#039;my_function options&#039;&lt;br /&gt;
Run loop for some time then exit.&lt;br /&gt;
 timeout 172800 bash -c -- &#039;while true ; do echo $(TZ=UTC date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;) $(ping -w1 -q -c1 -i10 192.168.10.120 | grep received) ; sleep 1 ; done| tee /tmp/ping_192.168.10.120.log&#039;&lt;br /&gt;
&lt;br /&gt;
=tnef=&lt;br /&gt;
List content of winmail.dat. Remove options to extract to current dir.&lt;br /&gt;
 tnef -t -f winmail.dat&lt;br /&gt;
=toilet=&lt;br /&gt;
Generate graphics text similar to banner.&lt;br /&gt;
 toilet -F gay -f mono12 &amp;quot;Some Funky Text&amp;quot;&lt;br /&gt;
=tor=&lt;br /&gt;
Select outgoing country. https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2&lt;br /&gt;
Set country in:&lt;br /&gt;
 torrc&lt;br /&gt;
One or several exit countries.&lt;br /&gt;
 ExitNodes {us}&lt;br /&gt;
 ExitNodes {kr},{ru},{sy},{cn}&lt;br /&gt;
test exit node&lt;br /&gt;
 ifconfig.me&lt;br /&gt;
=toolbox=&lt;br /&gt;
 toolbox create --distro rhel --release 9.5&lt;br /&gt;
==running rocky==&lt;br /&gt;
 podman pull docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
 toolbox create --image docker.io/rockylinux/rocky-toolbox:9&lt;br /&gt;
&lt;br /&gt;
=top(the command)=&lt;br /&gt;
Top batch mode run one iteration&lt;br /&gt;
 top -bn1&lt;br /&gt;
Sort by memory usage&lt;br /&gt;
 for i in {1..10};do date; top -c -b -o +%MEM | head -n 17|tail -11;sleep 5;done&lt;br /&gt;
Top used in openshift.&lt;br /&gt;
 top -bcn1 -w512 | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=top derivates=&lt;br /&gt;
 apachetop&lt;br /&gt;
 dnstop&lt;br /&gt;
 iftop&lt;br /&gt;
 latencytop&lt;br /&gt;
 glances&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 touch -am 0910120003    Give a new access time on a file 0910120003MMDDhhmmyy&lt;br /&gt;
linux&lt;br /&gt;
 touch -t 197102162324 *&lt;br /&gt;
&lt;br /&gt;
=tput=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
Line wraps&lt;br /&gt;
 tput smam&lt;br /&gt;
invisible cursor&lt;br /&gt;
 tput civis&lt;br /&gt;
visible cursor&lt;br /&gt;
 tput cnorm&lt;br /&gt;
reset is a good command to reset shell&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
=tr=&lt;br /&gt;
translate capital to lower letter.&lt;br /&gt;
 tr &#039;[:upper:]&#039; &#039;[:lower:]&#039;&lt;br /&gt;
null character to new line&lt;br /&gt;
 tr &#039;\000&#039; &#039;\n&#039; &amp;lt; /proc/3575/environ&lt;br /&gt;
Remove unprintable characters.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tr -dc &#039;[[:print:]]&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trickle=&lt;br /&gt;
Speed limit for download&lt;br /&gt;
 rsync -ae &amp;quot;trickle -d 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Speed limit for upload.&lt;br /&gt;
 rsync -ae &amp;quot;trickle -u 80 ssh&amp;quot; user@host:/src/ /dst/&lt;br /&gt;
Limit wget to 64kbit upload and download.&lt;br /&gt;
 trickle -d 64 -u 64 wget &amp;quot;https://www.halfface.se/file.txt&amp;quot;&lt;br /&gt;
=ts=&lt;br /&gt;
timestamp&lt;br /&gt;
 ls -la | ts &#039;%F %H:%M:%S&#039;&lt;br /&gt;
&lt;br /&gt;
=tune2fs(tunefs)=&lt;br /&gt;
 tune2fs -m 0 /dev/sdb1&lt;br /&gt;
&lt;br /&gt;
=type=&lt;br /&gt;
What kind of command do we use. builtin or some file?&lt;br /&gt;
 type ls&lt;br /&gt;
&lt;br /&gt;
=udevadm=&lt;br /&gt;
Monitor udev events.&lt;br /&gt;
 udevadm monitor&lt;br /&gt;
udevadm info --query=all --name=sda&lt;br /&gt;
 look at values for disk. Can be used to locate san source.&lt;br /&gt;
&lt;br /&gt;
=udr=&lt;br /&gt;
rsync over udp.&lt;br /&gt;
 udr -a 57621 -b 57631 rsync -rP host.inter.net:/source/ /destination/&lt;br /&gt;
=ulimt=&lt;br /&gt;
Look at current limits for logged in user.&lt;br /&gt;
 ulimit -a&lt;br /&gt;
Look at limits for process with pid 12345.&lt;br /&gt;
 cat /proc/12345/limits&lt;br /&gt;
=unalias=&lt;br /&gt;
Unalias all aliases&lt;br /&gt;
 unalias -a&lt;br /&gt;
=unhide=&lt;br /&gt;
Find hidden ports.&lt;br /&gt;
 unhide -v proc&lt;br /&gt;
&lt;br /&gt;
=unetbootin=&lt;br /&gt;
 Boot iso image from usb memory.&lt;br /&gt;
=update-crypto-policies=&lt;br /&gt;
Change crypt policies so that I am able to start openvpn connection.&lt;br /&gt;
 sudo update-crypto-policies --set DEFAULT:SHA1&lt;br /&gt;
&lt;br /&gt;
=upower=&lt;br /&gt;
 # Powerstatus of the system. battery charge.&lt;br /&gt;
 upower --dump&lt;br /&gt;
=uptime=&lt;br /&gt;
Uptime in seconds.&lt;br /&gt;
 awk -F . &#039;{print $1}&#039; /proc/uptime&lt;br /&gt;
&lt;br /&gt;
=urldecode/urlencode=&lt;br /&gt;
Encode&lt;br /&gt;
 perl -pe&#039;s/([^-_.~A-Za-z0-9])/sprintf(&amp;quot;%%%02X&amp;quot;, ord($1))/seg&#039;&lt;br /&gt;
 jq -sRr @uri&lt;br /&gt;
Decode&lt;br /&gt;
 perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;&lt;br /&gt;
 jq -r @uri&lt;br /&gt;
&lt;br /&gt;
=useradd=&lt;br /&gt;
 useradd --uid 666 --gid 666 --comment &#039;devil&#039; devil &amp;amp;&amp;amp; echo &#039;devil:VerySecretPassword&#039; | chpasswd&lt;br /&gt;
&lt;br /&gt;
=v4l2=&lt;br /&gt;
Video player&lt;br /&gt;
 qv4l2&lt;br /&gt;
List available formatats and resolutions.&lt;br /&gt;
 v4l2-ctl --list-formats-ext&lt;br /&gt;
List available formats&lt;br /&gt;
 v4l2-ctl --list-formats&lt;br /&gt;
Set camera to h264&lt;br /&gt;
 v4l2-ctl --set-fmt-video=width=800,height=448,pixelformat=1&lt;br /&gt;
Set framerate.&lt;br /&gt;
 v4l2-ctl --set-parm=30&lt;br /&gt;
List video parameters&lt;br /&gt;
 v4l2-ctl --get-fmt-video&lt;br /&gt;
List video output&lt;br /&gt;
 v4l2-ctl --all&lt;br /&gt;
Disable autofocus&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_auto=0&lt;br /&gt;
 v4l2-ctl --verbose --set-ctrl=focus_absolute=0&lt;br /&gt;
=version of linux=&lt;br /&gt;
 cat /etc/os-release&lt;br /&gt;
&lt;br /&gt;
=vi=&lt;br /&gt;
 :set ignorecase&lt;br /&gt;
 :set list        show all keys.&lt;br /&gt;
 :set nolist      show their representative.&lt;br /&gt;
=wipefs=&lt;br /&gt;
Wipe removes information about file system without removing actual data.&lt;br /&gt;
 wipefs -a /dev/sdc&lt;br /&gt;
&lt;br /&gt;
=vmstat=&lt;br /&gt;
top over time.&lt;br /&gt;
 vmstat -n 5&lt;br /&gt;
Description:&lt;br /&gt;
 r=procs waiting for cpu time.&lt;br /&gt;
 b=procs in sleep mode.&lt;br /&gt;
 swpd=virtual memory in use in swap.&lt;br /&gt;
 free=memory free.&lt;br /&gt;
 buff=memory used by buffers&lt;br /&gt;
 cache=memory used as cache.&lt;br /&gt;
 si=swap in.&lt;br /&gt;
 so=swap out.&lt;br /&gt;
 bi=io block in.&lt;br /&gt;
 bo=io block out.&lt;br /&gt;
 in=interups&lt;br /&gt;
 cs=contex switching.&lt;br /&gt;
 us=cpu user space&lt;br /&gt;
 sy=cpu system usage to serve.&lt;br /&gt;
 id=cpu idle&lt;br /&gt;
 wa=cpu waiting for input output. iowait.&lt;br /&gt;
 st=cpu time stolen from a virtual machine&lt;br /&gt;
&lt;br /&gt;
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----&lt;br /&gt;
  r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st&lt;br /&gt;
  2  1 814984 167992  26820 999460    0    0     1     0 2467 5088  2  2 95  1  0   &lt;br /&gt;
  0  0 814984 168100  26820 999540    0    0     2   150 2467 5026  1  2 97  0  0&lt;br /&gt;
=w3m(elinks)=&lt;br /&gt;
 curl -s https://google.com | w3m -T text/html -dump&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 wget -r -nH -np --cut-dirs=1 --no-check-certificate -U Mozilla --user={uname} --password={pwd} https://my-host/my-webdav-dir/my-dir-in-webdav&lt;br /&gt;
wget to standard output.&lt;br /&gt;
 wget --no-check-certificate -S -O- http://inter.net&lt;br /&gt;
Special heather&lt;br /&gt;
 wget &#039;http://halfface.se&#039; --header=&#039;Cookie: has_js=1&#039;&lt;br /&gt;
Mirror&lt;br /&gt;
 wget &#039;https://halfface.se/test&#039; -r -l 3 --convert-links -o log  --html-extension&lt;br /&gt;
&lt;br /&gt;
=whois=&lt;br /&gt;
 # When does a domain expire.&lt;br /&gt;
 whois -h whois.iana.org sivberg.se&lt;br /&gt;
 # which ipranges does an ipaddress belong too. In this case looking at google.&lt;br /&gt;
 whois -h whois.radb.net -- &amp;quot;-i origin $(whois -s -h whois.radb.net 172.217.26.68 | grep ^origin | awk &#039;{print $2}&#039; | tail -1)&amp;quot; | grep ^route | awk &#039;{print $2}&#039;&lt;br /&gt;
 # Who to find address range for site.&lt;br /&gt;
 host www.facebook.com&lt;br /&gt;
 whois 157.240.194.35 | grep CIDR&lt;br /&gt;
&lt;br /&gt;
=wireshark=&lt;br /&gt;
 find packet&lt;br /&gt;
 packet details&lt;br /&gt;
 string&lt;br /&gt;
==ssl decryption==&lt;br /&gt;
 export SSLKEYLOGFILE=/tmp/sslkeylog ; curl -sv -d &amp;quot;blablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablablabla&amp;quot; https://www.halfface.se&lt;br /&gt;
 wireshark. Edit - Preferences - Protocols - TLS - (Pre) -master-Secret log file.&lt;br /&gt;
==tshark==&lt;br /&gt;
cli version&lt;br /&gt;
 tshark -V -r $dump.pcap&lt;br /&gt;
=wlr-randr=&lt;br /&gt;
Change dpi in wayland.&lt;br /&gt;
 wlr-randr --output eDP-1 --scale 2&lt;br /&gt;
Change resolution&lt;br /&gt;
 wlr-randr --output DP-1 --mode 1920x1080&lt;br /&gt;
&lt;br /&gt;
=wodim=&lt;br /&gt;
Burning disks.&lt;br /&gt;
 wodim -scanbus    # Scan scsi bus for burners.&lt;br /&gt;
 wodim --devices   # Discover basic information.&lt;br /&gt;
 wodim -checkdrive # Information about burner.&lt;br /&gt;
 wodim -tao speed=0 dev=/dev/sr0 -v -data /temp/files/                      # Burn disk containing structure from /temp/files/&lt;br /&gt;
 wodim -eject  -tao speed=0 dev=/dev/scd0 -v -data /my/directory/image.iso   # Burn image to disc.&lt;br /&gt;
=write=&lt;br /&gt;
Send message to someone via tty.&lt;br /&gt;
 who | grep user&lt;br /&gt;
write message end with CTRL + d&lt;br /&gt;
 write abjorklund pts/2&lt;br /&gt;
&lt;br /&gt;
=xargs=&lt;br /&gt;
locate case insensetive, regular expression. xargs string to replace imput. Print output to standard error.&lt;br /&gt;
 locate -ir &amp;quot;.*\.crt$&amp;quot; | xargs -I &#039;{}&#039; -t cp {} /temp/ssl/&lt;br /&gt;
Do something on everything from standard input.&lt;br /&gt;
 ls -la | xargs -i% echo &#039;# beginning #&#039; % &#039;# end of line #&#039;&lt;br /&gt;
split several lines into groups.&lt;br /&gt;
 for i in {00..99} ; do echo $i, ; done | xargs -L 20&lt;br /&gt;
&lt;br /&gt;
=xdotool=&lt;br /&gt;
When you have to move your mouse but you dont want to push it.&lt;br /&gt;
 xdotool mousemove_relative -- -1 -1&lt;br /&gt;
 xdotool mousemove_relative 1 1&lt;br /&gt;
Send ab to window.&lt;br /&gt;
 xdotool search --onlyvisible --name freerdp key a key b&lt;br /&gt;
=xfs=&lt;br /&gt;
 xfs_repair -L /dev/mapper/vg00-root&lt;br /&gt;
&lt;br /&gt;
=xinput=&lt;br /&gt;
 # List xinputs.&lt;br /&gt;
 xinput list&lt;br /&gt;
 # List properties.&lt;br /&gt;
 xinput list-props &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot;&lt;br /&gt;
 # Middle button emulation.&lt;br /&gt;
 xinput set-prop &amp;quot;Logitech Unifying Device. Wireless PID:400e&amp;quot; &amp;quot;Evdev Middle Button Emulation&amp;quot; 1&lt;br /&gt;
 xinput set-prop 12 &amp;quot;libinput Middle Emulation Enabled&amp;quot; 1&lt;br /&gt;
=xkill=&lt;br /&gt;
Kill xorg process with id 0xb6ffa0&lt;br /&gt;
 xkill -id 0xb6ffa0&lt;br /&gt;
List x applictions&lt;br /&gt;
 xwininfo&lt;br /&gt;
Get recursive list of x applications.&lt;br /&gt;
 xwininfo -root -tree&lt;br /&gt;
&lt;br /&gt;
=xmllint=&lt;br /&gt;
prettify xml&lt;br /&gt;
 xmllint --format -&lt;br /&gt;
&lt;br /&gt;
=xset=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 xset -dpms ; xset s noblank ;xset s off&lt;br /&gt;
Disable repeat&lt;br /&gt;
 xset r off&lt;br /&gt;
Enable repeat&lt;br /&gt;
 xset r on&lt;br /&gt;
&lt;br /&gt;
=xxd=&lt;br /&gt;
Hex to binary&lt;br /&gt;
 xxd -r -p hex.txt output.bin&lt;br /&gt;
Hex to binary in pipe&lt;br /&gt;
 echo &amp;quot;$HEX&amp;quot; | xxd -r -p -&lt;br /&gt;
=yum=&lt;br /&gt;
download src rpm&lt;br /&gt;
 yumdownloader --source net-snmp&lt;br /&gt;
Reinstall default repos.&lt;br /&gt;
 yum reinstall yum-conf-sl6x-1-2&lt;br /&gt;
This will give you a directory with all rpm:s that are required to install rpm.&lt;br /&gt;
 PKG=openssh-server ; yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=6 --downloaddir=/tmp/$PKG $PKG&lt;br /&gt;
==broken repos==&lt;br /&gt;
 yum install bareos-client --disablerepo=* --enablerepo=bareos&lt;br /&gt;
==search for different versions==&lt;br /&gt;
 yum --showduplicates search percona-xtrabackup&lt;br /&gt;
==Add repos to centos 6==&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-eol.repo --output /etc/yum.repos.d/CentOS-Base.repo&lt;br /&gt;
 curl https://www.getpagespeed.com/files/centos6-epel-eol.repo --output /etc/yum.repos.d/epel.repo&lt;br /&gt;
==fix yum in Centos 7, 8==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i &#039;s%^enabled=.%enabled=0%&#039; /etc/yum/pluginconf.d/subscription-manager.conf&lt;br /&gt;
sed -i &#039;s/^mirrorlist/#mirrorlist/g&#039; /etc/yum.repos.d/*&lt;br /&gt;
sed -i &#039;s%^#baseurl=http://mirror.centos.org%baseurl=http://vault.centos.org%g&#039; /etc/yum.repos.d/*&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Get variables to test /etc/yum-repos.d/&amp;lt;file&amp;gt;.conf files==&lt;br /&gt;
 export releasever=$(lsb_release -r | awk &#039;{print $NF}&#039; | awk -F . &#039;{print $1}&#039;)&lt;br /&gt;
 export basearch=$(uname -m)&lt;br /&gt;
&lt;br /&gt;
=zip=&lt;br /&gt;
Zip directory exclude files .svn directory.&lt;br /&gt;
 zip -r /temp/ssl.zip . -x &amp;quot;.svn/*&amp;quot;&lt;br /&gt;
List contents of zip archive.&lt;br /&gt;
 unzip -l archive.zip&lt;br /&gt;
Unzip single file&lt;br /&gt;
 unzip file.zip file/you/want/to/extract/the_file.txt&lt;br /&gt;
unzip excluding path.&lt;br /&gt;
 unzip -j file.zip&lt;br /&gt;
&lt;br /&gt;
=zdump=&lt;br /&gt;
View information from timezone tz.&lt;br /&gt;
 zdump -v /etc/localtime&lt;br /&gt;
Change timezone on host&lt;br /&gt;
 ln -sfT ../usr/share/zoneinfo/Europe/Stockholm localtime&lt;br /&gt;
&lt;br /&gt;
=zfs=&lt;br /&gt;
==Get sync==&lt;br /&gt;
 zfs get sync datapool/netstorage/dog/prod&lt;br /&gt;
 NAME                          PROPERTY  VALUE     SOURCE&lt;br /&gt;
 datapool/netstorage/dog/prod  sync      standard  default&lt;br /&gt;
==set sync==&lt;br /&gt;
 zfs set sync=disabled datapool/netstorage/dog/prod&lt;br /&gt;
==List snapshots(can take time)==&lt;br /&gt;
 zfs list -t snapshot&lt;br /&gt;
==List snapshots for one mount point.==&lt;br /&gt;
 zfs list -r -t snapshot -o name,creation datapool/netstorage/bro/prod&lt;br /&gt;
==Displays the detailed health status==&lt;br /&gt;
 zpool status&lt;br /&gt;
==List datasets==&lt;br /&gt;
 zfs list&lt;br /&gt;
==Create dataset==&lt;br /&gt;
 zfs create datapool/netstorage/media&lt;br /&gt;
==zdb==&lt;br /&gt;
display zpool debugging and consistency information&lt;br /&gt;
 zdb -d dataset&lt;br /&gt;
==zpool list==&lt;br /&gt;
Lists the given pools along with a health status and space usage.&lt;br /&gt;
==iostat==&lt;br /&gt;
Get iostat with values since last second.&lt;br /&gt;
 zpool iostat are -y 1 -l&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Unix]]&lt;br /&gt;
[[Category:Commands]]&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Windows&amp;diff=16573</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Windows&amp;diff=16573"/>
		<updated>2026-03-10T08:49:21Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* empty recyclebin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=connect to windows from windows(rdp)=&lt;br /&gt;
 mstsc /v:172.30.142.11&lt;br /&gt;
Login with password.&lt;br /&gt;
 # Define the server and credentials&lt;br /&gt;
 $server = &amp;quot;&amp;lt;server&amp;gt;&amp;quot;&lt;br /&gt;
 $username = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;br /&gt;
 $password = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
 # Create credentials using cmdkey&lt;br /&gt;
 cmdkey /generic:&amp;quot;TERMSRV/$server&amp;quot; /user:$username /pass:$password&lt;br /&gt;
 # Start MSTSC to connect to the server&lt;br /&gt;
 Start-Process &amp;quot;mstsc&amp;quot; -ArgumentList &amp;quot;/v:$server&amp;quot;&lt;br /&gt;
 # Delete the credentials after MSTSC session is done&lt;br /&gt;
 cmdkey /delete:TERMSRV/&amp;lt;servername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=which version of powershell is installed=&lt;br /&gt;
 $PSVersionTable&lt;br /&gt;
&lt;br /&gt;
=hibernate=&lt;br /&gt;
 powercfg.exe -h off&lt;br /&gt;
&lt;br /&gt;
=enable powershell=&lt;br /&gt;
 set-executionpolicy unrestricted&lt;br /&gt;
=List network interfaces with ips=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress&lt;br /&gt;
=List network interfaces and routes=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress | Format-Table ; Get-NetRoute | Format-Table&lt;br /&gt;
&lt;br /&gt;
=Configure network=&lt;br /&gt;
# Static ip.&lt;br /&gt;
 netsh interface ip set address name=&amp;quot;Local Area Connection&amp;quot; static 192.168.122.41 255.255.255.0 192.168.122.1 1&lt;br /&gt;
# Dhcp&lt;br /&gt;
 netsh interface is set address name=&amp;quot;Local Area Connection&amp;quot; dhcp&lt;br /&gt;
# Verify mtu settings.&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
# Set correct mtu.&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1000&lt;br /&gt;
&lt;br /&gt;
=extract msi=&lt;br /&gt;
 msiexec /a &amp;quot;C:\software.msi&amp;quot; /qb TARGETDIR=&amp;quot;C:\Folder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=restart network=&lt;br /&gt;
 netsh interface set interface extbond admin = disabled&lt;br /&gt;
 ping 127.0.0.1 -n 6&lt;br /&gt;
 netsh interface set interface extbond admin = enabled&lt;br /&gt;
&lt;br /&gt;
=Profile=&lt;br /&gt;
# Profile&lt;br /&gt;
 C:\Users\abjorklund\AppData\Roaming\Microsoft\Windows\Start Menu&lt;br /&gt;
&lt;br /&gt;
=restart via rdesktop=&lt;br /&gt;
 CTRL + ALT + END&lt;br /&gt;
=alternative shutdown=&lt;br /&gt;
Shutdown with restart&lt;br /&gt;
 shutdown /t 0 /r /f&lt;br /&gt;
Shutdown&lt;br /&gt;
 shutdown /t 0 /s /f&lt;br /&gt;
logoff/logout&lt;br /&gt;
 shutdown /l /f&lt;br /&gt;
&lt;br /&gt;
=mount drive=&lt;br /&gt;
 net use z: \\www.halfface.se\storage /user:alex &amp;lt;password&amp;gt; /persistent:no&lt;br /&gt;
=change password=&lt;br /&gt;
Start a command prompt as administrator.&lt;br /&gt;
 net user username password&lt;br /&gt;
&lt;br /&gt;
=activate account=&lt;br /&gt;
 net user username /active:yes&lt;br /&gt;
&lt;br /&gt;
=remove cached passwords=&lt;br /&gt;
list/remove cached passwords graphically&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
list/remove cached passwords cli&lt;br /&gt;
 cmdkey /list&lt;br /&gt;
&lt;br /&gt;
=is your account locked. bat file=&lt;br /&gt;
 @echo off&lt;br /&gt;
 :again&lt;br /&gt;
 date /t &amp;amp; time /t&lt;br /&gt;
 net user /domain mdinkel &amp;gt; c:\temp\mdinkel&lt;br /&gt;
 find &amp;quot;active&amp;quot; c:\temp\mdinkel&lt;br /&gt;
 timeout 10&lt;br /&gt;
 goto again&lt;br /&gt;
&lt;br /&gt;
=unlock account=&lt;br /&gt;
 Net user username /DOMAIN /active:YES&lt;br /&gt;
&lt;br /&gt;
=Browse active dirctory structure=&lt;br /&gt;
 adsiedit.msc&lt;br /&gt;
=time zone conversion=&lt;br /&gt;
Here you can convert from Windows to unix time zones tz.&lt;br /&gt;
 http://www.unicode.org/cldr/charts/latest/supplemental/zone_tzid.html&lt;br /&gt;
=uptime=&lt;br /&gt;
 net statistics server&lt;br /&gt;
Uptime and other information&lt;br /&gt;
 systeminfo /FO CSV | ConvertFrom-CSV&lt;br /&gt;
&lt;br /&gt;
=credetial manager empty cache=&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
=remote powershell pssession=&lt;br /&gt;
Create pssession.&lt;br /&gt;
 $secpasswd = ConvertTo-SecureString &amp;quot;*************&amp;quot; -AsPlainText -Force&lt;br /&gt;
 $mycreds = New-Object System.Management.Automation.PSCredential (&amp;quot;domain\user&amp;quot;, $secpasswd)&lt;br /&gt;
 New-PSSession -ComputerName 10.111.222.5 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
get pssessions.&lt;br /&gt;
 get-pssession&lt;br /&gt;
&lt;br /&gt;
enter pssession&lt;br /&gt;
 Enter-PSSession -Name&lt;br /&gt;
 Enter-PSSession -ComputerName 10.50.197.70&lt;br /&gt;
 Enter-PSSession 172.18.1.198 -Credential domain\uer&lt;br /&gt;
&lt;br /&gt;
remove pssession&lt;br /&gt;
 remove-pssession -name Session15&lt;br /&gt;
&lt;br /&gt;
Run remote command.&lt;br /&gt;
 Invoke-Command -name &amp;quot;Session14&amp;quot; -ScriptBlock { hostname }&lt;br /&gt;
&lt;br /&gt;
Login to remote machine&lt;br /&gt;
 Enter-PSSession 10.50.197.70 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
=PowerShell=&lt;br /&gt;
=gc=&lt;br /&gt;
Get-content. Print content of file.&lt;br /&gt;
 gc c:\temp\file.txt&lt;br /&gt;
=Set-content=&lt;br /&gt;
 Set-Content -path REMOTE\Filename.txt&lt;br /&gt;
=Out-File=&lt;br /&gt;
 Out-File -Encoding UTF8&lt;br /&gt;
&lt;br /&gt;
=replace text in file=&lt;br /&gt;
 Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace &amp;quot;OLD&amp;quot;, &amp;quot;NEW&amp;quot; } | Set-Content REMOTE\Filename.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=get-service=&lt;br /&gt;
Status of one service.&lt;br /&gt;
 get-service ipeventwatcher&lt;br /&gt;
status of all services. list services.&lt;br /&gt;
 Get-Service&lt;br /&gt;
find service&lt;br /&gt;
 get-service *service_to_find* | select -expand name&lt;br /&gt;
=get failed services=&lt;br /&gt;
 Get-Service | Where-Object {$_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;}&lt;br /&gt;
=failed service from boot=&lt;br /&gt;
 Write-Host &amp;quot;`n=== Stopped Automatic Services ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-Service | Where-Object { $_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Disabled Scheduled Tasks ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-ScheduledTask | Where-Object {$_.State -eq &#039;Disabled&#039;} | Select-Object TaskName, TaskPath | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Recent Service Failures (Event Log) ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-EventLog -LogName System -Source &amp;quot;Service Control Manager&amp;quot; -EntryType Error -Newest 10 | Select-Object TimeGenerated, Message | Format-List&lt;br /&gt;
&lt;br /&gt;
=stop-service=&lt;br /&gt;
 stop-service ipeventwatcher&lt;br /&gt;
=restart-service=&lt;br /&gt;
 restart-service ipremote -force&lt;br /&gt;
 restart-service check_mk_agent -force&lt;br /&gt;
 Restart-Service -Force -Name &amp;quot;TermService&amp;quot;&lt;br /&gt;
=tell windows to restart service automatically=&lt;br /&gt;
 $serviceName = &amp;quot;icinga2&amp;quot;&lt;br /&gt;
 sc.exe failure $serviceName reset= 86400 actions= restart/60000/restart/60000/restart/60000&lt;br /&gt;
&lt;br /&gt;
=start-service=&lt;br /&gt;
 start-service ipeventwatcher&lt;br /&gt;
=autostart service=&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
&lt;br /&gt;
=variable=&lt;br /&gt;
Set variable to content of file.&lt;br /&gt;
 $a = gc IPremote.exe.config&lt;br /&gt;
=md5sum=&lt;br /&gt;
 [CmdletBinding(SupportsShouldProcess=$False)]&lt;br /&gt;
 param([string]$File)&lt;br /&gt;
 &lt;br /&gt;
 function Get-Checksum([string]$strInFile)&lt;br /&gt;
 {&lt;br /&gt;
 	    $objCrypto = New-Object &amp;quot;System.Security.Cryptography.MD5CryptoServiceProvider&amp;quot;&lt;br /&gt;
 	    $objFile = Get-Item $strInFile&lt;br /&gt;
 	    $objStream = $objFile.OpenRead()&lt;br /&gt;
 	    $objBytes = $objCrypto.ComputeHash($objStream)&lt;br /&gt;
 	    $strChecksum = &amp;quot;&amp;quot;&lt;br /&gt;
 	    foreach($objByte in $objBytes) {&lt;br /&gt;
 		        $strChecksum += $objByte.ToString(&#039;x2&#039;)&lt;br /&gt;
 	    }&lt;br /&gt;
 	    $objStream.Close() | Out-Null&lt;br /&gt;
 	    return $strChecksum&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $strFileToCheck = $File&lt;br /&gt;
 if(Test-Path($strFileToCheck)) {&lt;br /&gt;
 	    Get-Checksum $strFileToCheck&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get md5sum of all files.&lt;br /&gt;
 gci * | Get-FileHash -Algorithm md5 | ft Hash,@{n=&amp;quot;File&amp;quot;;e={(Get-item $_.Path).Name}}&lt;br /&gt;
&lt;br /&gt;
=tcp connect port=&lt;br /&gt;
netcat nc &lt;br /&gt;
 (New-Object Net.Sockets.TcpClient).Connect(&amp;quot;1.2.3.4&amp;quot;,80)&lt;br /&gt;
 $Tcp = New-Object Net.Sockets.TcpClient;$Tcp.BeginConnect(&amp;quot;1.2.3.4&amp;quot;, 80, $null, $null).AsyncWaitHandle.WaitOne(5000);$Tcp.Close()&lt;br /&gt;
 New-Object System.Net.Sockets.TCPClient -ArgumentList &amp;quot;1.2.3.4&amp;quot;,3389&lt;br /&gt;
 &lt;br /&gt;
 Test-NetConnection -ComputerName 192.168.122.1 -InformationLevel Detailed -port 23&lt;br /&gt;
Latest and greatest.&lt;br /&gt;
 $Computer=&amp;quot;127.0.0.1&amp;quot;; $Port=20010; $Socket = New-Object Net.Sockets.TcpClient;($Socket.BeginConnect($Computer, $Port, $Null, $Null)).AsyncWaitHandle.WaitOne(200);$Socket.Close();&lt;br /&gt;
&lt;br /&gt;
=What is using tcp connections=&lt;br /&gt;
 Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name=&amp;quot;ProcessName&amp;quot;;Expression={(Get-Process -PID ($_.Name.Split(&#039;,&#039;)[-1].Trim(&#039; &#039;))).Name}}, Group | Sort Count -Descending&lt;br /&gt;
=grep=&lt;br /&gt;
 gc IPremoteDebug.log | select-string &amp;quot;ip2date&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=List all processes. Grep for string=&lt;br /&gt;
 Get-Process -IncludeUserName |  findstr dkarlslatt&lt;br /&gt;
&lt;br /&gt;
=grep recursive=&lt;br /&gt;
 dir -Recurse | Select-String -pattern &amp;quot;192.168.19.102&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list processes=&lt;br /&gt;
 Get-Process&lt;br /&gt;
=kill processes from user=&lt;br /&gt;
 Get-Process -IncludeUserName | Where UserName -match joe | Stop-Process -force&lt;br /&gt;
&lt;br /&gt;
=restart processes=&lt;br /&gt;
 get-process -name powershellserver | stop-process&lt;br /&gt;
&lt;br /&gt;
=clear content=&lt;br /&gt;
 Clear-Content filename.doc&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 dir /a/s/b filename.txt&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 &#039;Get-ChildItem &amp;quot;c:\program files\&amp;quot; -rec | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
 &#039;Get-ChildItem . -recurse -force | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
=locate a file=&lt;br /&gt;
List recursive look for file with file name.&lt;br /&gt;
 Get-Childitem -Path C:\ -Include *filename* -Recurse -ErrorAction SilentlyContinue&lt;br /&gt;
&lt;br /&gt;
=dir filename size=&lt;br /&gt;
 &#039;get-childitem &amp;quot;C:\Program Files\directory&amp;quot; -rec | where {!$_.PSIsContainer} | select-object Name, Length&#039;&lt;br /&gt;
=find file with filename=&lt;br /&gt;
 Get-ChildItem -Path C:\ -Recurse -Filter *sshd_config* -ErrorAction SilentlyContinue&lt;br /&gt;
=find old files=&lt;br /&gt;
 Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}&lt;br /&gt;
&lt;br /&gt;
=find old files and remove them=&lt;br /&gt;
 $Folder = &amp;quot;G:\Downloads&amp;quot;&lt;br /&gt;
 #Delete files older than 6 months&lt;br /&gt;
 Get-ChildItem $Folder -Recurse -Force -ea 0 |&lt;br /&gt;
 ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-180)} |&lt;br /&gt;
  ForEach-Object {&lt;br /&gt;
    $_ | del -Force&lt;br /&gt;
    $_.FullName | Out-File C:\log\deletedlog.txt -Append&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=calculate size of directory=&lt;br /&gt;
Value returned is in Scientific notation format. Add number of zeroes to value. 1.00E-6 is 1000000.&lt;br /&gt;
 &#039;(gci &amp;quot;D:\data\db&amp;quot; | measure Length -s).Sum /1GB&#039;&lt;br /&gt;
=remove directory=&lt;br /&gt;
 rd /s /q $DIRECTORY&lt;br /&gt;
&lt;br /&gt;
=dir human readable file size=&lt;br /&gt;
function&lt;br /&gt;
 Function Format-FileSize() {&lt;br /&gt;
    Param ([int]$size)&lt;br /&gt;
    If     ($size -gt 1TB) {[string]::Format(&amp;quot;{0:0.00} TB&amp;quot;, $size / 1TB)}&lt;br /&gt;
    ElseIf ($size -gt 1GB) {[string]::Format(&amp;quot;{0:0.00} GB&amp;quot;, $size / 1GB)}&lt;br /&gt;
    ElseIf ($size -gt 1MB) {[string]::Format(&amp;quot;{0:0.00} MB&amp;quot;, $size / 1MB)}&lt;br /&gt;
    ElseIf ($size -gt 1KB) {[string]::Format(&amp;quot;{0:0.00} kB&amp;quot;, $size / 1KB)}&lt;br /&gt;
    ElseIf ($size -gt 0)   {[string]::Format(&amp;quot;{0:0.00} B&amp;quot;, $size)}&lt;br /&gt;
    Else                   {&amp;quot;&amp;quot;}&lt;br /&gt;
 }&lt;br /&gt;
command&lt;br /&gt;
 Get-ChildItem | Select-Object Name, @{Name=&amp;quot;Size&amp;quot;;Expression={Format-FileSize($_.Length)}}&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
decode base64 string&lt;br /&gt;
 [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(&amp;quot;YmxhaGJsYWg=&amp;quot;))&lt;br /&gt;
decode content of file.&lt;br /&gt;
 ssh ip_address_hostname &#039;$Text=(get-content &amp;quot;C:\Program Files\application\application.log&amp;quot;) ; $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) ; $EncodedText =[Convert]::ToBase64String($Bytes) ; $EncodedText&#039; | base64 -d&lt;br /&gt;
&lt;br /&gt;
=troubleshooting network=&lt;br /&gt;
 netstat -ano | findstr &amp;lt;ipremote-pid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=diff=&lt;br /&gt;
Compare two files.&lt;br /&gt;
 compare-object (get-content one.txt) (get-content two.txt)&lt;br /&gt;
=log file. Eventlog=&lt;br /&gt;
List event logs.&lt;br /&gt;
 Get-EventLog -list&lt;br /&gt;
List events in a log.&lt;br /&gt;
 Get-EventLog -LogName IPremoteLog&lt;br /&gt;
List events sins date.&lt;br /&gt;
 Get-EventLog -LogName Application -after &amp;quot;den 5 november 2014 10:00:00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get-winevent=&lt;br /&gt;
 # List event logs.&lt;br /&gt;
 Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}&lt;br /&gt;
 # Get latest rdp log entries.&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
 Get-Date&lt;br /&gt;
Date in iso format.&lt;br /&gt;
 Get-Date -UFormat &#039;+%Y-%m-%d %H:%M:%S.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
=full output=&lt;br /&gt;
Print all variable with full output&lt;br /&gt;
 &#039;(Get-Variable).StdOut&#039;&lt;br /&gt;
Send output to line like the following to get more output.&lt;br /&gt;
 | Ft -autosize | out-string -width 4096&lt;br /&gt;
&lt;br /&gt;
=restart services via samba=&lt;br /&gt;
install samba-common&lt;br /&gt;
 yum install samba-common&lt;br /&gt;
List services.&lt;br /&gt;
 net rpc service list -I IPADDRESS -U USERNAME%PASSWORD&lt;br /&gt;
Stop service.&lt;br /&gt;
 net rpc service start ipremote -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
Start service.&lt;br /&gt;
 net rpc service start ipeventwatcher -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
=Windows version=&lt;br /&gt;
 [System.Environment]::OSVersion.Version&lt;br /&gt;
 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx&lt;br /&gt;
 (Get-WmiObject -class Win32_OperatingSystem).Caption&lt;br /&gt;
Which architecture.&lt;br /&gt;
 gwmi win32_operatingsystem | select osarchitecture&lt;br /&gt;
&lt;br /&gt;
=set windows proxy=&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyEnable -Value 1&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyServer -Value proxy.int.redbridge.se&amp;quot;:&amp;quot;3128&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyOverride -Value &amp;quot;*.redbridge.se&amp;quot;&lt;br /&gt;
 Get-ItemProperty -Path &#039;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&#039; | findstr Proxy&lt;br /&gt;
&lt;br /&gt;
=Is proxy bypassed=&lt;br /&gt;
 $url = &amp;quot;http://10.127.12.10&amp;quot;;$webclient = New-Object System.Net.WebClient; $webclient.Proxy.IsBypassed($url)&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
 (Invoke-WebRequest http://localhost/Requests -UseBasicParsing).content&lt;br /&gt;
 curl -TimeoutSec 1 https://halfface.se&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 Invoke-WebRequest -Uri &amp;quot;http://1.2.3.4/file.txt&amp;quot; -OutFile &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=turn of index services when computer is not used=&lt;br /&gt;
In stopindexer enter the line&lt;br /&gt;
 net stop wsearch&lt;br /&gt;
In the startindexer enter the line&lt;br /&gt;
 net start wsearch&lt;br /&gt;
&lt;br /&gt;
=robocopy(backup)=&lt;br /&gt;
 robocopy C:\Users\user_name\Documents h:\backup\user_name /e /mir /np /log+:c:\temp\backup_log.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=number of cpus=&lt;br /&gt;
 Get-WmiObject -class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors, Addresswidth&lt;br /&gt;
&lt;br /&gt;
=cpu_usage=&lt;br /&gt;
cpu=&amp;lt;value&amp;gt;%&lt;br /&gt;
 $cpuUsage = Get-WmiObject Win32_Processor | Select-Object -ExpandProperty LoadPercentage ; $averageCpuUsage = ($cpuUsage | Measure-Object -Average).Average ; &amp;quot;cpu:{0:N0}%&amp;quot; -f $averageCpuUsage&lt;br /&gt;
 Get-Counter &#039;\Process(*)\% Processor Time&#039;| Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@{L=&#039;CPU&#039;;E={($_.Cookedvalue/100).toString(&#039;P&#039;)}} -AutoSize | Ft -autosize | out-string -width 4096&lt;br /&gt;
 Get-WmiObject win32_processor | select LoadPercentage  |fl&lt;br /&gt;
Stats and all processes. Including process running under svhost.&lt;br /&gt;
 $CpuInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Processor;$MemInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Memory;$SysInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_System;$PrcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfProc_Process;$SvcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_Service;$GeneralInfo = @{};$ProcOutput = @();$ServiceTable = @{};$GeneralInfo.Add(&amp;quot;_Name&amp;quot;, $env:COMPUTERNAME);$GeneralInfo.Add(&amp;quot;ProcessorQueueLength&amp;quot;, $SysInfo.ProcessorQueueLength);$GeneralInfo.Add(&amp;quot;PercentInterruptTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentInterruptTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;AvailableMBytes&amp;quot;, $MemInfo.AvailableMBytes);$GeneralInfo.Add(&amp;quot;PercentIdleTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentIdleTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;PercentPrivilegedTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentPrivilegedTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;TotalMemory&amp;quot;, (Get-WmiObject Win32_ComputerSystem | %{$_.TotalPhysicalMemory}));$GeneralInfo.Add(&amp;quot;PercentProcessorTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentProcessorTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CacheBytes&amp;quot;, $MemInfo.CacheBytes);$GeneralInfo.Add(&amp;quot;PercentUserTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentUserTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CommittedBytes&amp;quot;, $MemInfo.CommittedBytes);$GeneralInfo.GetEnumerator() | Sort-Object -Property Name | ForEach-Object {Write-Host -Object ($_.Name + &amp;quot;: &amp;quot;) -NoNewline; Write-Host -Object $_.Value};foreach($Service in $SvcInfo) {$ProcId = $Service.ProcessId.ToString();if($ProcId -ne &amp;quot;0&amp;quot;) {if($ServiceTable.ContainsKey($ProcId)) {$Value = $ServiceTable.Get_Item($ProcId);$Value += $Service.Name;$ServiceTable.Set_Item($ProcId, $Value);} else {$ServiceTable.Add($ProcId, @($Service.Name));}}}foreach($proc in $PrcInfo) {$Obj = New-Object psobject;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Process&amp;quot; -Value $proc.Name;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;CPU&amp;quot; -Value $proc.PercentProcessorTime;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Thread&amp;quot; -Value $proc.ThreadCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Handle&amp;quot; -Value $proc.HandleCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Services&amp;quot; -Value ($ServiceTable.Get_Item($proc.IDProcess.ToString()) -join &amp;quot;,&amp;quot;);$ProcOutput += $Obj;}$ProcOutput | ft -AutoSize&lt;br /&gt;
&lt;br /&gt;
=Sort processes by mem usage.=&lt;br /&gt;
 get-wmiobject WIN32_PROCESS | Sort-Object -Property ws -Descending|select -first 20|Select processname, @{Name=&amp;quot;Mem Usage(MB)&amp;quot;;Expression={[math]::round($_.ws / 1mb)}},@{Name=&amp;quot;ProcessID&amp;quot;;Expression={[String]$_.ProcessID}},@{Name=&amp;quot;UserID&amp;quot;;Expression={$_.getowner().user}} | Ft -autosize | out-string -width 4096&lt;br /&gt;
2&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, WorkingSet, CPU&lt;br /&gt;
3 Better formatting&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}, @{Name=&amp;quot;CPU(s)&amp;quot;;Expression={[math]::Round($_.CPU,2)}}&lt;br /&gt;
4 private memory&lt;br /&gt;
 Get-Process | Sort-Object -Property PrivateMemorySize -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;PrivateMemory(MB)&amp;quot;;Expression={[math]::Round($_.PrivateMemorySize/1MB,2)}}, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}&lt;br /&gt;
&lt;br /&gt;
=total memory in machine=&lt;br /&gt;
 Get-WMIObject -class win32_physicalmemory | Format-Table devicelocator, capacity -a&lt;br /&gt;
=how much memory is free in GB=&lt;br /&gt;
 $freemem = Get-WmiObject -Class Win32_OperatingSystem; echo ([math]::round(($freemem.FreePhysicalMemory / 1024 / 1024), 2))&lt;br /&gt;
=Memory usage, Total memory=&lt;br /&gt;
 $mem = Get-Counter &#039;\Memory\Available MBytes&#039;&lt;br /&gt;
 $usedMem = (Get-Counter &#039;\Memory\Committed Bytes&#039;).CounterSamples.CookedValue / 1MB&lt;br /&gt;
 $availableMem = $mem.CounterSamples.CookedValue&lt;br /&gt;
 $usedMem = [math]::round($usedMem, 2)&lt;br /&gt;
 $availableMem = [math]::round($availableMem, 2)&lt;br /&gt;
 [PSCustomObject]@{&lt;br /&gt;
     UsedMemoryMB = $usedMem&lt;br /&gt;
     AvailableMemoryMB = $availableMem&lt;br /&gt;
     TotalMemoryMB = (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1MB&lt;br /&gt;
 }&lt;br /&gt;
=memory usage as percent usage=&lt;br /&gt;
 $memory = Get-WmiObject Win32_OperatingSystem ; $totalMemory = $memory.TotalVisibleMemorySize ; $freeMemory = $memory.FreePhysicalMemory ; $usedMemory = $totalMemory - $freeMemory ; $memoryUsage = ($usedMemory / $totalMemory) * 100 ; &amp;quot;mem:{0:N0}%&amp;quot; -f $memoryUsage&lt;br /&gt;
&lt;br /&gt;
=disk usage=&lt;br /&gt;
 Get-PSDrive&lt;br /&gt;
=tail=&lt;br /&gt;
Get last 10 lines&lt;br /&gt;
 Get-Content [filename] | Select-Object -Last 10&lt;br /&gt;
tail -f&lt;br /&gt;
 Get-Content filename.log -Wait&lt;br /&gt;
Since PowerShell 3.&lt;br /&gt;
 gc -Tail 10 log.txt &lt;br /&gt;
=head=&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc log.txt | select -first 10&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc -TotalCount 10 log.txt&lt;br /&gt;
&lt;br /&gt;
=wc count lines=&lt;br /&gt;
 Get-Content C:\temp\ERRORLOG.5 | Measure-Object -line&lt;br /&gt;
=disable firewall=&lt;br /&gt;
From the command line&lt;br /&gt;
 netsh advfirewall set allprofiles state off&lt;br /&gt;
Using Powershell&lt;br /&gt;
  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False&lt;br /&gt;
=which firewall profiles are available=&lt;br /&gt;
 get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a&lt;br /&gt;
=which firewall profile is being used=&lt;br /&gt;
 get-NetConnectionProfile&lt;br /&gt;
&lt;br /&gt;
=which ports are open=&lt;br /&gt;
 Get-NetFirewallRule | Where { $_.Enabled -eq &amp;quot;True&amp;quot; -and $_.Direction -eq &amp;quot;Inbound&amp;quot; }&lt;br /&gt;
=which rules exist=&lt;br /&gt;
 Get-NetFirewallRule&lt;br /&gt;
=open port in firewall=&lt;br /&gt;
 netsh advfirewall firewall add rule name=&amp;quot;Open Port 80&amp;quot; dir=in action=allow protocol=TCP localport=80&lt;br /&gt;
&lt;br /&gt;
=firewall get more info about opening=&lt;br /&gt;
 get-netfirewallrule -DisplayName &amp;quot;Remote Desktop - User Mode (TCP-In)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=add administrative user=&lt;br /&gt;
Create user&lt;br /&gt;
 net user /add root [password]&lt;br /&gt;
Add user to local group.&lt;br /&gt;
 net localgroup administrators root /add&lt;br /&gt;
=list local groups=&lt;br /&gt;
 Get-LocalGroup&lt;br /&gt;
&lt;br /&gt;
=Which process is using port=&lt;br /&gt;
 # Which process is using port.&lt;br /&gt;
 netstat -nao | findstr :22&lt;br /&gt;
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1916&lt;br /&gt;
 # Which process has pid.&lt;br /&gt;
 get-process  | findstr 1916&lt;br /&gt;
 355      40    48752      56056   621     6,45   1916 PowerShellServer&lt;br /&gt;
 # which process has pid.&lt;br /&gt;
 tasklist | findstr 1916&lt;br /&gt;
 PowerShellServer.exe          1916 Services                   0     56.072 K&lt;br /&gt;
=which version is installed=&lt;br /&gt;
 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize&lt;br /&gt;
=list drives=&lt;br /&gt;
 get-psdrive&lt;br /&gt;
 wmic logicaldisk get caption&lt;br /&gt;
=svchost.exe what is happening=&lt;br /&gt;
 tasklist /svc /fi &amp;quot;IMAGENAME eq svchost.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=computer management=&lt;br /&gt;
Start computer management&lt;br /&gt;
 compmgmt.msc&lt;br /&gt;
=msinfo32=&lt;br /&gt;
Generate report.&lt;br /&gt;
 msinfo32&lt;br /&gt;
=licensing=&lt;br /&gt;
 Get-wmiobject SoftwareLicensingProduct -ComputerName localhost | Where-Object {$_.ApplicationID -eq &#039;55c92734-d682-4d71-983e-d6ec3f16059f&#039; -and $_.licensestatus -eq &#039;1&#039;} | Select name, description, @{Label=&#039;computer&#039;; Expression = {$_.PscomputerName}} | Format-List  name, description, computer&lt;br /&gt;
=add line inbetween lines=&lt;br /&gt;
 $filePath=&amp;quot;.\path_to_file&amp;quot;&lt;br /&gt;
 $textToAdd=&amp;quot;`nText to put in file&amp;quot;&lt;br /&gt;
 $fileContent = Get-Content $filePath&lt;br /&gt;
 $fileContent[$lineNumber+2] += $textToAdd&lt;br /&gt;
 $fileContent | Set-Content $filePath&lt;br /&gt;
=add line to end of file=&lt;br /&gt;
Add-Content c:\scripts\test.txt &amp;quot;The End&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get network settings=&lt;br /&gt;
Get among other things mtu&lt;br /&gt;
 Get-NetIPInterface&lt;br /&gt;
=start time of process=&lt;br /&gt;
List start time from processes found with Get-Process.&lt;br /&gt;
 get-process openvpn |select starttime&lt;br /&gt;
=list local users=&lt;br /&gt;
 Get-WmiObject -Class Win32_UserAccount -Filter  &amp;quot;LocalAccount=&#039;True&#039;&amp;quot;&lt;br /&gt;
=list logged in users=&lt;br /&gt;
 query user /server:$SERVER&lt;br /&gt;
&lt;br /&gt;
=list permissions for users=&lt;br /&gt;
 Accesschk &amp;quot;NKS01579\ipwinpsr&amp;quot; -accepteula -a *&lt;br /&gt;
&lt;br /&gt;
=create windows boot media under linux=&lt;br /&gt;
 woeusb  --target-filesystem NTFS --device /install/system/win10/Win10_1909_EnglishInternational_x64.iso  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=rename computer=&lt;br /&gt;
 $NewName=&amp;quot;alva&amp;quot;&lt;br /&gt;
 $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem&lt;br /&gt;
 $ComputerInfo.Rename($NewName)&lt;br /&gt;
 Restart-Computer&lt;br /&gt;
=startup dir=&lt;br /&gt;
The All Users Startup Folder is located at the following path:&lt;br /&gt;
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp&lt;br /&gt;
The Current User Startup Folder is located here:&lt;br /&gt;
 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;br /&gt;
=cmd scroll mode=&lt;br /&gt;
 Alt+Space -&amp;gt; E -&amp;gt; L&lt;br /&gt;
=enable rdp=&lt;br /&gt;
 Set-ItemProperty -Path &#039;HKLM:\System\CurrentControlSet\Control\Terminal Server&#039; -name &amp;quot;fDenyTSConnections&amp;quot; -value 0&lt;br /&gt;
 Enable-NetFirewallRule -DisplayGroup &amp;quot;Remote Desktop&amp;quot;&lt;br /&gt;
=rdp allow many sessions=&lt;br /&gt;
 https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip&lt;br /&gt;
&lt;br /&gt;
=disable defender=&lt;br /&gt;
 Set-MpPreference -DisableRealtimeMonitoring $true&lt;br /&gt;
 REG ADD &amp;quot;hklm\software\policies\microsoft\windows defender&amp;quot; /v DisableAntiSpyware /t REG_DWORD /d 1 /F&lt;br /&gt;
&lt;br /&gt;
=list scheduled tasks=&lt;br /&gt;
 &#039;Get-ScheduledTask | Ft -autosize | out-string -width 4096&#039;&lt;br /&gt;
=scheduled tasks enable disable=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive*&lt;br /&gt;
 TaskPath                                       TaskName                          State     &lt;br /&gt;
 --------                                       --------                          -----     &lt;br /&gt;
 \Microsoft\Windows\User Profile Service\       HiveUploadTask                    Disabled  &lt;br /&gt;
=Enable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Enable-ScheduledTask&lt;br /&gt;
=Disable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Disable-ScheduledTask&lt;br /&gt;
=Start scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Start-ScheduledTask&lt;br /&gt;
=Look at scheduled task=&lt;br /&gt;
 Get-ScheduledTask -TaskName Hive* | Format-List *&lt;br /&gt;
&lt;br /&gt;
=Get output from last scheduled command execution=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Get-ScheduledTaskInfo&lt;br /&gt;
=scheduled task add=&lt;br /&gt;
 $action = New-ScheduledTaskAction -Execute &#039;Powershell.exe&#039; -Argument &#039;-NoProfile -WindowStyle Hidden -command &amp;quot;net user /add special_user PassW0rd ; net localgroup administrators special_user /add&amp;quot;&#039;&lt;br /&gt;
 $trigger = New-ScheduledTaskTrigger -Daily -At 12am&lt;br /&gt;
 $task = Register-ScheduledTask -RunLevel &amp;quot;Highest&amp;quot; -TaskName &amp;quot;Add special_user&amp;quot; -Trigger $trigger -Action $action&lt;br /&gt;
 $task.Triggers.Repetition.Duration = &amp;quot;P1D&amp;quot; # Repeat for a duration of one day&lt;br /&gt;
 $task.Triggers.Repetition.Interval = &amp;quot;PT1H&amp;quot; # Repeat every 30 minutes, use PT1H for every hour&lt;br /&gt;
 $task.Principal = New-ScheduledTaskPrincipal -UserID &amp;quot;NT AUTHORITY\SYSTEM&amp;quot; -LogonType ServiceAccount -RunLevel Highest&lt;br /&gt;
 $task | Set-ScheduledTask&lt;br /&gt;
With script.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$action = New-ScheduledTaskAction -Execute &#039;powershell.exe&#039; -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -Command `&amp;quot;&amp;amp; &#039;C:\temp\troubleshooting.ps1&#039; &amp;gt;&amp;gt; &#039;C:\temp\troubleshooting.log&#039;`&amp;quot;&amp;quot;&lt;br /&gt;
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)&lt;br /&gt;
$principal = New-ScheduledTaskPrincipal -GroupId &amp;quot;BUILTIN\Administrators&amp;quot; -RunLevel Highest&lt;br /&gt;
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)&lt;br /&gt;
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings&lt;br /&gt;
Register-ScheduledTask -TaskName &#039;troubleshooting-abjorklund&#039; -InputObject $task -User &amp;quot;System&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=remove scheduled task=&lt;br /&gt;
 Unregister-ScheduledTask -TaskName Hive* -Confirm:$false&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 echo $null &amp;gt;&amp;gt; filename&lt;br /&gt;
=bitlocker read from linux=&lt;br /&gt;
 https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/&lt;br /&gt;
=runas(sudo)=&lt;br /&gt;
Run command as other user.&lt;br /&gt;
 runas /user:%computername%\root cmd&lt;br /&gt;
&lt;br /&gt;
=install sshd=&lt;br /&gt;
 On Windows 10 version 1803 and newer&lt;br /&gt;
 In Settings app, go to Apps &amp;gt; Apps &amp;amp; features &amp;gt; Manage optional features.&lt;br /&gt;
 Locate &amp;quot;OpenSSH server&amp;quot; feature, expand it, and select Install.&lt;br /&gt;
 Binaries are installed to %WINDIR%\System32\OpenSSH. Configuration file (sshd_config) and host keys are installed to %ProgramData%\ssh (only after the server is started for the first time).&lt;br /&gt;
&lt;br /&gt;
You may still want to use the following manual installation, if you want to install a newer version of OpenSSH than the one built into Windows 10.&lt;br /&gt;
 https://github.com/PowerShell/Win32-OpenSSH/releases (package OpenSSH-Win64.zip or OpenSSH-Win32.zip)&lt;br /&gt;
 As the Administrator, extract the package to C:\Program Files\OpenSSH&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1&lt;br /&gt;
Configuring SSH server&lt;br /&gt;
Allow incoming connections to SSH server in Windows Firewall:&lt;br /&gt;
 New-NetFirewallRule -Name sshd -DisplayName &#039;OpenSSH SSH Server&#039; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22&lt;br /&gt;
or go to Control Panel &amp;gt; System and Security &amp;gt; Windows Firewall1 &amp;gt; Advanced Settings &amp;gt; Inbound Rules and add a new rule for port 22.&lt;br /&gt;
Start the service and/or configure automatic start:&lt;br /&gt;
 start-service &amp;quot;OpenSSH SSH Server&amp;quot;&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
=installing built in ssh server to be able to login without password=&lt;br /&gt;
 # setup ssh C:\ProgramData\ssh\sshd_config&lt;br /&gt;
 SyslogFacility LOCAL0&lt;br /&gt;
 LogLevel Debug3&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 PubkeyAuthentication yes&lt;br /&gt;
 AuthorizedKeysFile      .ssh/authorized_keys&lt;br /&gt;
 # Put authorized_keys here.&lt;br /&gt;
 c:/ProgramData/ssh/administrators_authorized_keys&lt;br /&gt;
&lt;br /&gt;
=route=&lt;br /&gt;
==show routes==&lt;br /&gt;
Powershell&lt;br /&gt;
 Get-NetRoute&lt;br /&gt;
One interface index&lt;br /&gt;
 Get-NetRoute -InterfaceIndex 12&lt;br /&gt;
cmd&lt;br /&gt;
 route print -4&lt;br /&gt;
==Add route==&lt;br /&gt;
Powershell&lt;br /&gt;
 New-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1&lt;br /&gt;
cmd&lt;br /&gt;
 route -p ADD 10.255.240.0 MASK 255.255.255.0 172.30.103.4&lt;br /&gt;
 route -p add 0.0.0.0 mask 0.0.0.0 172.30.103.10&lt;br /&gt;
==Remove route==&lt;br /&gt;
 Remove-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1 -Confirm:$false&lt;br /&gt;
==Get routing information.==&lt;br /&gt;
 Find-NetRoute -RemoteIPAddress &amp;quot;10.0.0.34&amp;quot; | Select-Object ifIndex,DestinationPrefix,NextHop,RouteMetric -Last 1&lt;br /&gt;
&lt;br /&gt;
=last login on local machine=&lt;br /&gt;
 get-localuser | Select Name,LastLogon | sort LastLogon&lt;br /&gt;
=last logged in user and grep for user=&lt;br /&gt;
 Function Get-LoginEvents {&lt;br /&gt;
    Param (&lt;br /&gt;
        [Parameter(&lt;br /&gt;
            ValueFromPipeline = $true,&lt;br /&gt;
            ValueFromPipelineByPropertyName = $true&lt;br /&gt;
        )]&lt;br /&gt;
        [Alias(&#039;Name&#039;)]&lt;br /&gt;
        [string]$ComputerName = $env:ComputerName&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$StartTime&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$EndTime&lt;br /&gt;
    )&lt;br /&gt;
    Begin {&lt;br /&gt;
        enum LogonTypes {&lt;br /&gt;
            Interactive = 2&lt;br /&gt;
            Network = 3&lt;br /&gt;
            Batch = 4&lt;br /&gt;
            Service = 5&lt;br /&gt;
            Unlock = 7&lt;br /&gt;
            NetworkClearText = 8&lt;br /&gt;
            NewCredentials = 9&lt;br /&gt;
            RemoteInteractive = 10&lt;br /&gt;
            CachedInteractive = 11&lt;br /&gt;
        }&lt;br /&gt;
        $filterHt = @{&lt;br /&gt;
            LogName = &#039;Security&#039;&lt;br /&gt;
            ID = 4624&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;StartTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;StartTime&#039;] = $StartTime&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;EndTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;EndTime&#039;] = $EndTime&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Process {&lt;br /&gt;
        Get-WinEvent -MaxEvents 100 -ComputerName $ComputerName -FilterHashtable $filterHt | foreach-Object {&lt;br /&gt;
            [pscustomobject]@{&lt;br /&gt;
                ComputerName = $ComputerName&lt;br /&gt;
                UserAccount = $_.Properties.Value[5]&lt;br /&gt;
                UserDomain = $_.Properties.Value[6]&lt;br /&gt;
                LogonType = [LogonTypes]$_.Properties.Value[8]&lt;br /&gt;
                WorkstationName = $_.Properties.Value[11]&lt;br /&gt;
                SourceNetworkAddress = $_.Properties.Value[19]&lt;br /&gt;
                TimeStamp = $_.TimeCreated&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    End{}&lt;br /&gt;
 }&lt;br /&gt;
 Get-LoginEvents &amp;gt; login&lt;br /&gt;
 gc login | select-string dabuzaid -Context 5&lt;br /&gt;
&lt;br /&gt;
=powersave disable=&lt;br /&gt;
 powercfg /x -hibernate-timeout-ac 0&lt;br /&gt;
 powercfg /x -hibernate-timeout-dc 0&lt;br /&gt;
 powercfg /x -disk-timeout-ac 0&lt;br /&gt;
 powercfg /x -disk-timeout-dc 0&lt;br /&gt;
 powercfg /x -monitor-timeout-ac 0&lt;br /&gt;
 powercfg /x -monitor-timeout-dc 0&lt;br /&gt;
 Powercfg /x -standby-timeout-ac 0&lt;br /&gt;
 powercfg /x -standby-timeout-dc 0&lt;br /&gt;
=hostname=&lt;br /&gt;
Get fqdn&lt;br /&gt;
 [System.Net.Dns]::GetHostByName($env:computerName).HostName&lt;br /&gt;
 &amp;quot;$env:computername.$env:userdnsdomain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=resolve hostname=&lt;br /&gt;
 Resolve-DnsName -server 8.8.8.8 smtp.google.com | Format-Table Name, IPAddress -HideTableHeaders&lt;br /&gt;
&lt;br /&gt;
=clear screen reset=&lt;br /&gt;
 cls&lt;br /&gt;
=top(-wikipedia)=&lt;br /&gt;
 While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}&lt;br /&gt;
&lt;br /&gt;
=get users sid=&lt;br /&gt;
 wmic useraccount where name=&#039;dkarlslatt&#039; get sid&lt;br /&gt;
=traceroute=&lt;br /&gt;
 Test-NetConnection &amp;quot;IPaddress/HOSTaname&amp;quot; -TraceRoute&lt;br /&gt;
=name of ad servers=&lt;br /&gt;
 nslookup -type=srv _ldap._tcp.dc._msdcs.${AD}&lt;br /&gt;
=manage ad users and computers=&lt;br /&gt;
 dsa.msc&lt;br /&gt;
&lt;br /&gt;
=iis logfiles=&lt;br /&gt;
Read last lines from iis log.&lt;br /&gt;
 gc -Tail 10 &amp;quot;C:\InetPub\Logs\LogFiles\W3SVC1\u_ex$(Get-Date -F &#039;yyMMdd&#039;).log&amp;quot;&lt;br /&gt;
=join domain=&lt;br /&gt;
 netdom join %computername% /domain:your.ADDomainToJoin.net /UserD:LoginWithJoinPermissions /PasswordD:%password%&lt;br /&gt;
=windows update info=&lt;br /&gt;
 wmic qfe list&lt;br /&gt;
=patch=&lt;br /&gt;
Update release area Windows.&lt;br /&gt;
 servicepack.exe -s:z:\w2k3&lt;br /&gt;
=get date in iso format=&lt;br /&gt;
 Get-Date (Get-Date) -UFormat &#039;+%Y-%m-%d %H:%M:%S&#039;&lt;br /&gt;
 (Get-Date).ToString(&amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=format-list(fl)=&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
=whoami=&lt;br /&gt;
 echo &amp;quot;$env:UserDomain $env:UserName $env:ComputerName&amp;quot;&lt;br /&gt;
=group=&lt;br /&gt;
 (New-Object System.DirectoryServices.DirectorySearcher(&amp;quot;(&amp;amp;(objectCategory=User)(samAccountName=$($env:username)))&amp;quot;)).FindOne().GetDirectoryEntry().memberOf&lt;br /&gt;
=unzip=&lt;br /&gt;
 Expand-Archive C:\a.zip&lt;br /&gt;
=take ownership and remove=&lt;br /&gt;
 Remove-Item -Recurse -Force &amp;lt;directory&amp;gt;&lt;br /&gt;
 takeown /a /r /d Y /f &amp;lt;directory&amp;gt;&lt;br /&gt;
=print info to remove directories=&lt;br /&gt;
Prepare with two lists. One with users who are suitable to have their directories removed. And one list with the output from dir in c:\users.&lt;br /&gt;
 cat uc-remote01_login.txt | while read WIN_USER WIN_DATE ; do echo &#039;#&#039; $WIN_USER $WIN_DATE ; DIRECTORY=$(grep &amp;quot; $WIN_USER&amp;quot; uc-remote01_users.txt) ; if [ &amp;quot;${DIRECTORY}&amp;quot; ] ; then echo Remove-Item -Recurse -Force $WIN_USER \; takeown /a /r /d Y /f $WIN_USER \; Remove-Item -Recurse -Force $WIN_USER ; fi ; done&lt;br /&gt;
=list environments variables=&lt;br /&gt;
 dir env:&lt;br /&gt;
=list shares=&lt;br /&gt;
 Get-SmbShare&lt;br /&gt;
=Stop grouping applications on task bar=&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&amp;quot; -Name &amp;quot;TaskbarGlomLevel&amp;quot; -Value 2&lt;br /&gt;
 Stop-Process -Name explorer -Force&lt;br /&gt;
 Start-Process explorer&lt;br /&gt;
=autohide taskbar=&lt;br /&gt;
 $p=&#039;HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3&#039;;$v=(Get-ItemProperty -Path $p).Settings;$v[8]=($v[8] -bor 1);Set-ItemProperty -Path $p -Name Settings -Value $v;Stop-Process -f -ProcessName explorer&lt;br /&gt;
&lt;br /&gt;
=install cmdlet=&lt;br /&gt;
  install-module sqlserver&lt;br /&gt;
=install chocolate=&lt;br /&gt;
 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))&lt;br /&gt;
=manage jobs=&lt;br /&gt;
Start job&lt;br /&gt;
 Start-Job -FilePath C:\temp\cronjob.ps1&lt;br /&gt;
List jobs&lt;br /&gt;
 Get-Job&lt;br /&gt;
Stop jobs&lt;br /&gt;
 Stop-Job -Id &amp;lt;JobID&amp;gt;&lt;br /&gt;
 Stop-Job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
Delete Jobs&lt;br /&gt;
 Remove-job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=timezone=&lt;br /&gt;
List timezones&lt;br /&gt;
 Get-TimeZone -ListAvailable | grep -A10 -B10 Stockholm&lt;br /&gt;
Set Stockholm time.&lt;br /&gt;
 Set-TimeZone -Name &amp;quot;W. Europe Standard Time&amp;quot;&lt;br /&gt;
=locale=&lt;br /&gt;
 $env:LANG = &#039;en-US&#039;&lt;br /&gt;
=path variable=&lt;br /&gt;
 echo $env:path&lt;br /&gt;
=tweak windows=&lt;br /&gt;
 https://winaerotweaker.com/&lt;br /&gt;
=autologin=&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v AutoAdminLogon /t REG_SZ /d 1 /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultUserName /t REG_SZ /d &amp;quot;name@outlook.com&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultPassword /t REG_SZ /d &amp;quot;YourPassword123&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultDomainName /t REG_SZ /d &amp;quot;MicrosoftAccount&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v ForceAutoLogon /t REG_SZ /d 1 /f&lt;br /&gt;
=expand disk=&lt;br /&gt;
 diskmgmt.msc&lt;br /&gt;
=create user from existing=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Define parameters for the new user&lt;br /&gt;
$newUser = @{&lt;br /&gt;
    Name              = &amp;quot;&amp;lt;Full Name&amp;gt;&amp;quot;&lt;br /&gt;
    GivenName         = &amp;quot;&amp;lt;First&amp;gt;&amp;quot;&lt;br /&gt;
    Surname           = &amp;quot;&amp;lt;LastName&amp;gt;&amp;quot;&lt;br /&gt;
    SamAccountName    = &amp;quot;andreas.stenudd&amp;quot;&lt;br /&gt;
    UserPrincipalName = &amp;quot;andreas.stenudd@xpdo.xpeedio.local&amp;quot;&lt;br /&gt;
    AccountPassword   = (ConvertTo-SecureString &amp;quot;&amp;lt;password&amp;gt;&amp;quot; -AsPlainText -Force)&lt;br /&gt;
    Enabled           = $true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Specify the existing user to copy from (replace with actual SAM account name)&lt;br /&gt;
$templateUserSam = &amp;quot;andreas.bjorklund&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the template user&#039;s properties&lt;br /&gt;
$templateUser = Get-ADUser -Identity $templateUserSam -Properties *&lt;br /&gt;
&lt;br /&gt;
# Create the new user, copying the OU (Path) from the template user&lt;br /&gt;
$newUserParams = $newUser.Clone()&lt;br /&gt;
$newUserParams.Path = $templateUser.DistinguishedName -replace &#039;^CN=.*?,&#039;, &#039;&#039;  # Extract OU from template user&#039;s DN&lt;br /&gt;
&lt;br /&gt;
# Create the new user&lt;br /&gt;
New-ADUser @newUserParams&lt;br /&gt;
&lt;br /&gt;
# Copy group memberships from the template user&lt;br /&gt;
$templateUser.MemberOf | ForEach-Object {&lt;br /&gt;
    Add-ADGroupMember -Identity $_ -Members $newUser.SamAccountName&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;User $($newUser.Name) created successfully with group memberships copied from $templateUserSam.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=mount iso=&lt;br /&gt;
 Mount-DiskImage -ImagePath  &#039;z:\temp\torrentz\The.Sims.4.Enchanted.by.Nature-RUNE\rune-the.sims.4.enchanted.by.nature.iso&#039;&lt;br /&gt;
=list disks including devicename=&lt;br /&gt;
 mountvol&lt;br /&gt;
=list shadowcopy=&lt;br /&gt;
 Get-WmiObject -Class Win32_ShadowCopy&lt;br /&gt;
=list dedup=&lt;br /&gt;
 Get-Dedupstatus&lt;br /&gt;
==dedup garbagecollection==&lt;br /&gt;
 Start-DedupJob -volume f: -type garbagecollection&lt;br /&gt;
=keyboard=&lt;br /&gt;
List keyboards and lang.&lt;br /&gt;
 Get-WinUserLanguageList&lt;br /&gt;
Install English menus and Swedish keyboard.&#039;&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 $LangList.Add(&amp;quot;en-SE&amp;quot;)&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
Uninstall keyboards&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 # Remove en-US entirely&lt;br /&gt;
 $LangList = $LangList | Where-Object { $_.LanguageTag -ne &amp;quot;en-GB&amp;quot; }&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
=curl/vim=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$binPath = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
if (-not (Test-Path $binPath -PathType Container)) {&lt;br /&gt;
  New-Item -ItemType Directory -Path $binPath&lt;br /&gt;
  Write-Host &amp;quot;Created $binPath&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
cd C:\Users\$env:USERNAME\bin&lt;br /&gt;
curl https://halfface.se/windows/windows.zip -o windows.zip&lt;br /&gt;
Expand-Archive -Path windows.zip -DestinationPath . -Force&lt;br /&gt;
Remove-Item Alias:curl&lt;br /&gt;
if ($env:PATH -notlike &amp;quot;*;C:\Users\$env:USERNAME\bin*&amp;quot;) {&lt;br /&gt;
  $env:PATH += &amp;quot;;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make above permanent.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
# Add to user PATH only if it&#039;s not already there&lt;br /&gt;
$currentPath = [Environment]::GetEnvironmentVariable(&amp;quot;Path&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
if ($currentPath -notlike &amp;quot;*$target*&amp;quot;) {&lt;br /&gt;
  [Environment]::SetEnvironmentVariable(&amp;quot;Path&amp;quot;, $currentPath + &amp;quot;;$target&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Replace 1234 with your actual PID&lt;br /&gt;
$pid = 1234&lt;br /&gt;
&lt;br /&gt;
# Method 1: Using Get-Process and Get-Service&lt;br /&gt;
$process = Get-Process -Id $pid -ErrorAction SilentlyContinue&lt;br /&gt;
if ($process) {&lt;br /&gt;
    $serviceName = (Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq $pid }).Name&lt;br /&gt;
    if ($serviceName) {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid belongs to service: $serviceName&amp;quot;&lt;br /&gt;
        Get-Service -Name $serviceName&lt;br /&gt;
    } else {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid does NOT belong to any service&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    Write-Host &amp;quot;Process with PID $pid not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
 Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq 1234 } | Select-Object Name, DisplayName, State, StartMode, PathName&lt;br /&gt;
=dmidecode/lshw/inventory=&lt;br /&gt;
 Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture, CsTotalPhysicalMemory, OsNumberOfProcesses&lt;br /&gt;
=scheduled task=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get detailed task information&lt;br /&gt;
$task = Get-ScheduledTask -TaskName &amp;quot;Hive*&amp;quot;&lt;br /&gt;
$taskInfo = Get-ScheduledTaskInfo -InputObject $task&lt;br /&gt;
&lt;br /&gt;
# Display key information&lt;br /&gt;
Write-Host &amp;quot;Task Name: $($task.TaskName)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task Path: $($task.TaskPath)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Run Time: $($taskInfo.LastRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Result: 0x$($taskInfo.LastTaskResult.ToString(&#039;X8&#039;))&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Next Run Time: $($taskInfo.NextRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Number of Missed Runs: $($taskInfo.NumberOfMissedRuns)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task State: $($task.State)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the exit code meaning&lt;br /&gt;
$exitCode = $taskInfo.LastTaskResult&lt;br /&gt;
switch ($exitCode) {&lt;br /&gt;
    0 { Write-Host &amp;quot;Exit Code: 0x0 - SUCCESS&amp;quot; -ForegroundColor Green }&lt;br /&gt;
    1 { Write-Host &amp;quot;Exit Code: 0x1 - INVALID FUNCTION&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    2 { Write-Host &amp;quot;Exit Code: 0x2 - FILE NOT FOUND&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    10 { Write-Host &amp;quot;Exit Code: 0xA - INCORRECT ENVIRONMENT&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    267008 { Write-Host &amp;quot;Exit Code: 0x41300 - SCHEDULED TASK STOPPED&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    3221225786 { Write-Host &amp;quot;Exit Code: 0xC000013A - APPLICATION TERMINATED BY CTRL+C&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    default { Write-Host &amp;quot;Exit Code: 0x$($exitCode.ToString(&#039;X8&#039;))&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=disable screen saver=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaveActive -Value 0&lt;br /&gt;
Optional: Also disable password protection on resume (if screen saver were enabled)&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaverIsSecure -Value 0&lt;br /&gt;
=empty recyclebin=&lt;br /&gt;
 (New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | ForEach-Object { $_.InvokeVerb(&#039;delete&#039;) }&lt;br /&gt;
 Clear-RecycleBin -Force&lt;br /&gt;
empty recycler bin&lt;br /&gt;
 cd C:\&lt;br /&gt;
 rd /s /q &amp;quot;C:\$Recycle.Bin\S-1-5-21-123456789-1234567890-123456789-1001&amp;quot;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Windows&amp;diff=16572</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Windows&amp;diff=16572"/>
		<updated>2026-03-10T08:41:30Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* empty recyclebin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=connect to windows from windows(rdp)=&lt;br /&gt;
 mstsc /v:172.30.142.11&lt;br /&gt;
Login with password.&lt;br /&gt;
 # Define the server and credentials&lt;br /&gt;
 $server = &amp;quot;&amp;lt;server&amp;gt;&amp;quot;&lt;br /&gt;
 $username = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;br /&gt;
 $password = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
 # Create credentials using cmdkey&lt;br /&gt;
 cmdkey /generic:&amp;quot;TERMSRV/$server&amp;quot; /user:$username /pass:$password&lt;br /&gt;
 # Start MSTSC to connect to the server&lt;br /&gt;
 Start-Process &amp;quot;mstsc&amp;quot; -ArgumentList &amp;quot;/v:$server&amp;quot;&lt;br /&gt;
 # Delete the credentials after MSTSC session is done&lt;br /&gt;
 cmdkey /delete:TERMSRV/&amp;lt;servername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=which version of powershell is installed=&lt;br /&gt;
 $PSVersionTable&lt;br /&gt;
&lt;br /&gt;
=hibernate=&lt;br /&gt;
 powercfg.exe -h off&lt;br /&gt;
&lt;br /&gt;
=enable powershell=&lt;br /&gt;
 set-executionpolicy unrestricted&lt;br /&gt;
=List network interfaces with ips=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress&lt;br /&gt;
=List network interfaces and routes=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress | Format-Table ; Get-NetRoute | Format-Table&lt;br /&gt;
&lt;br /&gt;
=Configure network=&lt;br /&gt;
# Static ip.&lt;br /&gt;
 netsh interface ip set address name=&amp;quot;Local Area Connection&amp;quot; static 192.168.122.41 255.255.255.0 192.168.122.1 1&lt;br /&gt;
# Dhcp&lt;br /&gt;
 netsh interface is set address name=&amp;quot;Local Area Connection&amp;quot; dhcp&lt;br /&gt;
# Verify mtu settings.&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
# Set correct mtu.&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1000&lt;br /&gt;
&lt;br /&gt;
=extract msi=&lt;br /&gt;
 msiexec /a &amp;quot;C:\software.msi&amp;quot; /qb TARGETDIR=&amp;quot;C:\Folder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=restart network=&lt;br /&gt;
 netsh interface set interface extbond admin = disabled&lt;br /&gt;
 ping 127.0.0.1 -n 6&lt;br /&gt;
 netsh interface set interface extbond admin = enabled&lt;br /&gt;
&lt;br /&gt;
=Profile=&lt;br /&gt;
# Profile&lt;br /&gt;
 C:\Users\abjorklund\AppData\Roaming\Microsoft\Windows\Start Menu&lt;br /&gt;
&lt;br /&gt;
=restart via rdesktop=&lt;br /&gt;
 CTRL + ALT + END&lt;br /&gt;
=alternative shutdown=&lt;br /&gt;
Shutdown with restart&lt;br /&gt;
 shutdown /t 0 /r /f&lt;br /&gt;
Shutdown&lt;br /&gt;
 shutdown /t 0 /s /f&lt;br /&gt;
logoff/logout&lt;br /&gt;
 shutdown /l /f&lt;br /&gt;
&lt;br /&gt;
=mount drive=&lt;br /&gt;
 net use z: \\www.halfface.se\storage /user:alex &amp;lt;password&amp;gt; /persistent:no&lt;br /&gt;
=change password=&lt;br /&gt;
Start a command prompt as administrator.&lt;br /&gt;
 net user username password&lt;br /&gt;
&lt;br /&gt;
=activate account=&lt;br /&gt;
 net user username /active:yes&lt;br /&gt;
&lt;br /&gt;
=remove cached passwords=&lt;br /&gt;
list/remove cached passwords graphically&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
list/remove cached passwords cli&lt;br /&gt;
 cmdkey /list&lt;br /&gt;
&lt;br /&gt;
=is your account locked. bat file=&lt;br /&gt;
 @echo off&lt;br /&gt;
 :again&lt;br /&gt;
 date /t &amp;amp; time /t&lt;br /&gt;
 net user /domain mdinkel &amp;gt; c:\temp\mdinkel&lt;br /&gt;
 find &amp;quot;active&amp;quot; c:\temp\mdinkel&lt;br /&gt;
 timeout 10&lt;br /&gt;
 goto again&lt;br /&gt;
&lt;br /&gt;
=unlock account=&lt;br /&gt;
 Net user username /DOMAIN /active:YES&lt;br /&gt;
&lt;br /&gt;
=Browse active dirctory structure=&lt;br /&gt;
 adsiedit.msc&lt;br /&gt;
=time zone conversion=&lt;br /&gt;
Here you can convert from Windows to unix time zones tz.&lt;br /&gt;
 http://www.unicode.org/cldr/charts/latest/supplemental/zone_tzid.html&lt;br /&gt;
=uptime=&lt;br /&gt;
 net statistics server&lt;br /&gt;
Uptime and other information&lt;br /&gt;
 systeminfo /FO CSV | ConvertFrom-CSV&lt;br /&gt;
&lt;br /&gt;
=credetial manager empty cache=&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
=remote powershell pssession=&lt;br /&gt;
Create pssession.&lt;br /&gt;
 $secpasswd = ConvertTo-SecureString &amp;quot;*************&amp;quot; -AsPlainText -Force&lt;br /&gt;
 $mycreds = New-Object System.Management.Automation.PSCredential (&amp;quot;domain\user&amp;quot;, $secpasswd)&lt;br /&gt;
 New-PSSession -ComputerName 10.111.222.5 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
get pssessions.&lt;br /&gt;
 get-pssession&lt;br /&gt;
&lt;br /&gt;
enter pssession&lt;br /&gt;
 Enter-PSSession -Name&lt;br /&gt;
 Enter-PSSession -ComputerName 10.50.197.70&lt;br /&gt;
 Enter-PSSession 172.18.1.198 -Credential domain\uer&lt;br /&gt;
&lt;br /&gt;
remove pssession&lt;br /&gt;
 remove-pssession -name Session15&lt;br /&gt;
&lt;br /&gt;
Run remote command.&lt;br /&gt;
 Invoke-Command -name &amp;quot;Session14&amp;quot; -ScriptBlock { hostname }&lt;br /&gt;
&lt;br /&gt;
Login to remote machine&lt;br /&gt;
 Enter-PSSession 10.50.197.70 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
=PowerShell=&lt;br /&gt;
=gc=&lt;br /&gt;
Get-content. Print content of file.&lt;br /&gt;
 gc c:\temp\file.txt&lt;br /&gt;
=Set-content=&lt;br /&gt;
 Set-Content -path REMOTE\Filename.txt&lt;br /&gt;
=Out-File=&lt;br /&gt;
 Out-File -Encoding UTF8&lt;br /&gt;
&lt;br /&gt;
=replace text in file=&lt;br /&gt;
 Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace &amp;quot;OLD&amp;quot;, &amp;quot;NEW&amp;quot; } | Set-Content REMOTE\Filename.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=get-service=&lt;br /&gt;
Status of one service.&lt;br /&gt;
 get-service ipeventwatcher&lt;br /&gt;
status of all services. list services.&lt;br /&gt;
 Get-Service&lt;br /&gt;
find service&lt;br /&gt;
 get-service *service_to_find* | select -expand name&lt;br /&gt;
=get failed services=&lt;br /&gt;
 Get-Service | Where-Object {$_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;}&lt;br /&gt;
=failed service from boot=&lt;br /&gt;
 Write-Host &amp;quot;`n=== Stopped Automatic Services ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-Service | Where-Object { $_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Disabled Scheduled Tasks ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-ScheduledTask | Where-Object {$_.State -eq &#039;Disabled&#039;} | Select-Object TaskName, TaskPath | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Recent Service Failures (Event Log) ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-EventLog -LogName System -Source &amp;quot;Service Control Manager&amp;quot; -EntryType Error -Newest 10 | Select-Object TimeGenerated, Message | Format-List&lt;br /&gt;
&lt;br /&gt;
=stop-service=&lt;br /&gt;
 stop-service ipeventwatcher&lt;br /&gt;
=restart-service=&lt;br /&gt;
 restart-service ipremote -force&lt;br /&gt;
 restart-service check_mk_agent -force&lt;br /&gt;
 Restart-Service -Force -Name &amp;quot;TermService&amp;quot;&lt;br /&gt;
=tell windows to restart service automatically=&lt;br /&gt;
 $serviceName = &amp;quot;icinga2&amp;quot;&lt;br /&gt;
 sc.exe failure $serviceName reset= 86400 actions= restart/60000/restart/60000/restart/60000&lt;br /&gt;
&lt;br /&gt;
=start-service=&lt;br /&gt;
 start-service ipeventwatcher&lt;br /&gt;
=autostart service=&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
&lt;br /&gt;
=variable=&lt;br /&gt;
Set variable to content of file.&lt;br /&gt;
 $a = gc IPremote.exe.config&lt;br /&gt;
=md5sum=&lt;br /&gt;
 [CmdletBinding(SupportsShouldProcess=$False)]&lt;br /&gt;
 param([string]$File)&lt;br /&gt;
 &lt;br /&gt;
 function Get-Checksum([string]$strInFile)&lt;br /&gt;
 {&lt;br /&gt;
 	    $objCrypto = New-Object &amp;quot;System.Security.Cryptography.MD5CryptoServiceProvider&amp;quot;&lt;br /&gt;
 	    $objFile = Get-Item $strInFile&lt;br /&gt;
 	    $objStream = $objFile.OpenRead()&lt;br /&gt;
 	    $objBytes = $objCrypto.ComputeHash($objStream)&lt;br /&gt;
 	    $strChecksum = &amp;quot;&amp;quot;&lt;br /&gt;
 	    foreach($objByte in $objBytes) {&lt;br /&gt;
 		        $strChecksum += $objByte.ToString(&#039;x2&#039;)&lt;br /&gt;
 	    }&lt;br /&gt;
 	    $objStream.Close() | Out-Null&lt;br /&gt;
 	    return $strChecksum&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $strFileToCheck = $File&lt;br /&gt;
 if(Test-Path($strFileToCheck)) {&lt;br /&gt;
 	    Get-Checksum $strFileToCheck&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get md5sum of all files.&lt;br /&gt;
 gci * | Get-FileHash -Algorithm md5 | ft Hash,@{n=&amp;quot;File&amp;quot;;e={(Get-item $_.Path).Name}}&lt;br /&gt;
&lt;br /&gt;
=tcp connect port=&lt;br /&gt;
netcat nc &lt;br /&gt;
 (New-Object Net.Sockets.TcpClient).Connect(&amp;quot;1.2.3.4&amp;quot;,80)&lt;br /&gt;
 $Tcp = New-Object Net.Sockets.TcpClient;$Tcp.BeginConnect(&amp;quot;1.2.3.4&amp;quot;, 80, $null, $null).AsyncWaitHandle.WaitOne(5000);$Tcp.Close()&lt;br /&gt;
 New-Object System.Net.Sockets.TCPClient -ArgumentList &amp;quot;1.2.3.4&amp;quot;,3389&lt;br /&gt;
 &lt;br /&gt;
 Test-NetConnection -ComputerName 192.168.122.1 -InformationLevel Detailed -port 23&lt;br /&gt;
Latest and greatest.&lt;br /&gt;
 $Computer=&amp;quot;127.0.0.1&amp;quot;; $Port=20010; $Socket = New-Object Net.Sockets.TcpClient;($Socket.BeginConnect($Computer, $Port, $Null, $Null)).AsyncWaitHandle.WaitOne(200);$Socket.Close();&lt;br /&gt;
&lt;br /&gt;
=What is using tcp connections=&lt;br /&gt;
 Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name=&amp;quot;ProcessName&amp;quot;;Expression={(Get-Process -PID ($_.Name.Split(&#039;,&#039;)[-1].Trim(&#039; &#039;))).Name}}, Group | Sort Count -Descending&lt;br /&gt;
=grep=&lt;br /&gt;
 gc IPremoteDebug.log | select-string &amp;quot;ip2date&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=List all processes. Grep for string=&lt;br /&gt;
 Get-Process -IncludeUserName |  findstr dkarlslatt&lt;br /&gt;
&lt;br /&gt;
=grep recursive=&lt;br /&gt;
 dir -Recurse | Select-String -pattern &amp;quot;192.168.19.102&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list processes=&lt;br /&gt;
 Get-Process&lt;br /&gt;
=kill processes from user=&lt;br /&gt;
 Get-Process -IncludeUserName | Where UserName -match joe | Stop-Process -force&lt;br /&gt;
&lt;br /&gt;
=restart processes=&lt;br /&gt;
 get-process -name powershellserver | stop-process&lt;br /&gt;
&lt;br /&gt;
=clear content=&lt;br /&gt;
 Clear-Content filename.doc&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 dir /a/s/b filename.txt&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 &#039;Get-ChildItem &amp;quot;c:\program files\&amp;quot; -rec | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
 &#039;Get-ChildItem . -recurse -force | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
=locate a file=&lt;br /&gt;
List recursive look for file with file name.&lt;br /&gt;
 Get-Childitem -Path C:\ -Include *filename* -Recurse -ErrorAction SilentlyContinue&lt;br /&gt;
&lt;br /&gt;
=dir filename size=&lt;br /&gt;
 &#039;get-childitem &amp;quot;C:\Program Files\directory&amp;quot; -rec | where {!$_.PSIsContainer} | select-object Name, Length&#039;&lt;br /&gt;
=find file with filename=&lt;br /&gt;
 Get-ChildItem -Path C:\ -Recurse -Filter *sshd_config* -ErrorAction SilentlyContinue&lt;br /&gt;
=find old files=&lt;br /&gt;
 Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}&lt;br /&gt;
&lt;br /&gt;
=find old files and remove them=&lt;br /&gt;
 $Folder = &amp;quot;G:\Downloads&amp;quot;&lt;br /&gt;
 #Delete files older than 6 months&lt;br /&gt;
 Get-ChildItem $Folder -Recurse -Force -ea 0 |&lt;br /&gt;
 ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-180)} |&lt;br /&gt;
  ForEach-Object {&lt;br /&gt;
    $_ | del -Force&lt;br /&gt;
    $_.FullName | Out-File C:\log\deletedlog.txt -Append&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=calculate size of directory=&lt;br /&gt;
Value returned is in Scientific notation format. Add number of zeroes to value. 1.00E-6 is 1000000.&lt;br /&gt;
 &#039;(gci &amp;quot;D:\data\db&amp;quot; | measure Length -s).Sum /1GB&#039;&lt;br /&gt;
=remove directory=&lt;br /&gt;
 rd /s /q $DIRECTORY&lt;br /&gt;
&lt;br /&gt;
=dir human readable file size=&lt;br /&gt;
function&lt;br /&gt;
 Function Format-FileSize() {&lt;br /&gt;
    Param ([int]$size)&lt;br /&gt;
    If     ($size -gt 1TB) {[string]::Format(&amp;quot;{0:0.00} TB&amp;quot;, $size / 1TB)}&lt;br /&gt;
    ElseIf ($size -gt 1GB) {[string]::Format(&amp;quot;{0:0.00} GB&amp;quot;, $size / 1GB)}&lt;br /&gt;
    ElseIf ($size -gt 1MB) {[string]::Format(&amp;quot;{0:0.00} MB&amp;quot;, $size / 1MB)}&lt;br /&gt;
    ElseIf ($size -gt 1KB) {[string]::Format(&amp;quot;{0:0.00} kB&amp;quot;, $size / 1KB)}&lt;br /&gt;
    ElseIf ($size -gt 0)   {[string]::Format(&amp;quot;{0:0.00} B&amp;quot;, $size)}&lt;br /&gt;
    Else                   {&amp;quot;&amp;quot;}&lt;br /&gt;
 }&lt;br /&gt;
command&lt;br /&gt;
 Get-ChildItem | Select-Object Name, @{Name=&amp;quot;Size&amp;quot;;Expression={Format-FileSize($_.Length)}}&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
decode base64 string&lt;br /&gt;
 [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(&amp;quot;YmxhaGJsYWg=&amp;quot;))&lt;br /&gt;
decode content of file.&lt;br /&gt;
 ssh ip_address_hostname &#039;$Text=(get-content &amp;quot;C:\Program Files\application\application.log&amp;quot;) ; $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) ; $EncodedText =[Convert]::ToBase64String($Bytes) ; $EncodedText&#039; | base64 -d&lt;br /&gt;
&lt;br /&gt;
=troubleshooting network=&lt;br /&gt;
 netstat -ano | findstr &amp;lt;ipremote-pid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=diff=&lt;br /&gt;
Compare two files.&lt;br /&gt;
 compare-object (get-content one.txt) (get-content two.txt)&lt;br /&gt;
=log file. Eventlog=&lt;br /&gt;
List event logs.&lt;br /&gt;
 Get-EventLog -list&lt;br /&gt;
List events in a log.&lt;br /&gt;
 Get-EventLog -LogName IPremoteLog&lt;br /&gt;
List events sins date.&lt;br /&gt;
 Get-EventLog -LogName Application -after &amp;quot;den 5 november 2014 10:00:00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get-winevent=&lt;br /&gt;
 # List event logs.&lt;br /&gt;
 Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}&lt;br /&gt;
 # Get latest rdp log entries.&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
 Get-Date&lt;br /&gt;
Date in iso format.&lt;br /&gt;
 Get-Date -UFormat &#039;+%Y-%m-%d %H:%M:%S.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
=full output=&lt;br /&gt;
Print all variable with full output&lt;br /&gt;
 &#039;(Get-Variable).StdOut&#039;&lt;br /&gt;
Send output to line like the following to get more output.&lt;br /&gt;
 | Ft -autosize | out-string -width 4096&lt;br /&gt;
&lt;br /&gt;
=restart services via samba=&lt;br /&gt;
install samba-common&lt;br /&gt;
 yum install samba-common&lt;br /&gt;
List services.&lt;br /&gt;
 net rpc service list -I IPADDRESS -U USERNAME%PASSWORD&lt;br /&gt;
Stop service.&lt;br /&gt;
 net rpc service start ipremote -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
Start service.&lt;br /&gt;
 net rpc service start ipeventwatcher -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
=Windows version=&lt;br /&gt;
 [System.Environment]::OSVersion.Version&lt;br /&gt;
 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx&lt;br /&gt;
 (Get-WmiObject -class Win32_OperatingSystem).Caption&lt;br /&gt;
Which architecture.&lt;br /&gt;
 gwmi win32_operatingsystem | select osarchitecture&lt;br /&gt;
&lt;br /&gt;
=set windows proxy=&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyEnable -Value 1&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyServer -Value proxy.int.redbridge.se&amp;quot;:&amp;quot;3128&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyOverride -Value &amp;quot;*.redbridge.se&amp;quot;&lt;br /&gt;
 Get-ItemProperty -Path &#039;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&#039; | findstr Proxy&lt;br /&gt;
&lt;br /&gt;
=Is proxy bypassed=&lt;br /&gt;
 $url = &amp;quot;http://10.127.12.10&amp;quot;;$webclient = New-Object System.Net.WebClient; $webclient.Proxy.IsBypassed($url)&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
 (Invoke-WebRequest http://localhost/Requests -UseBasicParsing).content&lt;br /&gt;
 curl -TimeoutSec 1 https://halfface.se&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 Invoke-WebRequest -Uri &amp;quot;http://1.2.3.4/file.txt&amp;quot; -OutFile &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=turn of index services when computer is not used=&lt;br /&gt;
In stopindexer enter the line&lt;br /&gt;
 net stop wsearch&lt;br /&gt;
In the startindexer enter the line&lt;br /&gt;
 net start wsearch&lt;br /&gt;
&lt;br /&gt;
=robocopy(backup)=&lt;br /&gt;
 robocopy C:\Users\user_name\Documents h:\backup\user_name /e /mir /np /log+:c:\temp\backup_log.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=number of cpus=&lt;br /&gt;
 Get-WmiObject -class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors, Addresswidth&lt;br /&gt;
&lt;br /&gt;
=cpu_usage=&lt;br /&gt;
cpu=&amp;lt;value&amp;gt;%&lt;br /&gt;
 $cpuUsage = Get-WmiObject Win32_Processor | Select-Object -ExpandProperty LoadPercentage ; $averageCpuUsage = ($cpuUsage | Measure-Object -Average).Average ; &amp;quot;cpu:{0:N0}%&amp;quot; -f $averageCpuUsage&lt;br /&gt;
 Get-Counter &#039;\Process(*)\% Processor Time&#039;| Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@{L=&#039;CPU&#039;;E={($_.Cookedvalue/100).toString(&#039;P&#039;)}} -AutoSize | Ft -autosize | out-string -width 4096&lt;br /&gt;
 Get-WmiObject win32_processor | select LoadPercentage  |fl&lt;br /&gt;
Stats and all processes. Including process running under svhost.&lt;br /&gt;
 $CpuInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Processor;$MemInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Memory;$SysInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_System;$PrcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfProc_Process;$SvcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_Service;$GeneralInfo = @{};$ProcOutput = @();$ServiceTable = @{};$GeneralInfo.Add(&amp;quot;_Name&amp;quot;, $env:COMPUTERNAME);$GeneralInfo.Add(&amp;quot;ProcessorQueueLength&amp;quot;, $SysInfo.ProcessorQueueLength);$GeneralInfo.Add(&amp;quot;PercentInterruptTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentInterruptTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;AvailableMBytes&amp;quot;, $MemInfo.AvailableMBytes);$GeneralInfo.Add(&amp;quot;PercentIdleTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentIdleTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;PercentPrivilegedTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentPrivilegedTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;TotalMemory&amp;quot;, (Get-WmiObject Win32_ComputerSystem | %{$_.TotalPhysicalMemory}));$GeneralInfo.Add(&amp;quot;PercentProcessorTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentProcessorTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CacheBytes&amp;quot;, $MemInfo.CacheBytes);$GeneralInfo.Add(&amp;quot;PercentUserTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentUserTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CommittedBytes&amp;quot;, $MemInfo.CommittedBytes);$GeneralInfo.GetEnumerator() | Sort-Object -Property Name | ForEach-Object {Write-Host -Object ($_.Name + &amp;quot;: &amp;quot;) -NoNewline; Write-Host -Object $_.Value};foreach($Service in $SvcInfo) {$ProcId = $Service.ProcessId.ToString();if($ProcId -ne &amp;quot;0&amp;quot;) {if($ServiceTable.ContainsKey($ProcId)) {$Value = $ServiceTable.Get_Item($ProcId);$Value += $Service.Name;$ServiceTable.Set_Item($ProcId, $Value);} else {$ServiceTable.Add($ProcId, @($Service.Name));}}}foreach($proc in $PrcInfo) {$Obj = New-Object psobject;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Process&amp;quot; -Value $proc.Name;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;CPU&amp;quot; -Value $proc.PercentProcessorTime;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Thread&amp;quot; -Value $proc.ThreadCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Handle&amp;quot; -Value $proc.HandleCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Services&amp;quot; -Value ($ServiceTable.Get_Item($proc.IDProcess.ToString()) -join &amp;quot;,&amp;quot;);$ProcOutput += $Obj;}$ProcOutput | ft -AutoSize&lt;br /&gt;
&lt;br /&gt;
=Sort processes by mem usage.=&lt;br /&gt;
 get-wmiobject WIN32_PROCESS | Sort-Object -Property ws -Descending|select -first 20|Select processname, @{Name=&amp;quot;Mem Usage(MB)&amp;quot;;Expression={[math]::round($_.ws / 1mb)}},@{Name=&amp;quot;ProcessID&amp;quot;;Expression={[String]$_.ProcessID}},@{Name=&amp;quot;UserID&amp;quot;;Expression={$_.getowner().user}} | Ft -autosize | out-string -width 4096&lt;br /&gt;
2&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, WorkingSet, CPU&lt;br /&gt;
3 Better formatting&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}, @{Name=&amp;quot;CPU(s)&amp;quot;;Expression={[math]::Round($_.CPU,2)}}&lt;br /&gt;
4 private memory&lt;br /&gt;
 Get-Process | Sort-Object -Property PrivateMemorySize -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;PrivateMemory(MB)&amp;quot;;Expression={[math]::Round($_.PrivateMemorySize/1MB,2)}}, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}&lt;br /&gt;
&lt;br /&gt;
=total memory in machine=&lt;br /&gt;
 Get-WMIObject -class win32_physicalmemory | Format-Table devicelocator, capacity -a&lt;br /&gt;
=how much memory is free in GB=&lt;br /&gt;
 $freemem = Get-WmiObject -Class Win32_OperatingSystem; echo ([math]::round(($freemem.FreePhysicalMemory / 1024 / 1024), 2))&lt;br /&gt;
=Memory usage, Total memory=&lt;br /&gt;
 $mem = Get-Counter &#039;\Memory\Available MBytes&#039;&lt;br /&gt;
 $usedMem = (Get-Counter &#039;\Memory\Committed Bytes&#039;).CounterSamples.CookedValue / 1MB&lt;br /&gt;
 $availableMem = $mem.CounterSamples.CookedValue&lt;br /&gt;
 $usedMem = [math]::round($usedMem, 2)&lt;br /&gt;
 $availableMem = [math]::round($availableMem, 2)&lt;br /&gt;
 [PSCustomObject]@{&lt;br /&gt;
     UsedMemoryMB = $usedMem&lt;br /&gt;
     AvailableMemoryMB = $availableMem&lt;br /&gt;
     TotalMemoryMB = (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1MB&lt;br /&gt;
 }&lt;br /&gt;
=memory usage as percent usage=&lt;br /&gt;
 $memory = Get-WmiObject Win32_OperatingSystem ; $totalMemory = $memory.TotalVisibleMemorySize ; $freeMemory = $memory.FreePhysicalMemory ; $usedMemory = $totalMemory - $freeMemory ; $memoryUsage = ($usedMemory / $totalMemory) * 100 ; &amp;quot;mem:{0:N0}%&amp;quot; -f $memoryUsage&lt;br /&gt;
&lt;br /&gt;
=disk usage=&lt;br /&gt;
 Get-PSDrive&lt;br /&gt;
=tail=&lt;br /&gt;
Get last 10 lines&lt;br /&gt;
 Get-Content [filename] | Select-Object -Last 10&lt;br /&gt;
tail -f&lt;br /&gt;
 Get-Content filename.log -Wait&lt;br /&gt;
Since PowerShell 3.&lt;br /&gt;
 gc -Tail 10 log.txt &lt;br /&gt;
=head=&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc log.txt | select -first 10&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc -TotalCount 10 log.txt&lt;br /&gt;
&lt;br /&gt;
=wc count lines=&lt;br /&gt;
 Get-Content C:\temp\ERRORLOG.5 | Measure-Object -line&lt;br /&gt;
=disable firewall=&lt;br /&gt;
From the command line&lt;br /&gt;
 netsh advfirewall set allprofiles state off&lt;br /&gt;
Using Powershell&lt;br /&gt;
  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False&lt;br /&gt;
=which firewall profiles are available=&lt;br /&gt;
 get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a&lt;br /&gt;
=which firewall profile is being used=&lt;br /&gt;
 get-NetConnectionProfile&lt;br /&gt;
&lt;br /&gt;
=which ports are open=&lt;br /&gt;
 Get-NetFirewallRule | Where { $_.Enabled -eq &amp;quot;True&amp;quot; -and $_.Direction -eq &amp;quot;Inbound&amp;quot; }&lt;br /&gt;
=which rules exist=&lt;br /&gt;
 Get-NetFirewallRule&lt;br /&gt;
=open port in firewall=&lt;br /&gt;
 netsh advfirewall firewall add rule name=&amp;quot;Open Port 80&amp;quot; dir=in action=allow protocol=TCP localport=80&lt;br /&gt;
&lt;br /&gt;
=firewall get more info about opening=&lt;br /&gt;
 get-netfirewallrule -DisplayName &amp;quot;Remote Desktop - User Mode (TCP-In)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=add administrative user=&lt;br /&gt;
Create user&lt;br /&gt;
 net user /add root [password]&lt;br /&gt;
Add user to local group.&lt;br /&gt;
 net localgroup administrators root /add&lt;br /&gt;
=list local groups=&lt;br /&gt;
 Get-LocalGroup&lt;br /&gt;
&lt;br /&gt;
=Which process is using port=&lt;br /&gt;
 # Which process is using port.&lt;br /&gt;
 netstat -nao | findstr :22&lt;br /&gt;
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1916&lt;br /&gt;
 # Which process has pid.&lt;br /&gt;
 get-process  | findstr 1916&lt;br /&gt;
 355      40    48752      56056   621     6,45   1916 PowerShellServer&lt;br /&gt;
 # which process has pid.&lt;br /&gt;
 tasklist | findstr 1916&lt;br /&gt;
 PowerShellServer.exe          1916 Services                   0     56.072 K&lt;br /&gt;
=which version is installed=&lt;br /&gt;
 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize&lt;br /&gt;
=list drives=&lt;br /&gt;
 get-psdrive&lt;br /&gt;
 wmic logicaldisk get caption&lt;br /&gt;
=svchost.exe what is happening=&lt;br /&gt;
 tasklist /svc /fi &amp;quot;IMAGENAME eq svchost.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=computer management=&lt;br /&gt;
Start computer management&lt;br /&gt;
 compmgmt.msc&lt;br /&gt;
=msinfo32=&lt;br /&gt;
Generate report.&lt;br /&gt;
 msinfo32&lt;br /&gt;
=licensing=&lt;br /&gt;
 Get-wmiobject SoftwareLicensingProduct -ComputerName localhost | Where-Object {$_.ApplicationID -eq &#039;55c92734-d682-4d71-983e-d6ec3f16059f&#039; -and $_.licensestatus -eq &#039;1&#039;} | Select name, description, @{Label=&#039;computer&#039;; Expression = {$_.PscomputerName}} | Format-List  name, description, computer&lt;br /&gt;
=add line inbetween lines=&lt;br /&gt;
 $filePath=&amp;quot;.\path_to_file&amp;quot;&lt;br /&gt;
 $textToAdd=&amp;quot;`nText to put in file&amp;quot;&lt;br /&gt;
 $fileContent = Get-Content $filePath&lt;br /&gt;
 $fileContent[$lineNumber+2] += $textToAdd&lt;br /&gt;
 $fileContent | Set-Content $filePath&lt;br /&gt;
=add line to end of file=&lt;br /&gt;
Add-Content c:\scripts\test.txt &amp;quot;The End&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get network settings=&lt;br /&gt;
Get among other things mtu&lt;br /&gt;
 Get-NetIPInterface&lt;br /&gt;
=start time of process=&lt;br /&gt;
List start time from processes found with Get-Process.&lt;br /&gt;
 get-process openvpn |select starttime&lt;br /&gt;
=list local users=&lt;br /&gt;
 Get-WmiObject -Class Win32_UserAccount -Filter  &amp;quot;LocalAccount=&#039;True&#039;&amp;quot;&lt;br /&gt;
=list logged in users=&lt;br /&gt;
 query user /server:$SERVER&lt;br /&gt;
&lt;br /&gt;
=list permissions for users=&lt;br /&gt;
 Accesschk &amp;quot;NKS01579\ipwinpsr&amp;quot; -accepteula -a *&lt;br /&gt;
&lt;br /&gt;
=create windows boot media under linux=&lt;br /&gt;
 woeusb  --target-filesystem NTFS --device /install/system/win10/Win10_1909_EnglishInternational_x64.iso  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=rename computer=&lt;br /&gt;
 $NewName=&amp;quot;alva&amp;quot;&lt;br /&gt;
 $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem&lt;br /&gt;
 $ComputerInfo.Rename($NewName)&lt;br /&gt;
 Restart-Computer&lt;br /&gt;
=startup dir=&lt;br /&gt;
The All Users Startup Folder is located at the following path:&lt;br /&gt;
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp&lt;br /&gt;
The Current User Startup Folder is located here:&lt;br /&gt;
 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;br /&gt;
=cmd scroll mode=&lt;br /&gt;
 Alt+Space -&amp;gt; E -&amp;gt; L&lt;br /&gt;
=enable rdp=&lt;br /&gt;
 Set-ItemProperty -Path &#039;HKLM:\System\CurrentControlSet\Control\Terminal Server&#039; -name &amp;quot;fDenyTSConnections&amp;quot; -value 0&lt;br /&gt;
 Enable-NetFirewallRule -DisplayGroup &amp;quot;Remote Desktop&amp;quot;&lt;br /&gt;
=rdp allow many sessions=&lt;br /&gt;
 https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip&lt;br /&gt;
&lt;br /&gt;
=disable defender=&lt;br /&gt;
 Set-MpPreference -DisableRealtimeMonitoring $true&lt;br /&gt;
 REG ADD &amp;quot;hklm\software\policies\microsoft\windows defender&amp;quot; /v DisableAntiSpyware /t REG_DWORD /d 1 /F&lt;br /&gt;
&lt;br /&gt;
=list scheduled tasks=&lt;br /&gt;
 &#039;Get-ScheduledTask | Ft -autosize | out-string -width 4096&#039;&lt;br /&gt;
=scheduled tasks enable disable=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive*&lt;br /&gt;
 TaskPath                                       TaskName                          State     &lt;br /&gt;
 --------                                       --------                          -----     &lt;br /&gt;
 \Microsoft\Windows\User Profile Service\       HiveUploadTask                    Disabled  &lt;br /&gt;
=Enable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Enable-ScheduledTask&lt;br /&gt;
=Disable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Disable-ScheduledTask&lt;br /&gt;
=Start scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Start-ScheduledTask&lt;br /&gt;
=Look at scheduled task=&lt;br /&gt;
 Get-ScheduledTask -TaskName Hive* | Format-List *&lt;br /&gt;
&lt;br /&gt;
=Get output from last scheduled command execution=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Get-ScheduledTaskInfo&lt;br /&gt;
=scheduled task add=&lt;br /&gt;
 $action = New-ScheduledTaskAction -Execute &#039;Powershell.exe&#039; -Argument &#039;-NoProfile -WindowStyle Hidden -command &amp;quot;net user /add special_user PassW0rd ; net localgroup administrators special_user /add&amp;quot;&#039;&lt;br /&gt;
 $trigger = New-ScheduledTaskTrigger -Daily -At 12am&lt;br /&gt;
 $task = Register-ScheduledTask -RunLevel &amp;quot;Highest&amp;quot; -TaskName &amp;quot;Add special_user&amp;quot; -Trigger $trigger -Action $action&lt;br /&gt;
 $task.Triggers.Repetition.Duration = &amp;quot;P1D&amp;quot; # Repeat for a duration of one day&lt;br /&gt;
 $task.Triggers.Repetition.Interval = &amp;quot;PT1H&amp;quot; # Repeat every 30 minutes, use PT1H for every hour&lt;br /&gt;
 $task.Principal = New-ScheduledTaskPrincipal -UserID &amp;quot;NT AUTHORITY\SYSTEM&amp;quot; -LogonType ServiceAccount -RunLevel Highest&lt;br /&gt;
 $task | Set-ScheduledTask&lt;br /&gt;
With script.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$action = New-ScheduledTaskAction -Execute &#039;powershell.exe&#039; -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -Command `&amp;quot;&amp;amp; &#039;C:\temp\troubleshooting.ps1&#039; &amp;gt;&amp;gt; &#039;C:\temp\troubleshooting.log&#039;`&amp;quot;&amp;quot;&lt;br /&gt;
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)&lt;br /&gt;
$principal = New-ScheduledTaskPrincipal -GroupId &amp;quot;BUILTIN\Administrators&amp;quot; -RunLevel Highest&lt;br /&gt;
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)&lt;br /&gt;
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings&lt;br /&gt;
Register-ScheduledTask -TaskName &#039;troubleshooting-abjorklund&#039; -InputObject $task -User &amp;quot;System&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=remove scheduled task=&lt;br /&gt;
 Unregister-ScheduledTask -TaskName Hive* -Confirm:$false&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 echo $null &amp;gt;&amp;gt; filename&lt;br /&gt;
=bitlocker read from linux=&lt;br /&gt;
 https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/&lt;br /&gt;
=runas(sudo)=&lt;br /&gt;
Run command as other user.&lt;br /&gt;
 runas /user:%computername%\root cmd&lt;br /&gt;
&lt;br /&gt;
=install sshd=&lt;br /&gt;
 On Windows 10 version 1803 and newer&lt;br /&gt;
 In Settings app, go to Apps &amp;gt; Apps &amp;amp; features &amp;gt; Manage optional features.&lt;br /&gt;
 Locate &amp;quot;OpenSSH server&amp;quot; feature, expand it, and select Install.&lt;br /&gt;
 Binaries are installed to %WINDIR%\System32\OpenSSH. Configuration file (sshd_config) and host keys are installed to %ProgramData%\ssh (only after the server is started for the first time).&lt;br /&gt;
&lt;br /&gt;
You may still want to use the following manual installation, if you want to install a newer version of OpenSSH than the one built into Windows 10.&lt;br /&gt;
 https://github.com/PowerShell/Win32-OpenSSH/releases (package OpenSSH-Win64.zip or OpenSSH-Win32.zip)&lt;br /&gt;
 As the Administrator, extract the package to C:\Program Files\OpenSSH&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1&lt;br /&gt;
Configuring SSH server&lt;br /&gt;
Allow incoming connections to SSH server in Windows Firewall:&lt;br /&gt;
 New-NetFirewallRule -Name sshd -DisplayName &#039;OpenSSH SSH Server&#039; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22&lt;br /&gt;
or go to Control Panel &amp;gt; System and Security &amp;gt; Windows Firewall1 &amp;gt; Advanced Settings &amp;gt; Inbound Rules and add a new rule for port 22.&lt;br /&gt;
Start the service and/or configure automatic start:&lt;br /&gt;
 start-service &amp;quot;OpenSSH SSH Server&amp;quot;&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
=installing built in ssh server to be able to login without password=&lt;br /&gt;
 # setup ssh C:\ProgramData\ssh\sshd_config&lt;br /&gt;
 SyslogFacility LOCAL0&lt;br /&gt;
 LogLevel Debug3&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 PubkeyAuthentication yes&lt;br /&gt;
 AuthorizedKeysFile      .ssh/authorized_keys&lt;br /&gt;
 # Put authorized_keys here.&lt;br /&gt;
 c:/ProgramData/ssh/administrators_authorized_keys&lt;br /&gt;
&lt;br /&gt;
=route=&lt;br /&gt;
==show routes==&lt;br /&gt;
Powershell&lt;br /&gt;
 Get-NetRoute&lt;br /&gt;
One interface index&lt;br /&gt;
 Get-NetRoute -InterfaceIndex 12&lt;br /&gt;
cmd&lt;br /&gt;
 route print -4&lt;br /&gt;
==Add route==&lt;br /&gt;
Powershell&lt;br /&gt;
 New-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1&lt;br /&gt;
cmd&lt;br /&gt;
 route -p ADD 10.255.240.0 MASK 255.255.255.0 172.30.103.4&lt;br /&gt;
 route -p add 0.0.0.0 mask 0.0.0.0 172.30.103.10&lt;br /&gt;
==Remove route==&lt;br /&gt;
 Remove-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1 -Confirm:$false&lt;br /&gt;
==Get routing information.==&lt;br /&gt;
 Find-NetRoute -RemoteIPAddress &amp;quot;10.0.0.34&amp;quot; | Select-Object ifIndex,DestinationPrefix,NextHop,RouteMetric -Last 1&lt;br /&gt;
&lt;br /&gt;
=last login on local machine=&lt;br /&gt;
 get-localuser | Select Name,LastLogon | sort LastLogon&lt;br /&gt;
=last logged in user and grep for user=&lt;br /&gt;
 Function Get-LoginEvents {&lt;br /&gt;
    Param (&lt;br /&gt;
        [Parameter(&lt;br /&gt;
            ValueFromPipeline = $true,&lt;br /&gt;
            ValueFromPipelineByPropertyName = $true&lt;br /&gt;
        )]&lt;br /&gt;
        [Alias(&#039;Name&#039;)]&lt;br /&gt;
        [string]$ComputerName = $env:ComputerName&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$StartTime&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$EndTime&lt;br /&gt;
    )&lt;br /&gt;
    Begin {&lt;br /&gt;
        enum LogonTypes {&lt;br /&gt;
            Interactive = 2&lt;br /&gt;
            Network = 3&lt;br /&gt;
            Batch = 4&lt;br /&gt;
            Service = 5&lt;br /&gt;
            Unlock = 7&lt;br /&gt;
            NetworkClearText = 8&lt;br /&gt;
            NewCredentials = 9&lt;br /&gt;
            RemoteInteractive = 10&lt;br /&gt;
            CachedInteractive = 11&lt;br /&gt;
        }&lt;br /&gt;
        $filterHt = @{&lt;br /&gt;
            LogName = &#039;Security&#039;&lt;br /&gt;
            ID = 4624&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;StartTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;StartTime&#039;] = $StartTime&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;EndTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;EndTime&#039;] = $EndTime&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Process {&lt;br /&gt;
        Get-WinEvent -MaxEvents 100 -ComputerName $ComputerName -FilterHashtable $filterHt | foreach-Object {&lt;br /&gt;
            [pscustomobject]@{&lt;br /&gt;
                ComputerName = $ComputerName&lt;br /&gt;
                UserAccount = $_.Properties.Value[5]&lt;br /&gt;
                UserDomain = $_.Properties.Value[6]&lt;br /&gt;
                LogonType = [LogonTypes]$_.Properties.Value[8]&lt;br /&gt;
                WorkstationName = $_.Properties.Value[11]&lt;br /&gt;
                SourceNetworkAddress = $_.Properties.Value[19]&lt;br /&gt;
                TimeStamp = $_.TimeCreated&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    End{}&lt;br /&gt;
 }&lt;br /&gt;
 Get-LoginEvents &amp;gt; login&lt;br /&gt;
 gc login | select-string dabuzaid -Context 5&lt;br /&gt;
&lt;br /&gt;
=powersave disable=&lt;br /&gt;
 powercfg /x -hibernate-timeout-ac 0&lt;br /&gt;
 powercfg /x -hibernate-timeout-dc 0&lt;br /&gt;
 powercfg /x -disk-timeout-ac 0&lt;br /&gt;
 powercfg /x -disk-timeout-dc 0&lt;br /&gt;
 powercfg /x -monitor-timeout-ac 0&lt;br /&gt;
 powercfg /x -monitor-timeout-dc 0&lt;br /&gt;
 Powercfg /x -standby-timeout-ac 0&lt;br /&gt;
 powercfg /x -standby-timeout-dc 0&lt;br /&gt;
=hostname=&lt;br /&gt;
Get fqdn&lt;br /&gt;
 [System.Net.Dns]::GetHostByName($env:computerName).HostName&lt;br /&gt;
 &amp;quot;$env:computername.$env:userdnsdomain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=resolve hostname=&lt;br /&gt;
 Resolve-DnsName -server 8.8.8.8 smtp.google.com | Format-Table Name, IPAddress -HideTableHeaders&lt;br /&gt;
&lt;br /&gt;
=clear screen reset=&lt;br /&gt;
 cls&lt;br /&gt;
=top(-wikipedia)=&lt;br /&gt;
 While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}&lt;br /&gt;
&lt;br /&gt;
=get users sid=&lt;br /&gt;
 wmic useraccount where name=&#039;dkarlslatt&#039; get sid&lt;br /&gt;
=traceroute=&lt;br /&gt;
 Test-NetConnection &amp;quot;IPaddress/HOSTaname&amp;quot; -TraceRoute&lt;br /&gt;
=name of ad servers=&lt;br /&gt;
 nslookup -type=srv _ldap._tcp.dc._msdcs.${AD}&lt;br /&gt;
=manage ad users and computers=&lt;br /&gt;
 dsa.msc&lt;br /&gt;
&lt;br /&gt;
=iis logfiles=&lt;br /&gt;
Read last lines from iis log.&lt;br /&gt;
 gc -Tail 10 &amp;quot;C:\InetPub\Logs\LogFiles\W3SVC1\u_ex$(Get-Date -F &#039;yyMMdd&#039;).log&amp;quot;&lt;br /&gt;
=join domain=&lt;br /&gt;
 netdom join %computername% /domain:your.ADDomainToJoin.net /UserD:LoginWithJoinPermissions /PasswordD:%password%&lt;br /&gt;
=windows update info=&lt;br /&gt;
 wmic qfe list&lt;br /&gt;
=patch=&lt;br /&gt;
Update release area Windows.&lt;br /&gt;
 servicepack.exe -s:z:\w2k3&lt;br /&gt;
=get date in iso format=&lt;br /&gt;
 Get-Date (Get-Date) -UFormat &#039;+%Y-%m-%d %H:%M:%S&#039;&lt;br /&gt;
 (Get-Date).ToString(&amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=format-list(fl)=&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
=whoami=&lt;br /&gt;
 echo &amp;quot;$env:UserDomain $env:UserName $env:ComputerName&amp;quot;&lt;br /&gt;
=group=&lt;br /&gt;
 (New-Object System.DirectoryServices.DirectorySearcher(&amp;quot;(&amp;amp;(objectCategory=User)(samAccountName=$($env:username)))&amp;quot;)).FindOne().GetDirectoryEntry().memberOf&lt;br /&gt;
=unzip=&lt;br /&gt;
 Expand-Archive C:\a.zip&lt;br /&gt;
=take ownership and remove=&lt;br /&gt;
 Remove-Item -Recurse -Force &amp;lt;directory&amp;gt;&lt;br /&gt;
 takeown /a /r /d Y /f &amp;lt;directory&amp;gt;&lt;br /&gt;
=print info to remove directories=&lt;br /&gt;
Prepare with two lists. One with users who are suitable to have their directories removed. And one list with the output from dir in c:\users.&lt;br /&gt;
 cat uc-remote01_login.txt | while read WIN_USER WIN_DATE ; do echo &#039;#&#039; $WIN_USER $WIN_DATE ; DIRECTORY=$(grep &amp;quot; $WIN_USER&amp;quot; uc-remote01_users.txt) ; if [ &amp;quot;${DIRECTORY}&amp;quot; ] ; then echo Remove-Item -Recurse -Force $WIN_USER \; takeown /a /r /d Y /f $WIN_USER \; Remove-Item -Recurse -Force $WIN_USER ; fi ; done&lt;br /&gt;
=list environments variables=&lt;br /&gt;
 dir env:&lt;br /&gt;
=list shares=&lt;br /&gt;
 Get-SmbShare&lt;br /&gt;
=Stop grouping applications on task bar=&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&amp;quot; -Name &amp;quot;TaskbarGlomLevel&amp;quot; -Value 2&lt;br /&gt;
 Stop-Process -Name explorer -Force&lt;br /&gt;
 Start-Process explorer&lt;br /&gt;
=autohide taskbar=&lt;br /&gt;
 $p=&#039;HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3&#039;;$v=(Get-ItemProperty -Path $p).Settings;$v[8]=($v[8] -bor 1);Set-ItemProperty -Path $p -Name Settings -Value $v;Stop-Process -f -ProcessName explorer&lt;br /&gt;
&lt;br /&gt;
=install cmdlet=&lt;br /&gt;
  install-module sqlserver&lt;br /&gt;
=install chocolate=&lt;br /&gt;
 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))&lt;br /&gt;
=manage jobs=&lt;br /&gt;
Start job&lt;br /&gt;
 Start-Job -FilePath C:\temp\cronjob.ps1&lt;br /&gt;
List jobs&lt;br /&gt;
 Get-Job&lt;br /&gt;
Stop jobs&lt;br /&gt;
 Stop-Job -Id &amp;lt;JobID&amp;gt;&lt;br /&gt;
 Stop-Job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
Delete Jobs&lt;br /&gt;
 Remove-job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=timezone=&lt;br /&gt;
List timezones&lt;br /&gt;
 Get-TimeZone -ListAvailable | grep -A10 -B10 Stockholm&lt;br /&gt;
Set Stockholm time.&lt;br /&gt;
 Set-TimeZone -Name &amp;quot;W. Europe Standard Time&amp;quot;&lt;br /&gt;
=locale=&lt;br /&gt;
 $env:LANG = &#039;en-US&#039;&lt;br /&gt;
=path variable=&lt;br /&gt;
 echo $env:path&lt;br /&gt;
=tweak windows=&lt;br /&gt;
 https://winaerotweaker.com/&lt;br /&gt;
=autologin=&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v AutoAdminLogon /t REG_SZ /d 1 /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultUserName /t REG_SZ /d &amp;quot;name@outlook.com&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultPassword /t REG_SZ /d &amp;quot;YourPassword123&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultDomainName /t REG_SZ /d &amp;quot;MicrosoftAccount&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v ForceAutoLogon /t REG_SZ /d 1 /f&lt;br /&gt;
=expand disk=&lt;br /&gt;
 diskmgmt.msc&lt;br /&gt;
=create user from existing=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Define parameters for the new user&lt;br /&gt;
$newUser = @{&lt;br /&gt;
    Name              = &amp;quot;&amp;lt;Full Name&amp;gt;&amp;quot;&lt;br /&gt;
    GivenName         = &amp;quot;&amp;lt;First&amp;gt;&amp;quot;&lt;br /&gt;
    Surname           = &amp;quot;&amp;lt;LastName&amp;gt;&amp;quot;&lt;br /&gt;
    SamAccountName    = &amp;quot;andreas.stenudd&amp;quot;&lt;br /&gt;
    UserPrincipalName = &amp;quot;andreas.stenudd@xpdo.xpeedio.local&amp;quot;&lt;br /&gt;
    AccountPassword   = (ConvertTo-SecureString &amp;quot;&amp;lt;password&amp;gt;&amp;quot; -AsPlainText -Force)&lt;br /&gt;
    Enabled           = $true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Specify the existing user to copy from (replace with actual SAM account name)&lt;br /&gt;
$templateUserSam = &amp;quot;andreas.bjorklund&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the template user&#039;s properties&lt;br /&gt;
$templateUser = Get-ADUser -Identity $templateUserSam -Properties *&lt;br /&gt;
&lt;br /&gt;
# Create the new user, copying the OU (Path) from the template user&lt;br /&gt;
$newUserParams = $newUser.Clone()&lt;br /&gt;
$newUserParams.Path = $templateUser.DistinguishedName -replace &#039;^CN=.*?,&#039;, &#039;&#039;  # Extract OU from template user&#039;s DN&lt;br /&gt;
&lt;br /&gt;
# Create the new user&lt;br /&gt;
New-ADUser @newUserParams&lt;br /&gt;
&lt;br /&gt;
# Copy group memberships from the template user&lt;br /&gt;
$templateUser.MemberOf | ForEach-Object {&lt;br /&gt;
    Add-ADGroupMember -Identity $_ -Members $newUser.SamAccountName&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;User $($newUser.Name) created successfully with group memberships copied from $templateUserSam.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=mount iso=&lt;br /&gt;
 Mount-DiskImage -ImagePath  &#039;z:\temp\torrentz\The.Sims.4.Enchanted.by.Nature-RUNE\rune-the.sims.4.enchanted.by.nature.iso&#039;&lt;br /&gt;
=list disks including devicename=&lt;br /&gt;
 mountvol&lt;br /&gt;
=list shadowcopy=&lt;br /&gt;
 Get-WmiObject -Class Win32_ShadowCopy&lt;br /&gt;
=list dedup=&lt;br /&gt;
 Get-Dedupstatus&lt;br /&gt;
==dedup garbagecollection==&lt;br /&gt;
 Start-DedupJob -volume f: -type garbagecollection&lt;br /&gt;
=keyboard=&lt;br /&gt;
List keyboards and lang.&lt;br /&gt;
 Get-WinUserLanguageList&lt;br /&gt;
Install English menus and Swedish keyboard.&#039;&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 $LangList.Add(&amp;quot;en-SE&amp;quot;)&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
Uninstall keyboards&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 # Remove en-US entirely&lt;br /&gt;
 $LangList = $LangList | Where-Object { $_.LanguageTag -ne &amp;quot;en-GB&amp;quot; }&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
=curl/vim=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$binPath = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
if (-not (Test-Path $binPath -PathType Container)) {&lt;br /&gt;
  New-Item -ItemType Directory -Path $binPath&lt;br /&gt;
  Write-Host &amp;quot;Created $binPath&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
cd C:\Users\$env:USERNAME\bin&lt;br /&gt;
curl https://halfface.se/windows/windows.zip -o windows.zip&lt;br /&gt;
Expand-Archive -Path windows.zip -DestinationPath . -Force&lt;br /&gt;
Remove-Item Alias:curl&lt;br /&gt;
if ($env:PATH -notlike &amp;quot;*;C:\Users\$env:USERNAME\bin*&amp;quot;) {&lt;br /&gt;
  $env:PATH += &amp;quot;;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make above permanent.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
# Add to user PATH only if it&#039;s not already there&lt;br /&gt;
$currentPath = [Environment]::GetEnvironmentVariable(&amp;quot;Path&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
if ($currentPath -notlike &amp;quot;*$target*&amp;quot;) {&lt;br /&gt;
  [Environment]::SetEnvironmentVariable(&amp;quot;Path&amp;quot;, $currentPath + &amp;quot;;$target&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Replace 1234 with your actual PID&lt;br /&gt;
$pid = 1234&lt;br /&gt;
&lt;br /&gt;
# Method 1: Using Get-Process and Get-Service&lt;br /&gt;
$process = Get-Process -Id $pid -ErrorAction SilentlyContinue&lt;br /&gt;
if ($process) {&lt;br /&gt;
    $serviceName = (Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq $pid }).Name&lt;br /&gt;
    if ($serviceName) {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid belongs to service: $serviceName&amp;quot;&lt;br /&gt;
        Get-Service -Name $serviceName&lt;br /&gt;
    } else {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid does NOT belong to any service&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    Write-Host &amp;quot;Process with PID $pid not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
 Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq 1234 } | Select-Object Name, DisplayName, State, StartMode, PathName&lt;br /&gt;
=dmidecode/lshw/inventory=&lt;br /&gt;
 Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture, CsTotalPhysicalMemory, OsNumberOfProcesses&lt;br /&gt;
=scheduled task=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get detailed task information&lt;br /&gt;
$task = Get-ScheduledTask -TaskName &amp;quot;Hive*&amp;quot;&lt;br /&gt;
$taskInfo = Get-ScheduledTaskInfo -InputObject $task&lt;br /&gt;
&lt;br /&gt;
# Display key information&lt;br /&gt;
Write-Host &amp;quot;Task Name: $($task.TaskName)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task Path: $($task.TaskPath)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Run Time: $($taskInfo.LastRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Result: 0x$($taskInfo.LastTaskResult.ToString(&#039;X8&#039;))&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Next Run Time: $($taskInfo.NextRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Number of Missed Runs: $($taskInfo.NumberOfMissedRuns)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task State: $($task.State)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the exit code meaning&lt;br /&gt;
$exitCode = $taskInfo.LastTaskResult&lt;br /&gt;
switch ($exitCode) {&lt;br /&gt;
    0 { Write-Host &amp;quot;Exit Code: 0x0 - SUCCESS&amp;quot; -ForegroundColor Green }&lt;br /&gt;
    1 { Write-Host &amp;quot;Exit Code: 0x1 - INVALID FUNCTION&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    2 { Write-Host &amp;quot;Exit Code: 0x2 - FILE NOT FOUND&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    10 { Write-Host &amp;quot;Exit Code: 0xA - INCORRECT ENVIRONMENT&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    267008 { Write-Host &amp;quot;Exit Code: 0x41300 - SCHEDULED TASK STOPPED&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    3221225786 { Write-Host &amp;quot;Exit Code: 0xC000013A - APPLICATION TERMINATED BY CTRL+C&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    default { Write-Host &amp;quot;Exit Code: 0x$($exitCode.ToString(&#039;X8&#039;))&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=disable screen saver=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaveActive -Value 0&lt;br /&gt;
Optional: Also disable password protection on resume (if screen saver were enabled)&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaverIsSecure -Value 0&lt;br /&gt;
=empty recyclebin=&lt;br /&gt;
 (New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | ForEach-Object { $_.InvokeVerb(&#039;delete&#039;) }&lt;br /&gt;
 Clear-RecycleBin -Force&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Windows&amp;diff=16571</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Windows&amp;diff=16571"/>
		<updated>2026-03-10T08:05:36Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* disable screen saver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=connect to windows from windows(rdp)=&lt;br /&gt;
 mstsc /v:172.30.142.11&lt;br /&gt;
Login with password.&lt;br /&gt;
 # Define the server and credentials&lt;br /&gt;
 $server = &amp;quot;&amp;lt;server&amp;gt;&amp;quot;&lt;br /&gt;
 $username = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;br /&gt;
 $password = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
 # Create credentials using cmdkey&lt;br /&gt;
 cmdkey /generic:&amp;quot;TERMSRV/$server&amp;quot; /user:$username /pass:$password&lt;br /&gt;
 # Start MSTSC to connect to the server&lt;br /&gt;
 Start-Process &amp;quot;mstsc&amp;quot; -ArgumentList &amp;quot;/v:$server&amp;quot;&lt;br /&gt;
 # Delete the credentials after MSTSC session is done&lt;br /&gt;
 cmdkey /delete:TERMSRV/&amp;lt;servername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=which version of powershell is installed=&lt;br /&gt;
 $PSVersionTable&lt;br /&gt;
&lt;br /&gt;
=hibernate=&lt;br /&gt;
 powercfg.exe -h off&lt;br /&gt;
&lt;br /&gt;
=enable powershell=&lt;br /&gt;
 set-executionpolicy unrestricted&lt;br /&gt;
=List network interfaces with ips=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress&lt;br /&gt;
=List network interfaces and routes=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress | Format-Table ; Get-NetRoute | Format-Table&lt;br /&gt;
&lt;br /&gt;
=Configure network=&lt;br /&gt;
# Static ip.&lt;br /&gt;
 netsh interface ip set address name=&amp;quot;Local Area Connection&amp;quot; static 192.168.122.41 255.255.255.0 192.168.122.1 1&lt;br /&gt;
# Dhcp&lt;br /&gt;
 netsh interface is set address name=&amp;quot;Local Area Connection&amp;quot; dhcp&lt;br /&gt;
# Verify mtu settings.&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
# Set correct mtu.&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1000&lt;br /&gt;
&lt;br /&gt;
=extract msi=&lt;br /&gt;
 msiexec /a &amp;quot;C:\software.msi&amp;quot; /qb TARGETDIR=&amp;quot;C:\Folder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=restart network=&lt;br /&gt;
 netsh interface set interface extbond admin = disabled&lt;br /&gt;
 ping 127.0.0.1 -n 6&lt;br /&gt;
 netsh interface set interface extbond admin = enabled&lt;br /&gt;
&lt;br /&gt;
=Profile=&lt;br /&gt;
# Profile&lt;br /&gt;
 C:\Users\abjorklund\AppData\Roaming\Microsoft\Windows\Start Menu&lt;br /&gt;
&lt;br /&gt;
=restart via rdesktop=&lt;br /&gt;
 CTRL + ALT + END&lt;br /&gt;
=alternative shutdown=&lt;br /&gt;
Shutdown with restart&lt;br /&gt;
 shutdown /t 0 /r /f&lt;br /&gt;
Shutdown&lt;br /&gt;
 shutdown /t 0 /s /f&lt;br /&gt;
logoff/logout&lt;br /&gt;
 shutdown /l /f&lt;br /&gt;
&lt;br /&gt;
=mount drive=&lt;br /&gt;
 net use z: \\www.halfface.se\storage /user:alex &amp;lt;password&amp;gt; /persistent:no&lt;br /&gt;
=change password=&lt;br /&gt;
Start a command prompt as administrator.&lt;br /&gt;
 net user username password&lt;br /&gt;
&lt;br /&gt;
=activate account=&lt;br /&gt;
 net user username /active:yes&lt;br /&gt;
&lt;br /&gt;
=remove cached passwords=&lt;br /&gt;
list/remove cached passwords graphically&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
list/remove cached passwords cli&lt;br /&gt;
 cmdkey /list&lt;br /&gt;
&lt;br /&gt;
=is your account locked. bat file=&lt;br /&gt;
 @echo off&lt;br /&gt;
 :again&lt;br /&gt;
 date /t &amp;amp; time /t&lt;br /&gt;
 net user /domain mdinkel &amp;gt; c:\temp\mdinkel&lt;br /&gt;
 find &amp;quot;active&amp;quot; c:\temp\mdinkel&lt;br /&gt;
 timeout 10&lt;br /&gt;
 goto again&lt;br /&gt;
&lt;br /&gt;
=unlock account=&lt;br /&gt;
 Net user username /DOMAIN /active:YES&lt;br /&gt;
&lt;br /&gt;
=Browse active dirctory structure=&lt;br /&gt;
 adsiedit.msc&lt;br /&gt;
=time zone conversion=&lt;br /&gt;
Here you can convert from Windows to unix time zones tz.&lt;br /&gt;
 http://www.unicode.org/cldr/charts/latest/supplemental/zone_tzid.html&lt;br /&gt;
=uptime=&lt;br /&gt;
 net statistics server&lt;br /&gt;
Uptime and other information&lt;br /&gt;
 systeminfo /FO CSV | ConvertFrom-CSV&lt;br /&gt;
&lt;br /&gt;
=credetial manager empty cache=&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
=remote powershell pssession=&lt;br /&gt;
Create pssession.&lt;br /&gt;
 $secpasswd = ConvertTo-SecureString &amp;quot;*************&amp;quot; -AsPlainText -Force&lt;br /&gt;
 $mycreds = New-Object System.Management.Automation.PSCredential (&amp;quot;domain\user&amp;quot;, $secpasswd)&lt;br /&gt;
 New-PSSession -ComputerName 10.111.222.5 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
get pssessions.&lt;br /&gt;
 get-pssession&lt;br /&gt;
&lt;br /&gt;
enter pssession&lt;br /&gt;
 Enter-PSSession -Name&lt;br /&gt;
 Enter-PSSession -ComputerName 10.50.197.70&lt;br /&gt;
 Enter-PSSession 172.18.1.198 -Credential domain\uer&lt;br /&gt;
&lt;br /&gt;
remove pssession&lt;br /&gt;
 remove-pssession -name Session15&lt;br /&gt;
&lt;br /&gt;
Run remote command.&lt;br /&gt;
 Invoke-Command -name &amp;quot;Session14&amp;quot; -ScriptBlock { hostname }&lt;br /&gt;
&lt;br /&gt;
Login to remote machine&lt;br /&gt;
 Enter-PSSession 10.50.197.70 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
=PowerShell=&lt;br /&gt;
=gc=&lt;br /&gt;
Get-content. Print content of file.&lt;br /&gt;
 gc c:\temp\file.txt&lt;br /&gt;
=Set-content=&lt;br /&gt;
 Set-Content -path REMOTE\Filename.txt&lt;br /&gt;
=Out-File=&lt;br /&gt;
 Out-File -Encoding UTF8&lt;br /&gt;
&lt;br /&gt;
=replace text in file=&lt;br /&gt;
 Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace &amp;quot;OLD&amp;quot;, &amp;quot;NEW&amp;quot; } | Set-Content REMOTE\Filename.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=get-service=&lt;br /&gt;
Status of one service.&lt;br /&gt;
 get-service ipeventwatcher&lt;br /&gt;
status of all services. list services.&lt;br /&gt;
 Get-Service&lt;br /&gt;
find service&lt;br /&gt;
 get-service *service_to_find* | select -expand name&lt;br /&gt;
=get failed services=&lt;br /&gt;
 Get-Service | Where-Object {$_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;}&lt;br /&gt;
=failed service from boot=&lt;br /&gt;
 Write-Host &amp;quot;`n=== Stopped Automatic Services ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-Service | Where-Object { $_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Disabled Scheduled Tasks ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-ScheduledTask | Where-Object {$_.State -eq &#039;Disabled&#039;} | Select-Object TaskName, TaskPath | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Recent Service Failures (Event Log) ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-EventLog -LogName System -Source &amp;quot;Service Control Manager&amp;quot; -EntryType Error -Newest 10 | Select-Object TimeGenerated, Message | Format-List&lt;br /&gt;
&lt;br /&gt;
=stop-service=&lt;br /&gt;
 stop-service ipeventwatcher&lt;br /&gt;
=restart-service=&lt;br /&gt;
 restart-service ipremote -force&lt;br /&gt;
 restart-service check_mk_agent -force&lt;br /&gt;
 Restart-Service -Force -Name &amp;quot;TermService&amp;quot;&lt;br /&gt;
=tell windows to restart service automatically=&lt;br /&gt;
 $serviceName = &amp;quot;icinga2&amp;quot;&lt;br /&gt;
 sc.exe failure $serviceName reset= 86400 actions= restart/60000/restart/60000/restart/60000&lt;br /&gt;
&lt;br /&gt;
=start-service=&lt;br /&gt;
 start-service ipeventwatcher&lt;br /&gt;
=autostart service=&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
&lt;br /&gt;
=variable=&lt;br /&gt;
Set variable to content of file.&lt;br /&gt;
 $a = gc IPremote.exe.config&lt;br /&gt;
=md5sum=&lt;br /&gt;
 [CmdletBinding(SupportsShouldProcess=$False)]&lt;br /&gt;
 param([string]$File)&lt;br /&gt;
 &lt;br /&gt;
 function Get-Checksum([string]$strInFile)&lt;br /&gt;
 {&lt;br /&gt;
 	    $objCrypto = New-Object &amp;quot;System.Security.Cryptography.MD5CryptoServiceProvider&amp;quot;&lt;br /&gt;
 	    $objFile = Get-Item $strInFile&lt;br /&gt;
 	    $objStream = $objFile.OpenRead()&lt;br /&gt;
 	    $objBytes = $objCrypto.ComputeHash($objStream)&lt;br /&gt;
 	    $strChecksum = &amp;quot;&amp;quot;&lt;br /&gt;
 	    foreach($objByte in $objBytes) {&lt;br /&gt;
 		        $strChecksum += $objByte.ToString(&#039;x2&#039;)&lt;br /&gt;
 	    }&lt;br /&gt;
 	    $objStream.Close() | Out-Null&lt;br /&gt;
 	    return $strChecksum&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $strFileToCheck = $File&lt;br /&gt;
 if(Test-Path($strFileToCheck)) {&lt;br /&gt;
 	    Get-Checksum $strFileToCheck&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get md5sum of all files.&lt;br /&gt;
 gci * | Get-FileHash -Algorithm md5 | ft Hash,@{n=&amp;quot;File&amp;quot;;e={(Get-item $_.Path).Name}}&lt;br /&gt;
&lt;br /&gt;
=tcp connect port=&lt;br /&gt;
netcat nc &lt;br /&gt;
 (New-Object Net.Sockets.TcpClient).Connect(&amp;quot;1.2.3.4&amp;quot;,80)&lt;br /&gt;
 $Tcp = New-Object Net.Sockets.TcpClient;$Tcp.BeginConnect(&amp;quot;1.2.3.4&amp;quot;, 80, $null, $null).AsyncWaitHandle.WaitOne(5000);$Tcp.Close()&lt;br /&gt;
 New-Object System.Net.Sockets.TCPClient -ArgumentList &amp;quot;1.2.3.4&amp;quot;,3389&lt;br /&gt;
 &lt;br /&gt;
 Test-NetConnection -ComputerName 192.168.122.1 -InformationLevel Detailed -port 23&lt;br /&gt;
Latest and greatest.&lt;br /&gt;
 $Computer=&amp;quot;127.0.0.1&amp;quot;; $Port=20010; $Socket = New-Object Net.Sockets.TcpClient;($Socket.BeginConnect($Computer, $Port, $Null, $Null)).AsyncWaitHandle.WaitOne(200);$Socket.Close();&lt;br /&gt;
&lt;br /&gt;
=What is using tcp connections=&lt;br /&gt;
 Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name=&amp;quot;ProcessName&amp;quot;;Expression={(Get-Process -PID ($_.Name.Split(&#039;,&#039;)[-1].Trim(&#039; &#039;))).Name}}, Group | Sort Count -Descending&lt;br /&gt;
=grep=&lt;br /&gt;
 gc IPremoteDebug.log | select-string &amp;quot;ip2date&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=List all processes. Grep for string=&lt;br /&gt;
 Get-Process -IncludeUserName |  findstr dkarlslatt&lt;br /&gt;
&lt;br /&gt;
=grep recursive=&lt;br /&gt;
 dir -Recurse | Select-String -pattern &amp;quot;192.168.19.102&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list processes=&lt;br /&gt;
 Get-Process&lt;br /&gt;
=kill processes from user=&lt;br /&gt;
 Get-Process -IncludeUserName | Where UserName -match joe | Stop-Process -force&lt;br /&gt;
&lt;br /&gt;
=restart processes=&lt;br /&gt;
 get-process -name powershellserver | stop-process&lt;br /&gt;
&lt;br /&gt;
=clear content=&lt;br /&gt;
 Clear-Content filename.doc&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 dir /a/s/b filename.txt&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 &#039;Get-ChildItem &amp;quot;c:\program files\&amp;quot; -rec | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
 &#039;Get-ChildItem . -recurse -force | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
=locate a file=&lt;br /&gt;
List recursive look for file with file name.&lt;br /&gt;
 Get-Childitem -Path C:\ -Include *filename* -Recurse -ErrorAction SilentlyContinue&lt;br /&gt;
&lt;br /&gt;
=dir filename size=&lt;br /&gt;
 &#039;get-childitem &amp;quot;C:\Program Files\directory&amp;quot; -rec | where {!$_.PSIsContainer} | select-object Name, Length&#039;&lt;br /&gt;
=find file with filename=&lt;br /&gt;
 Get-ChildItem -Path C:\ -Recurse -Filter *sshd_config* -ErrorAction SilentlyContinue&lt;br /&gt;
=find old files=&lt;br /&gt;
 Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}&lt;br /&gt;
&lt;br /&gt;
=find old files and remove them=&lt;br /&gt;
 $Folder = &amp;quot;G:\Downloads&amp;quot;&lt;br /&gt;
 #Delete files older than 6 months&lt;br /&gt;
 Get-ChildItem $Folder -Recurse -Force -ea 0 |&lt;br /&gt;
 ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-180)} |&lt;br /&gt;
  ForEach-Object {&lt;br /&gt;
    $_ | del -Force&lt;br /&gt;
    $_.FullName | Out-File C:\log\deletedlog.txt -Append&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=calculate size of directory=&lt;br /&gt;
Value returned is in Scientific notation format. Add number of zeroes to value. 1.00E-6 is 1000000.&lt;br /&gt;
 &#039;(gci &amp;quot;D:\data\db&amp;quot; | measure Length -s).Sum /1GB&#039;&lt;br /&gt;
=remove directory=&lt;br /&gt;
 rd /s /q $DIRECTORY&lt;br /&gt;
&lt;br /&gt;
=dir human readable file size=&lt;br /&gt;
function&lt;br /&gt;
 Function Format-FileSize() {&lt;br /&gt;
    Param ([int]$size)&lt;br /&gt;
    If     ($size -gt 1TB) {[string]::Format(&amp;quot;{0:0.00} TB&amp;quot;, $size / 1TB)}&lt;br /&gt;
    ElseIf ($size -gt 1GB) {[string]::Format(&amp;quot;{0:0.00} GB&amp;quot;, $size / 1GB)}&lt;br /&gt;
    ElseIf ($size -gt 1MB) {[string]::Format(&amp;quot;{0:0.00} MB&amp;quot;, $size / 1MB)}&lt;br /&gt;
    ElseIf ($size -gt 1KB) {[string]::Format(&amp;quot;{0:0.00} kB&amp;quot;, $size / 1KB)}&lt;br /&gt;
    ElseIf ($size -gt 0)   {[string]::Format(&amp;quot;{0:0.00} B&amp;quot;, $size)}&lt;br /&gt;
    Else                   {&amp;quot;&amp;quot;}&lt;br /&gt;
 }&lt;br /&gt;
command&lt;br /&gt;
 Get-ChildItem | Select-Object Name, @{Name=&amp;quot;Size&amp;quot;;Expression={Format-FileSize($_.Length)}}&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
decode base64 string&lt;br /&gt;
 [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(&amp;quot;YmxhaGJsYWg=&amp;quot;))&lt;br /&gt;
decode content of file.&lt;br /&gt;
 ssh ip_address_hostname &#039;$Text=(get-content &amp;quot;C:\Program Files\application\application.log&amp;quot;) ; $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) ; $EncodedText =[Convert]::ToBase64String($Bytes) ; $EncodedText&#039; | base64 -d&lt;br /&gt;
&lt;br /&gt;
=troubleshooting network=&lt;br /&gt;
 netstat -ano | findstr &amp;lt;ipremote-pid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=diff=&lt;br /&gt;
Compare two files.&lt;br /&gt;
 compare-object (get-content one.txt) (get-content two.txt)&lt;br /&gt;
=log file. Eventlog=&lt;br /&gt;
List event logs.&lt;br /&gt;
 Get-EventLog -list&lt;br /&gt;
List events in a log.&lt;br /&gt;
 Get-EventLog -LogName IPremoteLog&lt;br /&gt;
List events sins date.&lt;br /&gt;
 Get-EventLog -LogName Application -after &amp;quot;den 5 november 2014 10:00:00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get-winevent=&lt;br /&gt;
 # List event logs.&lt;br /&gt;
 Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}&lt;br /&gt;
 # Get latest rdp log entries.&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
 Get-Date&lt;br /&gt;
Date in iso format.&lt;br /&gt;
 Get-Date -UFormat &#039;+%Y-%m-%d %H:%M:%S.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
=full output=&lt;br /&gt;
Print all variable with full output&lt;br /&gt;
 &#039;(Get-Variable).StdOut&#039;&lt;br /&gt;
Send output to line like the following to get more output.&lt;br /&gt;
 | Ft -autosize | out-string -width 4096&lt;br /&gt;
&lt;br /&gt;
=restart services via samba=&lt;br /&gt;
install samba-common&lt;br /&gt;
 yum install samba-common&lt;br /&gt;
List services.&lt;br /&gt;
 net rpc service list -I IPADDRESS -U USERNAME%PASSWORD&lt;br /&gt;
Stop service.&lt;br /&gt;
 net rpc service start ipremote -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
Start service.&lt;br /&gt;
 net rpc service start ipeventwatcher -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
=Windows version=&lt;br /&gt;
 [System.Environment]::OSVersion.Version&lt;br /&gt;
 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx&lt;br /&gt;
 (Get-WmiObject -class Win32_OperatingSystem).Caption&lt;br /&gt;
Which architecture.&lt;br /&gt;
 gwmi win32_operatingsystem | select osarchitecture&lt;br /&gt;
&lt;br /&gt;
=set windows proxy=&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyEnable -Value 1&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyServer -Value proxy.int.redbridge.se&amp;quot;:&amp;quot;3128&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyOverride -Value &amp;quot;*.redbridge.se&amp;quot;&lt;br /&gt;
 Get-ItemProperty -Path &#039;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&#039; | findstr Proxy&lt;br /&gt;
&lt;br /&gt;
=Is proxy bypassed=&lt;br /&gt;
 $url = &amp;quot;http://10.127.12.10&amp;quot;;$webclient = New-Object System.Net.WebClient; $webclient.Proxy.IsBypassed($url)&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
 (Invoke-WebRequest http://localhost/Requests -UseBasicParsing).content&lt;br /&gt;
 curl -TimeoutSec 1 https://halfface.se&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 Invoke-WebRequest -Uri &amp;quot;http://1.2.3.4/file.txt&amp;quot; -OutFile &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=turn of index services when computer is not used=&lt;br /&gt;
In stopindexer enter the line&lt;br /&gt;
 net stop wsearch&lt;br /&gt;
In the startindexer enter the line&lt;br /&gt;
 net start wsearch&lt;br /&gt;
&lt;br /&gt;
=robocopy(backup)=&lt;br /&gt;
 robocopy C:\Users\user_name\Documents h:\backup\user_name /e /mir /np /log+:c:\temp\backup_log.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=number of cpus=&lt;br /&gt;
 Get-WmiObject -class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors, Addresswidth&lt;br /&gt;
&lt;br /&gt;
=cpu_usage=&lt;br /&gt;
cpu=&amp;lt;value&amp;gt;%&lt;br /&gt;
 $cpuUsage = Get-WmiObject Win32_Processor | Select-Object -ExpandProperty LoadPercentage ; $averageCpuUsage = ($cpuUsage | Measure-Object -Average).Average ; &amp;quot;cpu:{0:N0}%&amp;quot; -f $averageCpuUsage&lt;br /&gt;
 Get-Counter &#039;\Process(*)\% Processor Time&#039;| Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@{L=&#039;CPU&#039;;E={($_.Cookedvalue/100).toString(&#039;P&#039;)}} -AutoSize | Ft -autosize | out-string -width 4096&lt;br /&gt;
 Get-WmiObject win32_processor | select LoadPercentage  |fl&lt;br /&gt;
Stats and all processes. Including process running under svhost.&lt;br /&gt;
 $CpuInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Processor;$MemInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Memory;$SysInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_System;$PrcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfProc_Process;$SvcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_Service;$GeneralInfo = @{};$ProcOutput = @();$ServiceTable = @{};$GeneralInfo.Add(&amp;quot;_Name&amp;quot;, $env:COMPUTERNAME);$GeneralInfo.Add(&amp;quot;ProcessorQueueLength&amp;quot;, $SysInfo.ProcessorQueueLength);$GeneralInfo.Add(&amp;quot;PercentInterruptTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentInterruptTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;AvailableMBytes&amp;quot;, $MemInfo.AvailableMBytes);$GeneralInfo.Add(&amp;quot;PercentIdleTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentIdleTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;PercentPrivilegedTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentPrivilegedTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;TotalMemory&amp;quot;, (Get-WmiObject Win32_ComputerSystem | %{$_.TotalPhysicalMemory}));$GeneralInfo.Add(&amp;quot;PercentProcessorTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentProcessorTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CacheBytes&amp;quot;, $MemInfo.CacheBytes);$GeneralInfo.Add(&amp;quot;PercentUserTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentUserTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CommittedBytes&amp;quot;, $MemInfo.CommittedBytes);$GeneralInfo.GetEnumerator() | Sort-Object -Property Name | ForEach-Object {Write-Host -Object ($_.Name + &amp;quot;: &amp;quot;) -NoNewline; Write-Host -Object $_.Value};foreach($Service in $SvcInfo) {$ProcId = $Service.ProcessId.ToString();if($ProcId -ne &amp;quot;0&amp;quot;) {if($ServiceTable.ContainsKey($ProcId)) {$Value = $ServiceTable.Get_Item($ProcId);$Value += $Service.Name;$ServiceTable.Set_Item($ProcId, $Value);} else {$ServiceTable.Add($ProcId, @($Service.Name));}}}foreach($proc in $PrcInfo) {$Obj = New-Object psobject;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Process&amp;quot; -Value $proc.Name;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;CPU&amp;quot; -Value $proc.PercentProcessorTime;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Thread&amp;quot; -Value $proc.ThreadCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Handle&amp;quot; -Value $proc.HandleCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Services&amp;quot; -Value ($ServiceTable.Get_Item($proc.IDProcess.ToString()) -join &amp;quot;,&amp;quot;);$ProcOutput += $Obj;}$ProcOutput | ft -AutoSize&lt;br /&gt;
&lt;br /&gt;
=Sort processes by mem usage.=&lt;br /&gt;
 get-wmiobject WIN32_PROCESS | Sort-Object -Property ws -Descending|select -first 20|Select processname, @{Name=&amp;quot;Mem Usage(MB)&amp;quot;;Expression={[math]::round($_.ws / 1mb)}},@{Name=&amp;quot;ProcessID&amp;quot;;Expression={[String]$_.ProcessID}},@{Name=&amp;quot;UserID&amp;quot;;Expression={$_.getowner().user}} | Ft -autosize | out-string -width 4096&lt;br /&gt;
2&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, WorkingSet, CPU&lt;br /&gt;
3 Better formatting&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}, @{Name=&amp;quot;CPU(s)&amp;quot;;Expression={[math]::Round($_.CPU,2)}}&lt;br /&gt;
4 private memory&lt;br /&gt;
 Get-Process | Sort-Object -Property PrivateMemorySize -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;PrivateMemory(MB)&amp;quot;;Expression={[math]::Round($_.PrivateMemorySize/1MB,2)}}, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}&lt;br /&gt;
&lt;br /&gt;
=total memory in machine=&lt;br /&gt;
 Get-WMIObject -class win32_physicalmemory | Format-Table devicelocator, capacity -a&lt;br /&gt;
=how much memory is free in GB=&lt;br /&gt;
 $freemem = Get-WmiObject -Class Win32_OperatingSystem; echo ([math]::round(($freemem.FreePhysicalMemory / 1024 / 1024), 2))&lt;br /&gt;
=Memory usage, Total memory=&lt;br /&gt;
 $mem = Get-Counter &#039;\Memory\Available MBytes&#039;&lt;br /&gt;
 $usedMem = (Get-Counter &#039;\Memory\Committed Bytes&#039;).CounterSamples.CookedValue / 1MB&lt;br /&gt;
 $availableMem = $mem.CounterSamples.CookedValue&lt;br /&gt;
 $usedMem = [math]::round($usedMem, 2)&lt;br /&gt;
 $availableMem = [math]::round($availableMem, 2)&lt;br /&gt;
 [PSCustomObject]@{&lt;br /&gt;
     UsedMemoryMB = $usedMem&lt;br /&gt;
     AvailableMemoryMB = $availableMem&lt;br /&gt;
     TotalMemoryMB = (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1MB&lt;br /&gt;
 }&lt;br /&gt;
=memory usage as percent usage=&lt;br /&gt;
 $memory = Get-WmiObject Win32_OperatingSystem ; $totalMemory = $memory.TotalVisibleMemorySize ; $freeMemory = $memory.FreePhysicalMemory ; $usedMemory = $totalMemory - $freeMemory ; $memoryUsage = ($usedMemory / $totalMemory) * 100 ; &amp;quot;mem:{0:N0}%&amp;quot; -f $memoryUsage&lt;br /&gt;
&lt;br /&gt;
=disk usage=&lt;br /&gt;
 Get-PSDrive&lt;br /&gt;
=tail=&lt;br /&gt;
Get last 10 lines&lt;br /&gt;
 Get-Content [filename] | Select-Object -Last 10&lt;br /&gt;
tail -f&lt;br /&gt;
 Get-Content filename.log -Wait&lt;br /&gt;
Since PowerShell 3.&lt;br /&gt;
 gc -Tail 10 log.txt &lt;br /&gt;
=head=&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc log.txt | select -first 10&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc -TotalCount 10 log.txt&lt;br /&gt;
&lt;br /&gt;
=wc count lines=&lt;br /&gt;
 Get-Content C:\temp\ERRORLOG.5 | Measure-Object -line&lt;br /&gt;
=disable firewall=&lt;br /&gt;
From the command line&lt;br /&gt;
 netsh advfirewall set allprofiles state off&lt;br /&gt;
Using Powershell&lt;br /&gt;
  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False&lt;br /&gt;
=which firewall profiles are available=&lt;br /&gt;
 get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a&lt;br /&gt;
=which firewall profile is being used=&lt;br /&gt;
 get-NetConnectionProfile&lt;br /&gt;
&lt;br /&gt;
=which ports are open=&lt;br /&gt;
 Get-NetFirewallRule | Where { $_.Enabled -eq &amp;quot;True&amp;quot; -and $_.Direction -eq &amp;quot;Inbound&amp;quot; }&lt;br /&gt;
=which rules exist=&lt;br /&gt;
 Get-NetFirewallRule&lt;br /&gt;
=open port in firewall=&lt;br /&gt;
 netsh advfirewall firewall add rule name=&amp;quot;Open Port 80&amp;quot; dir=in action=allow protocol=TCP localport=80&lt;br /&gt;
&lt;br /&gt;
=firewall get more info about opening=&lt;br /&gt;
 get-netfirewallrule -DisplayName &amp;quot;Remote Desktop - User Mode (TCP-In)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=add administrative user=&lt;br /&gt;
Create user&lt;br /&gt;
 net user /add root [password]&lt;br /&gt;
Add user to local group.&lt;br /&gt;
 net localgroup administrators root /add&lt;br /&gt;
=list local groups=&lt;br /&gt;
 Get-LocalGroup&lt;br /&gt;
&lt;br /&gt;
=Which process is using port=&lt;br /&gt;
 # Which process is using port.&lt;br /&gt;
 netstat -nao | findstr :22&lt;br /&gt;
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1916&lt;br /&gt;
 # Which process has pid.&lt;br /&gt;
 get-process  | findstr 1916&lt;br /&gt;
 355      40    48752      56056   621     6,45   1916 PowerShellServer&lt;br /&gt;
 # which process has pid.&lt;br /&gt;
 tasklist | findstr 1916&lt;br /&gt;
 PowerShellServer.exe          1916 Services                   0     56.072 K&lt;br /&gt;
=which version is installed=&lt;br /&gt;
 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize&lt;br /&gt;
=list drives=&lt;br /&gt;
 get-psdrive&lt;br /&gt;
 wmic logicaldisk get caption&lt;br /&gt;
=svchost.exe what is happening=&lt;br /&gt;
 tasklist /svc /fi &amp;quot;IMAGENAME eq svchost.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=computer management=&lt;br /&gt;
Start computer management&lt;br /&gt;
 compmgmt.msc&lt;br /&gt;
=msinfo32=&lt;br /&gt;
Generate report.&lt;br /&gt;
 msinfo32&lt;br /&gt;
=licensing=&lt;br /&gt;
 Get-wmiobject SoftwareLicensingProduct -ComputerName localhost | Where-Object {$_.ApplicationID -eq &#039;55c92734-d682-4d71-983e-d6ec3f16059f&#039; -and $_.licensestatus -eq &#039;1&#039;} | Select name, description, @{Label=&#039;computer&#039;; Expression = {$_.PscomputerName}} | Format-List  name, description, computer&lt;br /&gt;
=add line inbetween lines=&lt;br /&gt;
 $filePath=&amp;quot;.\path_to_file&amp;quot;&lt;br /&gt;
 $textToAdd=&amp;quot;`nText to put in file&amp;quot;&lt;br /&gt;
 $fileContent = Get-Content $filePath&lt;br /&gt;
 $fileContent[$lineNumber+2] += $textToAdd&lt;br /&gt;
 $fileContent | Set-Content $filePath&lt;br /&gt;
=add line to end of file=&lt;br /&gt;
Add-Content c:\scripts\test.txt &amp;quot;The End&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get network settings=&lt;br /&gt;
Get among other things mtu&lt;br /&gt;
 Get-NetIPInterface&lt;br /&gt;
=start time of process=&lt;br /&gt;
List start time from processes found with Get-Process.&lt;br /&gt;
 get-process openvpn |select starttime&lt;br /&gt;
=list local users=&lt;br /&gt;
 Get-WmiObject -Class Win32_UserAccount -Filter  &amp;quot;LocalAccount=&#039;True&#039;&amp;quot;&lt;br /&gt;
=list logged in users=&lt;br /&gt;
 query user /server:$SERVER&lt;br /&gt;
&lt;br /&gt;
=list permissions for users=&lt;br /&gt;
 Accesschk &amp;quot;NKS01579\ipwinpsr&amp;quot; -accepteula -a *&lt;br /&gt;
&lt;br /&gt;
=create windows boot media under linux=&lt;br /&gt;
 woeusb  --target-filesystem NTFS --device /install/system/win10/Win10_1909_EnglishInternational_x64.iso  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=rename computer=&lt;br /&gt;
 $NewName=&amp;quot;alva&amp;quot;&lt;br /&gt;
 $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem&lt;br /&gt;
 $ComputerInfo.Rename($NewName)&lt;br /&gt;
 Restart-Computer&lt;br /&gt;
=startup dir=&lt;br /&gt;
The All Users Startup Folder is located at the following path:&lt;br /&gt;
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp&lt;br /&gt;
The Current User Startup Folder is located here:&lt;br /&gt;
 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;br /&gt;
=cmd scroll mode=&lt;br /&gt;
 Alt+Space -&amp;gt; E -&amp;gt; L&lt;br /&gt;
=enable rdp=&lt;br /&gt;
 Set-ItemProperty -Path &#039;HKLM:\System\CurrentControlSet\Control\Terminal Server&#039; -name &amp;quot;fDenyTSConnections&amp;quot; -value 0&lt;br /&gt;
 Enable-NetFirewallRule -DisplayGroup &amp;quot;Remote Desktop&amp;quot;&lt;br /&gt;
=rdp allow many sessions=&lt;br /&gt;
 https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip&lt;br /&gt;
&lt;br /&gt;
=disable defender=&lt;br /&gt;
 Set-MpPreference -DisableRealtimeMonitoring $true&lt;br /&gt;
 REG ADD &amp;quot;hklm\software\policies\microsoft\windows defender&amp;quot; /v DisableAntiSpyware /t REG_DWORD /d 1 /F&lt;br /&gt;
&lt;br /&gt;
=list scheduled tasks=&lt;br /&gt;
 &#039;Get-ScheduledTask | Ft -autosize | out-string -width 4096&#039;&lt;br /&gt;
=scheduled tasks enable disable=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive*&lt;br /&gt;
 TaskPath                                       TaskName                          State     &lt;br /&gt;
 --------                                       --------                          -----     &lt;br /&gt;
 \Microsoft\Windows\User Profile Service\       HiveUploadTask                    Disabled  &lt;br /&gt;
=Enable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Enable-ScheduledTask&lt;br /&gt;
=Disable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Disable-ScheduledTask&lt;br /&gt;
=Start scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Start-ScheduledTask&lt;br /&gt;
=Look at scheduled task=&lt;br /&gt;
 Get-ScheduledTask -TaskName Hive* | Format-List *&lt;br /&gt;
&lt;br /&gt;
=Get output from last scheduled command execution=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Get-ScheduledTaskInfo&lt;br /&gt;
=scheduled task add=&lt;br /&gt;
 $action = New-ScheduledTaskAction -Execute &#039;Powershell.exe&#039; -Argument &#039;-NoProfile -WindowStyle Hidden -command &amp;quot;net user /add special_user PassW0rd ; net localgroup administrators special_user /add&amp;quot;&#039;&lt;br /&gt;
 $trigger = New-ScheduledTaskTrigger -Daily -At 12am&lt;br /&gt;
 $task = Register-ScheduledTask -RunLevel &amp;quot;Highest&amp;quot; -TaskName &amp;quot;Add special_user&amp;quot; -Trigger $trigger -Action $action&lt;br /&gt;
 $task.Triggers.Repetition.Duration = &amp;quot;P1D&amp;quot; # Repeat for a duration of one day&lt;br /&gt;
 $task.Triggers.Repetition.Interval = &amp;quot;PT1H&amp;quot; # Repeat every 30 minutes, use PT1H for every hour&lt;br /&gt;
 $task.Principal = New-ScheduledTaskPrincipal -UserID &amp;quot;NT AUTHORITY\SYSTEM&amp;quot; -LogonType ServiceAccount -RunLevel Highest&lt;br /&gt;
 $task | Set-ScheduledTask&lt;br /&gt;
With script.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$action = New-ScheduledTaskAction -Execute &#039;powershell.exe&#039; -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -Command `&amp;quot;&amp;amp; &#039;C:\temp\troubleshooting.ps1&#039; &amp;gt;&amp;gt; &#039;C:\temp\troubleshooting.log&#039;`&amp;quot;&amp;quot;&lt;br /&gt;
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)&lt;br /&gt;
$principal = New-ScheduledTaskPrincipal -GroupId &amp;quot;BUILTIN\Administrators&amp;quot; -RunLevel Highest&lt;br /&gt;
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)&lt;br /&gt;
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings&lt;br /&gt;
Register-ScheduledTask -TaskName &#039;troubleshooting-abjorklund&#039; -InputObject $task -User &amp;quot;System&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=remove scheduled task=&lt;br /&gt;
 Unregister-ScheduledTask -TaskName Hive* -Confirm:$false&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 echo $null &amp;gt;&amp;gt; filename&lt;br /&gt;
=bitlocker read from linux=&lt;br /&gt;
 https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/&lt;br /&gt;
=runas(sudo)=&lt;br /&gt;
Run command as other user.&lt;br /&gt;
 runas /user:%computername%\root cmd&lt;br /&gt;
&lt;br /&gt;
=install sshd=&lt;br /&gt;
 On Windows 10 version 1803 and newer&lt;br /&gt;
 In Settings app, go to Apps &amp;gt; Apps &amp;amp; features &amp;gt; Manage optional features.&lt;br /&gt;
 Locate &amp;quot;OpenSSH server&amp;quot; feature, expand it, and select Install.&lt;br /&gt;
 Binaries are installed to %WINDIR%\System32\OpenSSH. Configuration file (sshd_config) and host keys are installed to %ProgramData%\ssh (only after the server is started for the first time).&lt;br /&gt;
&lt;br /&gt;
You may still want to use the following manual installation, if you want to install a newer version of OpenSSH than the one built into Windows 10.&lt;br /&gt;
 https://github.com/PowerShell/Win32-OpenSSH/releases (package OpenSSH-Win64.zip or OpenSSH-Win32.zip)&lt;br /&gt;
 As the Administrator, extract the package to C:\Program Files\OpenSSH&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1&lt;br /&gt;
Configuring SSH server&lt;br /&gt;
Allow incoming connections to SSH server in Windows Firewall:&lt;br /&gt;
 New-NetFirewallRule -Name sshd -DisplayName &#039;OpenSSH SSH Server&#039; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22&lt;br /&gt;
or go to Control Panel &amp;gt; System and Security &amp;gt; Windows Firewall1 &amp;gt; Advanced Settings &amp;gt; Inbound Rules and add a new rule for port 22.&lt;br /&gt;
Start the service and/or configure automatic start:&lt;br /&gt;
 start-service &amp;quot;OpenSSH SSH Server&amp;quot;&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
=installing built in ssh server to be able to login without password=&lt;br /&gt;
 # setup ssh C:\ProgramData\ssh\sshd_config&lt;br /&gt;
 SyslogFacility LOCAL0&lt;br /&gt;
 LogLevel Debug3&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 PubkeyAuthentication yes&lt;br /&gt;
 AuthorizedKeysFile      .ssh/authorized_keys&lt;br /&gt;
 # Put authorized_keys here.&lt;br /&gt;
 c:/ProgramData/ssh/administrators_authorized_keys&lt;br /&gt;
&lt;br /&gt;
=route=&lt;br /&gt;
==show routes==&lt;br /&gt;
Powershell&lt;br /&gt;
 Get-NetRoute&lt;br /&gt;
One interface index&lt;br /&gt;
 Get-NetRoute -InterfaceIndex 12&lt;br /&gt;
cmd&lt;br /&gt;
 route print -4&lt;br /&gt;
==Add route==&lt;br /&gt;
Powershell&lt;br /&gt;
 New-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1&lt;br /&gt;
cmd&lt;br /&gt;
 route -p ADD 10.255.240.0 MASK 255.255.255.0 172.30.103.4&lt;br /&gt;
 route -p add 0.0.0.0 mask 0.0.0.0 172.30.103.10&lt;br /&gt;
==Remove route==&lt;br /&gt;
 Remove-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1 -Confirm:$false&lt;br /&gt;
==Get routing information.==&lt;br /&gt;
 Find-NetRoute -RemoteIPAddress &amp;quot;10.0.0.34&amp;quot; | Select-Object ifIndex,DestinationPrefix,NextHop,RouteMetric -Last 1&lt;br /&gt;
&lt;br /&gt;
=last login on local machine=&lt;br /&gt;
 get-localuser | Select Name,LastLogon | sort LastLogon&lt;br /&gt;
=last logged in user and grep for user=&lt;br /&gt;
 Function Get-LoginEvents {&lt;br /&gt;
    Param (&lt;br /&gt;
        [Parameter(&lt;br /&gt;
            ValueFromPipeline = $true,&lt;br /&gt;
            ValueFromPipelineByPropertyName = $true&lt;br /&gt;
        )]&lt;br /&gt;
        [Alias(&#039;Name&#039;)]&lt;br /&gt;
        [string]$ComputerName = $env:ComputerName&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$StartTime&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$EndTime&lt;br /&gt;
    )&lt;br /&gt;
    Begin {&lt;br /&gt;
        enum LogonTypes {&lt;br /&gt;
            Interactive = 2&lt;br /&gt;
            Network = 3&lt;br /&gt;
            Batch = 4&lt;br /&gt;
            Service = 5&lt;br /&gt;
            Unlock = 7&lt;br /&gt;
            NetworkClearText = 8&lt;br /&gt;
            NewCredentials = 9&lt;br /&gt;
            RemoteInteractive = 10&lt;br /&gt;
            CachedInteractive = 11&lt;br /&gt;
        }&lt;br /&gt;
        $filterHt = @{&lt;br /&gt;
            LogName = &#039;Security&#039;&lt;br /&gt;
            ID = 4624&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;StartTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;StartTime&#039;] = $StartTime&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;EndTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;EndTime&#039;] = $EndTime&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Process {&lt;br /&gt;
        Get-WinEvent -MaxEvents 100 -ComputerName $ComputerName -FilterHashtable $filterHt | foreach-Object {&lt;br /&gt;
            [pscustomobject]@{&lt;br /&gt;
                ComputerName = $ComputerName&lt;br /&gt;
                UserAccount = $_.Properties.Value[5]&lt;br /&gt;
                UserDomain = $_.Properties.Value[6]&lt;br /&gt;
                LogonType = [LogonTypes]$_.Properties.Value[8]&lt;br /&gt;
                WorkstationName = $_.Properties.Value[11]&lt;br /&gt;
                SourceNetworkAddress = $_.Properties.Value[19]&lt;br /&gt;
                TimeStamp = $_.TimeCreated&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    End{}&lt;br /&gt;
 }&lt;br /&gt;
 Get-LoginEvents &amp;gt; login&lt;br /&gt;
 gc login | select-string dabuzaid -Context 5&lt;br /&gt;
&lt;br /&gt;
=powersave disable=&lt;br /&gt;
 powercfg /x -hibernate-timeout-ac 0&lt;br /&gt;
 powercfg /x -hibernate-timeout-dc 0&lt;br /&gt;
 powercfg /x -disk-timeout-ac 0&lt;br /&gt;
 powercfg /x -disk-timeout-dc 0&lt;br /&gt;
 powercfg /x -monitor-timeout-ac 0&lt;br /&gt;
 powercfg /x -monitor-timeout-dc 0&lt;br /&gt;
 Powercfg /x -standby-timeout-ac 0&lt;br /&gt;
 powercfg /x -standby-timeout-dc 0&lt;br /&gt;
=hostname=&lt;br /&gt;
Get fqdn&lt;br /&gt;
 [System.Net.Dns]::GetHostByName($env:computerName).HostName&lt;br /&gt;
 &amp;quot;$env:computername.$env:userdnsdomain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=resolve hostname=&lt;br /&gt;
 Resolve-DnsName -server 8.8.8.8 smtp.google.com | Format-Table Name, IPAddress -HideTableHeaders&lt;br /&gt;
&lt;br /&gt;
=clear screen reset=&lt;br /&gt;
 cls&lt;br /&gt;
=top(-wikipedia)=&lt;br /&gt;
 While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}&lt;br /&gt;
&lt;br /&gt;
=get users sid=&lt;br /&gt;
 wmic useraccount where name=&#039;dkarlslatt&#039; get sid&lt;br /&gt;
=traceroute=&lt;br /&gt;
 Test-NetConnection &amp;quot;IPaddress/HOSTaname&amp;quot; -TraceRoute&lt;br /&gt;
=name of ad servers=&lt;br /&gt;
 nslookup -type=srv _ldap._tcp.dc._msdcs.${AD}&lt;br /&gt;
=manage ad users and computers=&lt;br /&gt;
 dsa.msc&lt;br /&gt;
&lt;br /&gt;
=iis logfiles=&lt;br /&gt;
Read last lines from iis log.&lt;br /&gt;
 gc -Tail 10 &amp;quot;C:\InetPub\Logs\LogFiles\W3SVC1\u_ex$(Get-Date -F &#039;yyMMdd&#039;).log&amp;quot;&lt;br /&gt;
=join domain=&lt;br /&gt;
 netdom join %computername% /domain:your.ADDomainToJoin.net /UserD:LoginWithJoinPermissions /PasswordD:%password%&lt;br /&gt;
=windows update info=&lt;br /&gt;
 wmic qfe list&lt;br /&gt;
=patch=&lt;br /&gt;
Update release area Windows.&lt;br /&gt;
 servicepack.exe -s:z:\w2k3&lt;br /&gt;
=get date in iso format=&lt;br /&gt;
 Get-Date (Get-Date) -UFormat &#039;+%Y-%m-%d %H:%M:%S&#039;&lt;br /&gt;
 (Get-Date).ToString(&amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=format-list(fl)=&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
=whoami=&lt;br /&gt;
 echo &amp;quot;$env:UserDomain $env:UserName $env:ComputerName&amp;quot;&lt;br /&gt;
=group=&lt;br /&gt;
 (New-Object System.DirectoryServices.DirectorySearcher(&amp;quot;(&amp;amp;(objectCategory=User)(samAccountName=$($env:username)))&amp;quot;)).FindOne().GetDirectoryEntry().memberOf&lt;br /&gt;
=unzip=&lt;br /&gt;
 Expand-Archive C:\a.zip&lt;br /&gt;
=take ownership and remove=&lt;br /&gt;
 Remove-Item -Recurse -Force &amp;lt;directory&amp;gt;&lt;br /&gt;
 takeown /a /r /d Y /f &amp;lt;directory&amp;gt;&lt;br /&gt;
=print info to remove directories=&lt;br /&gt;
Prepare with two lists. One with users who are suitable to have their directories removed. And one list with the output from dir in c:\users.&lt;br /&gt;
 cat uc-remote01_login.txt | while read WIN_USER WIN_DATE ; do echo &#039;#&#039; $WIN_USER $WIN_DATE ; DIRECTORY=$(grep &amp;quot; $WIN_USER&amp;quot; uc-remote01_users.txt) ; if [ &amp;quot;${DIRECTORY}&amp;quot; ] ; then echo Remove-Item -Recurse -Force $WIN_USER \; takeown /a /r /d Y /f $WIN_USER \; Remove-Item -Recurse -Force $WIN_USER ; fi ; done&lt;br /&gt;
=list environments variables=&lt;br /&gt;
 dir env:&lt;br /&gt;
=list shares=&lt;br /&gt;
 Get-SmbShare&lt;br /&gt;
=Stop grouping applications on task bar=&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&amp;quot; -Name &amp;quot;TaskbarGlomLevel&amp;quot; -Value 2&lt;br /&gt;
 Stop-Process -Name explorer -Force&lt;br /&gt;
 Start-Process explorer&lt;br /&gt;
=autohide taskbar=&lt;br /&gt;
 $p=&#039;HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3&#039;;$v=(Get-ItemProperty -Path $p).Settings;$v[8]=($v[8] -bor 1);Set-ItemProperty -Path $p -Name Settings -Value $v;Stop-Process -f -ProcessName explorer&lt;br /&gt;
&lt;br /&gt;
=install cmdlet=&lt;br /&gt;
  install-module sqlserver&lt;br /&gt;
=install chocolate=&lt;br /&gt;
 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))&lt;br /&gt;
=manage jobs=&lt;br /&gt;
Start job&lt;br /&gt;
 Start-Job -FilePath C:\temp\cronjob.ps1&lt;br /&gt;
List jobs&lt;br /&gt;
 Get-Job&lt;br /&gt;
Stop jobs&lt;br /&gt;
 Stop-Job -Id &amp;lt;JobID&amp;gt;&lt;br /&gt;
 Stop-Job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
Delete Jobs&lt;br /&gt;
 Remove-job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=timezone=&lt;br /&gt;
List timezones&lt;br /&gt;
 Get-TimeZone -ListAvailable | grep -A10 -B10 Stockholm&lt;br /&gt;
Set Stockholm time.&lt;br /&gt;
 Set-TimeZone -Name &amp;quot;W. Europe Standard Time&amp;quot;&lt;br /&gt;
=locale=&lt;br /&gt;
 $env:LANG = &#039;en-US&#039;&lt;br /&gt;
=path variable=&lt;br /&gt;
 echo $env:path&lt;br /&gt;
=tweak windows=&lt;br /&gt;
 https://winaerotweaker.com/&lt;br /&gt;
=autologin=&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v AutoAdminLogon /t REG_SZ /d 1 /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultUserName /t REG_SZ /d &amp;quot;name@outlook.com&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultPassword /t REG_SZ /d &amp;quot;YourPassword123&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultDomainName /t REG_SZ /d &amp;quot;MicrosoftAccount&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v ForceAutoLogon /t REG_SZ /d 1 /f&lt;br /&gt;
=expand disk=&lt;br /&gt;
 diskmgmt.msc&lt;br /&gt;
=create user from existing=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Define parameters for the new user&lt;br /&gt;
$newUser = @{&lt;br /&gt;
    Name              = &amp;quot;&amp;lt;Full Name&amp;gt;&amp;quot;&lt;br /&gt;
    GivenName         = &amp;quot;&amp;lt;First&amp;gt;&amp;quot;&lt;br /&gt;
    Surname           = &amp;quot;&amp;lt;LastName&amp;gt;&amp;quot;&lt;br /&gt;
    SamAccountName    = &amp;quot;andreas.stenudd&amp;quot;&lt;br /&gt;
    UserPrincipalName = &amp;quot;andreas.stenudd@xpdo.xpeedio.local&amp;quot;&lt;br /&gt;
    AccountPassword   = (ConvertTo-SecureString &amp;quot;&amp;lt;password&amp;gt;&amp;quot; -AsPlainText -Force)&lt;br /&gt;
    Enabled           = $true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Specify the existing user to copy from (replace with actual SAM account name)&lt;br /&gt;
$templateUserSam = &amp;quot;andreas.bjorklund&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the template user&#039;s properties&lt;br /&gt;
$templateUser = Get-ADUser -Identity $templateUserSam -Properties *&lt;br /&gt;
&lt;br /&gt;
# Create the new user, copying the OU (Path) from the template user&lt;br /&gt;
$newUserParams = $newUser.Clone()&lt;br /&gt;
$newUserParams.Path = $templateUser.DistinguishedName -replace &#039;^CN=.*?,&#039;, &#039;&#039;  # Extract OU from template user&#039;s DN&lt;br /&gt;
&lt;br /&gt;
# Create the new user&lt;br /&gt;
New-ADUser @newUserParams&lt;br /&gt;
&lt;br /&gt;
# Copy group memberships from the template user&lt;br /&gt;
$templateUser.MemberOf | ForEach-Object {&lt;br /&gt;
    Add-ADGroupMember -Identity $_ -Members $newUser.SamAccountName&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;User $($newUser.Name) created successfully with group memberships copied from $templateUserSam.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=mount iso=&lt;br /&gt;
 Mount-DiskImage -ImagePath  &#039;z:\temp\torrentz\The.Sims.4.Enchanted.by.Nature-RUNE\rune-the.sims.4.enchanted.by.nature.iso&#039;&lt;br /&gt;
=list disks including devicename=&lt;br /&gt;
 mountvol&lt;br /&gt;
=list shadowcopy=&lt;br /&gt;
 Get-WmiObject -Class Win32_ShadowCopy&lt;br /&gt;
=list dedup=&lt;br /&gt;
 Get-Dedupstatus&lt;br /&gt;
==dedup garbagecollection==&lt;br /&gt;
 Start-DedupJob -volume f: -type garbagecollection&lt;br /&gt;
=keyboard=&lt;br /&gt;
List keyboards and lang.&lt;br /&gt;
 Get-WinUserLanguageList&lt;br /&gt;
Install English menus and Swedish keyboard.&#039;&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 $LangList.Add(&amp;quot;en-SE&amp;quot;)&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
Uninstall keyboards&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 # Remove en-US entirely&lt;br /&gt;
 $LangList = $LangList | Where-Object { $_.LanguageTag -ne &amp;quot;en-GB&amp;quot; }&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
=curl/vim=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$binPath = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
if (-not (Test-Path $binPath -PathType Container)) {&lt;br /&gt;
  New-Item -ItemType Directory -Path $binPath&lt;br /&gt;
  Write-Host &amp;quot;Created $binPath&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
cd C:\Users\$env:USERNAME\bin&lt;br /&gt;
curl https://halfface.se/windows/windows.zip -o windows.zip&lt;br /&gt;
Expand-Archive -Path windows.zip -DestinationPath . -Force&lt;br /&gt;
Remove-Item Alias:curl&lt;br /&gt;
if ($env:PATH -notlike &amp;quot;*;C:\Users\$env:USERNAME\bin*&amp;quot;) {&lt;br /&gt;
  $env:PATH += &amp;quot;;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make above permanent.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
# Add to user PATH only if it&#039;s not already there&lt;br /&gt;
$currentPath = [Environment]::GetEnvironmentVariable(&amp;quot;Path&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
if ($currentPath -notlike &amp;quot;*$target*&amp;quot;) {&lt;br /&gt;
  [Environment]::SetEnvironmentVariable(&amp;quot;Path&amp;quot;, $currentPath + &amp;quot;;$target&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Replace 1234 with your actual PID&lt;br /&gt;
$pid = 1234&lt;br /&gt;
&lt;br /&gt;
# Method 1: Using Get-Process and Get-Service&lt;br /&gt;
$process = Get-Process -Id $pid -ErrorAction SilentlyContinue&lt;br /&gt;
if ($process) {&lt;br /&gt;
    $serviceName = (Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq $pid }).Name&lt;br /&gt;
    if ($serviceName) {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid belongs to service: $serviceName&amp;quot;&lt;br /&gt;
        Get-Service -Name $serviceName&lt;br /&gt;
    } else {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid does NOT belong to any service&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    Write-Host &amp;quot;Process with PID $pid not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
 Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq 1234 } | Select-Object Name, DisplayName, State, StartMode, PathName&lt;br /&gt;
=dmidecode/lshw/inventory=&lt;br /&gt;
 Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture, CsTotalPhysicalMemory, OsNumberOfProcesses&lt;br /&gt;
=scheduled task=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get detailed task information&lt;br /&gt;
$task = Get-ScheduledTask -TaskName &amp;quot;Hive*&amp;quot;&lt;br /&gt;
$taskInfo = Get-ScheduledTaskInfo -InputObject $task&lt;br /&gt;
&lt;br /&gt;
# Display key information&lt;br /&gt;
Write-Host &amp;quot;Task Name: $($task.TaskName)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task Path: $($task.TaskPath)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Run Time: $($taskInfo.LastRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Result: 0x$($taskInfo.LastTaskResult.ToString(&#039;X8&#039;))&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Next Run Time: $($taskInfo.NextRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Number of Missed Runs: $($taskInfo.NumberOfMissedRuns)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task State: $($task.State)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the exit code meaning&lt;br /&gt;
$exitCode = $taskInfo.LastTaskResult&lt;br /&gt;
switch ($exitCode) {&lt;br /&gt;
    0 { Write-Host &amp;quot;Exit Code: 0x0 - SUCCESS&amp;quot; -ForegroundColor Green }&lt;br /&gt;
    1 { Write-Host &amp;quot;Exit Code: 0x1 - INVALID FUNCTION&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    2 { Write-Host &amp;quot;Exit Code: 0x2 - FILE NOT FOUND&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    10 { Write-Host &amp;quot;Exit Code: 0xA - INCORRECT ENVIRONMENT&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    267008 { Write-Host &amp;quot;Exit Code: 0x41300 - SCHEDULED TASK STOPPED&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    3221225786 { Write-Host &amp;quot;Exit Code: 0xC000013A - APPLICATION TERMINATED BY CTRL+C&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    default { Write-Host &amp;quot;Exit Code: 0x$($exitCode.ToString(&#039;X8&#039;))&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=disable screen saver=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaveActive -Value 0&lt;br /&gt;
Optional: Also disable password protection on resume (if screen saver were enabled)&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaverIsSecure -Value 0&lt;br /&gt;
=empty recyclebin=&lt;br /&gt;
 (New-Object -ComObject Shell.Application).NameSpace(0x0a).Items() | ForEach-Object { $_.InvokeVerb(&#039;delete&#039;) }&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16570</id>
		<title>Postgresql</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16570"/>
		<updated>2026-03-09T14:37:06Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* sleep 2s */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=psql=&lt;br /&gt;
==run command from cli==&lt;br /&gt;
 psql -c &amp;quot;SELECT datname FROM pg_database;&amp;quot;&lt;br /&gt;
==Connect to remote database:==&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt; &amp;amp;&amp;amp; psql --host=&amp;lt;host&amp;gt; --port=5432 --username=&amp;lt;username&amp;gt; --no-password postgres&lt;br /&gt;
With variables&lt;br /&gt;
 export PGHOST=&amp;lt;database_host&amp;gt;&lt;br /&gt;
 export PGPORT=5432&lt;br /&gt;
 export PGUSER=&amp;lt;user&amp;gt;&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt;&lt;br /&gt;
 export PGDATABASE=&amp;lt;database&amp;gt;&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
==get what you ask for and less cruft==&lt;br /&gt;
 psql -A -t -c &amp;quot;SELECT * FROM pg_replication_slots;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=install psql=&lt;br /&gt;
 apt-get install freetds-bin&lt;br /&gt;
&lt;br /&gt;
=List databases=&lt;br /&gt;
==Alternative 1==&lt;br /&gt;
 SELECT datname FROM pg_database;&lt;br /&gt;
==Alternative 2==&lt;br /&gt;
gives more information too.&lt;br /&gt;
 \l&lt;br /&gt;
     Name     |    Owner    | Encoding |   Collate   |    Ctype    |   Access privileges   &lt;br /&gt;
 -------------+-------------+----------+-------------+-------------+-----------------------&lt;br /&gt;
  indata_mdb  | uc_etl_prod | UTF8     | sv_SE.UTF-8 | sv_SE.UTF-8 |&lt;br /&gt;
 ...&lt;br /&gt;
==Alternative 3==&lt;br /&gt;
 \l+&lt;br /&gt;
&lt;br /&gt;
=select database=&lt;br /&gt;
 \c testdb;&lt;br /&gt;
=show tables=&lt;br /&gt;
List all tables in all schemas&lt;br /&gt;
 \dt *.*&lt;br /&gt;
list tables in current schema&lt;br /&gt;
 \dt&lt;br /&gt;
Or from command line.&lt;br /&gt;
 su - postgres -c &amp;quot;psql -c \&amp;quot;\\dt \&amp;quot; database&amp;quot;&lt;br /&gt;
=list schemas=&lt;br /&gt;
 \dn&lt;br /&gt;
=list schemas with permissions=&lt;br /&gt;
 \dn+&lt;br /&gt;
&lt;br /&gt;
=schema/search_path=&lt;br /&gt;
List current schema&lt;br /&gt;
 SHOW search_path;&lt;br /&gt;
Change search path.&lt;br /&gt;
 SET search_path TO myschema, public;&lt;br /&gt;
&lt;br /&gt;
=describe table=&lt;br /&gt;
 \d table;&lt;br /&gt;
 \d dc_store.document;&lt;br /&gt;
&lt;br /&gt;
=Change view. One line per attribute(\G in mysql)=&lt;br /&gt;
 \x on&lt;br /&gt;
 psql -x -c &amp;quot;select * from blabla limit 1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=exit/quit=&lt;br /&gt;
 \q&lt;br /&gt;
&lt;br /&gt;
=update=&lt;br /&gt;
 UPDATE users SET admin = 1 WHERE user_id = 14002;&lt;br /&gt;
=Create user=&lt;br /&gt;
 CREATE USER username WITH PASSWORD &#039;MYPASS&#039;;&lt;br /&gt;
=Create database=&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
&lt;br /&gt;
=create table=&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
=Add row to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 VALUES (&#039;A1234&#039;, &#039;Test Item&#039;, 101, &#039;2025-01-08&#039;, &#039;example&#039;, &#039;02:30&#039;);&lt;br /&gt;
=add random rows to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 SELECT&lt;br /&gt;
     &#039;A&#039; || LPAD(num::text, 4, &#039;0&#039;) AS code,         -- Generate code like A0001, A0002, ...&lt;br /&gt;
     &#039;Test Item &#039; || num::text AS title,             -- Title with the number&lt;br /&gt;
     (num % 10) + 1 AS did,                          -- Random did value (1 to 10)&lt;br /&gt;
     CURRENT_DATE - (num % 30) AS date_prod,         -- Random date in the last 30 days&lt;br /&gt;
     &#039;example&#039; AS kind,                              -- Example kind&lt;br /&gt;
     (num % 5 || &#039; hours&#039;)::interval AS len          -- Convert the generated text to interval&lt;br /&gt;
 FROM generate_series(1, 100) AS s(num);&lt;br /&gt;
&lt;br /&gt;
=create readaccess role and grant user access=&lt;br /&gt;
 CREATE ROLE readaccess;&lt;br /&gt;
 GRANT CONNECT ON DATABASE &amp;lt;database&amp;gt; TO readaccess;&lt;br /&gt;
 GRANT USAGE ON SCHEMA public TO readaccess;&lt;br /&gt;
 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readaccess;&lt;br /&gt;
 CREATE USER &amp;lt;user&amp;gt; WITH PASSWORD &#039;&amp;lt;password&amp;gt;&#039;;&lt;br /&gt;
 GRANT readaccess TO &amp;lt;user&amp;gt;;&lt;br /&gt;
=grant access to a role for a user=&lt;br /&gt;
 GRANT ROLE &amp;lt;role_name&amp;gt; TO USER &amp;lt;user_name&amp;gt;;&lt;br /&gt;
 GRANT &amp;lt;role_name&amp;gt; TO &amp;lt;user_name&amp;gt;;&lt;br /&gt;
=grant all permissions to a user on a table=&lt;br /&gt;
 GRANT ALL PRIVILEGES ON TABLE table_name TO username;&lt;br /&gt;
&lt;br /&gt;
=Delete database=&lt;br /&gt;
 DROP DATABASE dbname;&lt;br /&gt;
==delete database from cli==&lt;br /&gt;
 dropdb $dbname&lt;br /&gt;
==delete table==&lt;br /&gt;
 DROP TABLE IF EXISTS table_name;&lt;br /&gt;
&lt;br /&gt;
=Import a database=&lt;br /&gt;
 psql username  -h hostname -d dbname &amp;lt; dump.sql&lt;br /&gt;
=change password=&lt;br /&gt;
 ALTER USER user_name WITH PASSWORD &#039;new_password&#039;;&lt;br /&gt;
&lt;br /&gt;
=Set super privileges=&lt;br /&gt;
 ALTER USER username WITH SUPERUSER;&lt;br /&gt;
=Deleting user=&lt;br /&gt;
 DROP USER nomusr&lt;br /&gt;
=Getting help=&lt;br /&gt;
 \? or \h&lt;br /&gt;
=size of database=&lt;br /&gt;
 SELECT pg_size_pretty( pg_database_size(&#039;database&#039;) );&lt;br /&gt;
=size of table=&lt;br /&gt;
 SELECT pg_size_pretty( pg_total_relation_size(&#039;tablename&#039;) );&lt;br /&gt;
=clean archives older than 2 days=&lt;br /&gt;
 su postgres -c &amp;quot;/usr/pgsql-9.5/bin/pg_archivecleanup /var/lib/pgsql/9.5/archivedir/ $(basename $(find /var/lib/pgsql/9.5/archivedir/ -ctime +2 | tail -n 1))&amp;quot;&lt;br /&gt;
=backup=&lt;br /&gt;
# Backup database.&lt;br /&gt;
 DATABASE=very_nice_database ; pg_dump -Fc -Z 2 --file=/tmp/${DATABASE}.$(date &#039;+%Y%m%d&#039;).dump ${DATABASE}&lt;br /&gt;
# Is database in backup&lt;br /&gt;
 SELECT pg_is_in_backup();&lt;br /&gt;
&lt;br /&gt;
=restore=&lt;br /&gt;
Look at permissions on database&lt;br /&gt;
 psql -c &amp;quot;\l&amp;quot;&lt;br /&gt;
 export DATABASE=very_nice_database&lt;br /&gt;
Drop database connectipons.&lt;br /&gt;
 psql -c &amp;quot;SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &#039;${DATABASE}&#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&amp;quot;&lt;br /&gt;
Drop database.&lt;br /&gt;
 dropdb ${DATABASE}&lt;br /&gt;
Create database&lt;br /&gt;
 createdb -T template0 ${DATABASE}&lt;br /&gt;
Restore database&lt;br /&gt;
 pg_restore -j8 -d ${DATABASE} --no-privileges --no-owner --clean --if-exists --exit-on-error /tmp/${DATABASE}.$(date &#039;+%Y%m%d&#039; --date &amp;quot;-4 days&amp;quot;).dump&lt;br /&gt;
# Set correct permissions.&lt;br /&gt;
 psql -c &amp;quot;ALTER DATABASE ${DATABASE} OWNER TO ${OWNER};&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bookmarks=&lt;br /&gt;
https://wiki.postgresql.org/wiki/Disk_Usage&lt;br /&gt;
=bloat=&lt;br /&gt;
 Every record that has been deleted but is still taking some space is called a dead tuple. &lt;br /&gt;
 Once there is no dependency on those dead tuples with the already running transactions, the dead tuples are no longer needed. &lt;br /&gt;
 Thus, PostgreSQL runs VACUUM on such Tables. VACUUM reclaims the storage occupied by these dead tuples. &lt;br /&gt;
 The space occupied by these dead tuples may be referred to as Bloat. &lt;br /&gt;
 VACUUM scans the pages for dead tuples and marks them to the freespace map (FSM).&lt;br /&gt;
Query for bloat(which looks bloated... :-)&lt;br /&gt;
 SELECT&lt;br /&gt;
  current_database(), schemaname, tablename, /*reltuples::bigint, relpages::bigint, otta,*/&lt;br /&gt;
  ROUND((CASE WHEN otta=0 THEN 0.0 ELSE sml.relpages::FLOAT/otta END)::NUMERIC,1) AS tbloat,&lt;br /&gt;
  CASE WHEN relpages &amp;lt; otta THEN 0 ELSE bs*(sml.relpages-otta)::BIGINT END AS wastedbytes,&lt;br /&gt;
  iname, /*ituples::bigint, ipages::bigint, iotta,*/&lt;br /&gt;
  ROUND((CASE WHEN iotta=0 OR ipages=0 THEN 0.0 ELSE ipages::FLOAT/iotta END)::NUMERIC,1) AS ibloat,&lt;br /&gt;
  CASE WHEN ipages &amp;lt; iotta THEN 0 ELSE bs*(ipages-iotta) END AS wastedibytes&lt;br /&gt;
 FROM (&lt;br /&gt;
  SELECT&lt;br /&gt;
    schemaname, tablename, cc.reltuples, cc.relpages, bs,&lt;br /&gt;
    CEIL((cc.reltuples*((datahdr+ma-&lt;br /&gt;
      (CASE WHEN datahdr%ma=0 THEN ma ELSE datahdr%ma END))+nullhdr2+4))/(bs-20::FLOAT)) AS otta,&lt;br /&gt;
    COALESCE(c2.relname,&#039;?&#039;) AS iname, COALESCE(c2.reltuples,0) AS ituples, COALESCE(c2.relpages,0) AS ipages,&lt;br /&gt;
    COALESCE(CEIL((c2.reltuples*(datahdr-12))/(bs-20::FLOAT)),0) AS iotta -- very rough approximation, assumes all cols&lt;br /&gt;
  FROM (&lt;br /&gt;
    SELECT&lt;br /&gt;
      ma,bs,schemaname,tablename,&lt;br /&gt;
      (datawidth+(hdr+ma-(CASE WHEN hdr%ma=0 THEN ma ELSE hdr%ma END)))::NUMERIC AS datahdr,&lt;br /&gt;
      (maxfracsum*(nullhdr+ma-(CASE WHEN nullhdr%ma=0 THEN ma ELSE nullhdr%ma END))) AS nullhdr2&lt;br /&gt;
    FROM (&lt;br /&gt;
      SELECT&lt;br /&gt;
        schemaname, tablename, hdr, ma, bs,&lt;br /&gt;
        SUM((1-null_frac)*avg_width) AS datawidth,&lt;br /&gt;
        MAX(null_frac) AS maxfracsum,&lt;br /&gt;
        hdr+(&lt;br /&gt;
          SELECT 1+COUNT(*)/8&lt;br /&gt;
          FROM pg_stats s2&lt;br /&gt;
          WHERE null_frac&amp;lt;&amp;gt;0 AND s2.schemaname = s.schemaname AND s2.tablename = s.tablename&lt;br /&gt;
        ) AS nullhdr&lt;br /&gt;
      FROM pg_stats s, (&lt;br /&gt;
        SELECT&lt;br /&gt;
          (SELECT current_setting(&#039;block_size&#039;)::NUMERIC) AS bs,&lt;br /&gt;
          CASE WHEN SUBSTRING(v,12,3) IN (&#039;8.0&#039;,&#039;8.1&#039;,&#039;8.2&#039;) THEN 27 ELSE 23 END AS hdr,&lt;br /&gt;
          CASE WHEN v ~ &#039;mingw32&#039; THEN 8 ELSE 4 END AS ma&lt;br /&gt;
        FROM (SELECT version() AS v) AS foo&lt;br /&gt;
      ) AS constants&lt;br /&gt;
      GROUP BY 1,2,3,4,5&lt;br /&gt;
    ) AS foo&lt;br /&gt;
  ) AS rs&lt;br /&gt;
  JOIN pg_class cc ON cc.relname = rs.tablename&lt;br /&gt;
  JOIN pg_namespace nn ON cc.relnamespace = nn.oid AND nn.nspname = rs.schemaname AND nn.nspname &amp;lt;&amp;gt; &#039;information_schema&#039;&lt;br /&gt;
  LEFT JOIN pg_index i ON indrelid = cc.oid&lt;br /&gt;
  LEFT JOIN pg_class c2 ON c2.oid = i.indexrelid&lt;br /&gt;
 ) AS sml&lt;br /&gt;
 ORDER BY wastedbytes DESC&lt;br /&gt;
&lt;br /&gt;
==clear space vacuum==&lt;br /&gt;
 \c database&lt;br /&gt;
 vacuum;&lt;br /&gt;
if that doesn&#039;t work do:&lt;br /&gt;
 vacuum: freeze; or vacuum full;&lt;br /&gt;
==vacuum table==&lt;br /&gt;
Select database&lt;br /&gt;
 \c ucc&lt;br /&gt;
select role&lt;br /&gt;
 SET search_path TO myschema, kdl;&lt;br /&gt;
Vacuum table&lt;br /&gt;
 vacuum full taxation_initial_data;&lt;br /&gt;
&lt;br /&gt;
=autovacuum=&lt;br /&gt;
Is autovacuum enabled.&lt;br /&gt;
 SHOW autovacuum;&lt;br /&gt;
&lt;br /&gt;
=count table=&lt;br /&gt;
 SELECT COUNT(*) FROM TABLE_NAME;&lt;br /&gt;
If you don&#039;t need an exact count, the current statistic from the catalog table pg_class might be good enough and is much faster to retrieve for big tables.&lt;br /&gt;
 SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = &#039;table_name&#039;;&lt;br /&gt;
=number of connections=&lt;br /&gt;
 su - postgres -c &amp;quot;psql -t -c &#039;SELECT * FROM pg_stat_activity;&#039;&amp;quot; | wc -l&lt;br /&gt;
&lt;br /&gt;
=drop connections=&lt;br /&gt;
 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &#039;dbname&#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&lt;br /&gt;
&lt;br /&gt;
=postgres configuration=&lt;br /&gt;
 postgresql.conf&lt;br /&gt;
=pg_hba.conf=&lt;br /&gt;
Connections are configured in this file.&lt;br /&gt;
=reread configuration=&lt;br /&gt;
 su - postgres&lt;br /&gt;
 /usr/bin/pg_ctl reload&lt;br /&gt;
From psql&lt;br /&gt;
 SELECT pg_reload_conf();&lt;br /&gt;
&lt;br /&gt;
=list prepared transactions=&lt;br /&gt;
 select * from pg_prepared_xacts where database=&#039;cti_batch&#039;;&lt;br /&gt;
&lt;br /&gt;
=remove prepared connecion=&lt;br /&gt;
 ROLLBACK PREPARED &#039;131077_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7nTE=_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7pAAAAAIAAAAA&#039;;&lt;br /&gt;
=pager off=&lt;br /&gt;
 \pset pager off&lt;br /&gt;
=pager less=&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
&lt;br /&gt;
=pager=&lt;br /&gt;
 export PAGER=less&lt;br /&gt;
=config file=&lt;br /&gt;
.my.cnf&lt;br /&gt;
 .pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
 hostname:port:*:username:password&lt;br /&gt;
&lt;br /&gt;
=Permissions in postgres=&lt;br /&gt;
 pg_hba.conf  local file         which is a local file that defines which sources for login credentials to use. (ldap, local users... to me it feels like nsswitch.conf)&lt;br /&gt;
 owner        database           of database. The right to modify or destroy an object is always the privilege of the owner only.&lt;br /&gt;
 role:s       separate database  are like user and groups combined. One role can inherit another. Different attributes gives various capabilities. login, superuser...&lt;br /&gt;
 privileges   database           on (table, function...): SELECT , INSERT , UPDATE , DELETE&lt;br /&gt;
 You can login with one role and then switch to another.&lt;br /&gt;
=privileges granted to users on all tables=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    grantee,&lt;br /&gt;
    table_schema,&lt;br /&gt;
    table_name,&lt;br /&gt;
    privilege_type&lt;br /&gt;
FROM &lt;br /&gt;
    information_schema.role_table_grants&lt;br /&gt;
ORDER BY &lt;br /&gt;
    grantee, table_schema, table_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing Users and Their Membership in Roles=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    r.rolname AS role_name,&lt;br /&gt;
    m.rolname AS member_name&lt;br /&gt;
FROM &lt;br /&gt;
    pg_auth_members am&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles r ON r.oid = am.roleid&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles m ON m.oid = am.member&lt;br /&gt;
ORDER BY &lt;br /&gt;
    role_name, member_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing All Users with Their Database-Level Privileges=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    pg_database.datname,&lt;br /&gt;
    pg_roles.rolname,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;CONNECT&#039;) AS can_connect,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;CREATE&#039;) AS can_create,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;TEMP&#039;) AS can_create_temp_tables&lt;br /&gt;
FROM &lt;br /&gt;
    pg_database&lt;br /&gt;
CROSS JOIN &lt;br /&gt;
    pg_roles&lt;br /&gt;
ORDER BY &lt;br /&gt;
    pg_database.datname, pg_roles.rolname;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Is user superuser=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    rolname AS role_name,&lt;br /&gt;
    CASE WHEN rolsuper THEN &#039;Yes&#039; ELSE &#039;No&#039; END AS is_superuser&lt;br /&gt;
FROM &lt;br /&gt;
    pg_roles;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=roles/users=&lt;br /&gt;
Which roles and users exist.&lt;br /&gt;
 \du&lt;br /&gt;
&lt;br /&gt;
=set new role=&lt;br /&gt;
 set role super-man;&lt;br /&gt;
=current role=&lt;br /&gt;
user name of current execution context&lt;br /&gt;
 SELECT current_user;&lt;br /&gt;
=session user=&lt;br /&gt;
 SELECT session_user;&lt;br /&gt;
&lt;br /&gt;
=display privileges=&lt;br /&gt;
 \dp&lt;br /&gt;
 \z&lt;br /&gt;
=tablespaces=&lt;br /&gt;
List tablespaces&lt;br /&gt;
 SELECT spcname FROM pg_tablespace;&lt;br /&gt;
=how many rows in table=&lt;br /&gt;
 SELECT reltuples AS estimate FROM pg_class where relname = &#039;member_offer&#039;;&lt;br /&gt;
&lt;br /&gt;
=delete rows matching value and timestamp=&lt;br /&gt;
 DELETE FROM receipt_transaction WHERE status_point = &#039;FAIL_POINT_CALC&#039; and business_date  &amp;lt; ( now() - interval &#039;+14 day&#039; ) ;&lt;br /&gt;
=delete all rows=&lt;br /&gt;
 TRUNCATE TABLE public.subscribe;&lt;br /&gt;
 DELETE FROM public.subscribe;&lt;br /&gt;
&lt;br /&gt;
=user password=&lt;br /&gt;
 ~/.pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
=kill=&lt;br /&gt;
Kill less agressive&lt;br /&gt;
 select pg_cancel_backend(16967);&lt;br /&gt;
kill&lt;br /&gt;
 select pg_terminate_backend(16967) from pg_stat_activity;&lt;br /&gt;
&lt;br /&gt;
=who are you and where do you come from, whoami=&lt;br /&gt;
 SELECT CURRENT_USER usr, :&#039;HOST&#039; host, inet_server_port() port;&lt;br /&gt;
or&lt;br /&gt;
 \conninfo&lt;br /&gt;
=running queries on standby=&lt;br /&gt;
 max_standby_archive_delay = 600s&lt;br /&gt;
 max_standby_streaming_delay = 600s&lt;br /&gt;
=analyze query=&lt;br /&gt;
 EXPLAIN ANALYZE select ...&lt;br /&gt;
=version=&lt;br /&gt;
 SELECT version();&lt;br /&gt;
=master/slave setup=&lt;br /&gt;
Streaming replication in PostgreSQL works on log shipping. Every transaction in postgres is written to a transaction log called WAL (write-ahead log) to achieve durability. A slave uses these WAL segments to continuously replicate changes from its master.&lt;br /&gt;
There exists three mandatory processes – wal sender , wal receiver and startup process, these play a major role in achieving streaming replication in postgres.&lt;br /&gt;
Log Sequence Number, or LSN, is a pointer to a location in the WAL.&lt;br /&gt;
=wal(write ahead log)=&lt;br /&gt;
 pg_xlog directory holds the WAL (Write Ahead Log) files.WAL files contain a record of all changes made to the database.&lt;br /&gt;
&lt;br /&gt;
=Is replication moving=&lt;br /&gt;
This LSN(Log Sequence Number) indicates the position in the WAL(Write-Ahead Log) up to which changes have been safely flushed and confirmed by subscribers or replication processes.&lt;br /&gt;
 SELECT slot_name, plugin, confirmed_flush_lsn, slot_type, restart_lsn FROM pg_replication_slots;&lt;br /&gt;
=grant user replication permissions=&lt;br /&gt;
 ALTER ROLE &amp;lt;username&amp;gt; WITH REPLICATION;&lt;br /&gt;
&lt;br /&gt;
=how much space is used by wal=&lt;br /&gt;
 SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn)) AS replicationSlotLag, active FROM pg_replication_slots ;&lt;br /&gt;
&lt;br /&gt;
=List tablespaces=&lt;br /&gt;
 \db&lt;br /&gt;
&lt;br /&gt;
=list clusters=&lt;br /&gt;
 pg_lsclusters&lt;br /&gt;
=pgbackrest=&lt;br /&gt;
 # https://pgbackrest.org/user-guide.html#introduction&lt;br /&gt;
 # Install pgbackrest&lt;br /&gt;
 apt-get install -y pgbackrest&lt;br /&gt;
 # pg-primary - Create pgBackRest configuration file and directories&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown postgres:postgres /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown postgres:postgres /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 # Does it work?&lt;br /&gt;
 sudo -u postgres pgbackrest&lt;br /&gt;
 # Configure the PostgreSQL cluster data directory&lt;br /&gt;
 # pg-primary:/etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [billo_dev]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/billo_dev&lt;br /&gt;
 # On machine taking backups.&lt;br /&gt;
 # Configure the pgBackRest repository path&lt;br /&gt;
 # /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [demo]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/demo&lt;br /&gt;
 [global]&lt;br /&gt;
 repo1-path=/var/lib/pgbackrest&lt;br /&gt;
 # /etc/postgresql/12/main/postgresql.conf &lt;br /&gt;
 archive_command = &#039;pgbackrest --stanza=billo_dev archive-push %p&#039;&lt;br /&gt;
 archive_mode = on&lt;br /&gt;
 max_wal_senders = 3&lt;br /&gt;
 wal_level = replica&lt;br /&gt;
 # setup backup.&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info stanza-create&lt;br /&gt;
 # check configuration&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info check&lt;br /&gt;
 # Run backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info backup&lt;br /&gt;
 # Differential backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=diff backup&lt;br /&gt;
 # Full backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=full backup&lt;br /&gt;
 # Every 10 minutes except for 2:00-2:59&lt;br /&gt;
 */10 0-1,3-23 * * * pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 02:10 02:20 02:30 02:40 02:50&lt;br /&gt;
 10-50/10 2 * * *    pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 3:00 Full&lt;br /&gt;
 0 2 * * *           pgbackrest --stanza=billo_dev --type=full backup&lt;br /&gt;
 # List backup information&lt;br /&gt;
 sudo -u postgres pgbackrest info &lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup last backup.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup from certain time.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --set 20220321-113900F_20220321-122001D restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
==install on remote machine==&lt;br /&gt;
===repository===&lt;br /&gt;
 sudo adduser --disabled-password --gecos &amp;quot;&amp;quot; pgbackrest&lt;br /&gt;
===setup directories===&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 mkdir -p /var/lib/pgbackrest&lt;br /&gt;
 chmod 750 /var/lib/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/lib/pgbackrest&lt;br /&gt;
===passwordless login===&lt;br /&gt;
 sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.ssh&lt;br /&gt;
 sudo -u pgbackrest ssh-keygen -f /home/pgbackrest/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
==Install on Postgres server==&lt;br /&gt;
 sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh&lt;br /&gt;
 sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
===ssh keys===&lt;br /&gt;
 server     -&amp;gt; postgres   -&amp;gt; ssh pgbackrest@repository /usr/bin/pgbackrest&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key postgres@server&lt;br /&gt;
&lt;br /&gt;
 repository -&amp;gt; pgbackrest -&amp;gt; ssh postgres@server /usr/bin/pgbackrest.&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key pgbackrest@repository&lt;br /&gt;
=prompt=&lt;br /&gt;
Create ~/.psqlrc with below here document.&lt;br /&gt;
 cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; ~/.psqlrc&lt;br /&gt;
 \set PROMPT1 &#039;(%n@%M:%&amp;gt;) %`date &amp;quot;+%H:%M:%S %Z&amp;quot;` [%/] \n%x%# &#039;&lt;br /&gt;
 \set PROMPT2 &#039;%M %n@%/%R %# &#039;&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=index=&lt;br /&gt;
Size of index.&lt;br /&gt;
 SELECT i.indexrelname, x.indexrelid, pg_size_pretty(size)&lt;br /&gt;
 FROM (SELECT indexrelid, pg_indexes_size(indrelid) AS size&lt;br /&gt;
       FROM pg_index) x&lt;br /&gt;
 JOIN pg_stat_user_indexes i ON i.indexrelid = x.indexrelid&lt;br /&gt;
 ORDER BY size DESC;&lt;br /&gt;
=Privilege	Abbreviation=&lt;br /&gt;
 Privilege     Abbreviation  Applicable Object Types&lt;br /&gt;
 SELECT        r (“read”)    LARGE OBJECT, SEQUENCE, TABLE (and table-like objects), table column&lt;br /&gt;
 INSERT        a (“append”)  TABLE, table column&lt;br /&gt;
 UPDATE        w (“write”)   LARGE OBJECT, SEQUENCE, TABLE, table column&lt;br /&gt;
 DELETE        d             TABLE&lt;br /&gt;
 TRUNCATE      D             TABLE&lt;br /&gt;
 REFERENCES    x             TABLE, table column&lt;br /&gt;
 TRIGGER       t             TABLE&lt;br /&gt;
 CREATE        C             DATABASE, SCHEMA, TABLESPACE&lt;br /&gt;
 CONNECT       c             DATABASE&lt;br /&gt;
 TEMPORARY     T             DATABASE&lt;br /&gt;
 EXECUTE       X             FUNCTION, PROCEDURE&lt;br /&gt;
 USAGE         U             DOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE&lt;br /&gt;
 SET           s             PARAMETER&lt;br /&gt;
 ALTER SYSTEM  A             PARAMETER&lt;br /&gt;
=which codepage is being used on database=&lt;br /&gt;
 SELECT datname, pg_encoding_to_char(encoding) AS encoding FROM pg_database;&lt;br /&gt;
=install postgres ubuntu (24)=&lt;br /&gt;
 apt install postgresql-16 postgresql-contrib-16&lt;br /&gt;
 systemctl enable postgresql --now&lt;br /&gt;
 vim /etc/postgresql/16/main/pg_hba.conf&lt;br /&gt;
 sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &#039;*&#039;/g&amp;quot; /etc/postgresql/16/main/postgresql.conf&lt;br /&gt;
 systemctl restart postgresql&lt;br /&gt;
&lt;br /&gt;
=install postgres fedora(40)=&lt;br /&gt;
 sudo dnf install postgresql-server postgresql-contrib&lt;br /&gt;
 sudo systemctl enable postgresql&lt;br /&gt;
 sudo postgresql-setup --initdb --unit postgresql&lt;br /&gt;
 # Grant access for user.&lt;br /&gt;
 sudo vim /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
 local   all             all                                md5&lt;br /&gt;
 # Allow database to be reached.&lt;br /&gt;
 sudo sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &#039;*&#039;/g&amp;quot; /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
 # Make changes active.&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
 CREATE USER username WITH PASSWORD &#039;password&#039;;&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
 GRANT SELECT ON TABLE testtable TO username;&lt;br /&gt;
 # Test connectivity&lt;br /&gt;
 export PGPASSWORD=password &amp;amp;&amp;amp; psql --host=$(hostname -f) --port=5432 --username=username --no-password postgres&lt;br /&gt;
&lt;br /&gt;
=uptime=&lt;br /&gt;
 select current_timestamp - pg_postmaster_start_time() as uptime;&lt;br /&gt;
=frequently running query=&lt;br /&gt;
 with&lt;br /&gt;
 a as (select dbid, queryid, query, calls s from pg_stat_statements),&lt;br /&gt;
 b as (select dbid, queryid, query, calls s from pg_stat_statements, pg_sleep(1))&lt;br /&gt;
 select&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         substr(a.query, 1, 400) as the_query,&lt;br /&gt;
         sum(b.s-a.s) as runs_per_second&lt;br /&gt;
 from a, b, pg_database pd&lt;br /&gt;
 where&lt;br /&gt;
   a.dbid= b.dbid&lt;br /&gt;
 and&lt;br /&gt;
   a.queryid = b.queryid&lt;br /&gt;
 and&lt;br /&gt;
   pd.oid=a.dbid&lt;br /&gt;
 group by 1, 2&lt;br /&gt;
 order by 3 desc;&lt;br /&gt;
=sessions older than 1 second=&lt;br /&gt;
 select&lt;br /&gt;
     now()-query_start as runtime, &lt;br /&gt;
     pid as process_id,&lt;br /&gt;
     datname as db_name,&lt;br /&gt;
     client_addr,&lt;br /&gt;
     client_hostname,&lt;br /&gt;
     query&lt;br /&gt;
 from pg_stat_activity&lt;br /&gt;
 where state!=&#039;idle&#039;&lt;br /&gt;
 and now() - query_start &amp;gt; &#039;1 seconds&#039;::interval&lt;br /&gt;
 order by 1 desc;&lt;br /&gt;
&lt;br /&gt;
=cpu usage per query=&lt;br /&gt;
 SELECT &lt;br /&gt;
         pss.userid,&lt;br /&gt;
         pss.dbid,&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         round((pss.total_exec_time + pss.total_plan_time)::numeric, 2) as total_time, &lt;br /&gt;
         pss.calls, &lt;br /&gt;
         round((pss.mean_exec_time+pss.mean_plan_time)::numeric, 2) as mean, &lt;br /&gt;
         round((100 * (pss.total_exec_time + pss.total_plan_time) / sum((pss.total_exec_time + pss.total_plan_time)::numeric) OVER ())::numeric, 2) as cpu_portion_pctg,&lt;br /&gt;
         pss.query&lt;br /&gt;
 FROM pg_stat_statements pss, pg_database pd &lt;br /&gt;
 WHERE pd.oid=pss.dbid&lt;br /&gt;
 ORDER BY (pss.total_exec_time + pss.total_plan_time)&lt;br /&gt;
 DESC LIMIT 30;&lt;br /&gt;
=performance troubleshooting=&lt;br /&gt;
 https://jfrog.com/community/data-science/troubleshooting-high-cpu-utilization-in-postgresql-databases-a-how-to-guide/&lt;br /&gt;
=Which charactertable does database use?=&lt;br /&gt;
 psql -d &amp;lt;database&amp;gt; -c &#039;SHOW SERVER_ENCODING;&#039;&lt;br /&gt;
=change owner of table=&lt;br /&gt;
 ALTER TABLE heartbeat OWNER TO pguser;&lt;br /&gt;
==View status of postgresql server==&lt;br /&gt;
 sudo -u postgres repmgr cluster show&lt;br /&gt;
=sleep 2s=&lt;br /&gt;
 select pg_sleep(2);&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16569</id>
		<title>Postgresql</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Postgresql&amp;diff=16569"/>
		<updated>2026-03-09T14:36:00Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* View status of postgresql server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=psql=&lt;br /&gt;
==run command from cli==&lt;br /&gt;
 psql -c &amp;quot;SELECT datname FROM pg_database;&amp;quot;&lt;br /&gt;
==Connect to remote database:==&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt; &amp;amp;&amp;amp; psql --host=&amp;lt;host&amp;gt; --port=5432 --username=&amp;lt;username&amp;gt; --no-password postgres&lt;br /&gt;
With variables&lt;br /&gt;
 export PGHOST=&amp;lt;database_host&amp;gt;&lt;br /&gt;
 export PGPORT=5432&lt;br /&gt;
 export PGUSER=&amp;lt;user&amp;gt;&lt;br /&gt;
 export PGPASSWORD=&amp;lt;password&amp;gt;&lt;br /&gt;
 export PGDATABASE=&amp;lt;database&amp;gt;&lt;br /&gt;
 psql&lt;br /&gt;
&lt;br /&gt;
==get what you ask for and less cruft==&lt;br /&gt;
 psql -A -t -c &amp;quot;SELECT * FROM pg_replication_slots;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=install psql=&lt;br /&gt;
 apt-get install freetds-bin&lt;br /&gt;
&lt;br /&gt;
=List databases=&lt;br /&gt;
==Alternative 1==&lt;br /&gt;
 SELECT datname FROM pg_database;&lt;br /&gt;
==Alternative 2==&lt;br /&gt;
gives more information too.&lt;br /&gt;
 \l&lt;br /&gt;
     Name     |    Owner    | Encoding |   Collate   |    Ctype    |   Access privileges   &lt;br /&gt;
 -------------+-------------+----------+-------------+-------------+-----------------------&lt;br /&gt;
  indata_mdb  | uc_etl_prod | UTF8     | sv_SE.UTF-8 | sv_SE.UTF-8 |&lt;br /&gt;
 ...&lt;br /&gt;
==Alternative 3==&lt;br /&gt;
 \l+&lt;br /&gt;
&lt;br /&gt;
=select database=&lt;br /&gt;
 \c testdb;&lt;br /&gt;
=show tables=&lt;br /&gt;
List all tables in all schemas&lt;br /&gt;
 \dt *.*&lt;br /&gt;
list tables in current schema&lt;br /&gt;
 \dt&lt;br /&gt;
Or from command line.&lt;br /&gt;
 su - postgres -c &amp;quot;psql -c \&amp;quot;\\dt \&amp;quot; database&amp;quot;&lt;br /&gt;
=list schemas=&lt;br /&gt;
 \dn&lt;br /&gt;
=list schemas with permissions=&lt;br /&gt;
 \dn+&lt;br /&gt;
&lt;br /&gt;
=schema/search_path=&lt;br /&gt;
List current schema&lt;br /&gt;
 SHOW search_path;&lt;br /&gt;
Change search path.&lt;br /&gt;
 SET search_path TO myschema, public;&lt;br /&gt;
&lt;br /&gt;
=describe table=&lt;br /&gt;
 \d table;&lt;br /&gt;
 \d dc_store.document;&lt;br /&gt;
&lt;br /&gt;
=Change view. One line per attribute(\G in mysql)=&lt;br /&gt;
 \x on&lt;br /&gt;
 psql -x -c &amp;quot;select * from blabla limit 1;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=exit/quit=&lt;br /&gt;
 \q&lt;br /&gt;
&lt;br /&gt;
=update=&lt;br /&gt;
 UPDATE users SET admin = 1 WHERE user_id = 14002;&lt;br /&gt;
=Create user=&lt;br /&gt;
 CREATE USER username WITH PASSWORD &#039;MYPASS&#039;;&lt;br /&gt;
=Create database=&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
&lt;br /&gt;
=create table=&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
=Add row to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 VALUES (&#039;A1234&#039;, &#039;Test Item&#039;, 101, &#039;2025-01-08&#039;, &#039;example&#039;, &#039;02:30&#039;);&lt;br /&gt;
=add random rows to table=&lt;br /&gt;
 INSERT INTO testtable (code, title, did, date_prod, kind, len)&lt;br /&gt;
 SELECT&lt;br /&gt;
     &#039;A&#039; || LPAD(num::text, 4, &#039;0&#039;) AS code,         -- Generate code like A0001, A0002, ...&lt;br /&gt;
     &#039;Test Item &#039; || num::text AS title,             -- Title with the number&lt;br /&gt;
     (num % 10) + 1 AS did,                          -- Random did value (1 to 10)&lt;br /&gt;
     CURRENT_DATE - (num % 30) AS date_prod,         -- Random date in the last 30 days&lt;br /&gt;
     &#039;example&#039; AS kind,                              -- Example kind&lt;br /&gt;
     (num % 5 || &#039; hours&#039;)::interval AS len          -- Convert the generated text to interval&lt;br /&gt;
 FROM generate_series(1, 100) AS s(num);&lt;br /&gt;
&lt;br /&gt;
=create readaccess role and grant user access=&lt;br /&gt;
 CREATE ROLE readaccess;&lt;br /&gt;
 GRANT CONNECT ON DATABASE &amp;lt;database&amp;gt; TO readaccess;&lt;br /&gt;
 GRANT USAGE ON SCHEMA public TO readaccess;&lt;br /&gt;
 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readaccess;&lt;br /&gt;
 CREATE USER &amp;lt;user&amp;gt; WITH PASSWORD &#039;&amp;lt;password&amp;gt;&#039;;&lt;br /&gt;
 GRANT readaccess TO &amp;lt;user&amp;gt;;&lt;br /&gt;
=grant access to a role for a user=&lt;br /&gt;
 GRANT ROLE &amp;lt;role_name&amp;gt; TO USER &amp;lt;user_name&amp;gt;;&lt;br /&gt;
 GRANT &amp;lt;role_name&amp;gt; TO &amp;lt;user_name&amp;gt;;&lt;br /&gt;
=grant all permissions to a user on a table=&lt;br /&gt;
 GRANT ALL PRIVILEGES ON TABLE table_name TO username;&lt;br /&gt;
&lt;br /&gt;
=Delete database=&lt;br /&gt;
 DROP DATABASE dbname;&lt;br /&gt;
==delete database from cli==&lt;br /&gt;
 dropdb $dbname&lt;br /&gt;
==delete table==&lt;br /&gt;
 DROP TABLE IF EXISTS table_name;&lt;br /&gt;
&lt;br /&gt;
=Import a database=&lt;br /&gt;
 psql username  -h hostname -d dbname &amp;lt; dump.sql&lt;br /&gt;
=change password=&lt;br /&gt;
 ALTER USER user_name WITH PASSWORD &#039;new_password&#039;;&lt;br /&gt;
&lt;br /&gt;
=Set super privileges=&lt;br /&gt;
 ALTER USER username WITH SUPERUSER;&lt;br /&gt;
=Deleting user=&lt;br /&gt;
 DROP USER nomusr&lt;br /&gt;
=Getting help=&lt;br /&gt;
 \? or \h&lt;br /&gt;
=size of database=&lt;br /&gt;
 SELECT pg_size_pretty( pg_database_size(&#039;database&#039;) );&lt;br /&gt;
=size of table=&lt;br /&gt;
 SELECT pg_size_pretty( pg_total_relation_size(&#039;tablename&#039;) );&lt;br /&gt;
=clean archives older than 2 days=&lt;br /&gt;
 su postgres -c &amp;quot;/usr/pgsql-9.5/bin/pg_archivecleanup /var/lib/pgsql/9.5/archivedir/ $(basename $(find /var/lib/pgsql/9.5/archivedir/ -ctime +2 | tail -n 1))&amp;quot;&lt;br /&gt;
=backup=&lt;br /&gt;
# Backup database.&lt;br /&gt;
 DATABASE=very_nice_database ; pg_dump -Fc -Z 2 --file=/tmp/${DATABASE}.$(date &#039;+%Y%m%d&#039;).dump ${DATABASE}&lt;br /&gt;
# Is database in backup&lt;br /&gt;
 SELECT pg_is_in_backup();&lt;br /&gt;
&lt;br /&gt;
=restore=&lt;br /&gt;
Look at permissions on database&lt;br /&gt;
 psql -c &amp;quot;\l&amp;quot;&lt;br /&gt;
 export DATABASE=very_nice_database&lt;br /&gt;
Drop database connectipons.&lt;br /&gt;
 psql -c &amp;quot;SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &#039;${DATABASE}&#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&amp;quot;&lt;br /&gt;
Drop database.&lt;br /&gt;
 dropdb ${DATABASE}&lt;br /&gt;
Create database&lt;br /&gt;
 createdb -T template0 ${DATABASE}&lt;br /&gt;
Restore database&lt;br /&gt;
 pg_restore -j8 -d ${DATABASE} --no-privileges --no-owner --clean --if-exists --exit-on-error /tmp/${DATABASE}.$(date &#039;+%Y%m%d&#039; --date &amp;quot;-4 days&amp;quot;).dump&lt;br /&gt;
# Set correct permissions.&lt;br /&gt;
 psql -c &amp;quot;ALTER DATABASE ${DATABASE} OWNER TO ${OWNER};&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=bookmarks=&lt;br /&gt;
https://wiki.postgresql.org/wiki/Disk_Usage&lt;br /&gt;
=bloat=&lt;br /&gt;
 Every record that has been deleted but is still taking some space is called a dead tuple. &lt;br /&gt;
 Once there is no dependency on those dead tuples with the already running transactions, the dead tuples are no longer needed. &lt;br /&gt;
 Thus, PostgreSQL runs VACUUM on such Tables. VACUUM reclaims the storage occupied by these dead tuples. &lt;br /&gt;
 The space occupied by these dead tuples may be referred to as Bloat. &lt;br /&gt;
 VACUUM scans the pages for dead tuples and marks them to the freespace map (FSM).&lt;br /&gt;
Query for bloat(which looks bloated... :-)&lt;br /&gt;
 SELECT&lt;br /&gt;
  current_database(), schemaname, tablename, /*reltuples::bigint, relpages::bigint, otta,*/&lt;br /&gt;
  ROUND((CASE WHEN otta=0 THEN 0.0 ELSE sml.relpages::FLOAT/otta END)::NUMERIC,1) AS tbloat,&lt;br /&gt;
  CASE WHEN relpages &amp;lt; otta THEN 0 ELSE bs*(sml.relpages-otta)::BIGINT END AS wastedbytes,&lt;br /&gt;
  iname, /*ituples::bigint, ipages::bigint, iotta,*/&lt;br /&gt;
  ROUND((CASE WHEN iotta=0 OR ipages=0 THEN 0.0 ELSE ipages::FLOAT/iotta END)::NUMERIC,1) AS ibloat,&lt;br /&gt;
  CASE WHEN ipages &amp;lt; iotta THEN 0 ELSE bs*(ipages-iotta) END AS wastedibytes&lt;br /&gt;
 FROM (&lt;br /&gt;
  SELECT&lt;br /&gt;
    schemaname, tablename, cc.reltuples, cc.relpages, bs,&lt;br /&gt;
    CEIL((cc.reltuples*((datahdr+ma-&lt;br /&gt;
      (CASE WHEN datahdr%ma=0 THEN ma ELSE datahdr%ma END))+nullhdr2+4))/(bs-20::FLOAT)) AS otta,&lt;br /&gt;
    COALESCE(c2.relname,&#039;?&#039;) AS iname, COALESCE(c2.reltuples,0) AS ituples, COALESCE(c2.relpages,0) AS ipages,&lt;br /&gt;
    COALESCE(CEIL((c2.reltuples*(datahdr-12))/(bs-20::FLOAT)),0) AS iotta -- very rough approximation, assumes all cols&lt;br /&gt;
  FROM (&lt;br /&gt;
    SELECT&lt;br /&gt;
      ma,bs,schemaname,tablename,&lt;br /&gt;
      (datawidth+(hdr+ma-(CASE WHEN hdr%ma=0 THEN ma ELSE hdr%ma END)))::NUMERIC AS datahdr,&lt;br /&gt;
      (maxfracsum*(nullhdr+ma-(CASE WHEN nullhdr%ma=0 THEN ma ELSE nullhdr%ma END))) AS nullhdr2&lt;br /&gt;
    FROM (&lt;br /&gt;
      SELECT&lt;br /&gt;
        schemaname, tablename, hdr, ma, bs,&lt;br /&gt;
        SUM((1-null_frac)*avg_width) AS datawidth,&lt;br /&gt;
        MAX(null_frac) AS maxfracsum,&lt;br /&gt;
        hdr+(&lt;br /&gt;
          SELECT 1+COUNT(*)/8&lt;br /&gt;
          FROM pg_stats s2&lt;br /&gt;
          WHERE null_frac&amp;lt;&amp;gt;0 AND s2.schemaname = s.schemaname AND s2.tablename = s.tablename&lt;br /&gt;
        ) AS nullhdr&lt;br /&gt;
      FROM pg_stats s, (&lt;br /&gt;
        SELECT&lt;br /&gt;
          (SELECT current_setting(&#039;block_size&#039;)::NUMERIC) AS bs,&lt;br /&gt;
          CASE WHEN SUBSTRING(v,12,3) IN (&#039;8.0&#039;,&#039;8.1&#039;,&#039;8.2&#039;) THEN 27 ELSE 23 END AS hdr,&lt;br /&gt;
          CASE WHEN v ~ &#039;mingw32&#039; THEN 8 ELSE 4 END AS ma&lt;br /&gt;
        FROM (SELECT version() AS v) AS foo&lt;br /&gt;
      ) AS constants&lt;br /&gt;
      GROUP BY 1,2,3,4,5&lt;br /&gt;
    ) AS foo&lt;br /&gt;
  ) AS rs&lt;br /&gt;
  JOIN pg_class cc ON cc.relname = rs.tablename&lt;br /&gt;
  JOIN pg_namespace nn ON cc.relnamespace = nn.oid AND nn.nspname = rs.schemaname AND nn.nspname &amp;lt;&amp;gt; &#039;information_schema&#039;&lt;br /&gt;
  LEFT JOIN pg_index i ON indrelid = cc.oid&lt;br /&gt;
  LEFT JOIN pg_class c2 ON c2.oid = i.indexrelid&lt;br /&gt;
 ) AS sml&lt;br /&gt;
 ORDER BY wastedbytes DESC&lt;br /&gt;
&lt;br /&gt;
==clear space vacuum==&lt;br /&gt;
 \c database&lt;br /&gt;
 vacuum;&lt;br /&gt;
if that doesn&#039;t work do:&lt;br /&gt;
 vacuum: freeze; or vacuum full;&lt;br /&gt;
==vacuum table==&lt;br /&gt;
Select database&lt;br /&gt;
 \c ucc&lt;br /&gt;
select role&lt;br /&gt;
 SET search_path TO myschema, kdl;&lt;br /&gt;
Vacuum table&lt;br /&gt;
 vacuum full taxation_initial_data;&lt;br /&gt;
&lt;br /&gt;
=autovacuum=&lt;br /&gt;
Is autovacuum enabled.&lt;br /&gt;
 SHOW autovacuum;&lt;br /&gt;
&lt;br /&gt;
=count table=&lt;br /&gt;
 SELECT COUNT(*) FROM TABLE_NAME;&lt;br /&gt;
If you don&#039;t need an exact count, the current statistic from the catalog table pg_class might be good enough and is much faster to retrieve for big tables.&lt;br /&gt;
 SELECT reltuples AS approximate_row_count FROM pg_class WHERE relname = &#039;table_name&#039;;&lt;br /&gt;
=number of connections=&lt;br /&gt;
 su - postgres -c &amp;quot;psql -t -c &#039;SELECT * FROM pg_stat_activity;&#039;&amp;quot; | wc -l&lt;br /&gt;
&lt;br /&gt;
=drop connections=&lt;br /&gt;
 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = &#039;dbname&#039; AND pid &amp;lt;&amp;gt; pg_backend_pid();&lt;br /&gt;
&lt;br /&gt;
=postgres configuration=&lt;br /&gt;
 postgresql.conf&lt;br /&gt;
=pg_hba.conf=&lt;br /&gt;
Connections are configured in this file.&lt;br /&gt;
=reread configuration=&lt;br /&gt;
 su - postgres&lt;br /&gt;
 /usr/bin/pg_ctl reload&lt;br /&gt;
From psql&lt;br /&gt;
 SELECT pg_reload_conf();&lt;br /&gt;
&lt;br /&gt;
=list prepared transactions=&lt;br /&gt;
 select * from pg_prepared_xacts where database=&#039;cti_batch&#039;;&lt;br /&gt;
&lt;br /&gt;
=remove prepared connecion=&lt;br /&gt;
 ROLLBACK PREPARED &#039;131077_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7nTE=_AAAAAAAAAAAAAP//rB6PFn41NfBevSfGABG7pAAAAAIAAAAA&#039;;&lt;br /&gt;
=pager off=&lt;br /&gt;
 \pset pager off&lt;br /&gt;
=pager less=&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
&lt;br /&gt;
=pager=&lt;br /&gt;
 export PAGER=less&lt;br /&gt;
=config file=&lt;br /&gt;
.my.cnf&lt;br /&gt;
 .pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
 hostname:port:*:username:password&lt;br /&gt;
&lt;br /&gt;
=Permissions in postgres=&lt;br /&gt;
 pg_hba.conf  local file         which is a local file that defines which sources for login credentials to use. (ldap, local users... to me it feels like nsswitch.conf)&lt;br /&gt;
 owner        database           of database. The right to modify or destroy an object is always the privilege of the owner only.&lt;br /&gt;
 role:s       separate database  are like user and groups combined. One role can inherit another. Different attributes gives various capabilities. login, superuser...&lt;br /&gt;
 privileges   database           on (table, function...): SELECT , INSERT , UPDATE , DELETE&lt;br /&gt;
 You can login with one role and then switch to another.&lt;br /&gt;
=privileges granted to users on all tables=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    grantee,&lt;br /&gt;
    table_schema,&lt;br /&gt;
    table_name,&lt;br /&gt;
    privilege_type&lt;br /&gt;
FROM &lt;br /&gt;
    information_schema.role_table_grants&lt;br /&gt;
ORDER BY &lt;br /&gt;
    grantee, table_schema, table_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing Users and Their Membership in Roles=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    r.rolname AS role_name,&lt;br /&gt;
    m.rolname AS member_name&lt;br /&gt;
FROM &lt;br /&gt;
    pg_auth_members am&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles r ON r.oid = am.roleid&lt;br /&gt;
JOIN &lt;br /&gt;
    pg_roles m ON m.oid = am.member&lt;br /&gt;
ORDER BY &lt;br /&gt;
    role_name, member_name;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Listing All Users with Their Database-Level Privileges=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT&lt;br /&gt;
    pg_database.datname,&lt;br /&gt;
    pg_roles.rolname,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;CONNECT&#039;) AS can_connect,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;CREATE&#039;) AS can_create,&lt;br /&gt;
    has_database_privilege(pg_roles.rolname, pg_database.datname, &#039;TEMP&#039;) AS can_create_temp_tables&lt;br /&gt;
FROM &lt;br /&gt;
    pg_database&lt;br /&gt;
CROSS JOIN &lt;br /&gt;
    pg_roles&lt;br /&gt;
ORDER BY &lt;br /&gt;
    pg_database.datname, pg_roles.rolname;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Is user superuser=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SELECT &lt;br /&gt;
    rolname AS role_name,&lt;br /&gt;
    CASE WHEN rolsuper THEN &#039;Yes&#039; ELSE &#039;No&#039; END AS is_superuser&lt;br /&gt;
FROM &lt;br /&gt;
    pg_roles;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=roles/users=&lt;br /&gt;
Which roles and users exist.&lt;br /&gt;
 \du&lt;br /&gt;
&lt;br /&gt;
=set new role=&lt;br /&gt;
 set role super-man;&lt;br /&gt;
=current role=&lt;br /&gt;
user name of current execution context&lt;br /&gt;
 SELECT current_user;&lt;br /&gt;
=session user=&lt;br /&gt;
 SELECT session_user;&lt;br /&gt;
&lt;br /&gt;
=display privileges=&lt;br /&gt;
 \dp&lt;br /&gt;
 \z&lt;br /&gt;
=tablespaces=&lt;br /&gt;
List tablespaces&lt;br /&gt;
 SELECT spcname FROM pg_tablespace;&lt;br /&gt;
=how many rows in table=&lt;br /&gt;
 SELECT reltuples AS estimate FROM pg_class where relname = &#039;member_offer&#039;;&lt;br /&gt;
&lt;br /&gt;
=delete rows matching value and timestamp=&lt;br /&gt;
 DELETE FROM receipt_transaction WHERE status_point = &#039;FAIL_POINT_CALC&#039; and business_date  &amp;lt; ( now() - interval &#039;+14 day&#039; ) ;&lt;br /&gt;
=delete all rows=&lt;br /&gt;
 TRUNCATE TABLE public.subscribe;&lt;br /&gt;
 DELETE FROM public.subscribe;&lt;br /&gt;
&lt;br /&gt;
=user password=&lt;br /&gt;
 ~/.pgpass&lt;br /&gt;
 hostname:port:database:username:password&lt;br /&gt;
=kill=&lt;br /&gt;
Kill less agressive&lt;br /&gt;
 select pg_cancel_backend(16967);&lt;br /&gt;
kill&lt;br /&gt;
 select pg_terminate_backend(16967) from pg_stat_activity;&lt;br /&gt;
&lt;br /&gt;
=who are you and where do you come from, whoami=&lt;br /&gt;
 SELECT CURRENT_USER usr, :&#039;HOST&#039; host, inet_server_port() port;&lt;br /&gt;
or&lt;br /&gt;
 \conninfo&lt;br /&gt;
=running queries on standby=&lt;br /&gt;
 max_standby_archive_delay = 600s&lt;br /&gt;
 max_standby_streaming_delay = 600s&lt;br /&gt;
=analyze query=&lt;br /&gt;
 EXPLAIN ANALYZE select ...&lt;br /&gt;
=version=&lt;br /&gt;
 SELECT version();&lt;br /&gt;
=master/slave setup=&lt;br /&gt;
Streaming replication in PostgreSQL works on log shipping. Every transaction in postgres is written to a transaction log called WAL (write-ahead log) to achieve durability. A slave uses these WAL segments to continuously replicate changes from its master.&lt;br /&gt;
There exists three mandatory processes – wal sender , wal receiver and startup process, these play a major role in achieving streaming replication in postgres.&lt;br /&gt;
Log Sequence Number, or LSN, is a pointer to a location in the WAL.&lt;br /&gt;
=wal(write ahead log)=&lt;br /&gt;
 pg_xlog directory holds the WAL (Write Ahead Log) files.WAL files contain a record of all changes made to the database.&lt;br /&gt;
&lt;br /&gt;
=Is replication moving=&lt;br /&gt;
This LSN(Log Sequence Number) indicates the position in the WAL(Write-Ahead Log) up to which changes have been safely flushed and confirmed by subscribers or replication processes.&lt;br /&gt;
 SELECT slot_name, plugin, confirmed_flush_lsn, slot_type, restart_lsn FROM pg_replication_slots;&lt;br /&gt;
=grant user replication permissions=&lt;br /&gt;
 ALTER ROLE &amp;lt;username&amp;gt; WITH REPLICATION;&lt;br /&gt;
&lt;br /&gt;
=how much space is used by wal=&lt;br /&gt;
 SELECT slot_name, pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(),restart_lsn)) AS replicationSlotLag, active FROM pg_replication_slots ;&lt;br /&gt;
&lt;br /&gt;
=List tablespaces=&lt;br /&gt;
 \db&lt;br /&gt;
&lt;br /&gt;
=list clusters=&lt;br /&gt;
 pg_lsclusters&lt;br /&gt;
=pgbackrest=&lt;br /&gt;
 # https://pgbackrest.org/user-guide.html#introduction&lt;br /&gt;
 # Install pgbackrest&lt;br /&gt;
 apt-get install -y pgbackrest&lt;br /&gt;
 # pg-primary - Create pgBackRest configuration file and directories&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown postgres:postgres /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown postgres:postgres /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 # Does it work?&lt;br /&gt;
 sudo -u postgres pgbackrest&lt;br /&gt;
 # Configure the PostgreSQL cluster data directory&lt;br /&gt;
 # pg-primary:/etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [billo_dev]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/billo_dev&lt;br /&gt;
 # On machine taking backups.&lt;br /&gt;
 # Configure the pgBackRest repository path&lt;br /&gt;
 # /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 [demo]&lt;br /&gt;
 pg1-path=/var/lib/postgresql/12/demo&lt;br /&gt;
 [global]&lt;br /&gt;
 repo1-path=/var/lib/pgbackrest&lt;br /&gt;
 # /etc/postgresql/12/main/postgresql.conf &lt;br /&gt;
 archive_command = &#039;pgbackrest --stanza=billo_dev archive-push %p&#039;&lt;br /&gt;
 archive_mode = on&lt;br /&gt;
 max_wal_senders = 3&lt;br /&gt;
 wal_level = replica&lt;br /&gt;
 # setup backup.&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info stanza-create&lt;br /&gt;
 # check configuration&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info check&lt;br /&gt;
 # Run backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info backup&lt;br /&gt;
 # Differential backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=diff backup&lt;br /&gt;
 # Full backup&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --log-level-console=info --type=full backup&lt;br /&gt;
 # Every 10 minutes except for 2:00-2:59&lt;br /&gt;
 */10 0-1,3-23 * * * pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 02:10 02:20 02:30 02:40 02:50&lt;br /&gt;
 10-50/10 2 * * *    pgbackrest --stanza=billo_dev --type=diff backup&lt;br /&gt;
 # 3:00 Full&lt;br /&gt;
 0 2 * * *           pgbackrest --stanza=billo_dev --type=full backup&lt;br /&gt;
 # List backup information&lt;br /&gt;
 sudo -u postgres pgbackrest info &lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup last backup.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
 ...&lt;br /&gt;
 # Restore backup from certain time.&lt;br /&gt;
 sudo -u postgres find /var/lib/postgresql/12/billo_dev -mindepth 1 -delete&lt;br /&gt;
 # Restore the cluster and start PostgreSQL&lt;br /&gt;
 sudo -u postgres pgbackrest --stanza=billo_dev --set 20220321-113900F_20220321-122001D restore&lt;br /&gt;
 sudo pg_ctlcluster 12 restore start&lt;br /&gt;
==install on remote machine==&lt;br /&gt;
===repository===&lt;br /&gt;
 sudo adduser --disabled-password --gecos &amp;quot;&amp;quot; pgbackrest&lt;br /&gt;
===setup directories===&lt;br /&gt;
 mkdir -p -m 770 /var/log/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/log/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest&lt;br /&gt;
 mkdir -p /etc/pgbackrest/conf.d&lt;br /&gt;
 touch /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chmod 640 /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf&lt;br /&gt;
 mkdir -p /var/lib/pgbackrest&lt;br /&gt;
 chmod 750 /var/lib/pgbackrest&lt;br /&gt;
 chown pgbackrest:pgbackrest /var/lib/pgbackrest&lt;br /&gt;
===passwordless login===&lt;br /&gt;
 sudo -u pgbackrest mkdir -m 750 /home/pgbackrest/.ssh&lt;br /&gt;
 sudo -u pgbackrest ssh-keygen -f /home/pgbackrest/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
==Install on Postgres server==&lt;br /&gt;
 sudo -u postgres mkdir -m 750 -p /var/lib/postgresql/.ssh&lt;br /&gt;
 sudo -u postgres ssh-keygen -f /var/lib/postgresql/.ssh/id_rsa -t rsa -b 4096 -N &amp;quot;&amp;quot;&lt;br /&gt;
===ssh keys===&lt;br /&gt;
 server     -&amp;gt; postgres   -&amp;gt; ssh pgbackrest@repository /usr/bin/pgbackrest&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key postgres@server&lt;br /&gt;
&lt;br /&gt;
 repository -&amp;gt; pgbackrest -&amp;gt; ssh postgres@server /usr/bin/pgbackrest.&lt;br /&gt;
 no-agent-forwarding,no-X11-forwarding,no-port-forwarding,command=&amp;quot;/usr/bin/pgbackrest ${SSH_ORIGINAL_COMMAND#* }&amp;quot; ssh-rsa $public_ssh_key pgbackrest@repository&lt;br /&gt;
=prompt=&lt;br /&gt;
Create ~/.psqlrc with below here document.&lt;br /&gt;
 cat &amp;lt;&amp;lt; &#039;EOF&#039; &amp;gt; ~/.psqlrc&lt;br /&gt;
 \set PROMPT1 &#039;(%n@%M:%&amp;gt;) %`date &amp;quot;+%H:%M:%S %Z&amp;quot;` [%/] \n%x%# &#039;&lt;br /&gt;
 \set PROMPT2 &#039;%M %n@%/%R %# &#039;&lt;br /&gt;
 \x auto&lt;br /&gt;
 \pset pager on&lt;br /&gt;
 \setenv PAGER less&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=index=&lt;br /&gt;
Size of index.&lt;br /&gt;
 SELECT i.indexrelname, x.indexrelid, pg_size_pretty(size)&lt;br /&gt;
 FROM (SELECT indexrelid, pg_indexes_size(indrelid) AS size&lt;br /&gt;
       FROM pg_index) x&lt;br /&gt;
 JOIN pg_stat_user_indexes i ON i.indexrelid = x.indexrelid&lt;br /&gt;
 ORDER BY size DESC;&lt;br /&gt;
=Privilege	Abbreviation=&lt;br /&gt;
 Privilege     Abbreviation  Applicable Object Types&lt;br /&gt;
 SELECT        r (“read”)    LARGE OBJECT, SEQUENCE, TABLE (and table-like objects), table column&lt;br /&gt;
 INSERT        a (“append”)  TABLE, table column&lt;br /&gt;
 UPDATE        w (“write”)   LARGE OBJECT, SEQUENCE, TABLE, table column&lt;br /&gt;
 DELETE        d             TABLE&lt;br /&gt;
 TRUNCATE      D             TABLE&lt;br /&gt;
 REFERENCES    x             TABLE, table column&lt;br /&gt;
 TRIGGER       t             TABLE&lt;br /&gt;
 CREATE        C             DATABASE, SCHEMA, TABLESPACE&lt;br /&gt;
 CONNECT       c             DATABASE&lt;br /&gt;
 TEMPORARY     T             DATABASE&lt;br /&gt;
 EXECUTE       X             FUNCTION, PROCEDURE&lt;br /&gt;
 USAGE         U             DOMAIN, FOREIGN DATA WRAPPER, FOREIGN SERVER, LANGUAGE, SCHEMA, SEQUENCE, TYPE&lt;br /&gt;
 SET           s             PARAMETER&lt;br /&gt;
 ALTER SYSTEM  A             PARAMETER&lt;br /&gt;
=which codepage is being used on database=&lt;br /&gt;
 SELECT datname, pg_encoding_to_char(encoding) AS encoding FROM pg_database;&lt;br /&gt;
=install postgres ubuntu (24)=&lt;br /&gt;
 apt install postgresql-16 postgresql-contrib-16&lt;br /&gt;
 systemctl enable postgresql --now&lt;br /&gt;
 vim /etc/postgresql/16/main/pg_hba.conf&lt;br /&gt;
 sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &#039;*&#039;/g&amp;quot; /etc/postgresql/16/main/postgresql.conf&lt;br /&gt;
 systemctl restart postgresql&lt;br /&gt;
&lt;br /&gt;
=install postgres fedora(40)=&lt;br /&gt;
 sudo dnf install postgresql-server postgresql-contrib&lt;br /&gt;
 sudo systemctl enable postgresql&lt;br /&gt;
 sudo postgresql-setup --initdb --unit postgresql&lt;br /&gt;
 # Grant access for user.&lt;br /&gt;
 sudo vim /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
 local   all             all                                md5&lt;br /&gt;
 # Allow database to be reached.&lt;br /&gt;
 sudo sed -i &amp;quot;s/.*listen_addresses.*/listen_addresses = &#039;*&#039;/g&amp;quot; /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
 # Make changes active.&lt;br /&gt;
 sudo service postgresql restart&lt;br /&gt;
 CREATE USER username WITH PASSWORD &#039;password&#039;;&lt;br /&gt;
 CREATE DATABASE database OWNER username;&lt;br /&gt;
 CREATE TABLE testtable (&lt;br /&gt;
    code        char(5) CONSTRAINT firstkey PRIMARY KEY,&lt;br /&gt;
    title       varchar(40) NOT NULL,&lt;br /&gt;
    did         integer NOT NULL,&lt;br /&gt;
    date_prod   date,&lt;br /&gt;
    kind        varchar(10),&lt;br /&gt;
    len         interval hour to minute&lt;br /&gt;
 );&lt;br /&gt;
 GRANT SELECT ON TABLE testtable TO username;&lt;br /&gt;
 # Test connectivity&lt;br /&gt;
 export PGPASSWORD=password &amp;amp;&amp;amp; psql --host=$(hostname -f) --port=5432 --username=username --no-password postgres&lt;br /&gt;
&lt;br /&gt;
=uptime=&lt;br /&gt;
 select current_timestamp - pg_postmaster_start_time() as uptime;&lt;br /&gt;
=frequently running query=&lt;br /&gt;
 with&lt;br /&gt;
 a as (select dbid, queryid, query, calls s from pg_stat_statements),&lt;br /&gt;
 b as (select dbid, queryid, query, calls s from pg_stat_statements, pg_sleep(1))&lt;br /&gt;
 select&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         substr(a.query, 1, 400) as the_query,&lt;br /&gt;
         sum(b.s-a.s) as runs_per_second&lt;br /&gt;
 from a, b, pg_database pd&lt;br /&gt;
 where&lt;br /&gt;
   a.dbid= b.dbid&lt;br /&gt;
 and&lt;br /&gt;
   a.queryid = b.queryid&lt;br /&gt;
 and&lt;br /&gt;
   pd.oid=a.dbid&lt;br /&gt;
 group by 1, 2&lt;br /&gt;
 order by 3 desc;&lt;br /&gt;
=sessions older than 1 second=&lt;br /&gt;
 select&lt;br /&gt;
     now()-query_start as runtime, &lt;br /&gt;
     pid as process_id,&lt;br /&gt;
     datname as db_name,&lt;br /&gt;
     client_addr,&lt;br /&gt;
     client_hostname,&lt;br /&gt;
     query&lt;br /&gt;
 from pg_stat_activity&lt;br /&gt;
 where state!=&#039;idle&#039;&lt;br /&gt;
 and now() - query_start &amp;gt; &#039;1 seconds&#039;::interval&lt;br /&gt;
 order by 1 desc;&lt;br /&gt;
&lt;br /&gt;
=cpu usage per query=&lt;br /&gt;
 SELECT &lt;br /&gt;
         pss.userid,&lt;br /&gt;
         pss.dbid,&lt;br /&gt;
         pd.datname as db_name,&lt;br /&gt;
         round((pss.total_exec_time + pss.total_plan_time)::numeric, 2) as total_time, &lt;br /&gt;
         pss.calls, &lt;br /&gt;
         round((pss.mean_exec_time+pss.mean_plan_time)::numeric, 2) as mean, &lt;br /&gt;
         round((100 * (pss.total_exec_time + pss.total_plan_time) / sum((pss.total_exec_time + pss.total_plan_time)::numeric) OVER ())::numeric, 2) as cpu_portion_pctg,&lt;br /&gt;
         pss.query&lt;br /&gt;
 FROM pg_stat_statements pss, pg_database pd &lt;br /&gt;
 WHERE pd.oid=pss.dbid&lt;br /&gt;
 ORDER BY (pss.total_exec_time + pss.total_plan_time)&lt;br /&gt;
 DESC LIMIT 30;&lt;br /&gt;
=performance troubleshooting=&lt;br /&gt;
 https://jfrog.com/community/data-science/troubleshooting-high-cpu-utilization-in-postgresql-databases-a-how-to-guide/&lt;br /&gt;
=Which charactertable does database use?=&lt;br /&gt;
 psql -d &amp;lt;database&amp;gt; -c &#039;SHOW SERVER_ENCODING;&#039;&lt;br /&gt;
=change owner of table=&lt;br /&gt;
 ALTER TABLE heartbeat OWNER TO pguser;&lt;br /&gt;
==View status of postgresql server==&lt;br /&gt;
 sudo -u postgres repmgr cluster show&lt;br /&gt;
=sleep 2s=&lt;br /&gt;
 pg_sleep(1)&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Windows&amp;diff=16568</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Windows&amp;diff=16568"/>
		<updated>2026-03-06T14:34:51Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* scheduled task */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=connect to windows from windows(rdp)=&lt;br /&gt;
 mstsc /v:172.30.142.11&lt;br /&gt;
Login with password.&lt;br /&gt;
 # Define the server and credentials&lt;br /&gt;
 $server = &amp;quot;&amp;lt;server&amp;gt;&amp;quot;&lt;br /&gt;
 $username = &amp;quot;&amp;lt;username&amp;gt;&amp;quot;&lt;br /&gt;
 $password = &amp;quot;&amp;lt;password&amp;gt;&amp;quot;&lt;br /&gt;
 # Create credentials using cmdkey&lt;br /&gt;
 cmdkey /generic:&amp;quot;TERMSRV/$server&amp;quot; /user:$username /pass:$password&lt;br /&gt;
 # Start MSTSC to connect to the server&lt;br /&gt;
 Start-Process &amp;quot;mstsc&amp;quot; -ArgumentList &amp;quot;/v:$server&amp;quot;&lt;br /&gt;
 # Delete the credentials after MSTSC session is done&lt;br /&gt;
 cmdkey /delete:TERMSRV/&amp;lt;servername&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=which version of powershell is installed=&lt;br /&gt;
 $PSVersionTable&lt;br /&gt;
&lt;br /&gt;
=hibernate=&lt;br /&gt;
 powercfg.exe -h off&lt;br /&gt;
&lt;br /&gt;
=enable powershell=&lt;br /&gt;
 set-executionpolicy unrestricted&lt;br /&gt;
=List network interfaces with ips=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress&lt;br /&gt;
=List network interfaces and routes=&lt;br /&gt;
 Get-NetIPAddress | Select-Object InterfaceAlias, IPAddress | Format-Table ; Get-NetRoute | Format-Table&lt;br /&gt;
&lt;br /&gt;
=Configure network=&lt;br /&gt;
# Static ip.&lt;br /&gt;
 netsh interface ip set address name=&amp;quot;Local Area Connection&amp;quot; static 192.168.122.41 255.255.255.0 192.168.122.1 1&lt;br /&gt;
# Dhcp&lt;br /&gt;
 netsh interface is set address name=&amp;quot;Local Area Connection&amp;quot; dhcp&lt;br /&gt;
# Verify mtu settings.&lt;br /&gt;
 netsh interface ipv4 show subinterfaces&lt;br /&gt;
# Set correct mtu.&lt;br /&gt;
 netsh interface ipv4 set subinterface &amp;quot;Ethernet 2&amp;quot; mtu=1000&lt;br /&gt;
&lt;br /&gt;
=extract msi=&lt;br /&gt;
 msiexec /a &amp;quot;C:\software.msi&amp;quot; /qb TARGETDIR=&amp;quot;C:\Folder&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=restart network=&lt;br /&gt;
 netsh interface set interface extbond admin = disabled&lt;br /&gt;
 ping 127.0.0.1 -n 6&lt;br /&gt;
 netsh interface set interface extbond admin = enabled&lt;br /&gt;
&lt;br /&gt;
=Profile=&lt;br /&gt;
# Profile&lt;br /&gt;
 C:\Users\abjorklund\AppData\Roaming\Microsoft\Windows\Start Menu&lt;br /&gt;
&lt;br /&gt;
=restart via rdesktop=&lt;br /&gt;
 CTRL + ALT + END&lt;br /&gt;
=alternative shutdown=&lt;br /&gt;
Shutdown with restart&lt;br /&gt;
 shutdown /t 0 /r /f&lt;br /&gt;
Shutdown&lt;br /&gt;
 shutdown /t 0 /s /f&lt;br /&gt;
logoff/logout&lt;br /&gt;
 shutdown /l /f&lt;br /&gt;
&lt;br /&gt;
=mount drive=&lt;br /&gt;
 net use z: \\www.halfface.se\storage /user:alex &amp;lt;password&amp;gt; /persistent:no&lt;br /&gt;
=change password=&lt;br /&gt;
Start a command prompt as administrator.&lt;br /&gt;
 net user username password&lt;br /&gt;
&lt;br /&gt;
=activate account=&lt;br /&gt;
 net user username /active:yes&lt;br /&gt;
&lt;br /&gt;
=remove cached passwords=&lt;br /&gt;
list/remove cached passwords graphically&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
list/remove cached passwords cli&lt;br /&gt;
 cmdkey /list&lt;br /&gt;
&lt;br /&gt;
=is your account locked. bat file=&lt;br /&gt;
 @echo off&lt;br /&gt;
 :again&lt;br /&gt;
 date /t &amp;amp; time /t&lt;br /&gt;
 net user /domain mdinkel &amp;gt; c:\temp\mdinkel&lt;br /&gt;
 find &amp;quot;active&amp;quot; c:\temp\mdinkel&lt;br /&gt;
 timeout 10&lt;br /&gt;
 goto again&lt;br /&gt;
&lt;br /&gt;
=unlock account=&lt;br /&gt;
 Net user username /DOMAIN /active:YES&lt;br /&gt;
&lt;br /&gt;
=Browse active dirctory structure=&lt;br /&gt;
 adsiedit.msc&lt;br /&gt;
=time zone conversion=&lt;br /&gt;
Here you can convert from Windows to unix time zones tz.&lt;br /&gt;
 http://www.unicode.org/cldr/charts/latest/supplemental/zone_tzid.html&lt;br /&gt;
=uptime=&lt;br /&gt;
 net statistics server&lt;br /&gt;
Uptime and other information&lt;br /&gt;
 systeminfo /FO CSV | ConvertFrom-CSV&lt;br /&gt;
&lt;br /&gt;
=credetial manager empty cache=&lt;br /&gt;
 rundll32.exe keymgr.dll,KRShowKeyMgr&lt;br /&gt;
=remote powershell pssession=&lt;br /&gt;
Create pssession.&lt;br /&gt;
 $secpasswd = ConvertTo-SecureString &amp;quot;*************&amp;quot; -AsPlainText -Force&lt;br /&gt;
 $mycreds = New-Object System.Management.Automation.PSCredential (&amp;quot;domain\user&amp;quot;, $secpasswd)&lt;br /&gt;
 New-PSSession -ComputerName 10.111.222.5 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
get pssessions.&lt;br /&gt;
 get-pssession&lt;br /&gt;
&lt;br /&gt;
enter pssession&lt;br /&gt;
 Enter-PSSession -Name&lt;br /&gt;
 Enter-PSSession -ComputerName 10.50.197.70&lt;br /&gt;
 Enter-PSSession 172.18.1.198 -Credential domain\uer&lt;br /&gt;
&lt;br /&gt;
remove pssession&lt;br /&gt;
 remove-pssession -name Session15&lt;br /&gt;
&lt;br /&gt;
Run remote command.&lt;br /&gt;
 Invoke-Command -name &amp;quot;Session14&amp;quot; -ScriptBlock { hostname }&lt;br /&gt;
&lt;br /&gt;
Login to remote machine&lt;br /&gt;
 Enter-PSSession 10.50.197.70 -Credential $mycreds&lt;br /&gt;
&lt;br /&gt;
=PowerShell=&lt;br /&gt;
=gc=&lt;br /&gt;
Get-content. Print content of file.&lt;br /&gt;
 gc c:\temp\file.txt&lt;br /&gt;
=Set-content=&lt;br /&gt;
 Set-Content -path REMOTE\Filename.txt&lt;br /&gt;
=Out-File=&lt;br /&gt;
 Out-File -Encoding UTF8&lt;br /&gt;
&lt;br /&gt;
=replace text in file=&lt;br /&gt;
 Get-Content REMOTE\Filename.txt | foreach-object { $_ -replace &amp;quot;OLD&amp;quot;, &amp;quot;NEW&amp;quot; } | Set-Content REMOTE\Filename.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=get-service=&lt;br /&gt;
Status of one service.&lt;br /&gt;
 get-service ipeventwatcher&lt;br /&gt;
status of all services. list services.&lt;br /&gt;
 Get-Service&lt;br /&gt;
find service&lt;br /&gt;
 get-service *service_to_find* | select -expand name&lt;br /&gt;
=get failed services=&lt;br /&gt;
 Get-Service | Where-Object {$_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;}&lt;br /&gt;
=failed service from boot=&lt;br /&gt;
 Write-Host &amp;quot;`n=== Stopped Automatic Services ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-Service | Where-Object { $_.Status -eq &#039;Stopped&#039; -and $_.StartType -eq &#039;Automatic&#039;} | Select-Object Name, DisplayName, Status | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Disabled Scheduled Tasks ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-ScheduledTask | Where-Object {$_.State -eq &#039;Disabled&#039;} | Select-Object TaskName, TaskPath | Format-Table -AutoSize&lt;br /&gt;
 Write-Host &amp;quot;`n=== Recent Service Failures (Event Log) ===&amp;quot; -ForegroundColor Cyan&lt;br /&gt;
 Get-EventLog -LogName System -Source &amp;quot;Service Control Manager&amp;quot; -EntryType Error -Newest 10 | Select-Object TimeGenerated, Message | Format-List&lt;br /&gt;
&lt;br /&gt;
=stop-service=&lt;br /&gt;
 stop-service ipeventwatcher&lt;br /&gt;
=restart-service=&lt;br /&gt;
 restart-service ipremote -force&lt;br /&gt;
 restart-service check_mk_agent -force&lt;br /&gt;
 Restart-Service -Force -Name &amp;quot;TermService&amp;quot;&lt;br /&gt;
=tell windows to restart service automatically=&lt;br /&gt;
 $serviceName = &amp;quot;icinga2&amp;quot;&lt;br /&gt;
 sc.exe failure $serviceName reset= 86400 actions= restart/60000/restart/60000/restart/60000&lt;br /&gt;
&lt;br /&gt;
=start-service=&lt;br /&gt;
 start-service ipeventwatcher&lt;br /&gt;
=autostart service=&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
&lt;br /&gt;
=variable=&lt;br /&gt;
Set variable to content of file.&lt;br /&gt;
 $a = gc IPremote.exe.config&lt;br /&gt;
=md5sum=&lt;br /&gt;
 [CmdletBinding(SupportsShouldProcess=$False)]&lt;br /&gt;
 param([string]$File)&lt;br /&gt;
 &lt;br /&gt;
 function Get-Checksum([string]$strInFile)&lt;br /&gt;
 {&lt;br /&gt;
 	    $objCrypto = New-Object &amp;quot;System.Security.Cryptography.MD5CryptoServiceProvider&amp;quot;&lt;br /&gt;
 	    $objFile = Get-Item $strInFile&lt;br /&gt;
 	    $objStream = $objFile.OpenRead()&lt;br /&gt;
 	    $objBytes = $objCrypto.ComputeHash($objStream)&lt;br /&gt;
 	    $strChecksum = &amp;quot;&amp;quot;&lt;br /&gt;
 	    foreach($objByte in $objBytes) {&lt;br /&gt;
 		        $strChecksum += $objByte.ToString(&#039;x2&#039;)&lt;br /&gt;
 	    }&lt;br /&gt;
 	    $objStream.Close() | Out-Null&lt;br /&gt;
 	    return $strChecksum&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 $strFileToCheck = $File&lt;br /&gt;
 if(Test-Path($strFileToCheck)) {&lt;br /&gt;
 	    Get-Checksum $strFileToCheck&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Get md5sum of all files.&lt;br /&gt;
 gci * | Get-FileHash -Algorithm md5 | ft Hash,@{n=&amp;quot;File&amp;quot;;e={(Get-item $_.Path).Name}}&lt;br /&gt;
&lt;br /&gt;
=tcp connect port=&lt;br /&gt;
netcat nc &lt;br /&gt;
 (New-Object Net.Sockets.TcpClient).Connect(&amp;quot;1.2.3.4&amp;quot;,80)&lt;br /&gt;
 $Tcp = New-Object Net.Sockets.TcpClient;$Tcp.BeginConnect(&amp;quot;1.2.3.4&amp;quot;, 80, $null, $null).AsyncWaitHandle.WaitOne(5000);$Tcp.Close()&lt;br /&gt;
 New-Object System.Net.Sockets.TCPClient -ArgumentList &amp;quot;1.2.3.4&amp;quot;,3389&lt;br /&gt;
 &lt;br /&gt;
 Test-NetConnection -ComputerName 192.168.122.1 -InformationLevel Detailed -port 23&lt;br /&gt;
Latest and greatest.&lt;br /&gt;
 $Computer=&amp;quot;127.0.0.1&amp;quot;; $Port=20010; $Socket = New-Object Net.Sockets.TcpClient;($Socket.BeginConnect($Computer, $Port, $Null, $Null)).AsyncWaitHandle.WaitOne(200);$Socket.Close();&lt;br /&gt;
&lt;br /&gt;
=What is using tcp connections=&lt;br /&gt;
 Get-NetTCPConnection | Group-Object -Property State, OwningProcess | Select -Property Count, Name, @{Name=&amp;quot;ProcessName&amp;quot;;Expression={(Get-Process -PID ($_.Name.Split(&#039;,&#039;)[-1].Trim(&#039; &#039;))).Name}}, Group | Sort Count -Descending&lt;br /&gt;
=grep=&lt;br /&gt;
 gc IPremoteDebug.log | select-string &amp;quot;ip2date&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=List all processes. Grep for string=&lt;br /&gt;
 Get-Process -IncludeUserName |  findstr dkarlslatt&lt;br /&gt;
&lt;br /&gt;
=grep recursive=&lt;br /&gt;
 dir -Recurse | Select-String -pattern &amp;quot;192.168.19.102&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=list processes=&lt;br /&gt;
 Get-Process&lt;br /&gt;
=kill processes from user=&lt;br /&gt;
 Get-Process -IncludeUserName | Where UserName -match joe | Stop-Process -force&lt;br /&gt;
&lt;br /&gt;
=restart processes=&lt;br /&gt;
 get-process -name powershellserver | stop-process&lt;br /&gt;
&lt;br /&gt;
=clear content=&lt;br /&gt;
 Clear-Content filename.doc&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 dir /a/s/b filename.txt&lt;br /&gt;
=dir recursive=&lt;br /&gt;
 &#039;Get-ChildItem &amp;quot;c:\program files\&amp;quot; -rec | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
 &#039;Get-ChildItem . -recurse -force | ForEach-Object -Process {$_.FullName}&#039;&lt;br /&gt;
=locate a file=&lt;br /&gt;
List recursive look for file with file name.&lt;br /&gt;
 Get-Childitem -Path C:\ -Include *filename* -Recurse -ErrorAction SilentlyContinue&lt;br /&gt;
&lt;br /&gt;
=dir filename size=&lt;br /&gt;
 &#039;get-childitem &amp;quot;C:\Program Files\directory&amp;quot; -rec | where {!$_.PSIsContainer} | select-object Name, Length&#039;&lt;br /&gt;
=find file with filename=&lt;br /&gt;
 Get-ChildItem -Path C:\ -Recurse -Filter *sshd_config* -ErrorAction SilentlyContinue&lt;br /&gt;
=find old files=&lt;br /&gt;
 Get-ChildItem | Where-Object {$_.LastWriteTime -lt (Get-Date).AddDays(-30)}&lt;br /&gt;
&lt;br /&gt;
=find old files and remove them=&lt;br /&gt;
 $Folder = &amp;quot;G:\Downloads&amp;quot;&lt;br /&gt;
 #Delete files older than 6 months&lt;br /&gt;
 Get-ChildItem $Folder -Recurse -Force -ea 0 |&lt;br /&gt;
 ? {!$_.PsIsContainer -and $_.LastWriteTime -lt (Get-Date).AddDays(-180)} |&lt;br /&gt;
  ForEach-Object {&lt;br /&gt;
    $_ | del -Force&lt;br /&gt;
    $_.FullName | Out-File C:\log\deletedlog.txt -Append&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=calculate size of directory=&lt;br /&gt;
Value returned is in Scientific notation format. Add number of zeroes to value. 1.00E-6 is 1000000.&lt;br /&gt;
 &#039;(gci &amp;quot;D:\data\db&amp;quot; | measure Length -s).Sum /1GB&#039;&lt;br /&gt;
=remove directory=&lt;br /&gt;
 rd /s /q $DIRECTORY&lt;br /&gt;
&lt;br /&gt;
=dir human readable file size=&lt;br /&gt;
function&lt;br /&gt;
 Function Format-FileSize() {&lt;br /&gt;
    Param ([int]$size)&lt;br /&gt;
    If     ($size -gt 1TB) {[string]::Format(&amp;quot;{0:0.00} TB&amp;quot;, $size / 1TB)}&lt;br /&gt;
    ElseIf ($size -gt 1GB) {[string]::Format(&amp;quot;{0:0.00} GB&amp;quot;, $size / 1GB)}&lt;br /&gt;
    ElseIf ($size -gt 1MB) {[string]::Format(&amp;quot;{0:0.00} MB&amp;quot;, $size / 1MB)}&lt;br /&gt;
    ElseIf ($size -gt 1KB) {[string]::Format(&amp;quot;{0:0.00} kB&amp;quot;, $size / 1KB)}&lt;br /&gt;
    ElseIf ($size -gt 0)   {[string]::Format(&amp;quot;{0:0.00} B&amp;quot;, $size)}&lt;br /&gt;
    Else                   {&amp;quot;&amp;quot;}&lt;br /&gt;
 }&lt;br /&gt;
command&lt;br /&gt;
 Get-ChildItem | Select-Object Name, @{Name=&amp;quot;Size&amp;quot;;Expression={Format-FileSize($_.Length)}}&lt;br /&gt;
&lt;br /&gt;
=base64=&lt;br /&gt;
decode base64 string&lt;br /&gt;
 [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String(&amp;quot;YmxhaGJsYWg=&amp;quot;))&lt;br /&gt;
decode content of file.&lt;br /&gt;
 ssh ip_address_hostname &#039;$Text=(get-content &amp;quot;C:\Program Files\application\application.log&amp;quot;) ; $Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text) ; $EncodedText =[Convert]::ToBase64String($Bytes) ; $EncodedText&#039; | base64 -d&lt;br /&gt;
&lt;br /&gt;
=troubleshooting network=&lt;br /&gt;
 netstat -ano | findstr &amp;lt;ipremote-pid&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=diff=&lt;br /&gt;
Compare two files.&lt;br /&gt;
 compare-object (get-content one.txt) (get-content two.txt)&lt;br /&gt;
=log file. Eventlog=&lt;br /&gt;
List event logs.&lt;br /&gt;
 Get-EventLog -list&lt;br /&gt;
List events in a log.&lt;br /&gt;
 Get-EventLog -LogName IPremoteLog&lt;br /&gt;
List events sins date.&lt;br /&gt;
 Get-EventLog -LogName Application -after &amp;quot;den 5 november 2014 10:00:00&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get-winevent=&lt;br /&gt;
 # List event logs.&lt;br /&gt;
 Get-WinEvent -ListLog * | where {$_.RecordCount -gt 0}&lt;br /&gt;
 # Get latest rdp log entries.&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
&lt;br /&gt;
=date=&lt;br /&gt;
 Get-Date&lt;br /&gt;
Date in iso format.&lt;br /&gt;
 Get-Date -UFormat &#039;+%Y-%m-%d %H:%M:%S.000Z&#039;&lt;br /&gt;
&lt;br /&gt;
=full output=&lt;br /&gt;
Print all variable with full output&lt;br /&gt;
 &#039;(Get-Variable).StdOut&#039;&lt;br /&gt;
Send output to line like the following to get more output.&lt;br /&gt;
 | Ft -autosize | out-string -width 4096&lt;br /&gt;
&lt;br /&gt;
=restart services via samba=&lt;br /&gt;
install samba-common&lt;br /&gt;
 yum install samba-common&lt;br /&gt;
List services.&lt;br /&gt;
 net rpc service list -I IPADDRESS -U USERNAME%PASSWORD&lt;br /&gt;
Stop service.&lt;br /&gt;
 net rpc service start ipremote -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
Start service.&lt;br /&gt;
 net rpc service start ipeventwatcher -I IPADDRESS -U &#039;user%password&#039;&lt;br /&gt;
=Windows version=&lt;br /&gt;
 [System.Environment]::OSVersion.Version&lt;br /&gt;
 http://msdn.microsoft.com/en-us/library/windows/desktop/ms724833%28v=vs.85%29.aspx&lt;br /&gt;
 (Get-WmiObject -class Win32_OperatingSystem).Caption&lt;br /&gt;
Which architecture.&lt;br /&gt;
 gwmi win32_operatingsystem | select osarchitecture&lt;br /&gt;
&lt;br /&gt;
=set windows proxy=&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyEnable -Value 1&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyServer -Value proxy.int.redbridge.se&amp;quot;:&amp;quot;3128&lt;br /&gt;
 Set-ItemProperty &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&amp;quot; -Name ProxyOverride -Value &amp;quot;*.redbridge.se&amp;quot;&lt;br /&gt;
 Get-ItemProperty -Path &#039;HKCU:\Software\Microsoft\Windows\CurrentVersion\Internet Settings&#039; | findstr Proxy&lt;br /&gt;
&lt;br /&gt;
=Is proxy bypassed=&lt;br /&gt;
 $url = &amp;quot;http://10.127.12.10&amp;quot;;$webclient = New-Object System.Net.WebClient; $webclient.Proxy.IsBypassed($url)&lt;br /&gt;
&lt;br /&gt;
=curl=&lt;br /&gt;
 (Invoke-WebRequest http://localhost/Requests -UseBasicParsing).content&lt;br /&gt;
 curl -TimeoutSec 1 https://halfface.se&lt;br /&gt;
&lt;br /&gt;
=wget=&lt;br /&gt;
 Invoke-WebRequest -Uri &amp;quot;http://1.2.3.4/file.txt&amp;quot; -OutFile &amp;quot;file.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=turn of index services when computer is not used=&lt;br /&gt;
In stopindexer enter the line&lt;br /&gt;
 net stop wsearch&lt;br /&gt;
In the startindexer enter the line&lt;br /&gt;
 net start wsearch&lt;br /&gt;
&lt;br /&gt;
=robocopy(backup)=&lt;br /&gt;
 robocopy C:\Users\user_name\Documents h:\backup\user_name /e /mir /np /log+:c:\temp\backup_log.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=number of cpus=&lt;br /&gt;
 Get-WmiObject -class Win32_processor | ft systemname,Name,DeviceID,NumberOfCores,NumberOfLogicalProcessors, Addresswidth&lt;br /&gt;
&lt;br /&gt;
=cpu_usage=&lt;br /&gt;
cpu=&amp;lt;value&amp;gt;%&lt;br /&gt;
 $cpuUsage = Get-WmiObject Win32_Processor | Select-Object -ExpandProperty LoadPercentage ; $averageCpuUsage = ($cpuUsage | Measure-Object -Average).Average ; &amp;quot;cpu:{0:N0}%&amp;quot; -f $averageCpuUsage&lt;br /&gt;
 Get-Counter &#039;\Process(*)\% Processor Time&#039;| Select-Object -ExpandProperty countersamples | Select-Object -Property instancename, cookedvalue| Sort-Object -Property cookedvalue -Descending| Select-Object -First 20| ft InstanceName,@{L=&#039;CPU&#039;;E={($_.Cookedvalue/100).toString(&#039;P&#039;)}} -AutoSize | Ft -autosize | out-string -width 4096&lt;br /&gt;
 Get-WmiObject win32_processor | select LoadPercentage  |fl&lt;br /&gt;
Stats and all processes. Including process running under svhost.&lt;br /&gt;
 $CpuInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Processor;$MemInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_Memory;$SysInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfOS_System;$PrcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_PerfFormattedData_PerfProc_Process;$SvcInfo = Get-WmiObject -Namespace &amp;quot;root\cimv2&amp;quot; -Class Win32_Service;$GeneralInfo = @{};$ProcOutput = @();$ServiceTable = @{};$GeneralInfo.Add(&amp;quot;_Name&amp;quot;, $env:COMPUTERNAME);$GeneralInfo.Add(&amp;quot;ProcessorQueueLength&amp;quot;, $SysInfo.ProcessorQueueLength);$GeneralInfo.Add(&amp;quot;PercentInterruptTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentInterruptTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;AvailableMBytes&amp;quot;, $MemInfo.AvailableMBytes);$GeneralInfo.Add(&amp;quot;PercentIdleTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentIdleTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;PercentPrivilegedTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentPrivilegedTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;TotalMemory&amp;quot;, (Get-WmiObject Win32_ComputerSystem | %{$_.TotalPhysicalMemory}));$GeneralInfo.Add(&amp;quot;PercentProcessorTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentProcessorTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CacheBytes&amp;quot;, $MemInfo.CacheBytes);$GeneralInfo.Add(&amp;quot;PercentUserTime&amp;quot;, $($a = $CpuInfo | %{$_.PercentUserTime}; $a -join &amp;quot; &amp;quot;));$GeneralInfo.Add(&amp;quot;CommittedBytes&amp;quot;, $MemInfo.CommittedBytes);$GeneralInfo.GetEnumerator() | Sort-Object -Property Name | ForEach-Object {Write-Host -Object ($_.Name + &amp;quot;: &amp;quot;) -NoNewline; Write-Host -Object $_.Value};foreach($Service in $SvcInfo) {$ProcId = $Service.ProcessId.ToString();if($ProcId -ne &amp;quot;0&amp;quot;) {if($ServiceTable.ContainsKey($ProcId)) {$Value = $ServiceTable.Get_Item($ProcId);$Value += $Service.Name;$ServiceTable.Set_Item($ProcId, $Value);} else {$ServiceTable.Add($ProcId, @($Service.Name));}}}foreach($proc in $PrcInfo) {$Obj = New-Object psobject;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Process&amp;quot; -Value $proc.Name;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;CPU&amp;quot; -Value $proc.PercentProcessorTime;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Thread&amp;quot; -Value $proc.ThreadCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Handle&amp;quot; -Value $proc.HandleCount;$Obj | Add-Member -MemberType NoteProperty -Name &amp;quot;Services&amp;quot; -Value ($ServiceTable.Get_Item($proc.IDProcess.ToString()) -join &amp;quot;,&amp;quot;);$ProcOutput += $Obj;}$ProcOutput | ft -AutoSize&lt;br /&gt;
&lt;br /&gt;
=Sort processes by mem usage.=&lt;br /&gt;
 get-wmiobject WIN32_PROCESS | Sort-Object -Property ws -Descending|select -first 20|Select processname, @{Name=&amp;quot;Mem Usage(MB)&amp;quot;;Expression={[math]::round($_.ws / 1mb)}},@{Name=&amp;quot;ProcessID&amp;quot;;Expression={[String]$_.ProcessID}},@{Name=&amp;quot;UserID&amp;quot;;Expression={$_.getowner().user}} | Ft -autosize | out-string -width 4096&lt;br /&gt;
2&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, WorkingSet, CPU&lt;br /&gt;
3 Better formatting&lt;br /&gt;
 Get-Process | Sort-Object -Property WorkingSet -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}, @{Name=&amp;quot;CPU(s)&amp;quot;;Expression={[math]::Round($_.CPU,2)}}&lt;br /&gt;
4 private memory&lt;br /&gt;
 Get-Process | Sort-Object -Property PrivateMemorySize -Descending | Select-Object ProcessName, Id, @{Name=&amp;quot;PrivateMemory(MB)&amp;quot;;Expression={[math]::Round($_.PrivateMemorySize/1MB,2)}}, @{Name=&amp;quot;WorkingSet(MB)&amp;quot;;Expression={[math]::Round($_.WorkingSet/1MB,2)}}&lt;br /&gt;
&lt;br /&gt;
=total memory in machine=&lt;br /&gt;
 Get-WMIObject -class win32_physicalmemory | Format-Table devicelocator, capacity -a&lt;br /&gt;
=how much memory is free in GB=&lt;br /&gt;
 $freemem = Get-WmiObject -Class Win32_OperatingSystem; echo ([math]::round(($freemem.FreePhysicalMemory / 1024 / 1024), 2))&lt;br /&gt;
=Memory usage, Total memory=&lt;br /&gt;
 $mem = Get-Counter &#039;\Memory\Available MBytes&#039;&lt;br /&gt;
 $usedMem = (Get-Counter &#039;\Memory\Committed Bytes&#039;).CounterSamples.CookedValue / 1MB&lt;br /&gt;
 $availableMem = $mem.CounterSamples.CookedValue&lt;br /&gt;
 $usedMem = [math]::round($usedMem, 2)&lt;br /&gt;
 $availableMem = [math]::round($availableMem, 2)&lt;br /&gt;
 [PSCustomObject]@{&lt;br /&gt;
     UsedMemoryMB = $usedMem&lt;br /&gt;
     AvailableMemoryMB = $availableMem&lt;br /&gt;
     TotalMemoryMB = (Get-WmiObject Win32_ComputerSystem).TotalPhysicalMemory / 1MB&lt;br /&gt;
 }&lt;br /&gt;
=memory usage as percent usage=&lt;br /&gt;
 $memory = Get-WmiObject Win32_OperatingSystem ; $totalMemory = $memory.TotalVisibleMemorySize ; $freeMemory = $memory.FreePhysicalMemory ; $usedMemory = $totalMemory - $freeMemory ; $memoryUsage = ($usedMemory / $totalMemory) * 100 ; &amp;quot;mem:{0:N0}%&amp;quot; -f $memoryUsage&lt;br /&gt;
&lt;br /&gt;
=disk usage=&lt;br /&gt;
 Get-PSDrive&lt;br /&gt;
=tail=&lt;br /&gt;
Get last 10 lines&lt;br /&gt;
 Get-Content [filename] | Select-Object -Last 10&lt;br /&gt;
tail -f&lt;br /&gt;
 Get-Content filename.log -Wait&lt;br /&gt;
Since PowerShell 3.&lt;br /&gt;
 gc -Tail 10 log.txt &lt;br /&gt;
=head=&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc log.txt | select -first 10&lt;br /&gt;
get first 10 lines of file.&lt;br /&gt;
 gc -TotalCount 10 log.txt&lt;br /&gt;
&lt;br /&gt;
=wc count lines=&lt;br /&gt;
 Get-Content C:\temp\ERRORLOG.5 | Measure-Object -line&lt;br /&gt;
=disable firewall=&lt;br /&gt;
From the command line&lt;br /&gt;
 netsh advfirewall set allprofiles state off&lt;br /&gt;
Using Powershell&lt;br /&gt;
  Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False&lt;br /&gt;
=which firewall profiles are available=&lt;br /&gt;
 get-netfirewallprofile | select name,DefaultInboundAction,DefaultOutBoundAction | ft -a&lt;br /&gt;
=which firewall profile is being used=&lt;br /&gt;
 get-NetConnectionProfile&lt;br /&gt;
&lt;br /&gt;
=which ports are open=&lt;br /&gt;
 Get-NetFirewallRule | Where { $_.Enabled -eq &amp;quot;True&amp;quot; -and $_.Direction -eq &amp;quot;Inbound&amp;quot; }&lt;br /&gt;
=which rules exist=&lt;br /&gt;
 Get-NetFirewallRule&lt;br /&gt;
=open port in firewall=&lt;br /&gt;
 netsh advfirewall firewall add rule name=&amp;quot;Open Port 80&amp;quot; dir=in action=allow protocol=TCP localport=80&lt;br /&gt;
&lt;br /&gt;
=firewall get more info about opening=&lt;br /&gt;
 get-netfirewallrule -DisplayName &amp;quot;Remote Desktop - User Mode (TCP-In)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=add administrative user=&lt;br /&gt;
Create user&lt;br /&gt;
 net user /add root [password]&lt;br /&gt;
Add user to local group.&lt;br /&gt;
 net localgroup administrators root /add&lt;br /&gt;
=list local groups=&lt;br /&gt;
 Get-LocalGroup&lt;br /&gt;
&lt;br /&gt;
=Which process is using port=&lt;br /&gt;
 # Which process is using port.&lt;br /&gt;
 netstat -nao | findstr :22&lt;br /&gt;
  TCP    0.0.0.0:22             0.0.0.0:0              LISTENING       1916&lt;br /&gt;
 # Which process has pid.&lt;br /&gt;
 get-process  | findstr 1916&lt;br /&gt;
 355      40    48752      56056   621     6,45   1916 PowerShellServer&lt;br /&gt;
 # which process has pid.&lt;br /&gt;
 tasklist | findstr 1916&lt;br /&gt;
 PowerShellServer.exe          1916 Services                   0     56.072 K&lt;br /&gt;
=which version is installed=&lt;br /&gt;
 Get-ItemProperty HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall\* |  Select-Object DisplayName, DisplayVersion, Publisher, InstallDate | Format-Table -AutoSize&lt;br /&gt;
=list drives=&lt;br /&gt;
 get-psdrive&lt;br /&gt;
 wmic logicaldisk get caption&lt;br /&gt;
=svchost.exe what is happening=&lt;br /&gt;
 tasklist /svc /fi &amp;quot;IMAGENAME eq svchost.exe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=computer management=&lt;br /&gt;
Start computer management&lt;br /&gt;
 compmgmt.msc&lt;br /&gt;
=msinfo32=&lt;br /&gt;
Generate report.&lt;br /&gt;
 msinfo32&lt;br /&gt;
=licensing=&lt;br /&gt;
 Get-wmiobject SoftwareLicensingProduct -ComputerName localhost | Where-Object {$_.ApplicationID -eq &#039;55c92734-d682-4d71-983e-d6ec3f16059f&#039; -and $_.licensestatus -eq &#039;1&#039;} | Select name, description, @{Label=&#039;computer&#039;; Expression = {$_.PscomputerName}} | Format-List  name, description, computer&lt;br /&gt;
=add line inbetween lines=&lt;br /&gt;
 $filePath=&amp;quot;.\path_to_file&amp;quot;&lt;br /&gt;
 $textToAdd=&amp;quot;`nText to put in file&amp;quot;&lt;br /&gt;
 $fileContent = Get-Content $filePath&lt;br /&gt;
 $fileContent[$lineNumber+2] += $textToAdd&lt;br /&gt;
 $fileContent | Set-Content $filePath&lt;br /&gt;
=add line to end of file=&lt;br /&gt;
Add-Content c:\scripts\test.txt &amp;quot;The End&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=get network settings=&lt;br /&gt;
Get among other things mtu&lt;br /&gt;
 Get-NetIPInterface&lt;br /&gt;
=start time of process=&lt;br /&gt;
List start time from processes found with Get-Process.&lt;br /&gt;
 get-process openvpn |select starttime&lt;br /&gt;
=list local users=&lt;br /&gt;
 Get-WmiObject -Class Win32_UserAccount -Filter  &amp;quot;LocalAccount=&#039;True&#039;&amp;quot;&lt;br /&gt;
=list logged in users=&lt;br /&gt;
 query user /server:$SERVER&lt;br /&gt;
&lt;br /&gt;
=list permissions for users=&lt;br /&gt;
 Accesschk &amp;quot;NKS01579\ipwinpsr&amp;quot; -accepteula -a *&lt;br /&gt;
&lt;br /&gt;
=create windows boot media under linux=&lt;br /&gt;
 woeusb  --target-filesystem NTFS --device /install/system/win10/Win10_1909_EnglishInternational_x64.iso  /dev/sdb&lt;br /&gt;
&lt;br /&gt;
=rename computer=&lt;br /&gt;
 $NewName=&amp;quot;alva&amp;quot;&lt;br /&gt;
 $ComputerInfo = Get-WmiObject -Class Win32_ComputerSystem&lt;br /&gt;
 $ComputerInfo.Rename($NewName)&lt;br /&gt;
 Restart-Computer&lt;br /&gt;
=startup dir=&lt;br /&gt;
The All Users Startup Folder is located at the following path:&lt;br /&gt;
 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp&lt;br /&gt;
The Current User Startup Folder is located here:&lt;br /&gt;
 C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup&lt;br /&gt;
=cmd scroll mode=&lt;br /&gt;
 Alt+Space -&amp;gt; E -&amp;gt; L&lt;br /&gt;
=enable rdp=&lt;br /&gt;
 Set-ItemProperty -Path &#039;HKLM:\System\CurrentControlSet\Control\Terminal Server&#039; -name &amp;quot;fDenyTSConnections&amp;quot; -value 0&lt;br /&gt;
 Enable-NetFirewallRule -DisplayGroup &amp;quot;Remote Desktop&amp;quot;&lt;br /&gt;
=rdp allow many sessions=&lt;br /&gt;
 https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip&lt;br /&gt;
&lt;br /&gt;
=disable defender=&lt;br /&gt;
 Set-MpPreference -DisableRealtimeMonitoring $true&lt;br /&gt;
 REG ADD &amp;quot;hklm\software\policies\microsoft\windows defender&amp;quot; /v DisableAntiSpyware /t REG_DWORD /d 1 /F&lt;br /&gt;
&lt;br /&gt;
=list scheduled tasks=&lt;br /&gt;
 &#039;Get-ScheduledTask | Ft -autosize | out-string -width 4096&#039;&lt;br /&gt;
=scheduled tasks enable disable=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive*&lt;br /&gt;
 TaskPath                                       TaskName                          State     &lt;br /&gt;
 --------                                       --------                          -----     &lt;br /&gt;
 \Microsoft\Windows\User Profile Service\       HiveUploadTask                    Disabled  &lt;br /&gt;
=Enable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Enable-ScheduledTask&lt;br /&gt;
=Disable scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Disable-ScheduledTask&lt;br /&gt;
=Start scheduled task=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Start-ScheduledTask&lt;br /&gt;
=Look at scheduled task=&lt;br /&gt;
 Get-ScheduledTask -TaskName Hive* | Format-List *&lt;br /&gt;
&lt;br /&gt;
=Get output from last scheduled command execution=&lt;br /&gt;
 Get-ScheduledTask -taskname Hive* | Get-ScheduledTaskInfo&lt;br /&gt;
=scheduled task add=&lt;br /&gt;
 $action = New-ScheduledTaskAction -Execute &#039;Powershell.exe&#039; -Argument &#039;-NoProfile -WindowStyle Hidden -command &amp;quot;net user /add special_user PassW0rd ; net localgroup administrators special_user /add&amp;quot;&#039;&lt;br /&gt;
 $trigger = New-ScheduledTaskTrigger -Daily -At 12am&lt;br /&gt;
 $task = Register-ScheduledTask -RunLevel &amp;quot;Highest&amp;quot; -TaskName &amp;quot;Add special_user&amp;quot; -Trigger $trigger -Action $action&lt;br /&gt;
 $task.Triggers.Repetition.Duration = &amp;quot;P1D&amp;quot; # Repeat for a duration of one day&lt;br /&gt;
 $task.Triggers.Repetition.Interval = &amp;quot;PT1H&amp;quot; # Repeat every 30 minutes, use PT1H for every hour&lt;br /&gt;
 $task.Principal = New-ScheduledTaskPrincipal -UserID &amp;quot;NT AUTHORITY\SYSTEM&amp;quot; -LogonType ServiceAccount -RunLevel Highest&lt;br /&gt;
 $task | Set-ScheduledTask&lt;br /&gt;
With script.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$action = New-ScheduledTaskAction -Execute &#039;powershell.exe&#039; -Argument &amp;quot;-NoProfile -ExecutionPolicy Bypass -Command `&amp;quot;&amp;amp; &#039;C:\temp\troubleshooting.ps1&#039; &amp;gt;&amp;gt; &#039;C:\temp\troubleshooting.log&#039;`&amp;quot;&amp;quot;&lt;br /&gt;
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Hours 1)&lt;br /&gt;
$principal = New-ScheduledTaskPrincipal -GroupId &amp;quot;BUILTIN\Administrators&amp;quot; -RunLevel Highest&lt;br /&gt;
$settings = New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Hours 1) -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 1)&lt;br /&gt;
$task = New-ScheduledTask -Action $action -Trigger $trigger -Principal $principal -Settings $settings&lt;br /&gt;
Register-ScheduledTask -TaskName &#039;troubleshooting-abjorklund&#039; -InputObject $task -User &amp;quot;System&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=remove scheduled task=&lt;br /&gt;
 Unregister-ScheduledTask -TaskName Hive* -Confirm:$false&lt;br /&gt;
&lt;br /&gt;
=touch=&lt;br /&gt;
 echo $null &amp;gt;&amp;gt; filename&lt;br /&gt;
=bitlocker read from linux=&lt;br /&gt;
 https://www.ceos3c.com/open-source/open-bitlocker-drive-linux/&lt;br /&gt;
=runas(sudo)=&lt;br /&gt;
Run command as other user.&lt;br /&gt;
 runas /user:%computername%\root cmd&lt;br /&gt;
&lt;br /&gt;
=install sshd=&lt;br /&gt;
 On Windows 10 version 1803 and newer&lt;br /&gt;
 In Settings app, go to Apps &amp;gt; Apps &amp;amp; features &amp;gt; Manage optional features.&lt;br /&gt;
 Locate &amp;quot;OpenSSH server&amp;quot; feature, expand it, and select Install.&lt;br /&gt;
 Binaries are installed to %WINDIR%\System32\OpenSSH. Configuration file (sshd_config) and host keys are installed to %ProgramData%\ssh (only after the server is started for the first time).&lt;br /&gt;
&lt;br /&gt;
You may still want to use the following manual installation, if you want to install a newer version of OpenSSH than the one built into Windows 10.&lt;br /&gt;
 https://github.com/PowerShell/Win32-OpenSSH/releases (package OpenSSH-Win64.zip or OpenSSH-Win32.zip)&lt;br /&gt;
 As the Administrator, extract the package to C:\Program Files\OpenSSH&lt;br /&gt;
 powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1&lt;br /&gt;
Configuring SSH server&lt;br /&gt;
Allow incoming connections to SSH server in Windows Firewall:&lt;br /&gt;
 New-NetFirewallRule -Name sshd -DisplayName &#039;OpenSSH SSH Server&#039; -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22&lt;br /&gt;
or go to Control Panel &amp;gt; System and Security &amp;gt; Windows Firewall1 &amp;gt; Advanced Settings &amp;gt; Inbound Rules and add a new rule for port 22.&lt;br /&gt;
Start the service and/or configure automatic start:&lt;br /&gt;
 start-service &amp;quot;OpenSSH SSH Server&amp;quot;&lt;br /&gt;
 Set-Service -Name sshd -StartupType Automatic&lt;br /&gt;
=installing built in ssh server to be able to login without password=&lt;br /&gt;
 # setup ssh C:\ProgramData\ssh\sshd_config&lt;br /&gt;
 SyslogFacility LOCAL0&lt;br /&gt;
 LogLevel Debug3&lt;br /&gt;
 PermitRootLogin yes&lt;br /&gt;
 PubkeyAuthentication yes&lt;br /&gt;
 AuthorizedKeysFile      .ssh/authorized_keys&lt;br /&gt;
 # Put authorized_keys here.&lt;br /&gt;
 c:/ProgramData/ssh/administrators_authorized_keys&lt;br /&gt;
&lt;br /&gt;
=route=&lt;br /&gt;
==show routes==&lt;br /&gt;
Powershell&lt;br /&gt;
 Get-NetRoute&lt;br /&gt;
One interface index&lt;br /&gt;
 Get-NetRoute -InterfaceIndex 12&lt;br /&gt;
cmd&lt;br /&gt;
 route print -4&lt;br /&gt;
==Add route==&lt;br /&gt;
Powershell&lt;br /&gt;
 New-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1&lt;br /&gt;
cmd&lt;br /&gt;
 route -p ADD 10.255.240.0 MASK 255.255.255.0 172.30.103.4&lt;br /&gt;
 route -p add 0.0.0.0 mask 0.0.0.0 172.30.103.10&lt;br /&gt;
==Remove route==&lt;br /&gt;
 Remove-NetRoute -DestinationPrefix &amp;quot;10.0.0.0/24&amp;quot; -InterfaceIndex 12 -NextHop 192.168.0.1 -Confirm:$false&lt;br /&gt;
==Get routing information.==&lt;br /&gt;
 Find-NetRoute -RemoteIPAddress &amp;quot;10.0.0.34&amp;quot; | Select-Object ifIndex,DestinationPrefix,NextHop,RouteMetric -Last 1&lt;br /&gt;
&lt;br /&gt;
=last login on local machine=&lt;br /&gt;
 get-localuser | Select Name,LastLogon | sort LastLogon&lt;br /&gt;
=last logged in user and grep for user=&lt;br /&gt;
 Function Get-LoginEvents {&lt;br /&gt;
    Param (&lt;br /&gt;
        [Parameter(&lt;br /&gt;
            ValueFromPipeline = $true,&lt;br /&gt;
            ValueFromPipelineByPropertyName = $true&lt;br /&gt;
        )]&lt;br /&gt;
        [Alias(&#039;Name&#039;)]&lt;br /&gt;
        [string]$ComputerName = $env:ComputerName&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$StartTime&lt;br /&gt;
        ,&lt;br /&gt;
        [datetime]$EndTime&lt;br /&gt;
    )&lt;br /&gt;
    Begin {&lt;br /&gt;
        enum LogonTypes {&lt;br /&gt;
            Interactive = 2&lt;br /&gt;
            Network = 3&lt;br /&gt;
            Batch = 4&lt;br /&gt;
            Service = 5&lt;br /&gt;
            Unlock = 7&lt;br /&gt;
            NetworkClearText = 8&lt;br /&gt;
            NewCredentials = 9&lt;br /&gt;
            RemoteInteractive = 10&lt;br /&gt;
            CachedInteractive = 11&lt;br /&gt;
        }&lt;br /&gt;
        $filterHt = @{&lt;br /&gt;
            LogName = &#039;Security&#039;&lt;br /&gt;
            ID = 4624&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;StartTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;StartTime&#039;] = $StartTime&lt;br /&gt;
        }&lt;br /&gt;
        if ($PSBoundParameters.ContainsKey(&#039;EndTime&#039;)){&lt;br /&gt;
            $filterHt[&#039;EndTime&#039;] = $EndTime&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    Process {&lt;br /&gt;
        Get-WinEvent -MaxEvents 100 -ComputerName $ComputerName -FilterHashtable $filterHt | foreach-Object {&lt;br /&gt;
            [pscustomobject]@{&lt;br /&gt;
                ComputerName = $ComputerName&lt;br /&gt;
                UserAccount = $_.Properties.Value[5]&lt;br /&gt;
                UserDomain = $_.Properties.Value[6]&lt;br /&gt;
                LogonType = [LogonTypes]$_.Properties.Value[8]&lt;br /&gt;
                WorkstationName = $_.Properties.Value[11]&lt;br /&gt;
                SourceNetworkAddress = $_.Properties.Value[19]&lt;br /&gt;
                TimeStamp = $_.TimeCreated&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    End{}&lt;br /&gt;
 }&lt;br /&gt;
 Get-LoginEvents &amp;gt; login&lt;br /&gt;
 gc login | select-string dabuzaid -Context 5&lt;br /&gt;
&lt;br /&gt;
=powersave disable=&lt;br /&gt;
 powercfg /x -hibernate-timeout-ac 0&lt;br /&gt;
 powercfg /x -hibernate-timeout-dc 0&lt;br /&gt;
 powercfg /x -disk-timeout-ac 0&lt;br /&gt;
 powercfg /x -disk-timeout-dc 0&lt;br /&gt;
 powercfg /x -monitor-timeout-ac 0&lt;br /&gt;
 powercfg /x -monitor-timeout-dc 0&lt;br /&gt;
 Powercfg /x -standby-timeout-ac 0&lt;br /&gt;
 powercfg /x -standby-timeout-dc 0&lt;br /&gt;
=hostname=&lt;br /&gt;
Get fqdn&lt;br /&gt;
 [System.Net.Dns]::GetHostByName($env:computerName).HostName&lt;br /&gt;
 &amp;quot;$env:computername.$env:userdnsdomain&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=resolve hostname=&lt;br /&gt;
 Resolve-DnsName -server 8.8.8.8 smtp.google.com | Format-Table Name, IPAddress -HideTableHeaders&lt;br /&gt;
&lt;br /&gt;
=clear screen reset=&lt;br /&gt;
 cls&lt;br /&gt;
=top(-wikipedia)=&lt;br /&gt;
 While(1) {ps | sort -des cpu | select -f 15 | ft -a; sleep 1; cls}&lt;br /&gt;
&lt;br /&gt;
=get users sid=&lt;br /&gt;
 wmic useraccount where name=&#039;dkarlslatt&#039; get sid&lt;br /&gt;
=traceroute=&lt;br /&gt;
 Test-NetConnection &amp;quot;IPaddress/HOSTaname&amp;quot; -TraceRoute&lt;br /&gt;
=name of ad servers=&lt;br /&gt;
 nslookup -type=srv _ldap._tcp.dc._msdcs.${AD}&lt;br /&gt;
=manage ad users and computers=&lt;br /&gt;
 dsa.msc&lt;br /&gt;
&lt;br /&gt;
=iis logfiles=&lt;br /&gt;
Read last lines from iis log.&lt;br /&gt;
 gc -Tail 10 &amp;quot;C:\InetPub\Logs\LogFiles\W3SVC1\u_ex$(Get-Date -F &#039;yyMMdd&#039;).log&amp;quot;&lt;br /&gt;
=join domain=&lt;br /&gt;
 netdom join %computername% /domain:your.ADDomainToJoin.net /UserD:LoginWithJoinPermissions /PasswordD:%password%&lt;br /&gt;
=windows update info=&lt;br /&gt;
 wmic qfe list&lt;br /&gt;
=patch=&lt;br /&gt;
Update release area Windows.&lt;br /&gt;
 servicepack.exe -s:z:\w2k3&lt;br /&gt;
=get date in iso format=&lt;br /&gt;
 Get-Date (Get-Date) -UFormat &#039;+%Y-%m-%d %H:%M:%S&#039;&lt;br /&gt;
 (Get-Date).ToString(&amp;quot;yyyy-MM-dd hh:mm:ss&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
=format-list(fl)=&lt;br /&gt;
 Get-WinEvent -LogName &amp;quot;Microsoft-Windows-TerminalServices-RemoteConnectionManager/Operational&amp;quot; | select * -first 1 | fl&lt;br /&gt;
=whoami=&lt;br /&gt;
 echo &amp;quot;$env:UserDomain $env:UserName $env:ComputerName&amp;quot;&lt;br /&gt;
=group=&lt;br /&gt;
 (New-Object System.DirectoryServices.DirectorySearcher(&amp;quot;(&amp;amp;(objectCategory=User)(samAccountName=$($env:username)))&amp;quot;)).FindOne().GetDirectoryEntry().memberOf&lt;br /&gt;
=unzip=&lt;br /&gt;
 Expand-Archive C:\a.zip&lt;br /&gt;
=take ownership and remove=&lt;br /&gt;
 Remove-Item -Recurse -Force &amp;lt;directory&amp;gt;&lt;br /&gt;
 takeown /a /r /d Y /f &amp;lt;directory&amp;gt;&lt;br /&gt;
=print info to remove directories=&lt;br /&gt;
Prepare with two lists. One with users who are suitable to have their directories removed. And one list with the output from dir in c:\users.&lt;br /&gt;
 cat uc-remote01_login.txt | while read WIN_USER WIN_DATE ; do echo &#039;#&#039; $WIN_USER $WIN_DATE ; DIRECTORY=$(grep &amp;quot; $WIN_USER&amp;quot; uc-remote01_users.txt) ; if [ &amp;quot;${DIRECTORY}&amp;quot; ] ; then echo Remove-Item -Recurse -Force $WIN_USER \; takeown /a /r /d Y /f $WIN_USER \; Remove-Item -Recurse -Force $WIN_USER ; fi ; done&lt;br /&gt;
=list environments variables=&lt;br /&gt;
 dir env:&lt;br /&gt;
=list shares=&lt;br /&gt;
 Get-SmbShare&lt;br /&gt;
=Stop grouping applications on task bar=&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced&amp;quot; -Name &amp;quot;TaskbarGlomLevel&amp;quot; -Value 2&lt;br /&gt;
 Stop-Process -Name explorer -Force&lt;br /&gt;
 Start-Process explorer&lt;br /&gt;
=autohide taskbar=&lt;br /&gt;
 $p=&#039;HKCU:SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\StuckRects3&#039;;$v=(Get-ItemProperty -Path $p).Settings;$v[8]=($v[8] -bor 1);Set-ItemProperty -Path $p -Name Settings -Value $v;Stop-Process -f -ProcessName explorer&lt;br /&gt;
&lt;br /&gt;
=install cmdlet=&lt;br /&gt;
  install-module sqlserver&lt;br /&gt;
=install chocolate=&lt;br /&gt;
 Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&#039;https://community.chocolatey.org/install.ps1&#039;))&lt;br /&gt;
=manage jobs=&lt;br /&gt;
Start job&lt;br /&gt;
 Start-Job -FilePath C:\temp\cronjob.ps1&lt;br /&gt;
List jobs&lt;br /&gt;
 Get-Job&lt;br /&gt;
Stop jobs&lt;br /&gt;
 Stop-Job -Id &amp;lt;JobID&amp;gt;&lt;br /&gt;
 Stop-Job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
Delete Jobs&lt;br /&gt;
 Remove-job -Name &amp;lt;JobName&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=timezone=&lt;br /&gt;
List timezones&lt;br /&gt;
 Get-TimeZone -ListAvailable | grep -A10 -B10 Stockholm&lt;br /&gt;
Set Stockholm time.&lt;br /&gt;
 Set-TimeZone -Name &amp;quot;W. Europe Standard Time&amp;quot;&lt;br /&gt;
=locale=&lt;br /&gt;
 $env:LANG = &#039;en-US&#039;&lt;br /&gt;
=path variable=&lt;br /&gt;
 echo $env:path&lt;br /&gt;
=tweak windows=&lt;br /&gt;
 https://winaerotweaker.com/&lt;br /&gt;
=autologin=&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v AutoAdminLogon /t REG_SZ /d 1 /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultUserName /t REG_SZ /d &amp;quot;name@outlook.com&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultPassword /t REG_SZ /d &amp;quot;YourPassword123&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v DefaultDomainName /t REG_SZ /d &amp;quot;MicrosoftAccount&amp;quot; /f&lt;br /&gt;
 reg add &amp;quot;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon&amp;quot; /v ForceAutoLogon /t REG_SZ /d 1 /f&lt;br /&gt;
=expand disk=&lt;br /&gt;
 diskmgmt.msc&lt;br /&gt;
=create user from existing=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Define parameters for the new user&lt;br /&gt;
$newUser = @{&lt;br /&gt;
    Name              = &amp;quot;&amp;lt;Full Name&amp;gt;&amp;quot;&lt;br /&gt;
    GivenName         = &amp;quot;&amp;lt;First&amp;gt;&amp;quot;&lt;br /&gt;
    Surname           = &amp;quot;&amp;lt;LastName&amp;gt;&amp;quot;&lt;br /&gt;
    SamAccountName    = &amp;quot;andreas.stenudd&amp;quot;&lt;br /&gt;
    UserPrincipalName = &amp;quot;andreas.stenudd@xpdo.xpeedio.local&amp;quot;&lt;br /&gt;
    AccountPassword   = (ConvertTo-SecureString &amp;quot;&amp;lt;password&amp;gt;&amp;quot; -AsPlainText -Force)&lt;br /&gt;
    Enabled           = $true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Specify the existing user to copy from (replace with actual SAM account name)&lt;br /&gt;
$templateUserSam = &amp;quot;andreas.bjorklund&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the template user&#039;s properties&lt;br /&gt;
$templateUser = Get-ADUser -Identity $templateUserSam -Properties *&lt;br /&gt;
&lt;br /&gt;
# Create the new user, copying the OU (Path) from the template user&lt;br /&gt;
$newUserParams = $newUser.Clone()&lt;br /&gt;
$newUserParams.Path = $templateUser.DistinguishedName -replace &#039;^CN=.*?,&#039;, &#039;&#039;  # Extract OU from template user&#039;s DN&lt;br /&gt;
&lt;br /&gt;
# Create the new user&lt;br /&gt;
New-ADUser @newUserParams&lt;br /&gt;
&lt;br /&gt;
# Copy group memberships from the template user&lt;br /&gt;
$templateUser.MemberOf | ForEach-Object {&lt;br /&gt;
    Add-ADGroupMember -Identity $_ -Members $newUser.SamAccountName&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Write-Output &amp;quot;User $($newUser.Name) created successfully with group memberships copied from $templateUserSam.&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=mount iso=&lt;br /&gt;
 Mount-DiskImage -ImagePath  &#039;z:\temp\torrentz\The.Sims.4.Enchanted.by.Nature-RUNE\rune-the.sims.4.enchanted.by.nature.iso&#039;&lt;br /&gt;
=list disks including devicename=&lt;br /&gt;
 mountvol&lt;br /&gt;
=list shadowcopy=&lt;br /&gt;
 Get-WmiObject -Class Win32_ShadowCopy&lt;br /&gt;
=list dedup=&lt;br /&gt;
 Get-Dedupstatus&lt;br /&gt;
==dedup garbagecollection==&lt;br /&gt;
 Start-DedupJob -volume f: -type garbagecollection&lt;br /&gt;
=keyboard=&lt;br /&gt;
List keyboards and lang.&lt;br /&gt;
 Get-WinUserLanguageList&lt;br /&gt;
Install English menus and Swedish keyboard.&#039;&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 $LangList.Add(&amp;quot;en-SE&amp;quot;)&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
Uninstall keyboards&lt;br /&gt;
 $LangList = Get-WinUserLanguageList&lt;br /&gt;
 # Remove en-US entirely&lt;br /&gt;
 $LangList = $LangList | Where-Object { $_.LanguageTag -ne &amp;quot;en-GB&amp;quot; }&lt;br /&gt;
 Set-WinUserLanguageList $LangList -Force&lt;br /&gt;
=curl/vim=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$binPath = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
if (-not (Test-Path $binPath -PathType Container)) {&lt;br /&gt;
  New-Item -ItemType Directory -Path $binPath&lt;br /&gt;
  Write-Host &amp;quot;Created $binPath&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
cd C:\Users\$env:USERNAME\bin&lt;br /&gt;
curl https://halfface.se/windows/windows.zip -o windows.zip&lt;br /&gt;
Expand-Archive -Path windows.zip -DestinationPath . -Force&lt;br /&gt;
Remove-Item Alias:curl&lt;br /&gt;
if ($env:PATH -notlike &amp;quot;*;C:\Users\$env:USERNAME\bin*&amp;quot;) {&lt;br /&gt;
  $env:PATH += &amp;quot;;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make above permanent.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
target = &amp;quot;C:\Users\$env:USERNAME\bin&amp;quot;&lt;br /&gt;
# Add to user PATH only if it&#039;s not already there&lt;br /&gt;
$currentPath = [Environment]::GetEnvironmentVariable(&amp;quot;Path&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
if ($currentPath -notlike &amp;quot;*$target*&amp;quot;) {&lt;br /&gt;
  [Environment]::SetEnvironmentVariable(&amp;quot;Path&amp;quot;, $currentPath + &amp;quot;;$target&amp;quot;, &amp;quot;User&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Replace 1234 with your actual PID&lt;br /&gt;
$pid = 1234&lt;br /&gt;
&lt;br /&gt;
# Method 1: Using Get-Process and Get-Service&lt;br /&gt;
$process = Get-Process -Id $pid -ErrorAction SilentlyContinue&lt;br /&gt;
if ($process) {&lt;br /&gt;
    $serviceName = (Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq $pid }).Name&lt;br /&gt;
    if ($serviceName) {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid belongs to service: $serviceName&amp;quot;&lt;br /&gt;
        Get-Service -Name $serviceName&lt;br /&gt;
    } else {&lt;br /&gt;
        Write-Host &amp;quot;PID $pid does NOT belong to any service&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
} else {&lt;br /&gt;
    Write-Host &amp;quot;Process with PID $pid not found&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=what does pid belong to=&lt;br /&gt;
 Get-WmiObject Win32_Service | Where-Object { $_.ProcessId -eq 1234 } | Select-Object Name, DisplayName, State, StartMode, PathName&lt;br /&gt;
=dmidecode/lshw/inventory=&lt;br /&gt;
 Get-ComputerInfo | Select-Object CsName, WindowsVersion, OsArchitecture, CsTotalPhysicalMemory, OsNumberOfProcesses&lt;br /&gt;
=scheduled task=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Get detailed task information&lt;br /&gt;
$task = Get-ScheduledTask -TaskName &amp;quot;Hive*&amp;quot;&lt;br /&gt;
$taskInfo = Get-ScheduledTaskInfo -InputObject $task&lt;br /&gt;
&lt;br /&gt;
# Display key information&lt;br /&gt;
Write-Host &amp;quot;Task Name: $($task.TaskName)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task Path: $($task.TaskPath)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Run Time: $($taskInfo.LastRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Last Result: 0x$($taskInfo.LastTaskResult.ToString(&#039;X8&#039;))&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Next Run Time: $($taskInfo.NextRunTime)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Number of Missed Runs: $($taskInfo.NumberOfMissedRuns)&amp;quot;&lt;br /&gt;
Write-Host &amp;quot;Task State: $($task.State)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Get the exit code meaning&lt;br /&gt;
$exitCode = $taskInfo.LastTaskResult&lt;br /&gt;
switch ($exitCode) {&lt;br /&gt;
    0 { Write-Host &amp;quot;Exit Code: 0x0 - SUCCESS&amp;quot; -ForegroundColor Green }&lt;br /&gt;
    1 { Write-Host &amp;quot;Exit Code: 0x1 - INVALID FUNCTION&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    2 { Write-Host &amp;quot;Exit Code: 0x2 - FILE NOT FOUND&amp;quot; -ForegroundColor Red }&lt;br /&gt;
    10 { Write-Host &amp;quot;Exit Code: 0xA - INCORRECT ENVIRONMENT&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    267008 { Write-Host &amp;quot;Exit Code: 0x41300 - SCHEDULED TASK STOPPED&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    3221225786 { Write-Host &amp;quot;Exit Code: 0xC000013A - APPLICATION TERMINATED BY CTRL+C&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
    default { Write-Host &amp;quot;Exit Code: 0x$($exitCode.ToString(&#039;X8&#039;))&amp;quot; -ForegroundColor Yellow }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=disable screen saver=&lt;br /&gt;
Disable screen saver&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaveActive -Value 0&lt;br /&gt;
Optional: Also disable password protection on resume (if screen saver were enabled)&lt;br /&gt;
 Set-ItemProperty -Path &amp;quot;HKCU:\Control Panel\Desktop&amp;quot; -Name ScreenSaverIsSecure -Value 0&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16567</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16567"/>
		<updated>2026-03-04T10:43:03Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* delete operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
=delete operator=&lt;br /&gt;
 export OPERATOR=gitops ; oc get csv,subscriptions -n openshift-operators | grep &amp;quot;${OPERATOR}&amp;quot; | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get $i -n openshift-operators &amp;lt;/dev/null; echo oc delete $i ; done ; oc get installplan -n openshift-operators --sort-by=.metadata.creationTimestamp | grep &amp;quot;${OPERATOR}&amp;quot; | tail -n1 | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get installplan $i -n openshift-operators &amp;lt;/dev/null ; echo oc delete installplan $i; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16566</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16566"/>
		<updated>2026-03-04T10:39:06Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* delete operator */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
=delete operator=&lt;br /&gt;
 export OPERATOR=gitops ; oc get csv,subscriptions -n openshift-operators | grep &amp;quot;${OPERATOR}&amp;quot; | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get $i -n openshift-operators ; echo oc delete $i ; done ; oc get installplan -n openshift-operators --sort-by=.metadata.creationTimestamp | grep &amp;quot;${OPERATOR}&amp;quot; | tail -n1 | awk &#039;{print $1}&#039; | while read i ; do oc_script_log_yaml_kubectl-neat oc get installplan $i -n openshift-operators ; echo oc delete installplan $i; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16565</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16565"/>
		<updated>2026-02-26T05:53:23Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Dog */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kitten=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           .               ,.&lt;br /&gt;
          T.&amp;quot;-._..---.._,-&amp;quot;/|&lt;br /&gt;
          l|&amp;quot;-.  _.v._   (&amp;quot; |&lt;br /&gt;
          [l /.&#039;_ \; _~&amp;quot;-.`-t&lt;br /&gt;
          Y &amp;quot; _(o} _{o)._ ^.|&lt;br /&gt;
          j  T  ,-&amp;lt;v&amp;gt;-.  T  ]&lt;br /&gt;
          \  l ( /-^-\ ) !  !&lt;br /&gt;
           \. \.  &amp;quot;~&amp;quot;  ./  /c-..,__&lt;br /&gt;
             ^r- .._ .- .-&amp;quot;  `- .  ~&amp;quot;--.&lt;br /&gt;
              &amp;gt; \.                      \&lt;br /&gt;
              ]   ^.                     \&lt;br /&gt;
              3  .  &amp;quot;&amp;gt;            .       Y&lt;br /&gt;
 ,.__.--._   _j   \ ~   .         ;       |&lt;br /&gt;
(    ~&amp;quot;-._~&amp;quot;^._\   ^.    ^._      I     . l&lt;br /&gt;
 &amp;quot;-._ ___ ~&amp;quot;-,_7    .Z-._   7&amp;quot;   Y      ;  \        _&lt;br /&gt;
    /&amp;quot;   &amp;quot;~-(r r  _/_--._~-/    /      /,.--^-._   / Y&lt;br /&gt;
    &amp;quot;-._    &#039;&amp;quot;~~~&amp;gt;-._~]&amp;gt;--^---./____,.^~        ^.^  !&lt;br /&gt;
        ~--._    &#039;   Y---.                        \./&lt;br /&gt;
             ~~--._  l_   )                        \&lt;br /&gt;
                   ~-._~~~---._,____..---           \&lt;br /&gt;
                       ~----&amp;quot;~       \&lt;br /&gt;
                                      \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Vim&amp;diff=16564</id>
		<title>Vim</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Vim&amp;diff=16564"/>
		<updated>2026-02-25T15:17:43Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* delete  words */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Useful commands.&lt;br /&gt;
&lt;br /&gt;
=registries=&lt;br /&gt;
List registers.&lt;br /&gt;
 :reg&lt;br /&gt;
Paste register 5&lt;br /&gt;
 &amp;quot;5p&lt;br /&gt;
==spell check==&lt;br /&gt;
Enable spell check. Suggestions. Move between words. Stop spell check.&lt;br /&gt;
 :set spell spelllang=en,sv&lt;br /&gt;
 z=&lt;br /&gt;
 ]s and [s&lt;br /&gt;
 :set nospell&lt;br /&gt;
&lt;br /&gt;
==Switch to last file==&lt;br /&gt;
 :e#&lt;br /&gt;
&lt;br /&gt;
==vim shortcuts==&lt;br /&gt;
 Shortcut      Description                                               &lt;br /&gt;
 ESC           Switch to command mode.                                   &lt;br /&gt;
 i             Insert before cursor.                                     &lt;br /&gt;
 a             Insert after cursor.                                      &lt;br /&gt;
 I             Insert at the beginning of line.                          &lt;br /&gt;
 A             Insert at the end of line.                                &lt;br /&gt;
 C             Change text to the end of line (equivalent to c$).        &lt;br /&gt;
 cc or S       Change current line (equivalent to 0c$).                  &lt;br /&gt;
 s             Delete a single character under the cursor and enter input&lt;br /&gt;
 r             Replaces a single character under the cursor (without leaving command mode).                                    &lt;br /&gt;
 R             Replaces characters under cursor.                         &lt;br /&gt;
 v             Edit (and execute) the current command in the text editor.&lt;br /&gt;
 h             Move one character right.                                 &lt;br /&gt;
 l             Move one character left.                                  &lt;br /&gt;
 w             Move one word or token right.                             &lt;br /&gt;
 b             Move one word or token left.                              &lt;br /&gt;
 W             Move one non-blank word right.                            &lt;br /&gt;
 B             Move one non-blank word left.                             &lt;br /&gt;
 e             Move to the end of the current word.                      &lt;br /&gt;
 E             Move to the end of the current non-blank word.            &lt;br /&gt;
 0             Move to the beginning of line                             &lt;br /&gt;
 ^             Move to the first non-blank character of line.            &lt;br /&gt;
 $             Move to the end of line.                                  &lt;br /&gt;
 %             Move to the corresponding opening/closing bracket.        &lt;br /&gt;
 fc            Move right to the next occurance of char c.               &lt;br /&gt;
 Fc            Move left to the previous occurance of c.                 &lt;br /&gt;
 tc            Move right to the next occurance of c, then one char backward.                                                 &lt;br /&gt;
 Tc            Move left to the previous occurance of c, then one char forward.                                                  &lt;br /&gt;
 ;             Redo the last character finding command.                  &lt;br /&gt;
 ,             Redo the last character finding command in opposite direction.                                                &lt;br /&gt;
 |             Move to the n-th column (you may specify the argument n by typing it on number keys, for example, 20|)               &lt;br /&gt;
 x             Delete a single character under the cursor.               &lt;br /&gt;
 X             Delete a character before the cursor.                     &lt;br /&gt;
 d&amp;lt;mov. comm&amp;gt;  Delete text of a movement command &amp;lt;mov. comm&amp;gt; (see above).&lt;br /&gt;
 D             Delete to the end of the line (equivalent to d$).         &lt;br /&gt;
 dd            Delete current line (equivalent to 0d$).                  &lt;br /&gt;
 CTRL-w        Delete the previous word.                                 &lt;br /&gt;
 CTRL-u        Delete from the cursor to the beginning of line.          &lt;br /&gt;
 u             Undo previous text modification.                          &lt;br /&gt;
 CTRL-r        Undo, undo&lt;br /&gt;
 U             Undo all previous text modifications.                     &lt;br /&gt;
 .             Redo the last text modification.                          &lt;br /&gt;
 y&amp;lt;mov. comm&amp;gt;  Yank a movement into buffer (copy).                       &lt;br /&gt;
 yy            Yank the whole line.                                      &lt;br /&gt;
 p             Insert the yanked text at the cursor.                     &lt;br /&gt;
 P             Insert the yanked text before the cursor.                 &lt;br /&gt;
 k             Insert the yanked text before the cursor.                 &lt;br /&gt;
 j             Insert the yanked text before the cursor.                 &lt;br /&gt;
 G             Insert the yanked text before the cursor.                 &lt;br /&gt;
 /string or    Search history backward for a command matching string.    &lt;br /&gt;
 CTRL-r                                                                  &lt;br /&gt;
 ?string or    Search history forward for a command matching string.     &lt;br /&gt;
 CTRL-s        (Note that on most machines Ctrl-s STOPS the terminal     &lt;br /&gt;
               output, change it with `stty&#039; (Ctrl-q to resume)).        &lt;br /&gt;
 n             Repeat search in the same direction as previous.          &lt;br /&gt;
 N             Repeat search in the opposite direction as previous.      &lt;br /&gt;
 TAB or = or   List all possible completions.                            &lt;br /&gt;
 CTRL-i                                                                  &lt;br /&gt;
 *             Insert all possible completions.                          &lt;br /&gt;
 ~            | Invert case of the character under cursor and move a character right.&lt;br /&gt;
&lt;br /&gt;
==yank buffers==&lt;br /&gt;
Copy data to different buffers.&lt;br /&gt;
 vi /etc/{passwd,group,shadow} /tmp/newfile&lt;br /&gt;
 &amp;quot;a2yy       # Yank two lines to yank buffer a.&lt;br /&gt;
 :n          # Go to next file.&lt;br /&gt;
 &amp;quot;b2yy&lt;br /&gt;
 :n&lt;br /&gt;
 #c2yy&lt;br /&gt;
 :n&lt;br /&gt;
 &amp;quot;ap         # paste yank buffer a. &lt;br /&gt;
 &amp;quot;bp&lt;br /&gt;
 &amp;quot;cp&lt;br /&gt;
&lt;br /&gt;
Delete lines and add to a buffer.&lt;br /&gt;
 vi /tmp/tmp1 /tmp/tmp2&lt;br /&gt;
 &amp;quot;add         # Delete some lines and add to buffer a.&lt;br /&gt;
 &amp;quot;Add        # Go to next lines and add lines to buffer a.&lt;br /&gt;
 :wn&lt;br /&gt;
 &amp;quot;ap         # Paste buffer.&lt;br /&gt;
&lt;br /&gt;
Deleted lines atomically get numbered buffers.&lt;br /&gt;
 &amp;quot;2p         # Get back the deletion you did before this one.&lt;br /&gt;
==filter==&lt;br /&gt;
Sort part of file.&lt;br /&gt;
 :96,99!sort # will pass lines 96 through 99 through the sort filter and replace those lines with the output of sort.&lt;br /&gt;
==sort visual selection==&lt;br /&gt;
Mark text and verify the following command is executed.&lt;br /&gt;
 :&#039;&amp;lt;,&#039;&amp;gt;sort /\ze\%V/&lt;br /&gt;
&lt;br /&gt;
==run command==&lt;br /&gt;
 :!date&lt;br /&gt;
==Add output of command==&lt;br /&gt;
 :r !date&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
&lt;br /&gt;
==Do something on startup==&lt;br /&gt;
edit file start cursor at first occurance of pts/4&lt;br /&gt;
 vim /tmp/forest -c &amp;quot;/pts\/4&amp;quot;&lt;br /&gt;
==save file as root==&lt;br /&gt;
 :w !sudo tee %&lt;br /&gt;
==search and replace==&lt;br /&gt;
 :%s/foo/bar/gc&lt;br /&gt;
==indent lines==&lt;br /&gt;
mark lines with V&lt;br /&gt;
 &amp;gt; To indent lines&lt;br /&gt;
If you want to indent by two spaces.&lt;br /&gt;
 :set shiftwidth=2&lt;br /&gt;
==vim diff==&lt;br /&gt;
 vim -d passwd1 passwd2&lt;br /&gt;
==vim with many windows==&lt;br /&gt;
New window&lt;br /&gt;
 CTRL + w&lt;br /&gt;
move between windows. &lt;br /&gt;
 CTRL + w + -&amp;gt; or &amp;lt;- ...&lt;br /&gt;
==open two files side by side==&lt;br /&gt;
 vim -O /file1 /file2&lt;br /&gt;
==Search for multiple words==&lt;br /&gt;
 /\(WORD1\|Word2\)&lt;br /&gt;
==search for empty lines where next line does not start with *==&lt;br /&gt;
 /^$ \n\(^\*\)\@!&lt;br /&gt;
&lt;br /&gt;
==stop searching==&lt;br /&gt;
 :noh&lt;br /&gt;
==disable colours==&lt;br /&gt;
 syntax off&lt;br /&gt;
&lt;br /&gt;
==delete  words==&lt;br /&gt;
dw  delete until deimiter.&lt;br /&gt;
dW  delete until space delimiter&lt;br /&gt;
df space  deletes from the cursor position to, and including, the next space.&lt;br /&gt;
==View tabs in better format==&lt;br /&gt;
 :set vartabstop=100,20,20,20,20,20,30,40,40,40&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16563</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16563"/>
		<updated>2026-02-25T14:38:12Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* akhq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl port-forward service/akhq 8080:80&lt;br /&gt;
http://localhost:8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16562</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16562"/>
		<updated>2026-02-25T14:37:40Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* akhq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
 kubectl port-forward service/akhq 8080:80&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
http://localhost&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16561</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16561"/>
		<updated>2026-02-25T14:37:08Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* akhq */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
 kubectl port-forward service/akhq 8080:80&lt;br /&gt;
 http://localhost&lt;br /&gt;
&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16560</id>
		<title>Openshift</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Openshift&amp;diff=16560"/>
		<updated>2026-02-25T14:35:54Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* thanos-queries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What does it mean?=&lt;br /&gt;
 acme                  Automated Certificate Management Environment&lt;br /&gt;
 annotations           Key=value pairs. That provides metadata for object.&lt;br /&gt;
 atomic                Operation or process is indivisible, meaning it is performed as a single, uninterruptible unit, it either completes successfully in its entirety, or it has no effect at all — there is no partial execution or intermediate state.&lt;br /&gt;
 ceph                  Delivers object, block, and file storage in one unified system.&lt;br /&gt;
 ceph-osd              object storage daemon for the Ceph distributed file system. It is responsible for storing objects on a local file system and providing access to them over the network.&lt;br /&gt;
 clbo                  CrashLoopBackOff&lt;br /&gt;
 clo                   Cluster Logging Operator&lt;br /&gt;
 cmo                   Cluster Monitoring Operator&lt;br /&gt;
 cncf                  Cloud Native Computing Foundation&lt;br /&gt;
 cni                   Container Network Interface (OVNKubernetes OpenShiftSDN)&lt;br /&gt;
 cns                   Cloud Native Storage&lt;br /&gt;
 cnv                   Container-native Virtualization, add-on to OpenShift Container Platform that allows virtual machine workloads to run and be managed alongside container workloads.&lt;br /&gt;
 co                    Cluster Operator&lt;br /&gt;
 ControllerRevision    API object used primarily by controllers that manage versioned, declarative resources such as StatefulSets and DaemonSets. It stores a snapshot of the configuration.&lt;br /&gt;
 cpi                   Cloud Provider Interface&lt;br /&gt;
 cr                    Custom Resource. (I found it like something added by enabling something. You get it from &amp;quot;oc api-resources&amp;quot;)&lt;br /&gt;
 crd                   Custom Resource Definition. The name of a CRD object must be a valid DNS subdomain name.&lt;br /&gt;
 cri                   Container Runtime Interface&lt;br /&gt;
 cri-o                 Lightweight container runtime for kubernetes.&lt;br /&gt;
 csi                   Container Storage Interface&lt;br /&gt;
 csm                   Container Storage Modules&lt;br /&gt;
 csv                   cluster service version. OLM manifest that defines version of an Operator and its metadata, deployment requirements, and permissions.&lt;br /&gt;
 cvo                   Cluster Version Operator&lt;br /&gt;
 cvss                  Common Vulnerability Scoring System&lt;br /&gt;
 daemonset             Ensures that all (or some) Nodes run a copy of a Pod&lt;br /&gt;
 deployment            You describe a desired state in a Deployment. Deployment object describes how to create or modify pods that hold a containerized application by defining the desired state of a particular component. Deployments create and manage how ReplicaSets are deployed.&lt;br /&gt;
 eo                    ElasticSearch Operator&lt;br /&gt;
 ephemeral             Short lived, temporary&lt;br /&gt;
 eus                   Extended Update Support&lt;br /&gt;
 evict                 remove, preempt.&lt;br /&gt;
 Fluentd               data collector designed to handle logging by unifying and processing data from various sources.&lt;br /&gt;
 fluent bit            lightweight and high-performance data collector. logs but can handle metrics too. &lt;br /&gt;
 fsgroup               Group which Kubernetes will change the permissions of all files in volumes to when volumes are mounted by a pod. &lt;br /&gt;
 geneve                Generic Network Virtualization Encapsulation OVN-Kubernetes uses Geneve.&lt;br /&gt;
 grcp                  Google Remote Procedure Call, framework that brings performance benefits and modern features to client-server applications. Like RPC&lt;br /&gt;
 hpa                   Horizontal Pod Autoscaler, automatically scales the number of pods in a deployment, stateful set, or replica set based on CPU, memory, or custom metrics.&lt;br /&gt;
 icsp                  ImageContentSourcePolicy. Blocking a payload registry.&lt;br /&gt;
 idp                   identity provider&lt;br /&gt;
 idps                  identity providers&lt;br /&gt;
 implicit              indirect, hinted,&lt;br /&gt;
 ingressclass          use multiple ingress controllers managing network traffic routing within a cluster.&lt;br /&gt;
 ipc namespace         Each IPC namespace has its own set of System V IPC identifiers and its own POSIX message queue filesystem. .&lt;br /&gt;
 ipi                   Installer-Provisioned Infrastructure&lt;br /&gt;
 kcs                   Knowledge Centered Support, Red Hat&#039;s way of offering solutions and articles for known questions or problems.&lt;br /&gt;
 kubelet               Kubelet is the primary &amp;quot;node agent&amp;quot; that runs on each node. Takes a set of PodSpecs (primarily through the apiserver) and ensures the containers described are running and healthy.&lt;br /&gt;
 kvdb                  key-value store (portworx)&lt;br /&gt;
 machineset            Managing a set of machines with similar characteristics, manage a group of machines. Desired number of machines.&lt;br /&gt;
 manifest              Manifest is a YAML or JSON file that describes the desired state of a Kubernetes object.&lt;br /&gt;
 mco                   machine-config-operator&lt;br /&gt;
 mcp                   machine config pools&lt;br /&gt;
 Metricbeat            leightweight shipper for metrics&lt;br /&gt;
 noobaa                data service for cloud environments, providing S3 object-store interface with flexible tiering, mirroring, and spread placement policies, over any storage resource that allows GET/PUT including S3,GCS..&lt;br /&gt;
 nsfs                  virtual filesystem making Linux-kernel namespaces available.&lt;br /&gt;
 oadp                  openshift api data protection&lt;br /&gt;
 oci                   Open Container Initiative&lt;br /&gt;
 ocm                   OpenShift Cluster Manager&lt;br /&gt;
 ocp                   OpenShift Container Platform&lt;br /&gt;
 ocs                   OpenShift Container Storage&lt;br /&gt;
 odf                   OpenShift Data Foundation&lt;br /&gt;
 oidc                  OpenID Connect, is an identity layer on top of the OAuth 2.0 protocol.&lt;br /&gt;
 olm                   Operator Lifecycle Manager&lt;br /&gt;
 osm                   Open Service Mesh. Lightweight, extensible, cloud native service mesh&lt;br /&gt;
 ovnk                  Open Virtual Network Kubernetes&lt;br /&gt;
 pdb                   Pod Disruption Budget. poddisruptionbudgets&lt;br /&gt;
 pvc                   Persistent volume claim. binding between a Pod and Persistent Volume.&lt;br /&gt;
 pv                    Persistent volume. Persistent storage. low level representation of a storage volume.&lt;br /&gt;
 preempt               higher priority pod cannot be scheduled due to insufficient resources, preempt (evict) one or more lower-priority pods to free up resources for higher-priority pod&lt;br /&gt;
 prometheus            Prometheus is a time-series database (TSDB). handle the collection, storage, and querying of time-series data. Alerting &lt;br /&gt;
 provisioner           A StorageClass object contains a provisioner that decides which volume plugin is used to provision PersistentVolumes.&lt;br /&gt;
 quay.io               builds, analyzes, distributes your container images. Owned by IBM&lt;br /&gt;
 ReadWriteMany         Storage read/write for many.&lt;br /&gt;
 Reconciliation        Mechanism that ensures the cluster behaves as intended by comparing the current state of resources with the desired state specified in your manifests or custom resources.&lt;br /&gt;
 register              Container registry is a storage and distribution system for container images. In Kubernetes, container images are the building blocks for deploying applications. A registry is used to store, manage, and distribute these images.&lt;br /&gt;
 registrar             The node-driver-registrar is a sidecar container that registers the CSI driver with Kubelet using the kubelet plugin registration mechanism.&lt;br /&gt;
 replicaset            Maintain a stable set of replica Pods running at any given time&lt;br /&gt;
 rhacm                 Red Hat Advanced Cluster Management for Kubernetes &lt;br /&gt;
 rhcos                 Red Hat Enterprise Linux CoreOS&lt;br /&gt;
 rhcp                  Red Hat Ceph Storage&lt;br /&gt;
 rhcs                  Red Hat Cluster Suite&lt;br /&gt;
 rhocp                 Red Hat OpenShift Container Platform&lt;br /&gt;
 rhol                  Red Hat OpenShift Logging&lt;br /&gt;
 rook                  Operator. File, block, and object storage for your cloud native environment and is based on battle tested ceph storage.&lt;br /&gt;
 rosa                  Red Hat OpenShift Service on AWS&lt;br /&gt;
 runc                  run container. Container runtime that implements the OCI runtime specification.&lt;br /&gt;
 s2i                   source-to-image&lt;br /&gt;
 sa                    Service Account&lt;br /&gt;
 scc                   security context constraints&lt;br /&gt;
 sc                    security context&lt;br /&gt;
 seccomp               Secure computing mode profiles can be associated with a container to restrict available system calls.&lt;br /&gt;
 SelfLink              URL representing the given object.&lt;br /&gt;
 service               Logical abstraction for a deployed group of pods in a cluster (which all perform the same function).&lt;br /&gt;
 skopeo                Command line utility used to interact with local and remote container images and container image registries&lt;br /&gt;
 StatefulSet           Workload object to manage stateful applications. Deployment and scaling Pods, ordering and uniqueness of Pods.&lt;br /&gt;
 Storage Class         allows for dynamic provisioning of Persistent Volumes.&lt;br /&gt;
 svc                   service&lt;br /&gt;
 taint                 Taints ensure that pods are scheduled onto appropriate nodes. You can apply one or more taints on a node.&lt;br /&gt;
 tekton                Container-native way to manage CI/CD. It&#039;s also the basis for OpenShift Pipelines.&lt;br /&gt;
 thanos                Long-Term storage for your Prometheus Metrics on OpenShift&lt;br /&gt;
 toleration            You can apply tolerations to pods. Tolerations allow the scheduler to schedule pods with matching taints.&lt;br /&gt;
 ubi                   Universal Base Images OCI-compliant container base operating system images with complementary runtime languages and packages that are freely redistributable.&lt;br /&gt;
 upi                   User-Provisioned Infrastructure&lt;br /&gt;
 uts                   Unix Timesharing System namespace. Controls the hostname and the NIS domain.&lt;br /&gt;
 uWSGI                 Project aims at developing a full stack for building hosting services.&lt;br /&gt;
 vxlan                 virtual extensible LAN, The OpenShift SDN uses OpenvSwitch tunnels, OpenFlow rules, and iptables. &lt;br /&gt;
 wwn                   world wide names. Fiber channel&lt;br /&gt;
&lt;br /&gt;
=where do I start=&lt;br /&gt;
 . &amp;lt;(oc completion bash)  Get bash completion running.&lt;br /&gt;
 oc help                  Get commands&lt;br /&gt;
 oc api-resources         What can you use commands on.&lt;br /&gt;
 oc options               Which options apply to all commands&lt;br /&gt;
&lt;br /&gt;
=read=&lt;br /&gt;
https://kubernetes.io/docs/concepts/overview/working-with-objects/kubernetes-objects/&lt;br /&gt;
=Projects that I have read about but forgotten=&lt;br /&gt;
 OpenEBS              Storage solution. Possible backends. local, nfs, zfs, nvme. CStor to serve iSCSI block storage using the underlying disks or cloud volumes in a cloud native way&lt;br /&gt;
&lt;br /&gt;
=files of value=&lt;br /&gt;
 metadata.json         File created during install. Used by openshift-install destroy cluster&lt;br /&gt;
&lt;br /&gt;
=oc get=&lt;br /&gt;
Available resources to ask about.&lt;br /&gt;
 oc api-resources&lt;br /&gt;
Get everything&lt;br /&gt;
 oc api-resources -o name --no-headers | while read i ; do echo &#039;***&#039; $i ; oc get $i -A -o yaml 2&amp;gt;&amp;amp;1 ; done &amp;gt; /tmp/oc_api-resourece.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=login=&lt;br /&gt;
 oc login --username developerhttps://openshift:6443&lt;br /&gt;
=switch user=&lt;br /&gt;
 oc login --username developer&lt;br /&gt;
=which clusters have you logged into=&lt;br /&gt;
 oc config get-clusters&lt;br /&gt;
&lt;br /&gt;
=List projects= &lt;br /&gt;
 oc projects&lt;br /&gt;
 oc get projects&lt;br /&gt;
&lt;br /&gt;
=select project=&lt;br /&gt;
 oc project $project&lt;br /&gt;
 kubectl config set-context --current --namespace=kube-public&lt;br /&gt;
&lt;br /&gt;
=create project/namespace=&lt;br /&gt;
 oc create namespace redis&lt;br /&gt;
&lt;br /&gt;
=list pods=&lt;br /&gt;
 oc get pods&lt;br /&gt;
 oc get pods --all-namespaces&lt;br /&gt;
 oc get pods -o wide&lt;br /&gt;
wide will give you on which node pod is running.&lt;br /&gt;
 oc get pods -o wide --all-namespaces&lt;br /&gt;
Get pods that are not runing.&lt;br /&gt;
 oc get pods --field-selector status.phase!=Running --all-namespaces&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
Get pods matching two states&lt;br /&gt;
 oc get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039;&lt;br /&gt;
Get pods running on specific node&lt;br /&gt;
 oc get pods -A -o wide --field-selector spec.nodeName=&amp;lt;node&amp;gt;&lt;br /&gt;
Get pods with label name=portworx-proxy&lt;br /&gt;
 oc get pods -A -l name=portworx-proxy&lt;br /&gt;
Get pods with several labels&lt;br /&gt;
 oc get pod -l &#039;app in (rook-ceph-mon,rook-ceph-operator,rook-ceph-osd,rook-ceph-rgw,rook-ceph-mgr,rook-ceph-mds,rook-ceph-crashcollector)&#039;&lt;br /&gt;
Get pods with extra column port.&lt;br /&gt;
 kubectl get pods --output=custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,IP:.status.podIPs[*].ip,POD_PORT:.spec.containers[*].ports[*].containerPort&lt;br /&gt;
Get pods with column restarts&lt;br /&gt;
 oc get pods -o custom-columns=&#039;NAMESPACE:.metadata.namespace,POD:.metadata.name,RESTART:.status.containerStatuses[*].restartCount&#039; -A | sort -k3 -n | tail -10&lt;br /&gt;
&lt;br /&gt;
=Endpoint=&lt;br /&gt;
An Endpoint is an object that represents the IP addresses and ports of the Pods that back a Service. When a Service is created, Kubernetes automatically creates an associated Endpoints object.&lt;br /&gt;
=EndpointSlices=&lt;br /&gt;
EndpointSlices offer a scalable, efficient, and feature-rich alternative to traditional Endpoints, topology.&lt;br /&gt;
&lt;br /&gt;
=get shell on node=&lt;br /&gt;
It is possible to debug more than nodes. (deployment, build, or job)&lt;br /&gt;
 oc debug node/infra-2.ocpdev.lkl.ltkalmar.se&lt;br /&gt;
Get working env&lt;br /&gt;
 chroot /host&lt;br /&gt;
Connect to node in eks.&lt;br /&gt;
 kubectl debug node/&amp;lt;node&amp;gt; -it --image=halfface/rockylinux-toolbox:v3&lt;br /&gt;
&lt;br /&gt;
=get debug information from oc=&lt;br /&gt;
 oc debug --loglevel=10 node/$node&lt;br /&gt;
=debug pod run as root disable health checks=&lt;br /&gt;
 oc debug deployment/my-deployment-name --as-root&lt;br /&gt;
&lt;br /&gt;
=get nodes=&lt;br /&gt;
 oc get nodes&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{.items[*].metadata.name}&#039;&lt;br /&gt;
# Get nodes without headears. name, cpu:s, disk size, mem, ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,CPU:.status.capacity.cpu,DISK:.status.capacity.ephemeral-storage,MEM:.status.capacity.memory,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
# Get node name and ip address.&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name,IP:.status.addresses[?(@.type==&amp;quot;InternalIP&amp;quot;)].address&#039;&lt;br /&gt;
=ip address of node=&lt;br /&gt;
Outside pod.&lt;br /&gt;
 oc get pod --template &#039;{{.status.podIP}}&#039; openshift-gitops-application-controller-0&lt;br /&gt;
Inside pod.&lt;br /&gt;
 echo $POD_IP&lt;br /&gt;
&lt;br /&gt;
=get nodes that are overcommited=&lt;br /&gt;
 oc get nodes -o jsonpath=&#039;{range .items[*]}{@.metadata.name}:{range @.status.conditions[*]}{@.type}={@.status};{end}{end}&#039; | sed &#039;s/:/=node;/g&#039; | sed &#039;s/;/\n/g&#039; | grep -vE &#039;MemoryPressure=False|DiskPressure=False|PIDPressure=False|Ready=True&#039;&lt;br /&gt;
Does any node stick out.&lt;br /&gt;
 oc get nodes --no-headers -o=custom-columns=NAME:.metadata.name,CONDITIONS:.status.conditions&lt;br /&gt;
&lt;br /&gt;
=connect to pod=&lt;br /&gt;
 oc rsh $pod bash&lt;br /&gt;
=list containers in pod=&lt;br /&gt;
 oc get pod/router-default-6b76b87c6-5m7h6 -n openshift-ingress -o json | jq -r &#039;.spec.containers[].name&#039;&lt;br /&gt;
 router&lt;br /&gt;
 logs&lt;br /&gt;
=list all containers running in a cluster=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kubectl get pods --all-namespaces -o jsonpath=&amp;quot;{.items[*].spec[&#039;initContainers&#039;, &#039;containers&#039;][*].image}&amp;quot; | tr -s &#039;[[:space:]]&#039; &#039;\n&#039; | sort | uniq -c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=connect to container in pod=&lt;br /&gt;
 oc rsh -c router pod/router-default-6b76b87c6-5m7h6&lt;br /&gt;
&lt;br /&gt;
=get logs from all containers excluding namespace ^openshift from last 24 hours with timestamp=&lt;br /&gt;
 oc get pods --no-headers --field-selector status.phase=Running -A -o custom-columns=NAMESPACE:.metadata.namespace,POD:.metadata.name | grep -v ^openshift | while read NAMESPACE POD ; do for CONTAINER in $(oc get pod $POD -n $NAMESPACE -o json | jq -r &#039;.spec.containers[].name&#039;) ; do echo oc logs -n ${NAMESPACE} ${POD} -c ${CONTAINER} ; oc logs -n ${NAMESPACE} $POD -c $CONTAINER --since=24h --timestamps=true 2&amp;gt;&amp;amp;1 | grep &amp;quot;Error: getaddrinfo EAI_AGAIN &amp;quot; ; done ; done&lt;br /&gt;
&lt;br /&gt;
=get all container logs(good for pods stuck in init)=&lt;br /&gt;
 oc logs &amp;lt;pod&amp;gt; --all-containers&lt;br /&gt;
=tail logs for pods matching label=&lt;br /&gt;
 oc logs -n openshift-storage -l app=csi-cephfsplugin -c driver-registrar -f  --max-log-requests 8 --tail=1&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --tail=-1&lt;br /&gt;
 oc logs -f --tail=0 router-default-6c666984fd-ct8zf logs&lt;br /&gt;
 oc logs -f --namespace openshift-gitops deployment/openshift-gitops-server&lt;br /&gt;
&lt;br /&gt;
=Search for log entries locally on node=&lt;br /&gt;
 ls -la $(ls -la $(grep -l EAI_AGAIN /var/log/containers/*) | awk &#039;{print $NF}&#039;)&lt;br /&gt;
 grep -rl EAI_AGAIN /var/log/pods/&lt;br /&gt;
&lt;br /&gt;
=execute command in pod=&lt;br /&gt;
 oc exec pod/router-default-545ffb97db-4h9rx -- $command&lt;br /&gt;
 kubectl exec --stdin --tty shell-demo -- /bin/bash&lt;br /&gt;
&lt;br /&gt;
=execute command on all nodes=&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; chronyc sources&#039;&lt;br /&gt;
&lt;br /&gt;
=execute command in all containers=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | while read NAMESPACE POD ; do&lt;br /&gt;
   for CONTAINER in $(oc get -n $NAMESPACE pod/$POD -o json | jq -r &#039;.spec.containers[].name&#039;) ; do&lt;br /&gt;
     echo &#039;***&#039; $NAMESPACE $POD $CONTAINER&lt;br /&gt;
     echo $(oc exec -c $CONTAINER -n $NAMESPACE $POD -- curl -m1 -skv https://inter.net 2&amp;gt;&amp;amp;1 | tr -d &#039;\n&#039;)&lt;br /&gt;
   done&lt;br /&gt;
 done | tee /tmp/$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S)&lt;br /&gt;
&lt;br /&gt;
=where am i=&lt;br /&gt;
 POD_NAME=rook-ceph-operator-6c86f788d5-f8mqf&lt;br /&gt;
 POD_NAMESPACE=openshift-storage&lt;br /&gt;
&lt;br /&gt;
=describe pods=&lt;br /&gt;
 oc describe pods&lt;br /&gt;
 oc describe pod stage-sales-62-qjd&lt;br /&gt;
&lt;br /&gt;
=To get (almost) all object with a specific label from the current project, execute:=&lt;br /&gt;
 oc get all -l &#039;&amp;lt;label_name&amp;gt;=&amp;lt;label_value&amp;gt;&#039;&lt;br /&gt;
 oc get pods -n openshift-storage -o name -l app=rook-ceph-operator&lt;br /&gt;
&lt;br /&gt;
=get config from pod in yaml format=&lt;br /&gt;
 oc get pods router-default-545ffb97db-kgsdb -o yaml&lt;br /&gt;
=get deployments=&lt;br /&gt;
 oc get deployments --all-namespaces&lt;br /&gt;
&lt;br /&gt;
=set environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR=blue&lt;br /&gt;
=unset environment variable in pod=&lt;br /&gt;
 oc set env dc/your-app-name COLOR-&lt;br /&gt;
&lt;br /&gt;
=list environment variables=&lt;br /&gt;
 oc set env pod/router-default-545ffb97db-lj2t5 --list&lt;br /&gt;
&lt;br /&gt;
=list templates=&lt;br /&gt;
 oc get templates -n openshift&lt;br /&gt;
=Custom resource definitions.(crd)=&lt;br /&gt;
 oc get crd&lt;br /&gt;
=sort=&lt;br /&gt;
CREATED AT&lt;br /&gt;
 oc get crd --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=edit=&lt;br /&gt;
 oc edit deployment.apps/router-default&lt;br /&gt;
Watch changes taking place.&lt;br /&gt;
 watch -n1 oc get all&lt;br /&gt;
=grant permission to project=&lt;br /&gt;
 oc adm policy add-role-to-user view developer -n mysecrets&lt;br /&gt;
=grant permission to group=&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin admin&lt;br /&gt;
==grant a user cluster-admin permissions through group==&lt;br /&gt;
 # create a new group.&lt;br /&gt;
 oc adm groups new cluster-admin&lt;br /&gt;
 # Bind cluster-admin Role to the Group&lt;br /&gt;
 oc adm policy add-cluster-role-to-group cluster-admin cluster-admin&lt;br /&gt;
 # Add user to group&lt;br /&gt;
 oc adm groups add-users cluster-admin T1.anbj15&lt;br /&gt;
&lt;br /&gt;
=grant unrestriced access to service account=&lt;br /&gt;
 oc adm policy add-scc-to-user privileged system:serviceaccount:isilon:isilon-node&lt;br /&gt;
 ...&lt;br /&gt;
 oc adm policy add-scc-to-user anyuid -z ak-authentik&lt;br /&gt;
 oc adm policy add-scc-to-user privileged -z ak-authentik&lt;br /&gt;
&lt;br /&gt;
=which pods use scc?=&lt;br /&gt;
 oc get project -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | grep -v openshift | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o=custom-columns=&#039;NAME:.metadata.name,SCC:.metadata.annotations.openshift\.io\/scc&#039; --no-headers -n $NAMESPACE | grep restricted-v2 ; done&lt;br /&gt;
 oc get pods --all-namespaces -o=jsonpath=&#039;{range .items[*]}{@.metadata.name}{&amp;quot;\t&amp;quot;}{@.metadata.namespace}{&amp;quot;\t&amp;quot;}{@.metadata.annotations.openshift\.io/scc}{&amp;quot;\n&amp;quot;}&#039; | column_tab | less&lt;br /&gt;
&lt;br /&gt;
=crictl=&lt;br /&gt;
==List running containers==&lt;br /&gt;
 crictl ps&lt;br /&gt;
 crictl ps --all | grep -i coredns&lt;br /&gt;
&lt;br /&gt;
==List all pods==&lt;br /&gt;
 crictl pods&lt;br /&gt;
==List all images==&lt;br /&gt;
 crictl images&lt;br /&gt;
==Execute a command in a running container==&lt;br /&gt;
 crictl exec -it 1f73f2d81bf98 /bin/sh&lt;br /&gt;
==crictl logs==&lt;br /&gt;
 crictl logs&lt;br /&gt;
&lt;br /&gt;
=nsenter=&lt;br /&gt;
 run program in different namespaces&lt;br /&gt;
=which version=&lt;br /&gt;
Get version of various objects&lt;br /&gt;
 oc version&lt;br /&gt;
Only get cluster version&lt;br /&gt;
 oc get clusterversion&lt;br /&gt;
 oc get clusterversion -o json|jq -r &#039;.items[0].spec| .channel, .desiredUpdate.version&#039;&lt;br /&gt;
&lt;br /&gt;
=copy files from pod=&lt;br /&gt;
Copy session keys locally.&lt;br /&gt;
 oc rsync caas-2-8s6cl:/tmp/sslkeylog .&lt;br /&gt;
=tcpdump from nodes=&lt;br /&gt;
 ssh $node&lt;br /&gt;
 toolbox&lt;br /&gt;
=rm toolbox=&lt;br /&gt;
 toolbox rm --force &amp;lt;container&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc get route -A=&lt;br /&gt;
get routing.&lt;br /&gt;
=oc describe route sales -n hlt-prod=&lt;br /&gt;
 Name:                   sales&lt;br /&gt;
 Namespace:              hlt-prod&lt;br /&gt;
 Created:                13 months ago&lt;br /&gt;
 Labels:                 &amp;lt;none&amp;gt;&lt;br /&gt;
 Annotations:            haproxy.router.openshift.io/balance=roundrobin&lt;br /&gt;
                         haproxy.router.openshift.io/disable_cookies=true&lt;br /&gt;
 Requested Host:         sales.prod.bobcat.hlt.se&lt;br /&gt;
                            exposed on router default (host apps.ocpprod.lkl.ltkalmar.se) 13 months ago&lt;br /&gt;
 Path:                   &amp;lt;none&amp;gt;&lt;br /&gt;
 TLS Termination:        edge&lt;br /&gt;
 Insecure Policy:        &amp;lt;none&amp;gt;&lt;br /&gt;
 Endpoint Port:          port-8000-tcp&lt;br /&gt;
 &lt;br /&gt;
 Service:        sales&lt;br /&gt;
 Weight:         100 (100%)&lt;br /&gt;
 Endpoints:      10.160.7.166:8000, 10.160.7.167:8000, 10.160.7.168:8000 + 35 more...&lt;br /&gt;
=oc get pods (selecting specific pods)=&lt;br /&gt;
Only name without headers&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers -A&lt;br /&gt;
Describe Failing pods.&lt;br /&gt;
 oc get pods -A --field-selector=status.phase=Failed --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo &#039;*&#039; $POD ${NAME_SPACE} ; oc describe pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; ; done | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=get pod label:s=&lt;br /&gt;
 oc get pods --show-labels&lt;br /&gt;
&lt;br /&gt;
=get subscriptions=&lt;br /&gt;
 oc get subscriptions -A&lt;br /&gt;
=delete subscription=&lt;br /&gt;
 oc delete subscription openshift-gitops-operator -n openshift-operators&lt;br /&gt;
=get available channels for subscription=&lt;br /&gt;
 oc get PackageManifest $OPERATOR -o json | jq -r &#039;.status.channels[] | .name,.currentCSV&#039;&lt;br /&gt;
=update channel=&lt;br /&gt;
 oc patch subscriptions -n $NAMESPACE $OPERATOR --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete clusterserviceversion=&lt;br /&gt;
 oc delete clusterserviceversion openshift-gitops-operator.v1.7.4&lt;br /&gt;
&lt;br /&gt;
=whoami=&lt;br /&gt;
 oc whoami&lt;br /&gt;
 oc config current-context&lt;br /&gt;
 oc whoami --show-console=true --show-context=true&lt;br /&gt;
Which is the console url?&lt;br /&gt;
 oc whoami --show-console&lt;br /&gt;
Which is the api url?&lt;br /&gt;
 oc whoami --show-server&lt;br /&gt;
&lt;br /&gt;
=get instance url=&lt;br /&gt;
 oc get routes -n openshift-console console&lt;br /&gt;
&lt;br /&gt;
=create an htpasswd user=&lt;br /&gt;
kubernetes create htpasswd user&lt;br /&gt;
 oc create user imageregistry&lt;br /&gt;
 oc create identity htpasswd:imageregistry&lt;br /&gt;
 oc create useridentitymapping htpasswd:imageregistry imageregistry&lt;br /&gt;
Create user/password to feed kubernetes with.&lt;br /&gt;
 htpasswd -c -B -b htpasswd imageregistry P@ssW0rd&lt;br /&gt;
 oc create secret generic htpass-secret --from-file=htpasswd=htpasswd -n openshift-config&lt;br /&gt;
Get htpasswd users.&lt;br /&gt;
 oc get secret htpass-secret -ojsonpath={.data.htpasswd} -n openshift-config | base64 --decode&lt;br /&gt;
Enable htpasswd login.&lt;br /&gt;
 oc edit oauth cluster&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
   - name: htpasswd&lt;br /&gt;
     mappingMethod: claim&lt;br /&gt;
     type: HTPasswd&lt;br /&gt;
     htpasswd:&lt;br /&gt;
       fileData:&lt;br /&gt;
         name: htpass-secret&lt;br /&gt;
look at oauth config.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
Create service account.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.13/authentication/understanding-and-creating-service-accounts.html&lt;br /&gt;
=get list of user=&lt;br /&gt;
 oc config view -o jsonpath=&#039;{.users[*].name}&#039;&lt;br /&gt;
&lt;br /&gt;
=list contexts=&lt;br /&gt;
 oc config get-contexts&lt;br /&gt;
&lt;br /&gt;
=use-context=&lt;br /&gt;
 oc config use-context openshift-marketplace/api-abjorklund-01-rbcloud-net:6443/kube:admin&lt;br /&gt;
&lt;br /&gt;
=oc explain pv=&lt;br /&gt;
 oc explain pv&lt;br /&gt;
=oc get configmap cluster-monitoring-config=&lt;br /&gt;
&lt;br /&gt;
=put node offline=&lt;br /&gt;
Mark a node as unschedulable.&lt;br /&gt;
 oc adm cordon node1&lt;br /&gt;
Drain a node in preparation for maintenance.&lt;br /&gt;
 oc adm drain --force --delete-local-data    --ignore-daemonsets --grace-period=30 &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets                   &amp;lt;node&amp;gt;&lt;br /&gt;
 oc adm drain --force --delete-emptydir-data --ignore-daemonsets --grace-period=1  &amp;lt;node&amp;gt;&lt;br /&gt;
Mark node as online.&lt;br /&gt;
 oc adm uncordon node1&lt;br /&gt;
Extend memory on node.&lt;br /&gt;
 # Add memory to master nodes.&lt;br /&gt;
 NODE=costest-ph9l4-master-1&lt;br /&gt;
 oc adm cordon $NODE&lt;br /&gt;
 oc adm drain $NODE --force --delete-emptydir-data --grace-period=1 --ignore-daemonsets&lt;br /&gt;
 timeout 10 oc debug node/$NODE -- chroot /host sh -c &#039;echo $HOSTNAME &amp;amp;&amp;amp; sudo shutdown -P now&#039;&lt;br /&gt;
 govc vm.power -off /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.info /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 govc vm.change -vm /RGK/vm/costest-ph9l4/$NODE -m 20480&lt;br /&gt;
 govc vm.power -on /RGK/vm/costest-ph9l4/$NODE&lt;br /&gt;
 oc adm uncordon $NODE&lt;br /&gt;
 oc adm top nodes -l node-role.kubernetes.io/master&lt;br /&gt;
&lt;br /&gt;
=Get pv:s=&lt;br /&gt;
 oc get pv&lt;br /&gt;
Sorted by size.&lt;br /&gt;
 oc  get pv --sort-by=.spec.capacity.storage -A&lt;br /&gt;
Get more info about a pv.&lt;br /&gt;
 oc describe pv $PV&lt;br /&gt;
=Access modes for pv:s. AccessMode=&lt;br /&gt;
 RWO  - ReadWriteOnce     the volume can be mounted as read-write by a single node&lt;br /&gt;
 ROX  - ReadOnlyMany      the volume can be mounted read-only by many nodes&lt;br /&gt;
 RWX  - ReadWriteMany     the volume can be mounted as read-write by many nodes&lt;br /&gt;
 RWOP - ReadWriteOncePod  the volume can be mounted as read-write by a single Pod.&lt;br /&gt;
&lt;br /&gt;
=get pvc:s=&lt;br /&gt;
 oc get pvc --all-namespaces | less&lt;br /&gt;
sort by&lt;br /&gt;
 oc get pvc --sort-by=.spec.resources.requests.storage -A&lt;br /&gt;
=list pvc by creation time=&lt;br /&gt;
 oc get pvc --all-namespaces -o custom-columns=&amp;quot;NAMESPACE:.metadata.namespace,NAME:.metadata.name,CREATED:.metadata.creationTimestamp&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=create pvc=&lt;br /&gt;
 # oc create pvc&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-pvc1 &lt;br /&gt;
 spec:&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 5Gi&lt;br /&gt;
 EOF&lt;br /&gt;
=use pvc. Create pod using pvc=&lt;br /&gt;
 # Create test pod.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-test-pvc-claim1-pod&lt;br /&gt;
 spec:&lt;br /&gt;
   volumes:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       persistentVolumeClaim:&lt;br /&gt;
         claimName: abjorklund-test-pvc&lt;br /&gt;
   containers:&lt;br /&gt;
     - name: abjorklund-test-pvc&lt;br /&gt;
       image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
       volumeMounts:&lt;br /&gt;
         - mountPath: &amp;quot;/mnt/abjorklund-test-pvc&amp;quot;&lt;br /&gt;
           name: abjorklund-test-pvc&lt;br /&gt;
       command: [&amp;quot;sleep&amp;quot;]&lt;br /&gt;
       args: [&amp;quot;infinity&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=extend/increase pvc=&lt;br /&gt;
Set new size&lt;br /&gt;
 PVC=&amp;lt;pvc&amp;gt; ;NAMESPACE=&amp;lt;namespace&amp;gt; ; oc patch pvc ${PVC} --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;resources&amp;quot;:{&amp;quot;requests&amp;quot;:{&amp;quot;storage&amp;quot;: &amp;quot;2Gi&amp;quot;}}}}&#039; -n ${NAMESPACE}&lt;br /&gt;
&lt;br /&gt;
=which pods are using pvc=&lt;br /&gt;
 oc get pods --all-namespaces -o=json | jq -c &#039;.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[]? | select( has (&amp;quot;persistentVolumeClaim&amp;quot;) ).persistentVolumeClaim.claimName }&#039;&lt;br /&gt;
List pvc:s with the pod using them.&lt;br /&gt;
 kubectl describe pvc -A | awk &#039;/^Name:/ {name=$2} /^Namespace:/ {namespace=$2} /^Used By:/ {usedby=$3; print namespace &amp;quot;\t&amp;quot; name &amp;quot;\t&amp;quot; usedby}&#039; | column -t -s $&#039;\t&#039;&lt;br /&gt;
&lt;br /&gt;
=create storage class and create pvc=&lt;br /&gt;
==Install nfs csi==&lt;br /&gt;
 helm repo add nfs-subdir-external-provisioner https://kubernetes-sigs.github.io/nfs-subdir-external-provisioner/&lt;br /&gt;
 helm install nfs-provisioner nfs-subdir-external-provisioner/nfs-subdir-external-provisioner \&lt;br /&gt;
   --set nfs.server=10.111.222.1 \&lt;br /&gt;
   --set nfs.path=/storage/temp/kafka_nfs_root \&lt;br /&gt;
   --set storageClass.name=nfs&lt;br /&gt;
==Make storage class default==&lt;br /&gt;
 oc patch storageclass nfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
==Create pvc using sc==&lt;br /&gt;
 kubectl apply -f - &amp;lt;&amp;lt;EOF&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 metadata: {name: nfs-pvc, namespace: kafka}&lt;br /&gt;
 spec: {accessModes: [ReadWriteOnce], resources: {requests: {storage: 1Gi}}, storageClassName: nfs}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=kubectl=&lt;br /&gt;
List contexts&lt;br /&gt;
 kubectl config get-contexts&lt;br /&gt;
Select context&lt;br /&gt;
 kubectl config use-context default/api-blabla-halfface-se:6443/kube:admin&lt;br /&gt;
=permissions=&lt;br /&gt;
==list groups==&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
==list cluserroles==&lt;br /&gt;
 oc get clusterrole --all-namespaces&lt;br /&gt;
==list clusterrolebindings==&lt;br /&gt;
 oc get crb&lt;br /&gt;
 oc get clusterrolebindings&lt;br /&gt;
&lt;br /&gt;
=scale=&lt;br /&gt;
 oc scale --replicas=2 rc/postgresql-1&lt;br /&gt;
 oc scale -n abjorklund deployment stress-hm-6x32 --replicas=0&lt;br /&gt;
 oc scale --replicas=3 machineset &amp;lt;machineset&amp;gt; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=top(disable wikimedia top)=&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces&lt;br /&gt;
 oc adm top pods --use-protocol-buffers --all-namespaces --sort-by=cpu | head -20| cut -c -200&lt;br /&gt;
 oc adm top nodes --sort-by=cpu&lt;br /&gt;
 oc adm top nodes --sort-by=memory&lt;br /&gt;
&lt;br /&gt;
=get memory usage of all running pods in MB=&lt;br /&gt;
 oc get pods -o custom-columns=POD:.metadata.name --no-headers --field-selector status.phase=Running| while read POD ; do echo $POD $(( $(oc exec -it $POD -- cat /sys/fs/cgroup/memory/memory.usage_in_bytes &amp;lt;/dev/null 2&amp;gt;/dev/null) / 1024 / 1024 )) MB ; done&lt;br /&gt;
 oc get pods -A -o wide --no-headers --field-selector spec.nodeName=ocp-04-9lxgz-worker-wlw9p  --field-selector status.phase=Running | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sort -k 4 -n| less&lt;br /&gt;
Get memory usage per pod on specific node.&lt;br /&gt;
 NODE=ocp-01-4dfqx-worker-4n6mk ; oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=${NODE},status.phase=Running&amp;quot; | while read NAMESPACE POD NULL ; do oc project $NAMESPACE &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ; oc adm top pod $POD --containers --no-headers ; done | sed &#039;s/  */\t/g&#039; | sort -k 4 -n | column -t -s $&#039;\t&#039;&lt;br /&gt;
=get memory usage of all nodes in % of total available ram=&lt;br /&gt;
 oc get nodes -o name | xargs -I % oc debug % -- chroot /host sh -c &#039;BUFFER=($(free | grep Mem:)) ; echo $HOSTNAME $(( $(( ${BUFFER[1]} - ${BUFFER[6]} )) / $(( ${BUFFER[1]} / 100 )) ))&#039; 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
=oc get crd=&lt;br /&gt;
Get Custom Resource Definitions.&lt;br /&gt;
 oc get crd&lt;br /&gt;
=operators=&lt;br /&gt;
Automatically setup of a instances.&lt;br /&gt;
=list installed operators=&lt;br /&gt;
 oc get ClusterServiceVersions -A&lt;br /&gt;
 oc get csv -A&lt;br /&gt;
 oc get operators -o json | jq -r &#039;.items[].status.components.refs[]?|select(.kind==&amp;quot;ClusterServiceVersion&amp;quot;)|.name&#039;&lt;br /&gt;
Search all namespaces. Exclude namespace.&lt;br /&gt;
 oc get csv -A -o=custom-columns=&#039;NAME:.metadata.name,VERSION:.spec.version,DISPLAY:.spec.displayName&#039; --no-headers | sort  | uniq&lt;br /&gt;
&lt;br /&gt;
=list available operators=&lt;br /&gt;
 oc get packagemanifests&lt;br /&gt;
=delete operator=&lt;br /&gt;
Delete via gui. If traces are left. Or unable to install again.&lt;br /&gt;
 https://access.redhat.com/solutions/6762071 Remove potentially blocking references.&lt;br /&gt;
 https://access.redhat.com/solutions/7026146 Remove label so operator is not recreated.&lt;br /&gt;
 oc get operator prometheus.prometheus -o yaml -n openshift-operators | grep -i CustomResourceDefinition -A1     //It will list the CRDs &lt;br /&gt;
 currently being referenced by the operator&lt;br /&gt;
 oc edit crd thanosrulers.monitoring.coreos.com&lt;br /&gt;
 -----------output truncated------------&lt;br /&gt;
   labels:&lt;br /&gt;
     operators.coreos.com/prometheus.prometheus: &amp;quot;&amp;quot;                            //Remove this line and then save and exit&lt;br /&gt;
 # Remove possibly broken jobs.&lt;br /&gt;
 oc get jobs.batch -n openshift-marketplace | grep -i 0/1&lt;br /&gt;
 # If job was not broken then remove all references to that operator. Remove jobs and configmaps.&lt;br /&gt;
 oc get job -n openshift-marketplace -o json | jq -r &#039;.items[] | select(.spec.template.spec.containers[].env[].value|contains (&amp;quot;elasticsearch-operator&amp;quot;)) | .metadata.name&#039; | while read i ; do echo oc delete job $i -n openshift-marketplace ; echo oc delete configmap $i -n openshift-marketplace ; done&lt;br /&gt;
&lt;br /&gt;
=Select channel=&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;candidate-4.12&amp;quot;}}&#039; # candidate-... channel offers unsupported early access to releases as soon as they are built.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;fast-4.12&amp;quot;}}&#039;      # As soon as version as a general availability (GA) release. Fully supported. Used in production environments.&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.12&amp;quot;}}&#039;    # Delay from fast. Looking at quality from fast. If found good then moved to stable&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;eus-4.12&amp;quot;}}&#039;       # Extended Update Support&lt;br /&gt;
&lt;br /&gt;
=find if image exitst=&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.15.38-x86_64&lt;br /&gt;
=Upgrade to version that you found on github okd=&lt;br /&gt;
 oc adm upgrade --to-image=&lt;br /&gt;
&lt;br /&gt;
=oc adm upgrade=&lt;br /&gt;
 Upgrade okd images.&lt;br /&gt;
=Launch a new instance of a pod for gathering debug information. Compress and deliver in support case=&lt;br /&gt;
 cd /tmp &amp;amp;&amp;amp; oc adm must-gather &amp;amp;&amp;amp; tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).$(date +%F_%H-%M-%S).tar.gz must-gather.local.*&lt;br /&gt;
=Must gather for odf=&lt;br /&gt;
 DATE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 mkdir /tmp/${DATE} ; cd /tmp/${DATE} &amp;amp;&amp;amp; oc adm must-gather --image=registry.redhat.io/odf4/odf-must-gather-rhel9:v4.16&lt;br /&gt;
 tar czf /tmp/must-gather.$(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;).${DATE}.tar.gz /tmp/${DATE}/&lt;br /&gt;
&lt;br /&gt;
=oc adm certificate approve &amp;lt;csr_name&amp;gt;=&lt;br /&gt;
Approve csr certificate&lt;br /&gt;
==Approve all csr==&lt;br /&gt;
 oc get csr --no-headers | grep -vE &#039;Pending|Issued&#039; | awk &#039;{print $1}&#039; | xargs -r oc adm certificate approve&lt;br /&gt;
&lt;br /&gt;
=certmanager=&lt;br /&gt;
==cert-manager design==&lt;br /&gt;
 (  +---------+  )&lt;br /&gt;
   (  | Ingress |  ) Optional                                              ACME Only!&lt;br /&gt;
   (  +---------+  )&lt;br /&gt;
          |                                                     |&lt;br /&gt;
          |   +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
          |-&amp;gt; | Certificate |----&amp;gt; | CertificateRequest | ----&amp;gt; |  | Order | ----&amp;gt; | Challenge |&lt;br /&gt;
              +-------------+      +--------------------+       |  +-------+       +-----------+&lt;br /&gt;
==look at cert-manager cr==&lt;br /&gt;
 oc api-resources | grep cert | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; oc get $i -A ; done&lt;br /&gt;
==list certificates==&lt;br /&gt;
 oc get certificate -A&lt;br /&gt;
==list ClusterIssuer==&lt;br /&gt;
 oc get ClusterIssuer -A&lt;br /&gt;
==list orders by date==&lt;br /&gt;
 oc get orders -n openshift-config --sort-by=.metadata.creationTimestamp&lt;br /&gt;
==install cmctl==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 curl -fsSL https://github.com/cert-manager/cert-manager/releases/latest/download/cmctl-linux-amd64.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - cmctl)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==completion==&lt;br /&gt;
 . &amp;lt;(cmctl completion bash)&lt;br /&gt;
==renew cert==&lt;br /&gt;
 cmctl renew -n openshift-config cert-api&lt;br /&gt;
==status of cert==&lt;br /&gt;
 cmctl status certificate -n openshift-ingress le-wildcard-apps-certificate&lt;br /&gt;
=cert-utils=&lt;br /&gt;
==cert check==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apiVersion: monitoring.coreos.com/v1&lt;br /&gt;
kind: PrometheusRule&lt;br /&gt;
metadata:&lt;br /&gt;
  name: cert-utils-operator-certificate-rule-alerts&lt;br /&gt;
  namespace: cert-utils-operator&lt;br /&gt;
spec:&lt;br /&gt;
  groups:&lt;br /&gt;
  - name: cert-utils-operator-recording-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - certutils_certificate_issue_time&lt;br /&gt;
      record: cert:validity_duration:sec&lt;br /&gt;
    - expr: certutils_certificate_expiry_time - time()&lt;br /&gt;
      record: cert:time_to_expiration:sec&lt;br /&gt;
  - name: cert-utils-operator-alerting-rules&lt;br /&gt;
    rules:&lt;br /&gt;
    - alert: CertificateApproachingExpiration&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 30 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is approaching expiration (30 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 2592000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: warning&lt;br /&gt;
    - alert: CertificateIsAboutToExpire&lt;br /&gt;
      annotations:&lt;br /&gt;
        message: Certificate {{ $labels.namespace }}/{{ $labels.name }} has less than 15 days left.&lt;br /&gt;
        summary: Certificate {{ $labels.namespace }}/{{ $labels.name }} is about to expire (15 days left).&lt;br /&gt;
      expr: |&lt;br /&gt;
        cert:validity_duration:sec &amp;gt;= 7776000 and cert:time_to_expiration:sec &amp;lt; 1296000&lt;br /&gt;
      labels:&lt;br /&gt;
        severity: critical&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=oc adm release info=&lt;br /&gt;
 # Show information about the cluster&#039;s current release&lt;br /&gt;
 oc adm release info&lt;br /&gt;
 # Show the source code that comprises a release&lt;br /&gt;
 oc adm release info 4.2.2 --commit-urls&lt;br /&gt;
 # Show the source code difference between two releases&lt;br /&gt;
 oc adm release info 4.2.0 4.2.2 --commits&lt;br /&gt;
 # Show where the images referenced by the release are located&lt;br /&gt;
 oc adm release info quay.io/openshift-release-dev/ocp-release:4.2.2 --pullspecs&lt;br /&gt;
 # Show release info about a release&lt;br /&gt;
 oc adm release info 4.10.47 --pullspecs&lt;br /&gt;
=release notes=&lt;br /&gt;
find changes between ocp versions / release note.&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path&lt;br /&gt;
 Select source and destination.&lt;br /&gt;
 At bottom there is graphical display.&lt;br /&gt;
 Press each bubble and read rhba.&lt;br /&gt;
Point releases in the end.&lt;br /&gt;
 https://docs.openshift.com/container-platform/4.12/release_notes/ocp-4-12-release-notes.html&lt;br /&gt;
&lt;br /&gt;
=oc adm node-logs=&lt;br /&gt;
Look at logs from crio from master nodes.&lt;br /&gt;
 oc adm node-logs --role master -u crio&lt;br /&gt;
Get logs from one node from unit crio&lt;br /&gt;
 oc adm node-logs abjorklund-01-5tsbc-worker-0-kcr54 -u crio&lt;br /&gt;
Look at specific log&lt;br /&gt;
 oc adm node-logs --role master --path=openshift-apiserver/audit.log&lt;br /&gt;
List logs&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
List logs from specific node.&lt;br /&gt;
 oc adm node-logs nord-ic-bc84t-master-0 --path=/oauth-server/&lt;br /&gt;
Logs since older reboots&lt;br /&gt;
 oc adm node-logs --role=master --path=/&lt;br /&gt;
Search recursive where log file exist.&lt;br /&gt;
 oc_debug_run_command_all_nodes &#039;find /var/log 2&amp;gt;&amp;amp;1 | grep &amp;lt;name_pod&amp;gt;&#039;&lt;br /&gt;
==download logfile==&lt;br /&gt;
 CONTAINER_PATH=&amp;quot;/containers&amp;quot; ; SEARCH_STRING=&amp;quot;rabbit&amp;quot; ; oc adm node-logs --role=worker --path=&amp;quot;${CONTAINER_PATH}&amp;quot; | grep &amp;quot;${SEARCH_STRING}&amp;quot; | while read NODE LOGFILE ; do echo $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; ; oc adm node-logs $NODE --path=&amp;quot;${CONTAINER_PATH}/${LOGFILE}&amp;quot; &amp;gt; ${NODE}:${CONTAINER_PATH//\//%}%${LOGFILE} ; done&lt;br /&gt;
&lt;br /&gt;
=openshift upgrade path=&lt;br /&gt;
 https://access.redhat.com/labs/ocpupgradegraph/update_path?channel=stable-4.9&amp;amp;arch=x86_64&amp;amp;is_show_hot_fix=false&amp;amp;current_ocp_version=4.9.15&amp;amp;target_ocp_version=4.10.11&lt;br /&gt;
=Upgrade openshift/okd=&lt;br /&gt;
 https://docs.okd.io/latest/updating/preparing_for_updates/updating-cluster-prepare.html&lt;br /&gt;
Run below and look to se if api:s that are being removed has a count.&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
&lt;br /&gt;
=upgrade openshift=&lt;br /&gt;
 # look for existing alerts.&lt;br /&gt;
 # look for troublesome pods.&lt;br /&gt;
 oc get pods -A  | grep -Ev &#039; Running | Completed &#039;&lt;br /&gt;
 # Set channel&lt;br /&gt;
 oc patch clusterversion version --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;stable-4.10&amp;quot;}}&#039;&lt;br /&gt;
 oc adm upgrade --to=4.10.47&lt;br /&gt;
 oc adm upgrade --include-not-recommended&lt;br /&gt;
 oc adm upgrade --allow-not-recommended --to=4.10.0 --include-not-recommended&lt;br /&gt;
 oc get clusterversion -o json|jq &amp;quot;.items[0].spec&amp;quot;&lt;br /&gt;
 # View openshift version history.&lt;br /&gt;
 oc get clusterversion -o json | jq -r &#039;.items[0].status.history[] |  [.version, .startedTime, .completionTime] | join(&amp;quot; &amp;quot;)&#039;&lt;br /&gt;
 # View progress of update.&lt;br /&gt;
 watch -n1 oc whoami --show-console \; oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json | jq -r .status.desired.version)|\&amp;quot;&amp;quot;&lt;br /&gt;
 # Upgrade all operators&lt;br /&gt;
 oc get installplan -A | grep Manual | grep false&lt;br /&gt;
 oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade okd=&lt;br /&gt;
==Get upgrade path.==&lt;br /&gt;
Look here to find latest version https://github.com/okd-project/okd/releases&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -s -O https://gist.githubusercontent.com/Goose29/ca7debd6aec7d1a4959faa2d1b661d93/raw/4584d89c49d4af197480539bdd873f6d9ca2dd83/upgrade-path.py ; sudo chmod 755 upgrade-path.py ) &amp;amp;&amp;amp; (curl -sH &#039;Accept:application/json&#039; &#039;https://amd64.origin.releases.ci.openshift.org/graph?channel=stable-4&#039; | upgrade-path.py 4.13.0-0.okd-2023-07-23-051208 4.14.0-0.okd-2024-01-26-175629 )&lt;br /&gt;
==To view status of update process run. Command is harmless and gives information about ongoing process and blockers.==&lt;br /&gt;
 oc adm upgrade&lt;br /&gt;
 watch -cn1 &amp;quot;oc whoami --show-console ; echo ; oc get clusteroperators | grep --color=always -E \&amp;quot;$(oc get clusterversions.config.openshift.io version -o json|jq -r &#039;.spec.desiredUpdate.version&#039;)|\&amp;quot;&amp;quot;&lt;br /&gt;
==To get slightly other view. VERSION column gives information about version. When update is done all cluster operators will have same version number.==&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
==Make a report of cluster status before installing. To rule out issues that you have not caused.==&lt;br /&gt;
 &amp;quot;status of kubernetes&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==Look for api:s that are used that are flagged for being removed.==&lt;br /&gt;
 oc get apirequestcounts&lt;br /&gt;
==Upgrade okd until there are no more updates or you have reached wanted version.==&lt;br /&gt;
 oc adm upgrade --to-latest=true --allow-explicit-upgrade&lt;br /&gt;
==If complaining about cert. ReleaseAccepted=False==&lt;br /&gt;
 oc patch --type=&#039;merge&#039; --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;desiredUpdate&amp;quot;:{&amp;quot;force&amp;quot;:true}}}&#039; clusterversion version&lt;br /&gt;
==If client want specific version pinpoint that.==&lt;br /&gt;
 oc adm upgrade --to=&amp;lt;version from oc adm upgrade&amp;gt; --allow-explicit-upgrade&lt;br /&gt;
oc adm upgrade gives: Upgradeable=False Reason: AdminAckRequiredn Follow instructions from link. Command will be something like below.&lt;br /&gt;
 oc -n openshift-config patch cm admin-acks --patch &#039;{&amp;quot;data&amp;quot;:{&amp;quot;ack-&amp;lt;version&amp;gt;-kube-&amp;lt;version&amp;gt;-api-removals-in-&amp;lt;version&amp;gt;&amp;quot;:&amp;quot;true&amp;quot;}}&#039; --type=merge&lt;br /&gt;
==Get pods that are less than perfekt.==&lt;br /&gt;
 oc get pods -A --no-headers | grep -v Completed | while read LINE ; do PODS=$(awk &#039;{print $3}&#039; &amp;lt;&amp;lt;&amp;lt; &amp;quot;${LINE}&amp;quot;) ; if [ &amp;quot;${PODS%%/*}&amp;quot; != &amp;quot;${PODS##*/}&amp;quot; ] ; then echo &amp;quot;${LINE}&amp;quot; ; fi ; done&lt;br /&gt;
==Get critical alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;critical&amp;quot;)&#039;&lt;br /&gt;
==Get warning alerts.==&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039;&lt;br /&gt;
&lt;br /&gt;
=upgrade odf=&lt;br /&gt;
 # View existing config. &lt;br /&gt;
 oc get subscriptions -n openshift-storage odf-operator -o yaml&lt;br /&gt;
 # Patch subscription&lt;br /&gt;
 oc patch subscriptions -n openshift-storage odf-operator --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;channel&amp;quot;: &amp;quot;&amp;lt;channel&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
 # Get install plans&lt;br /&gt;
 oc get installplan -n  openshift-storage -o wide&lt;br /&gt;
 # Approve install plan.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
&lt;br /&gt;
=odf troubleshooting=&lt;br /&gt;
 # ceph problem.  Run commands from rook-ceph-operator&lt;br /&gt;
 oc rsh -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator)&lt;br /&gt;
 export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;&lt;br /&gt;
 ceph -s&lt;br /&gt;
 ceph osd pool ls&lt;br /&gt;
 ceph osd pool autoscale-status&lt;br /&gt;
 ceph config dump&lt;br /&gt;
 # disable autoscaling&lt;br /&gt;
 ceph osd pool ls | while read i ; do echo &#039;*&#039; $i ; ceph osd pool set $i pg_autoscale_mode off ; done&lt;br /&gt;
 # Look to see how much data is being used for pg:s.&lt;br /&gt;
 # Number of PGLog Entries, size of PGLog data in megabytes, and Average size of each PGLog item&lt;br /&gt;
 for i in 0 1 2 ; do echo &#039;*&#039; $i ; osdid=$i ; ceph tell osd.$osdid dump_mempools | jq -r &#039;.mempool.by_pool.osd_pglog | [ .items, .bytes /1024/1024, .bytes / .items ] | @csv&#039; ;done&lt;br /&gt;
 ceph df&lt;br /&gt;
&lt;br /&gt;
=cronjobs=&lt;br /&gt;
 oc get cj&lt;br /&gt;
 oc get cronjobs -o wide -A&lt;br /&gt;
Run cronjob manually&lt;br /&gt;
 export CRONJOB=ldap-sync ; oc create job --from=cronjob/${CRONJOB} ${CRONJOB}-manual-$(date &#039;+%Y-%m-%d-%H-%M-%S&#039;)&lt;br /&gt;
Disable cronjob&lt;br /&gt;
 .spec.suspend: true&lt;br /&gt;
Enable cronjob&lt;br /&gt;
 oc patch cronjobs.batch write-to-nfs --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;suspend&amp;quot;: false}}&#039;&lt;br /&gt;
&lt;br /&gt;
=delete po (stop, kill)=&lt;br /&gt;
stop pod&lt;br /&gt;
 oc delete po --all --force&lt;br /&gt;
 oc delete pod openshift-gitops-server --namespace openshift-gitops&lt;br /&gt;
 oc delete pods -n openshift-oauth-apiserver --all&lt;br /&gt;
 oc get po -A | grep -v ^NAME | awk &#039;$4 !~ /Running/&#039; | sort -k4 | while read NAMESPACE POD READY STATUS END ; do echo &#039;****&#039; $POD $STATUS ; echo oc delete po $POD -n $NAMESPACE --force --grace-period=0 ; done&lt;br /&gt;
 oc get pods -A --field-selector=status.phase!=Running --no-headers | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do echo oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done&lt;br /&gt;
 # Delete pods and generate report on what has been removed.&lt;br /&gt;
 LOG=/tmp/oc_delete_pod_$(oc config current-context | awk -F &#039;/|:&#039; &#039;{print $2}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;).log ; (oc get pods --field-selector=&amp;quot;status.phase=Pending&amp;quot; --no-headers -A ; oc get pods --field-selector=&amp;quot;status.phase=Failed&amp;quot; --no-headers -A) | while read NAME_SPACE POD REST_OF_LINE ; do oc delete pod $POD -n &amp;quot;${NAME_SPACE}&amp;quot; --force --grace-period=0 ; done | tee $LOG ; awk -F\&amp;quot; &#039;{print $2}&#039; $LOG | sed &#039;s/-[a-z0-9]*$//g&#039;| sed &#039;s/-[a-z0-9]*$//g&#039; | sort | uniq -c | sort -n | tail -20&lt;br /&gt;
&lt;br /&gt;
=use other namespace=&lt;br /&gt;
 oc rsh  --namespace namespace-name pod-name&lt;br /&gt;
 oc rsh --namespace namespace-name-operator pod-name bash -c &#039;echo $PATH $HOSTNAME&#039;&lt;br /&gt;
&lt;br /&gt;
=list namespaces=&lt;br /&gt;
 oc get namespace&lt;br /&gt;
=use namespace=&lt;br /&gt;
 oc rsh  --namespace openshift-gitops openshift-gitops-application-controller-0&lt;br /&gt;
=kubectl get netnamespace=&lt;br /&gt;
Command line utility used to configure network. Egress address can be used to define outgoing address. Which can also cause other issues.&lt;br /&gt;
 oc get netnamespace openshift-gitops -oyaml&lt;br /&gt;
&lt;br /&gt;
=oc get routes=&lt;br /&gt;
 oc get routes --namespace openshift-gitops&lt;br /&gt;
=oc get oauth=&lt;br /&gt;
Describe authentication methods.&lt;br /&gt;
 oc get oauth cluster -o yaml&lt;br /&gt;
=decode token. base64=&lt;br /&gt;
 https://jwt.io/&lt;br /&gt;
=view secrets=&lt;br /&gt;
 oc get secret ca-key-pair -o go-template=&#039;{{range $k,$v := .data}}{{&amp;quot;### &amp;quot;}}{{$k}}{{&amp;quot;\n&amp;quot;}}{{$v|base64decode}}{{&amp;quot;\n\n&amp;quot;}}{{end}}&#039;&lt;br /&gt;
=delete cluster=&lt;br /&gt;
 openshift-install destroy cluster&lt;br /&gt;
=storageclasses(sc)=&lt;br /&gt;
 oc get storageclasses&lt;br /&gt;
=get storageclasses defined as default=&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039;&lt;br /&gt;
=set default storageclass=&lt;br /&gt;
 # Set all sc to default false.&lt;br /&gt;
 oc get sc -o json | jq -r &#039;.items[]|select(.&amp;quot;metadata&amp;quot;.annotations.&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;==&amp;quot;true&amp;quot;)|.metadata.name&#039; | while read i ; do echo &#039;*&#039; $i ; oc patch storageclass $i -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;false&amp;quot;}}}&#039;; done&lt;br /&gt;
 # Set default storageclass.&lt;br /&gt;
 oc patch storageclass ocs-storagecluster-cephfs -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;annotations&amp;quot;:{&amp;quot;storageclass.kubernetes.io/is-default-class&amp;quot;:&amp;quot;true&amp;quot;}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=get service accounts=&lt;br /&gt;
 oc get serviceaccounts -A&lt;br /&gt;
 oc get sa -A&lt;br /&gt;
&lt;br /&gt;
=which permissions do I have=&lt;br /&gt;
 oc auth can-i --as=fjuza --list&lt;br /&gt;
 oc get groups -o wide&lt;br /&gt;
 oc auth can-i --as-group=&amp;lt;group&amp;gt; --list&lt;br /&gt;
&lt;br /&gt;
=alerts=&lt;br /&gt;
==How is alertmanager configured==&lt;br /&gt;
 oc get secret -n openshift-monitoring alertmanager-main -o json | jq -r &#039;.data.&amp;quot;alertmanager.yaml&amp;quot;|@base64d&#039;&lt;br /&gt;
&lt;br /&gt;
==Save alertmanger config==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret alertmanager-main -n openshift-monitoring --template=&#039;{{index .data &amp;quot;alertmanager.yaml&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/oc_get_secret_alertmanager-main.alertmanager.yaml.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
oc extract secret/alertmanager-main --confirm -n openshift-monitoring&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Restore alertmanager config==&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;file_alertmanager.yaml&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==alertmanager==&lt;br /&gt;
View Alertmanager configured alerts.&lt;br /&gt;
 oc get prometheusrules -A -o yaml | grep alert: | sort&lt;br /&gt;
View configuration of alert&lt;br /&gt;
 oc get prometheusrules -A -o json | jq &#039;.items[].spec.groups[].rules[]| select(.alert==&amp;quot;AlertmanagerReceiversNotConfigured&amp;quot;)&#039;&lt;br /&gt;
view alerts.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq . | less -ISRM&lt;br /&gt;
View specific alert.&lt;br /&gt;
 oc rsh -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl &#039;http://localhost:9090/api/v1/query?query=absent%28up%7Bjob%3D&amp;quot;fluentd&amp;quot;%7D+%3D%3D+1%29&#039; | jq .&lt;br /&gt;
View alerts in state firing&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View alerts in state firing with severity warning&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/alerts&amp;quot; | jq &#039;.data.alerts[]|select(.state==&amp;quot;firing&amp;quot;)|select(.labels.severity==&amp;quot;warning&amp;quot;)&#039; | less -ISRM&lt;br /&gt;
View historical alerts. &lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=2022-08-08T00:00:00.781Z&amp;amp;end=2022-08-09T00:00:00.781Z&amp;amp;step=1m&amp;quot;&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-2 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1m&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Get warning alerts since the last week.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;) | .alertname&#039;&lt;br /&gt;
Get more info about fired alerts.&lt;br /&gt;
 echo &#039;***&#039; $(oc whoami --show-console) ; oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r &#039;.data.result[].metric | {alertname, severity, alertstate, pod, namespace}| select(.severity==&amp;quot;warning&amp;quot;)|select(.alertstate==&amp;quot;firing&amp;quot;)&#039;&lt;br /&gt;
Get alert during the last 6 days. Give times when alert has fired.&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=ALERTS&amp;amp;start=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S.000Z&#039; --date &#039;-6 days&#039;)&amp;amp;end=$(TZ=UTC date &#039;+%Y-%m-%dT%H:%M:%S&#039;).000Z&amp;amp;step=1m&amp;quot; | jq -r . | python3 -c &amp;quot;import sys, re, datetime; print(re.sub(r&#039;\b\d{10}\b&#039;, lambda x: datetime.datetime.utcfromtimestamp(int(x.group())).isoformat() + &#039;Z&#039;, sys.stdin.read()))&amp;quot; | less -ISRM&lt;br /&gt;
&lt;br /&gt;
=disable alermanager alert=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence add --alertmanager.url http://localhost:9093  alertname=AlertmanagerReceiversNotConfigured --end=&amp;quot;2053-11-07T00:00:00-00:00&amp;quot; --comment &amp;quot;silence alertmanager&amp;quot;&lt;br /&gt;
=list silenced alerts=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- amtool silence query --alertmanager.url http://localhost:9093&lt;br /&gt;
=Parsed config to alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .config.original&lt;br /&gt;
=Version of alertmanager=&lt;br /&gt;
 oc -n openshift-monitoring exec -ti alertmanager-main-0 -c alertmanager -- curl http://localhost:9093/api/v2/status | jq -r .versionInfo.version | strings&lt;br /&gt;
&lt;br /&gt;
=Silence alertmanager not configured alert=&lt;br /&gt;
 oc set data secret alertmanager-main -n openshift-monitoring --from-file=alertmanager.yaml=&amp;lt;(cat &amp;lt;&amp;lt;&#039;EOF&#039;&lt;br /&gt;
 &amp;quot;global&amp;quot;:&lt;br /&gt;
   &amp;quot;resolve_timeout&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
 &amp;quot;inhibit_rules&amp;quot;:&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;critical&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning|info&amp;quot;&lt;br /&gt;
   - &amp;quot;equal&amp;quot;:&lt;br /&gt;
       - &amp;quot;namespace&amp;quot;&lt;br /&gt;
       - &amp;quot;alertname&amp;quot;&lt;br /&gt;
     &amp;quot;source_match&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;warning&amp;quot;&lt;br /&gt;
     &amp;quot;target_match_re&amp;quot;:&lt;br /&gt;
       &amp;quot;severity&amp;quot;: &amp;quot;info&amp;quot;&lt;br /&gt;
 &amp;quot;receivers&amp;quot;:&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Watchdog&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;Critical&amp;quot;&lt;br /&gt;
   - &amp;quot;name&amp;quot;: &amp;quot;testrec&amp;quot; # Dummy receiver with webhook config&lt;br /&gt;
     &amp;quot;webhook_configs&amp;quot;:&lt;br /&gt;
       - &amp;quot;url&amp;quot;: &amp;quot;http://xxxxdumyxxx.com&amp;quot;&lt;br /&gt;
 &amp;quot;route&amp;quot;:&lt;br /&gt;
   &amp;quot;group_by&amp;quot;:&lt;br /&gt;
     - &amp;quot;namespace&amp;quot;&lt;br /&gt;
   &amp;quot;group_interval&amp;quot;: &amp;quot;5m&amp;quot;&lt;br /&gt;
   &amp;quot;group_wait&amp;quot;: &amp;quot;30s&amp;quot;&lt;br /&gt;
   &amp;quot;receiver&amp;quot;: &amp;quot;Default&amp;quot;&lt;br /&gt;
   &amp;quot;repeat_interval&amp;quot;: &amp;quot;12h&amp;quot;&lt;br /&gt;
   &amp;quot;routes&amp;quot;:&lt;br /&gt;
     - &amp;quot;match&amp;quot;:&lt;br /&gt;
         &amp;quot;alertname&amp;quot;: &amp;quot;dummyalert&amp;quot; # Dummy alert being routed to dummy receiver&lt;br /&gt;
       &amp;quot;receiver&amp;quot;: &amp;quot;testrec&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
 )&lt;br /&gt;
&lt;br /&gt;
=prometheus=&lt;br /&gt;
Url to web interface.&lt;br /&gt;
 https://prometheus-k8s-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 echo https://prometheus-k8s-openshift-monitoring.$(oc whoami --show-console | awk -F &#039;console-openshift-console.&#039; &#039;{print $2}&#039;)&lt;br /&gt;
 echo https://$(oc get route -n openshift-monitoring prometheus-k8s -o jsonpath=&amp;quot;{.spec.host}&amp;quot;)&lt;br /&gt;
Get disk usage from odf&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query?query=odf_system_raw_capacity_used_bytes&amp;quot; | jq -r .&lt;br /&gt;
Get disk usage from odf over time.(metrics)&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=odf_system_raw_capacity_used_bytes&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq . | less -ISRM&lt;br /&gt;
Search tips&lt;br /&gt;
 https://prometheus.io/docs/prometheus/latest/querying/basics/&lt;br /&gt;
Disk usage per project. Taken from RH ticket.&lt;br /&gt;
 oc -n openshift-monitoring exec prometheus-k8s-0 -c prometheus -- curl -s -g &#039;http://localhost:9090/api/v1/query?&#039; --data-urlencode &#039;query=(sort_desc(topk(25,(sum(kubelet_volume_stats_used_bytes * on (namespace,persistentvolumeclaim) group_left(storageclass, provisioner) (kube_persistentvolumeclaim_info * on (storageclass)  group_left(provisioner) kube_storageclass_info {provisioner=~&amp;quot;(.*cephfs.csi.ceph.com)&amp;quot;})) by (namespace)))))&#039;&lt;br /&gt;
&lt;br /&gt;
=openshift-user-workload-monitoring=&lt;br /&gt;
   &amp;quot;annotations&amp;quot;: {&lt;br /&gt;
     &amp;quot;description&amp;quot;: &amp;quot;Prometheus operator in openshift-user-workload-monitoring namespace rejected 2 prometheus/ServiceMonitor resources.&amp;quot;,&lt;br /&gt;
     &amp;quot;summary&amp;quot;: &amp;quot;Resources rejected by Prometheus operator&amp;quot;&lt;br /&gt;
   },...&lt;br /&gt;
 # Look at what is causing.&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 # After tweaking with monitoring settings kill pod and view log.&lt;br /&gt;
 oc delete pod -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring&lt;br /&gt;
 oc logs -l app.kubernetes.io/name=prometheus-operator -n openshift-user-workload-monitoring | less&lt;br /&gt;
 # Stop monitoring.&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/cluster-monitoring-&lt;br /&gt;
 oc label namespace openshift-local-storage openshift.io/user-monitoring=false&lt;br /&gt;
 # Allow monitoring.&lt;br /&gt;
 oc label namespace openshift-operators openshift.io/cluster-monitoring=true&lt;br /&gt;
&lt;br /&gt;
=Talk to api with Bearer.=&lt;br /&gt;
 HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.spec.host})&lt;br /&gt;
 TOKEN=$(oc whoami -t)&lt;br /&gt;
 curl -skH &amp;quot;Authorization: Bearer $TOKEN&amp;quot; &amp;quot;https://$HOST/api/v2/alerts&amp;quot; | jq .&lt;br /&gt;
=token=&lt;br /&gt;
 token=`oc sa get-token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.10 or lower ---&lt;br /&gt;
OR&lt;br /&gt;
 token=`oc create token prometheus-k8s -n openshift-monitoring` ## --- In OCP client 4.11 or higher ---&lt;br /&gt;
curl using token&lt;br /&gt;
 curl -k -H &amp;quot;Authorization: Bearer $token&amp;quot; &#039;https://alertmanager-main-openshift-monitoring.apps.domain/api/v1/alerts&#039; |  jq &#039;.data[].labels&#039;&lt;br /&gt;
=ServiceMonitor=&lt;br /&gt;
Prometheus Operator:&lt;br /&gt;
 When using Prometheus Operator, custom resources like ServiceMonitor and PodMonitor might include metricsConfig settings to customize how Prometheus should scrape metrics from various services or pods.&lt;br /&gt;
&lt;br /&gt;
=bash completion=&lt;br /&gt;
 . &amp;lt;(oc completion bash)&lt;br /&gt;
&lt;br /&gt;
=machineconfig=&lt;br /&gt;
view settings&lt;br /&gt;
 oc describe machineconfigpool&lt;br /&gt;
==set ntp servers==&lt;br /&gt;
 echo &#039;variant: openshift&lt;br /&gt;
 version: 4.9.0&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: 99-master-chrony &lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: master &lt;br /&gt;
 storage:&lt;br /&gt;
   files:&lt;br /&gt;
   - path: /etc/chrony.conf&lt;br /&gt;
     mode: 0644 &lt;br /&gt;
     overwrite: true&lt;br /&gt;
     contents:&lt;br /&gt;
       inline: |&lt;br /&gt;
         server ntp.lio.se iburst&lt;br /&gt;
         driftfile /var/lib/chrony/drift&lt;br /&gt;
         makestep 1.0 3&lt;br /&gt;
         rtcsync&lt;br /&gt;
         logdir /var/log/chrony&#039; | butane | oc apply -f -&lt;br /&gt;
==get machineconfig value==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
&lt;br /&gt;
==List machineconfigs by creation time==&lt;br /&gt;
 oc get mc --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=get users=&lt;br /&gt;
 oc get users&lt;br /&gt;
=give me kubeadmin ecrypted password=&lt;br /&gt;
 oc get secret kubeadmin -n kube-system -o json  -o=jsonpath=&#039;{.data.kubeadmin}&#039; | base64 -d&lt;br /&gt;
=Give kubeadmin a new password=&lt;br /&gt;
==generate password hash==&lt;br /&gt;
 htpasswd -bnBC 10 &amp;quot;&amp;quot; &#039;&amp;lt;password&amp;gt;&#039; | tr -d &#039;:\n&#039; | base64 -w0&lt;br /&gt;
&lt;br /&gt;
==patch password hash==&lt;br /&gt;
 oc patch secret/kubeadmin -n kube-system -p &#039;{&amp;quot;data&amp;quot;: {&amp;quot;kubeadmin&amp;quot;: &amp;quot;UGFzc3dvcmQK==&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=work with oc without login=&lt;br /&gt;
 export KUBECONFIG=/var/lib/kubelet/kubeconfig&lt;br /&gt;
if on bootstrap node.&lt;br /&gt;
 export KUBECONFIG=/etc/kubernetes/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=Add the following if cert is not trusted.ssl/tls/ignore/expired=&lt;br /&gt;
 - cluster:&lt;br /&gt;
     insecure-skip-tls-verify: true&lt;br /&gt;
     server: https://127.0.0.1:443&lt;br /&gt;
   name: my-cluster&lt;br /&gt;
&lt;br /&gt;
=run oc when on node=&lt;br /&gt;
 oc get pod -n openshift-monitoring --kubeconfig=/var/lib/kubelet/kubeconfig&lt;br /&gt;
&lt;br /&gt;
=etcdctl=&lt;br /&gt;
 oc rsh -c etcdctl -n openshift-etcd $(oc get pod -l app=etcd -oname -n openshift-etcd | awk -F&amp;quot;/&amp;quot; &#039;NR==1{ print $2 }&#039;)&lt;br /&gt;
 [root@ocp-03-lm8km-master-1 /]# etcdctl --write-out=table endpoint status&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 |         ENDPOINT          |        ID        | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
 | htt://172.19.14.36:2379   | c4f7b42b92713818 |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.37:2379   | 5dea668b432969fc |   3.5.0 |  105 MB |     false |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 | htt://172.19.14.41:2379   | 51cecd971b657ee5 |   3.5.0 |  105 MB |      true |      false |         6 |    2632074 |            2632074 |        |&lt;br /&gt;
 +---------------------------+------------------+---------+---------+-----------+------------+-----------+------------+--------------------+--------+&lt;br /&gt;
Verifying etcd while openshift is less than perfekt&lt;br /&gt;
 # List etcd containers&lt;br /&gt;
 crictl ps --label io.kubernetes.pod.namespace=openshift-etcd&lt;br /&gt;
 # Execute command to verify health of etcd using crictl&lt;br /&gt;
 crictl exec -it &amp;lt;container-id&amp;gt; etcdctl endpoint status --write-out=table&lt;br /&gt;
&lt;br /&gt;
=create troubleshooting/debug/test pod=&lt;br /&gt;
 oc run abjorklund-redhat-ubi8 --image=redhat/ubi8 -i --tty -- sh&lt;br /&gt;
 oc run abjorklund-curlimage-curl --image=curlimages/curl -i --tty -- sh&lt;br /&gt;
 oc run -it busybox --image=busybox --restart=Never -- ash&lt;br /&gt;
 oc run abjorklund-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux -i --tty -- bash # dnf -y install procps-ng iproute&lt;br /&gt;
 oc run ${USER}-rocky-rocky --image=rockylinux/rockylinux --restart=Never --command sleep infinity&lt;br /&gt;
==install packages to get running==&lt;br /&gt;
 yum install -y lsof procps-ng bind-utils&lt;br /&gt;
&lt;br /&gt;
=proxy settings=&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
Change ca&lt;br /&gt;
 oc patch proxy/cluster --type=merge --patch=&#039;{&amp;quot;spec&amp;quot;:{&amp;quot;trustedCA&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-ca&amp;quot;}}}&#039;&lt;br /&gt;
=oc proxy=&lt;br /&gt;
Run a proxy to the Kubernetes API server&lt;br /&gt;
=port forward to pod=&lt;br /&gt;
 oc port-forward &amp;lt;my-pod-name&amp;gt; &amp;lt;local-port&amp;gt;:&amp;lt;remote-port&amp;gt;&lt;br /&gt;
=alertmanager=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-alertmanager 9093:9093  # http://localhost:9093/&lt;br /&gt;
=grafana access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-grafana 3000:80         # http://localhost:3000 admin prom-operator&lt;br /&gt;
=prometheus access=&lt;br /&gt;
 oc port-forward -n monitoring svc/kube-prometheus-stack-prometheus 9090:9090    # http://localhost:9090&lt;br /&gt;
=akhq=&lt;br /&gt;
http://localhost&lt;br /&gt;
 kubectl port-forward service/akhq 8080:80&lt;br /&gt;
=thanos-queries=&lt;br /&gt;
 oc port-forward -n openshift-monitoring svc/thanos-querier 9091:9091 # access via: curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://localhost:9091/api/v1/status/buildinfo | jq . (via browser use requestly)&lt;br /&gt;
&lt;br /&gt;
==proxy via pod==&lt;br /&gt;
 # Create tunnel pod. Please remove when done.&lt;br /&gt;
 oc apply -f - &amp;lt;&amp;lt; &#039;EOF&#039;&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Pod&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: proxy-pod&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
   - name: socat-proxy&lt;br /&gt;
     image: alpine/socat:latest&lt;br /&gt;
     command: [&amp;quot;/bin/sh&amp;quot;, &amp;quot;-c&amp;quot;]&lt;br /&gt;
     args:&lt;br /&gt;
       - |&lt;br /&gt;
         apk add --no-cache socat &amp;amp;&amp;amp;  # Install socat if not in image&lt;br /&gt;
         socat TCP-LISTEN:443,fork,reuseaddr TCP:scm.devops.cambio.se:443&lt;br /&gt;
     ports:&lt;br /&gt;
       - containerPort: 443&lt;br /&gt;
   restartPolicy: Never&lt;br /&gt;
 EOF&lt;br /&gt;
 # Tunnel on localhost reaching destination.&lt;br /&gt;
 sudo oc --kubeconfig=$KUBECONFIG port-forward pod/proxy-pod -n default 443:443&lt;br /&gt;
 # Add hosts entry to use browser as &amp;quot;usual&amp;quot;.&lt;br /&gt;
 grep scm.devops.cambio.se /etc/hosts&lt;br /&gt;
 127.0.0.1 localhost scm.devops.cambio.se&lt;br /&gt;
&lt;br /&gt;
=Install additional ca certificate=&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: MachineConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     machineconfiguration.openshift.io/role: worker&lt;br /&gt;
   name: 50-company-ca-cert&lt;br /&gt;
 spec:&lt;br /&gt;
   config:&lt;br /&gt;
     ignition:&lt;br /&gt;
       version: 3.1.0&lt;br /&gt;
     storage:&lt;br /&gt;
       files:&lt;br /&gt;
       - contents:&lt;br /&gt;
           source: data:text/plain;charset=utf-8;base64,LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURrVENDQW5tZ0F3SUJBZ0lFSC93Skh6QU5CZ2txaGtpRzl3MEJBUXNGQURBM01SVXdFd1lEVlFRS0RBeFMKUlVSQ1VrbEVSMFV1VTBVeEhqQWNCZ05WQkFNTUZVTmxjblJwWm1sallYUmxJRUYxZEdodmNtbDBlVEFlRncweQpNVEF5TWpNd056RTVOVFphRncwME1UQXlNak13TnpFNU5UWmFNRGN4RlRBVEJnTlZCQW9NREZKRlJFSlNTVVJIClJTNVRSVEVlTUJ3R0ExVUVBd3dWUTJWeWRHbG1hV05oZEdVZ1FYVjBhRzl5YVhSNU1JSUJJakFOQmdrcWhraUcKOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQW5mY1F3YURwcEdzNWJxaUc5ajE5aFJVaG1sMzhjb2JGT2tzRQpsZFo3Y3RkV1d6VHJqSTFCRGxZSEd5SXBYMEo4ZU1PaDhvbUZqbVR6VTEzTkpWSnJrWm5RaDRhTzA1UGtKRlJRCkg1ZVA2N3R0S2pEb0txOFZVWXRZUldxRlFaalNxY2lQMzJobXZSNG42QVZDWDdCaUVBZjd2Y05ZVys0a1k5OUsKbTluV1BNbEpGU056M1puRnlWc1BtR1ZWeVN2RmFVL0dBTmt1Z25uSGdUM1VUUTNsc2NidU5keUpBcVEya3dHSwpKbkdZKzBSajVrUWpvdXptUjBDZ3pJN0hWSmhwK2Z6R1lyenRYQXA1Zkt0Z3ZTZFRtTndVVXZJR3pLTmU4WklGCmY0WVVUUDFPdU9jUmNIRDJQclVodDgzWlRLYzNwOUhLYk5CazIzWFFtYU85QVBqeEl3SURBUUFCbzRHa01JR2gKTUI4R0ExVWRJd1FZTUJhQUZMbWFrNHdDamtuakZvWkd6M1daRGErY2N4RGxNQjBHQTFVZERnUVdCQlM1bXBPTQpBbzVKNHhhR1JzOTFtUTJ2bkhNUTVUQVBCZ05WSFJNQkFmOEVCVEFEQVFIL01BNEdBMVVkRHdFQi93UUVBd0lCCnhqQStCZ2dyQmdFRkJRY0JBUVF5TURBd0xnWUlLd1lCQlFVSE1BR0dJbWgwZEhBNkx5OXBjR0V0WTJFdWNtVmsKWW5KcFpHZGxMbk5sTDJOaEwyOWpjM0F3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQURabURvUytJY1ZMcERBRwpiSXM0SWRJKzcxY0xINk90NjNkYWhBT25QRDJnMUhvVUFIZFdUcGdobER3TkFQWjg3UXQybFc4Q1B4eDhCQVZOCnlrZWlEN2paeVA5dmVCcDRxNjBiSTVYSENndWV5U2lGdjBBKzloKzMzekMrYy9WbStJVHJNTkZ0dlZMNE1kRWQKaVE4UVBhaFJEWW1qVkJVb1VIZWErMDdkWEY3TzQxY2t2YzZRb0lad2F5Y1Zhc0gvd05lVGNrdzl1TlNiajNTQwoyNHdpOUthQnpxdDZsWlF3TG5uUjVnNjNWUDZNZUprR2FXMTBxdExiQVM4NGZwQ1NWTUx3U051MGZqeFU2d2lPCkRjaWlKKzNZOG5ldjM5NGJHRkwxcG5ZVmM4YmpoL0xaaHM1dTRQUnhlNFBLRER2Y09NZUhpUkN1M1YySWRRTTgKbDl3enBQZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoK&lt;br /&gt;
         mode: 0644&lt;br /&gt;
         overwrite: true&lt;br /&gt;
         path: /etc/pki/ca-trust/source/anchors/company-ca.crt&lt;br /&gt;
&lt;br /&gt;
=get raw api data=&lt;br /&gt;
 oc get --raw &amp;quot;/api/v1/nodes/[node]/proxy/stats/summary&amp;quot;&lt;br /&gt;
Via proxy.&lt;br /&gt;
 oc proxy &amp;amp;&lt;br /&gt;
 Starting to serve on 127.0.0.1:8001&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/stats/summary&lt;br /&gt;
 curl -s http://localhost:8001/api/v1/nodes/crc-lgph7-master-0/proxy/metrics/resource&lt;br /&gt;
=explain=&lt;br /&gt;
Get documentation for a resource. Get available attributes for an resource.&lt;br /&gt;
 oc explain deployment&lt;br /&gt;
&lt;br /&gt;
=events=&lt;br /&gt;
Get events.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
=jsonpath=&lt;br /&gt;
Get names of MachineConfigs one value per line.&lt;br /&gt;
 oc get mc -o jsonpath=&#039;{range .items[*]}{.metadata.name}{&amp;quot;\n&amp;quot;}{end}&#039; --no-headers&lt;br /&gt;
=ImageStreamTag=      &lt;br /&gt;
ImageStreamTag represents an Image that is retrieved by tag name from an ImageStream.&lt;br /&gt;
=imagestream=&lt;br /&gt;
 apiVersion: image.openshift.io/v1&lt;br /&gt;
 kind: ImageStream&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
==Tagging Images: When you tag an image, it is added to the ImageStream with a specified tag.==&lt;br /&gt;
 oc tag myregistry/myapp:latest myapp:latest&lt;br /&gt;
==Using ImageStreams in Deployment Configurations: Deployment configurations can reference ImageStreams instead of direct image URLs.==&lt;br /&gt;
 apiVersion: apps.openshift.io/v1&lt;br /&gt;
 kind: DeploymentConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: myapp&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: myapp&lt;br /&gt;
           image: image-registry.openshift-image-registry.svc:5000/myproject/myapp:latest&lt;br /&gt;
&lt;br /&gt;
=BuildConfig=&lt;br /&gt;
 Build configurations define a build process for new container images.&lt;br /&gt;
=download okd openshift-install=&lt;br /&gt;
 # Show latest.&lt;br /&gt;
 curl -skL https://github.com/okd-project/okd/releases | elinks --dump | sed &#039;s/^ *//g&#039; | grep &amp;quot; Latest&amp;quot;&lt;br /&gt;
 # Download and install in /usr/local/bin. Keep old versions.&lt;br /&gt;
 export OKD_VERSION=4.15.0-0.okd-2024-03-10-010116 ; (cd /temp/ ; oc adm release extract --tools quay.io/openshift/okd:${OKD_VERSION} ; cd /usr/local/bin/ ; sudo tar xf /temp/openshift-install-linux-${OKD_VERSION}.tar.gz openshift-install ; sudo mv openshift-install openshift-install.${OKD_VERSION})&lt;br /&gt;
&lt;br /&gt;
=setup openshift cluster=&lt;br /&gt;
Download binary&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd /tmp/ ; curl -L -O https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/4.10.47/openshift-install-linux.tar.gz &amp;amp;&amp;amp; sudo tar xf openshift-install-linux.tar.gz -C /usr/local/bin/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Add vmware certs if using that backend.&lt;br /&gt;
 (cd /tmp/ ; curl -sk https://${vspherer_server}/certs/download.zip -O) ; cd /etc/pki/ca-trust/source/anchors ; sudo unzip -oj /tmp/download.zip certs/lin/\* ; sudo update-ca-trust&lt;br /&gt;
Create config file&lt;br /&gt;
 install-config.yaml&lt;br /&gt;
Then fire off install&lt;br /&gt;
 openshift-install create cluster&lt;br /&gt;
Another example&lt;br /&gt;
 ln -s install-config.yaml.2023-03-23 install-config.yaml&lt;br /&gt;
 ./openshift-install-4.12.0-0.okd-2023-04-16-041331 create cluster&lt;br /&gt;
&lt;br /&gt;
=Edit install config after setup=&lt;br /&gt;
Save config&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oc get cm cluster-config-v1 -n kube-system --template=&#039;{{index .data &amp;quot;install-config&amp;quot; }}&#039; &amp;gt; /tmp/cm_cluster-config-v1_-n_kube-system.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Edit downloaded file and apply edited file.&lt;br /&gt;
 oc set data cm cluster-config-v1 -n kube-system --from-file=install-config=/tmp/cm_cluster-config-v1_-n_kube-system.&amp;lt;suitable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=look at install settings=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
&lt;br /&gt;
=argocd login=&lt;br /&gt;
 argocd login openshift-gitops-server-openshift-gitops.apps.costest.ltkronoberg.se --username kubeadmin --password asdfasfasdfas --sso --insecure&lt;br /&gt;
 argocd login $(oc get routes -n openshift-gitops openshift-gitops-server -o json | jq -r .spec.host) --username $USER --password $COMPANY_PASSWORD --sso --insecure&lt;br /&gt;
&lt;br /&gt;
=git sync heal=&lt;br /&gt;
 argocd app list | grep -v NAME | awk &#039;{print $1}&#039; | while read i ; do echo &#039;*&#039; $i ; argocd app set $i --self-heal ; done&lt;br /&gt;
&lt;br /&gt;
=metrics=&lt;br /&gt;
==Get available values==&lt;br /&gt;
Thanos monitoring points&lt;br /&gt;
 curl -sk -H &amp;quot;Authorization: Bearer $(oc whoami -t)&amp;quot; https://$(oc get routes -n openshift-monitoring thanos-querier -o jsonpath=&#039;{.status.ingress[0].host}&#039;)/api/v1/metadata | jq .&lt;br /&gt;
node-exporter&lt;br /&gt;
 oc --request-timeout=3 -n openshift-monitoring exec -c node-exporter $(oc get pod -n openshift-monitoring -l app.kubernetes.io/name=node-exporter -o=custom-columns=&#039;NAME:.metadata.name&#039; --no-headers | head -1) -- curl -s &#039;http://localhost:9100/metrics&#039; | grep -vE &amp;quot;^#|^$&amp;quot;&lt;br /&gt;
==Cpu usage per node.==&lt;br /&gt;
 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;idle&amp;quot;}[30m])) * 100)&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;,  cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
 instance:node_cpu_utilisation:rate1m{job=&amp;quot;node-exporter&amp;quot;} != 0&lt;br /&gt;
==cpu usage per pod on node==&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;, node=~&amp;quot;&amp;lt;node&amp;gt;&amp;quot;}) by (pod)&lt;br /&gt;
==iowait==&lt;br /&gt;
 avg by (instance) (irate(node_cpu_seconds_total{mode=&amp;quot;iowait&amp;quot;}[30m]))&lt;br /&gt;
==namespace==&lt;br /&gt;
cpu usage per namespace.&lt;br /&gt;
 sum(node_namespace_pod_container:container_cpu_usage_seconds_total:sum_irate{cluster=&amp;quot;&amp;quot;}) by (namespace)&lt;br /&gt;
==load==&lt;br /&gt;
Load 1 graph&lt;br /&gt;
 instance:node_load1_per_cpu:ratio{job=&amp;quot;node-exporter&amp;quot;, cluster=&amp;quot;&amp;quot;} != 0&lt;br /&gt;
==usage for pvc==&lt;br /&gt;
 kubelet_volume_stats_used_bytes&lt;br /&gt;
 kubelet_volume_stats_available_bytes&lt;br /&gt;
 kubelet_volume_stats_used_bytes{persistentvolumeclaim=&amp;quot;prometheus-prometheus-k8s-1&amp;quot;}&lt;br /&gt;
With % usage of all pvc&lt;br /&gt;
 ( kubelet_volume_stats_used_bytes / kubelet_volume_stats_capacity_bytes ) * 100&lt;br /&gt;
&lt;br /&gt;
==Memory usage==&lt;br /&gt;
Memory usage of node.&lt;br /&gt;
 instance:node_memory_utilisation:ratio&lt;br /&gt;
 node_memory_MemAvailable_bytes&lt;br /&gt;
 100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))&lt;br /&gt;
==Memory usage per pod on a node==&lt;br /&gt;
 sum(container_memory_usage_bytes{node=&amp;quot;&amp;lt;node_name&amp;gt;&amp;quot;}) by (pod, namespace)&lt;br /&gt;
==OOMKilled==&lt;br /&gt;
 sum by (namespace, pod) (kube_pod_container_status_restarts_total) * on(namespace, pod) group_left(reason) kube_pod_container_status_last_terminated_reason{reason=&amp;quot;OOMKilled&amp;quot;}&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/query_range?query=sum%20by%20(namespace,%20pod)%20(kube_pod_container_status_restarts_total)%20*%20on(namespace,%20pod)%20group_left(reason)%20kube_pod_container_status_last_terminated_reason%7Breason%3D%22OOMKilled%22%7D&amp;amp;start=$(date &#039;+%Y-%m-%d&#039; --date &#039;-20 days&#039;)T00:00:00.781Z&amp;amp;end=$(date &#039;+%Y-%m-%dT%H:%M:%S&#039;).781Z&amp;amp;step=1h&amp;quot; | jq .&lt;br /&gt;
==uptime==&lt;br /&gt;
 oc exec -n openshift-monitoring -c prometheus prometheus-k8s-0 -- curl -s &#039;http://localhost:9090/api/v1/query?query=time%28%29%20-%20node_boot_time_seconds%7Bjob%3D%22node-exporter%22%7D%0A&#039; | jq -r &#039;.data.result[]|.metric.instance +&amp;quot;\t&amp;quot;+ (.value[1] | tonumber | floor | tostring)&#039; | column_tab&lt;br /&gt;
==disk usage==&lt;br /&gt;
 (1 - (node_filesystem_avail_bytes{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_size_bytes{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk inode usage==&lt;br /&gt;
 (1 - (node_filesystem_files_free{mountpoint=&amp;quot;/&amp;quot;} / node_filesystem_files{mountpoint=&amp;quot;/&amp;quot;})) * 100&lt;br /&gt;
==disk utalization==&lt;br /&gt;
 100 * (rate(node_disk_io_time_seconds_total[5m]) / 300)&lt;br /&gt;
&lt;br /&gt;
==steal==&lt;br /&gt;
 sum by (instance) (rate(node_cpu_seconds_total{mode=&amp;quot;steal&amp;quot;}[1m])) * 100&lt;br /&gt;
==request memory==&lt;br /&gt;
 sum by (node) ( kube_pod_container_resource_requests{resource=&amp;quot;memory&amp;quot;} * on (namespace, pod) group_left kube_pod_status_phase{phase=&amp;quot;Running&amp;quot;} ) / 1024 / 1024&lt;br /&gt;
&lt;br /&gt;
=install oc and kubectl=&lt;br /&gt;
 curl -fsSL https://mirror.openshift.com/pub/openshift-v4/x86_64/clients/ocp/latest/openshift-client-linux.tar.gz | (cd /usr/local/bin/ ; sudo tar zxf - oc kubectl )&lt;br /&gt;
&lt;br /&gt;
=time and timezone in first pod(date)=&lt;br /&gt;
 oc get pods --no-headers -o &#039;custom-columns=:.metadata.namespace,:.metadata.name&#039; -A | grep -v cert-manager | head -1 | while read NAMESPACE POD ; do oc rsh -n $NAMESPACE $POD  bash -c &#039;date &amp;quot;+%Y-%m-%d %H:%M:%S %Z&amp;quot;&#039; 2&amp;gt;/dev/null ; done&lt;br /&gt;
&lt;br /&gt;
=oc get installplan=&lt;br /&gt;
InstallPlan defines the installation of a set of operators.&lt;br /&gt;
 oc get installplan install-bk8hw -n openshift-operators -o yaml&lt;br /&gt;
Approve all manual updates.&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers | awk &#039;$5 ~ /false/&#039; | awk &#039;$4 ~ /Manual/&#039; | while read NAMESPACE INSTALLPLAN END ; do echo &#039;*&#039; $NAMESPACE $INSTALLPLAN ; oc patch installplan $INSTALLPLAN -n $NAMESPACE --type merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;approved&amp;quot;:true}}&#039; ; done&lt;br /&gt;
Get selected info from all installplans&lt;br /&gt;
 oc get installplans.operators.coreos.com -A --no-headers -o=custom-columns=&#039;DATE:.metadata.creationTimestamp,NAME:.metadata.name,PHASE:.status.phase,CSV:.spec.clusterServiceVersionNames,NAMESPACE:.metadata.namespace&#039;  --sort-by=.metadata.creationTimestamp&lt;br /&gt;
&lt;br /&gt;
=oc extract=&lt;br /&gt;
Extract secrets or config maps to disk&lt;br /&gt;
 # Extract only the key &amp;quot;nginx.conf&amp;quot; from config map &amp;quot;nginx&amp;quot; to the /tmp directory&lt;br /&gt;
 oc extract configmap/nginx --to=/tmp --keys=nginx.conf&lt;br /&gt;
=dependencies,owner=&lt;br /&gt;
Search in output from&lt;br /&gt;
 oc describe ...&lt;br /&gt;
Search for this.&lt;br /&gt;
 Controlled By:  ReplicaSet/rook-ceph-osd-0-6dcdc7fb48&lt;br /&gt;
=metadata.ownerReferences=&lt;br /&gt;
 Define object that owns object&lt;br /&gt;
&lt;br /&gt;
=nodeAffinity=&lt;br /&gt;
Pin pod to node with label (kubectl label nodes &amp;lt;your-node-name&amp;gt; disktype=ssd)&lt;br /&gt;
 spec:&lt;br /&gt;
   affinity:&lt;br /&gt;
     nodeAffinity:&lt;br /&gt;
       requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
         nodeSelectorTerms:&lt;br /&gt;
         - matchExpressions:&lt;br /&gt;
           - key: disktype&lt;br /&gt;
             operator: In&lt;br /&gt;
             values:&lt;br /&gt;
            - ssd&lt;br /&gt;
&lt;br /&gt;
=Add user to group=&lt;br /&gt;
 oc adm groups add-users openshift-admins rb_janitor&lt;br /&gt;
=api-int=&lt;br /&gt;
 api-int.&amp;lt;fqdn&amp;gt;&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; curl -skI https://${i%%:*}:${i##*:} 2&amp;gt;&amp;amp;1 | xargs ; done | cut -c -150&lt;br /&gt;
 for i in api-int:6443 api:6443 test.apps:443 ; do ping -c1 -W1 ${i%%:*} 2&amp;gt;&amp;amp;1 | xargs ; set -x ; curl -skv https://${i%%:*}:${i##*:} -o /dev/null 2&amp;gt;&amp;amp;1 | grep &amp;quot;Server certificate:&amp;quot; -A5 ; set +x ; done | cut -c -150&lt;br /&gt;
=test talk to api-int=&lt;br /&gt;
 CACERT=/tmp/%var%lib%kubelet%kubeconfig%certificate-authority-data ; grep certificate-authority-data: /var/lib/kubelet/kubeconfig | awk &#039;{print $2}&#039; | base64 -d &amp;gt; /$CACERT ; curl -s --key /var/lib/kubelet/pki/kubelet-client-current.pem --cert /var/lib/kubelet/pki/kubelet-client-current.pem --cacert $CACERT -XGET &amp;quot;$(grep server /etc/kubernetes/kubeconfig | awk &#039;{print $2}&#039;)/api/v1/namespaces/default/pods?limit=500&amp;quot;&lt;br /&gt;
=api urls=&lt;br /&gt;
 kubernetes generic:                    reference to the Kubernetes API server.&lt;br /&gt;
 kubernetes.default:                    reference to the Kubernetes API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc:                refers to the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 kubernetes.default.svc.cluster.local:  This is the fully-qualified domain name (FQDN) for the Kubernetes service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift:                             Similar to &amp;quot;kubernetes,&amp;quot; this is a generic reference to the OpenShift API server.&lt;br /&gt;
 openshift.default:                     reference to the OpenShift API server within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc:                 refers to the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
 openshift.default.svc.cluster.local:   fully-qualified domain name (FQDN) for the OpenShift service within the &amp;quot;default&amp;quot; namespace.&lt;br /&gt;
&lt;br /&gt;
=okd setup fix=&lt;br /&gt;
 # On bootstrap node. Could work on all clusters. First a test to se if it work already.&lt;br /&gt;
 DOMAIN=$(grep &amp;quot; baseDomain: &amp;quot; /etc/mcc/bootstrap/cluster-dns-02-config.yml | awk &#039;{print $2}&#039;)&lt;br /&gt;
 for i in api-int api ; do ping -c1 -W1 $i.${DOMAIN} 2&amp;gt;&amp;amp;1 | xargs; done | cut -c -150 &lt;br /&gt;
 echo &amp;quot;10.1.0.5 api-int.${DOMAIN} api.${DOMAIN}&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
=oc annotate=&lt;br /&gt;
Update the annotations on one or more resources.&lt;br /&gt;
 oc annotate pods foo description=&#039;my frontend&#039;&lt;br /&gt;
=setuid setgid=&lt;br /&gt;
   securityContext:&lt;br /&gt;
     runAsUser: 10004000&lt;br /&gt;
     runAsGroup: 10004000&lt;br /&gt;
=patch examples=&lt;br /&gt;
==Look at oc get ... -o json and copy line after line.==&lt;br /&gt;
 oc patch redis redis-standalone --type merge  --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;securityContext&amp;quot;: {&amp;quot;runAsGroup&amp;quot;: 1000400000}}}&#039;&lt;br /&gt;
==Enable disable clusterlogging # Unmanaged/Managed==&lt;br /&gt;
 oc patch clusterlogging -n openshift-logging instance --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; &lt;br /&gt;
==Enable disable elasticsearch(Unmanaged/Managed)==&lt;br /&gt;
 oc patch elasticsearch -n openshift-logging elasticsearch --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;managementState&amp;quot;: &amp;quot;Unmanaged&amp;quot;}}&#039; #&lt;br /&gt;
==Remove finalizers from pod.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
==remove value==&lt;br /&gt;
Remove .spec.kafka.version&lt;br /&gt;
 oc patch kafka kafka-cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;remove&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/kafka/version&amp;quot;}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Add finalizer==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;]}}&#039;&lt;br /&gt;
==Replace finalizers value with this.==&lt;br /&gt;
 oc patch pod &amp;lt;pod&amp;gt; -n &amp;lt;namespace&amp;gt; --type merge -p &#039;{&amp;quot;metadata&amp;quot;:{&amp;quot;finalizers&amp;quot;:[&amp;quot;kubernetes.io/pvc-protection&amp;quot;,&amp;quot;kubernetes&amp;quot;]}}&#039;&lt;br /&gt;
==patch replicas deployment==&lt;br /&gt;
 oc patch deployment &amp;lt;deployment-name&amp;gt; --patch &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot;: 0}}&#039;&lt;br /&gt;
==patch list entries do not wipe existing list entries==&lt;br /&gt;
 oc patch deployment -n openshift-kube-apiserver-operator kube-apiserver-operator --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/template/spec/containers/0/image&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot;}]&#039;&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:5c9128668752a9b891a24a9ec36e0724d975d6d49e6e4e2d516b5ba80ae2fb23&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERATOR_IMAGE&amp;quot; then .value = &amp;quot;quay.io/okd/scos-content@sha256:37d6b6c13d864deb7ea925acf2b2cb34305333f92ce64e7906d3f973a8071642&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
 oc get deployment kube-apiserver-operator -n openshift-kube-apiserver-operator -o json | jq &#039;.spec.template.spec.containers[0].env |= map(if .name == &amp;quot;OPERAND_IMAGE_VERSION&amp;quot; then .value = &amp;quot;1.29.6&amp;quot; else . end)&#039; | oc apply -f -&lt;br /&gt;
==patch service monitor==&lt;br /&gt;
 kubectl patch servicemonitor cert-utils-operator-controller-manager-metrics-monitor -n openshift-operators -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;replace&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/endpoints/0/tlsConfig/serverName&amp;quot;, &amp;quot;value&amp;quot;: &amp;quot;cert-utils-operator-controller-manager-metrics-service.openshift-operators.svc&amp;quot;}]&#039; --type=&#039;json&#039;&lt;br /&gt;
==edit text/cert entry==&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 SSL_URL=halfface.se&lt;br /&gt;
 SSL_PORT=443&lt;br /&gt;
 DATE_FILE=$(date +%F_%H-%M-%S)&lt;br /&gt;
 openssl s_client -connect ${SSL_URL}:${SSL_PORT} -servername ${SSL_URL} -verify 5 -showcerts -certform pem &amp;lt;/dev/null 2&amp;gt;/dev/null | sed -n &#039;/^----/,/^----/p&#039; &amp;gt; chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem&lt;br /&gt;
 ln chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem ${SSL_URL}&lt;br /&gt;
 oc create cm argocd-tls-certs-cm -n argocd --from-file ${SSL_URL} --dry-run=client -o yaml &amp;gt;&amp;gt; /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
 oc patch configmap argocd-tls-certs-cm -n argocd --patch-file /tmp/chain.${SSL_URL}.${SSL_PORT}.${DATE_FILE}.pem.patch&lt;br /&gt;
&lt;br /&gt;
=limits=&lt;br /&gt;
When your need to increase your cpu and memory resources.&lt;br /&gt;
cpu limit is either written as a number. 0.5 for half a cpu. Or rather a definition in milli. 500m for  half a cpu.&lt;br /&gt;
 spec:&lt;br /&gt;
   containers:&lt;br /&gt;
 ...&lt;br /&gt;
    resources:&lt;br /&gt;
      limits:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
      requests:&lt;br /&gt;
        cpu: &amp;quot;2&amp;quot;&lt;br /&gt;
        memory: 5Gi&lt;br /&gt;
&lt;br /&gt;
=quotas on cpu memory pvc... per project=&lt;br /&gt;
 oc get ResourceQuota&lt;br /&gt;
=tolerations|node selectors|...=&lt;br /&gt;
oc describe pod&lt;br /&gt;
 Node-Selectors:              node-role.kubernetes.io/app=&lt;br /&gt;
 Tolerations:                 node.kubernetes.io/memory-pressure:NoSchedule op=Exists&lt;br /&gt;
                              node.kubernetes.io/not-ready:NoExecute op=Exists for 300s&lt;br /&gt;
                              node.kubernetes.io/unreachable:NoExecute op=Exists for 5s&lt;br /&gt;
                              node.ocs.openshift.io/storage=true:NoSchedule&lt;br /&gt;
=tolerate any taint=&lt;br /&gt;
   tolerations:&lt;br /&gt;
   - operator: Exists&lt;br /&gt;
&lt;br /&gt;
=enable monitoring=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:  &lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=retention elasticsearch=&lt;br /&gt;
 Edit the ClusterLogging CR to add or modify the retentionPolicy parameter:&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;&lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;&lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
=retention prometheus=&lt;br /&gt;
 Prometheus retention. https://docs.openshift.com/container-platform/4.10/monitoring/configuring-the-monitoring-stack.html#modifying-retention-time-for-prometheus-metrics-data_configuring-the-monitoring-stack&lt;br /&gt;
 oc edit configmap cluster-monitoring-config -n openshift-monitoring&lt;br /&gt;
 # Enable prometheus.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-monitoring-config&lt;br /&gt;
   namespace: openshift-monitoring&lt;br /&gt;
 data:&lt;br /&gt;
   config.yaml: |&lt;br /&gt;
     prometheusK8s:&lt;br /&gt;
       retention: 2d&lt;br /&gt;
 EOF&lt;br /&gt;
=retention prometheus default=&lt;br /&gt;
 oc get Prometheus k8s -n openshift-monitoring -o json | jq -r .spec.retention&lt;br /&gt;
 oc -n openshift-monitoring exec -c prometheus prometheus-k8s-0 -- curl -s &amp;quot;http://localhost:9090/api/v1/status/runtimeinfo&amp;quot; | jq -r &#039;.data.storageRetention&#039;&lt;br /&gt;
&lt;br /&gt;
=EFK(elk)=&lt;br /&gt;
 ElasticSearch&lt;br /&gt;
 # Fluentd&lt;br /&gt;
 processing pipeline&lt;br /&gt;
 # Kibana.&lt;br /&gt;
 https://kibana-openshift-logging.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=grafana=&lt;br /&gt;
 # grafana&lt;br /&gt;
 https://grafana-openshift-monitoring.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
=pull secret=&lt;br /&gt;
Get pull secret&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config -o jsonpath=&#039;{.data.\.dockerconfigjson}&#039; | base64 -d | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq .&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; -o json | jq .&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Just the keys.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq .&lt;br /&gt;
Name of each key and email.&lt;br /&gt;
 oc get secret/pull-secret -n openshift-config --template=&#039;Template:Index .data &amp;quot;.dockerconfigjson&amp;quot;&#039; -o json | jq -r &#039;.data.&amp;quot;.dockerconfigjson&amp;quot;&#039; | base64 -d | jq -r &#039;.auths | with_entries(.value = .value.email)&#039; | sed &#039;s/{//g;s/}//g;s/&amp;quot;//g&#039; | grep -v &#039;^$&#039; | sed &#039;s/ *//g&#039; | sort&lt;br /&gt;
Download pull secret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; &amp;gt; /tmp/pull_secret.$(oc whoami --show-console=true | awk -F / &#039;{print $3}&#039;).$(date &#039;+%Y-%m-%d_%H-%M-%S&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Set pull secret.&lt;br /&gt;
 oc set data secret/pull-secret -n openshift-config --from-file=.dockerconfigjson=/tmp/pull_secret_&amp;lt;file_name&amp;gt;&lt;br /&gt;
==has pull secret been update==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &#039;#&#039; pull-secret ; oc get secret/pull-secret -n openshift-config --template=&#039;{{index .data &amp;quot;.dockerconfigjson&amp;quot; | base64decode}}&#039; | jq -r &#039;.auths[].email&#039;&lt;br /&gt;
echo &#039;#&#039; apiserver ; oc exec deployment/apiserver -n openshift-apiserver -c openshift-apiserver -- cat /var/lib/kubelet/config.json | jq&lt;br /&gt;
echo &#039;#&#039; nodes ; oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;cat /var/lib/kubelet/config.json | jq&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Does pull secret work==&lt;br /&gt;
 jq . /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io&lt;br /&gt;
 {&lt;br /&gt;
   &amp;quot;auths&amp;quot;: {&lt;br /&gt;
     &amp;quot;registry.redhat.io&amp;quot;: {&lt;br /&gt;
       &amp;quot;auth&amp;quot;: &amp;quot;YmxhYmxh&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 podman pull --authfile /tmp/pull_secret.2024-01-10_12-00-01.registry.redhat.io registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
==Which pull secret does machineconfig contain==&lt;br /&gt;
 oc get mc 00-master -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039; | sed &#039;s/^data:,//g&#039; | jq .&lt;br /&gt;
==Is pull secret correct in machineconfigpool. Rendered config==&lt;br /&gt;
 oc get mc rendered-master-3626460c7752fc1605e94c19b7a9aba7 -o json | jq -r &#039;.spec.config.storage.files[]|select(.path==&amp;quot;/var/lib/kubelet/config.json&amp;quot;)|.contents.source&#039; | sed &#039;s/^data:,//g&#039; | perl -pe &#039;s/%([0-9a-f]{2})/sprintf(&amp;quot;%s&amp;quot;, pack(&amp;quot;H2&amp;quot;,$1))/eig&#039;| jq .&lt;br /&gt;
&lt;br /&gt;
=change number of nodes=&lt;br /&gt;
 oc get machineset -n openshift-machine-api&lt;br /&gt;
 oc edit machineset -n openshift-machine-api &amp;lt;MachineSet&amp;gt;&lt;br /&gt;
=Elasticsearch status=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cat/health?v&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=_cluster/health?pretty&lt;br /&gt;
&lt;br /&gt;
=talk to elasticsearch=&lt;br /&gt;
 oc rsh elasticsearch-cdm-q8apadpa-1-65f99d99b4-8b9wg&lt;br /&gt;
 curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
Oneliner&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca https://localhost:9200&lt;br /&gt;
=Free disk space/reclaim=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers -n openshift-logging | head -1) -- curl -s --key /etc/elasticsearch/secret/admin-key --cert /etc/elasticsearch/secret/admin-cert --cacert /etc/elasticsearch/secret/admin-ca &amp;quot;https://localhost:9200/_forcemerge?only_expunge_deletes=true&amp;quot;  -X POST&lt;br /&gt;
&lt;br /&gt;
=which version of elasticsearch operator is installed=&lt;br /&gt;
 oc get csv -n  openshift-operators-redhat -l operators.coreos.com/elasticsearch-operator.openshift-operators-redhat=&amp;quot;&amp;quot; -o=custom-columns=&#039;VERSION:.spec.version&#039; --no-headers&lt;br /&gt;
==list nodes==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/nodes?v&amp;quot;&lt;br /&gt;
==Who is master node==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/master?v&amp;quot;&lt;br /&gt;
==Is cluster recovering==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=&amp;quot;_cat/recovery?active_only=true&amp;quot;&lt;br /&gt;
==Look at all indices==&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 export INDICE=&amp;lt;indice&amp;gt; ; oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=$INDICE -XDELETE&lt;br /&gt;
&lt;br /&gt;
=look at chards=&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v&lt;br /&gt;
=Create audit index=&lt;br /&gt;
 oc exec -n openshift-logging -c elasticsearch $(oc get pods -n openshift-logging -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | head -1) -- es_util --query=audit-000001 -XPUT&lt;br /&gt;
==Remove all red indices.==&lt;br /&gt;
 oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=_cat/indices?v | grep ^red | awk &#039;{print $3}&#039;  | while read i ; do echo &#039;*&#039; $i ; oc exec -c elasticsearch $(oc get pods -l component=elasticsearch -o custom-columns=:.metadata.name --no-headers | tail -1) -- es_util --query=${i} -X DELETE ; done&lt;br /&gt;
==recreate elasticsearch pvc:s==&lt;br /&gt;
 # scale down elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 0 ; done&lt;br /&gt;
 # Remove pvc:s.&lt;br /&gt;
 oc delete pvc -l logging-cluster=elasticsearch -n openshift-logging&lt;br /&gt;
 # scale up elasticsearch to 0 pods to be able to remove pvc:s&lt;br /&gt;
 oc get deployment -l component=elasticsearch -o custom-columns=NAME:.metadata.name --no-headers -n openshift-logging | while read DEPLOYMENT ; do echo &#039;*&#039; $DEPLOYMENT ; oc scale deployment $DEPLOYMENT --replicas 1 ; done&lt;br /&gt;
&lt;br /&gt;
=vsphere creds=&lt;br /&gt;
 oc get -n kube-system cm/cluster-config-v1 -o yaml&lt;br /&gt;
=does vsphere account have expected permissions=&lt;br /&gt;
 oc logs -n openshift-cluster-storage-operator -l name=vsphere-problem-detector-operator --timestamps --tail=100 | less&lt;br /&gt;
&lt;br /&gt;
=Enable openshift/okd logging=&lt;br /&gt;
==Enable redhat-operators==&lt;br /&gt;
 oc patch OperatorHub cluster --type json -p &#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/disableAllDefaultSources&amp;quot;, &amp;quot;value&amp;quot;: false}]&#039;&lt;br /&gt;
Or edit individual operator.&lt;br /&gt;
 oc edit operatorhubs &lt;br /&gt;
 Spec:&lt;br /&gt;
   Disable All Default Sources:  true&lt;br /&gt;
   Sources:&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      community-operators&lt;br /&gt;
     Disabled:  false&lt;br /&gt;
     Name:      redhat-operators&lt;br /&gt;
Or patch OperatorHub for individual operators&lt;br /&gt;
 oc patch operatorhub cluster --type=&#039;json&#039; -p=&#039;[{&amp;quot;op&amp;quot;: &amp;quot;add&amp;quot;, &amp;quot;path&amp;quot;: &amp;quot;/spec/sources/-&amp;quot;, &amp;quot;value&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;redhat-operators&amp;quot;,&amp;quot;disabled&amp;quot;:false}}]&#039;&lt;br /&gt;
&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat &lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
    openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: Namespace&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-logging&lt;br /&gt;
   annotations:&lt;br /&gt;
     openshift.io/node-selector: &amp;quot;&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     openshift.io/cluster-monitoring: &amp;quot;true&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Create operatorgroup==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: openshift-operators-redhat&lt;br /&gt;
   namespace: openshift-operators-redhat &lt;br /&gt;
 spec: {}&lt;br /&gt;
 EOF&lt;br /&gt;
==Subscribe to OpenShift Elasticsearch Operator==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
   namespace: &amp;quot;openshift-operators-redhat&amp;quot; &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   installPlanApproval: &amp;quot;Automatic&amp;quot; &lt;br /&gt;
   source: &amp;quot;redhat-operators&amp;quot; &lt;br /&gt;
   sourceNamespace: &amp;quot;openshift-marketplace&amp;quot;&lt;br /&gt;
   name: &amp;quot;elasticsearch-operator&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Install the openshift logging operator.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1&lt;br /&gt;
 kind: OperatorGroup&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   targetNamespaces:&lt;br /&gt;
   - openshift-logging &lt;br /&gt;
 EOF&lt;br /&gt;
==Create a subscription object yaml file.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: operators.coreos.com/v1alpha1&lt;br /&gt;
 kind: Subscription&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   namespace: openshift-logging &lt;br /&gt;
 spec:&lt;br /&gt;
   channel: &amp;quot;stable&amp;quot; &lt;br /&gt;
   name: cluster-logging&lt;br /&gt;
   source: redhat-operators &lt;br /&gt;
   sourceNamespace: openshift-marketplace&lt;br /&gt;
 EOF&lt;br /&gt;
==Create OpenShift Logging instance.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: &amp;quot;logging.openshift.io/v1&amp;quot;&lt;br /&gt;
 kind: &amp;quot;ClusterLogging&amp;quot;&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: &amp;quot;instance&amp;quot; &lt;br /&gt;
   namespace: &amp;quot;openshift-logging&amp;quot;&lt;br /&gt;
 spec:&lt;br /&gt;
   managementState: &amp;quot;Managed&amp;quot;  &lt;br /&gt;
   logStore:&lt;br /&gt;
     type: &amp;quot;elasticsearch&amp;quot;  &lt;br /&gt;
     retentionPolicy: &lt;br /&gt;
       application:&lt;br /&gt;
         maxAge: 1d&lt;br /&gt;
       infra:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
       audit:&lt;br /&gt;
         maxAge: 7d&lt;br /&gt;
     elasticsearch:&lt;br /&gt;
       nodeCount: 3 &lt;br /&gt;
       storage:&lt;br /&gt;
         storageClassName: &amp;quot;standard-csi&amp;quot;&lt;br /&gt;
         size: 200G&lt;br /&gt;
       resources: &lt;br /&gt;
         limits:&lt;br /&gt;
           memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       requests:&lt;br /&gt;
         memory: &amp;quot;16Gi&amp;quot;&lt;br /&gt;
       proxy: &lt;br /&gt;
         resources:&lt;br /&gt;
           limits:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
           requests:&lt;br /&gt;
             memory: 256Mi&lt;br /&gt;
       redundancyPolicy: &amp;quot;SingleRedundancy&amp;quot;&lt;br /&gt;
   visualization:&lt;br /&gt;
     type: &amp;quot;kibana&amp;quot;  &lt;br /&gt;
     kibana:&lt;br /&gt;
       replicas: 1&lt;br /&gt;
   collection:&lt;br /&gt;
     logs:&lt;br /&gt;
       type: &amp;quot;fluentd&amp;quot;  &lt;br /&gt;
       fluentd: {}&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=telemetry=&lt;br /&gt;
Restart telemetry.&lt;br /&gt;
 oc delete pod -n openshift-monitoring -l app.kubernetes.io/component=telemetry-metrics-collector&lt;br /&gt;
=Update vsphere/openstack creds=&lt;br /&gt;
 oc edit cm cloud-provider-config -n openshift-config&lt;br /&gt;
 default-datastore = &amp;quot;cl07-2-fc-loc-001&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Get datastore=&lt;br /&gt;
 oc get cm cloud-provider-config -n openshift-config -o json | jq -r .data.config | sed -nr &amp;quot;/^\[Workspace\]/ { :l /^default-datastore[ ]*=/ { s/[^=]*=[ ]*//; p; q;}; n; b l;}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Manage labels.=&lt;br /&gt;
Add a label to a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel=myvalue&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel=myvalue&lt;br /&gt;
Remove a label (in the example “mylabel”) from a node or pod:&lt;br /&gt;
 oc label node node001.krenger.ch mylabel-&lt;br /&gt;
 oc label pod mypod-34-g0f7k mylabel-&lt;br /&gt;
Permanently label a node&lt;br /&gt;
 oc edit machineset ocp-qz7hf-worker-us-west-1b -n openshift-machine-api&lt;br /&gt;
=rollout=&lt;br /&gt;
Restart pod in an deployment&lt;br /&gt;
 oc rollout restart deployment -n openshift-storage csi-rbdplugin-provisioner&lt;br /&gt;
=api.&amp;lt;URL&amp;gt;=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get secrets external-loadbalancer-serving-certkey -n openshift-kube-apiserver -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;|@base64d&#039;)&lt;br /&gt;
=ssl certificates replace=&lt;br /&gt;
How to replace api.&amp;lt;url&amp;gt; and star.apps.&amp;lt;url&amp;gt; certs.&lt;br /&gt;
 # api. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 api.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret api-cert -n openshift-config&lt;br /&gt;
 oc create secret tls api-cert --cert=api.&amp;lt;url&amp;gt;.crt --key=api.&amp;lt;url&amp;gt;.key -n openshift-config&lt;br /&gt;
 # patch apiserver&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;url&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
 ...&lt;br /&gt;
 # star.apps. Create full chain cert. Public - intermediate - root ca.&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.crt&lt;br /&gt;
 star.apps.&amp;lt;url&amp;gt;.key&lt;br /&gt;
 # create secret&lt;br /&gt;
 oc delete secret custom-certs-default -n openshift-ingress&lt;br /&gt;
 oc create secret tls custom-certs-default --cert=star.apps.&amp;lt;url&amp;gt;.crt --key=star.apps.&amp;lt;url&amp;gt;.key -n openshift-ingress&lt;br /&gt;
 # patch ingress controller&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;custom-certs-default&amp;quot;}}}&#039;&lt;br /&gt;
==edit serving certs==&lt;br /&gt;
look at api cert&lt;br /&gt;
 oc get secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret api cert&lt;br /&gt;
 oc patch secret -n openshift-config $(oc get apiservers cluster -o json | jq -r &#039;.spec.servingCerts.namedCertificates[].servingCertificate.name&#039;) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
Look at ingress cert. wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc get secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -o json | jq -r &#039;.data.&amp;quot;tls.crt&amp;quot;&#039; | base64 -d&lt;br /&gt;
Patch secret ingress wildcard.apps.&amp;lt;url&amp;gt;&lt;br /&gt;
 oc patch secret -n openshift-ingress $(oc get -n openshift-ingress-operator ingresscontrollers default -o json | jq -r .spec.defaultCertificate.name) -p &#039;{&amp;quot;data&amp;quot;:{&amp;quot;tls.crt&amp;quot;: &amp;quot;&amp;lt;new-base64-encoded-certificate&amp;gt;&amp;quot;}}&#039;&lt;br /&gt;
&lt;br /&gt;
=After you update above certificates then the following config map is updated to reflect that=&lt;br /&gt;
 openssl_x509_multi_line &amp;lt;(oc get cm kube-root-ca.crt -o json | jq -r &#039;.data.&amp;quot;ca.crt&amp;quot;&#039;)&lt;br /&gt;
=get cluster-id=&lt;br /&gt;
 oc get clusterversion/version -o jsonpath=&amp;quot;{.spec.clusterID}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=api=&lt;br /&gt;
Process running api server. They scale horizontally. They all serve requests.&lt;br /&gt;
 openshift-kube-apiserver &lt;br /&gt;
 kube-apiserver&lt;br /&gt;
=kube-proxy=&lt;br /&gt;
 kube-proxy is a network proxy that runs on each node in your cluster, implementing part of the Kubernetes Service concept.&lt;br /&gt;
 kube-proxy maintains network rules on nodes. These network rules allow network communication to your Pods from network sessions inside or outside of your cluster.&lt;br /&gt;
 kube-proxy uses the operating system packet filtering layer if there is one and it&#039;s available. Otherwise, kube-proxy forwards the traffic itself.&lt;br /&gt;
=Resource Allocation=&lt;br /&gt;
OS and Kubernetes overhead. You can see the reserved OS &amp;amp; Kubernetes overhead by comparing the Allocatable (what the Kubernetes Scheduler can allocate to Pods) and the Capacity.&lt;br /&gt;
 Capacity:&lt;br /&gt;
 -&amp;gt;cpu:                4&lt;br /&gt;
   ephemeral-storage:  125293548Ki&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             16409360Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 Allocatable:&lt;br /&gt;
 -&amp;gt;cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
 -&amp;gt;memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
==requests/limits==&lt;br /&gt;
 User pod allocation is calculated by looking at the “Requests” resource columns from the kubectl get nodes output. &lt;br /&gt;
 The relevant columns here are the “Requests, not Limits. &lt;br /&gt;
 Requests impact how the pod is scheduled, and what resources are allocated to it, &lt;br /&gt;
 whereas limits are used to enable pods to burst beyond their allocation.&lt;br /&gt;
==look at current Allocated resources==&lt;br /&gt;
 oc get nodes --no-headers --selector=&amp;quot;node-role.kubernetes.io/worker&amp;quot; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc describe node $NODE | grep &amp;quot;Allocated resources:&amp;quot; -A10 | grep -E &#039; cpu | memory &#039; | while read RESOURCE ; do echo $NODE $RESOURCE ; done ; done&lt;br /&gt;
&lt;br /&gt;
==empty space==&lt;br /&gt;
Allocatable - Allocated resources = empty&lt;br /&gt;
 Allocatable:&lt;br /&gt;
   cpu:                3500m&lt;br /&gt;
   ephemeral-storage:  114396791822&lt;br /&gt;
   hugepages-1Gi:      0&lt;br /&gt;
   hugepages-2Mi:      0&lt;br /&gt;
   memory:             15258384Ki&lt;br /&gt;
   pods:               250&lt;br /&gt;
 ...&lt;br /&gt;
 Allocated resources:&lt;br /&gt;
   (Total limits may be over 100 percent, i.e., overcommitted.)&lt;br /&gt;
   Resource           Requests      Limits&lt;br /&gt;
   --------           --------      ------&lt;br /&gt;
   cpu                834m (23%)    0 (0%)&lt;br /&gt;
   memory             2474Mi (16%)  736Mi (4%)&lt;br /&gt;
   ephemeral-storage  0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-1Gi      0 (0%)        0 (0%)&lt;br /&gt;
   hugepages-2Mi      0 (0%)        0 (0%)&lt;br /&gt;
=status of namespace=&lt;br /&gt;
Show an overview of the current project&lt;br /&gt;
 oc status&lt;br /&gt;
=age of cluster=&lt;br /&gt;
Looking at age of machines.&lt;br /&gt;
 oc get nodes -o json | jq -r &#039;.items[].metadata.creationTimestamp&#039; | sort -n | sed &#039;s/T/ /g;s/Z//g&#039;&lt;br /&gt;
=oc adm inspect=&lt;br /&gt;
 oc adm inspect namespace/isilon&lt;br /&gt;
 tar cf /tmp/inspect.isilon.$(date_file ) inspect.local.*&lt;br /&gt;
=Operations Lifecycle manager(olm)=&lt;br /&gt;
 oc logs -l app=olm-operator -n openshift-operator-lifecycle-manager --tail=-1&lt;br /&gt;
=Reinstall operator that is no longer available with current openshift version=&lt;br /&gt;
 # Force install odf which is not possible to install because openshift has moved more than 1 version.&lt;br /&gt;
 # Save subscription &lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc get subscription -o yaml -l $i &amp;gt; oc_get_subscription_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Save operators&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc get csv -l $i -o yaml &amp;gt; oc_get_csv_-l_${i//\//_}.yaml ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Confirm backup files contain usable yaml. Have we forgotten any operators or csv:s. Remove resources clearly not related to odf.&lt;br /&gt;
 ...&lt;br /&gt;
 # delete the existing ODF related subscriptions and the ClusterServiceVersions related:&lt;br /&gt;
 for i in operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= operators.coreos.com/odf-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete subscription -l $i; done&lt;br /&gt;
 for i in operators.coreos.com/odf-operator.openshift-storage= operators.coreos.com/ocs-operator.openshift-storage= operators.coreos.com/mcg-operator.openshift-storage= operators.coreos.com/odf-csi-addons-operator.openshift-storage= ; do &lt;br /&gt;
 oc delete csv -l $i  ; done&lt;br /&gt;
 ...&lt;br /&gt;
 # Make sure you wait for the CSVs to be deleted before creating a subscription again.&lt;br /&gt;
 ...&lt;br /&gt;
 # create only the the Subscription again:&lt;br /&gt;
 # (optional: edit the subscription before recreate, changing the channel version to the goal version)&lt;br /&gt;
 ...&lt;br /&gt;
 # Recreate subscription&lt;br /&gt;
 oc create -f &#039;oc_get_subscription_operators.coreos.com_odf-operator.openshift-storage=.yaml&#039;&lt;br /&gt;
 # wait watching the events:&lt;br /&gt;
 oc get events -w&lt;br /&gt;
&lt;br /&gt;
=increase disk on node=&lt;br /&gt;
Update worker machineset.&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;rootVolume&amp;quot;: {&amp;quot;diskSize&amp;quot; : 50}}}}}}}&#039;&lt;br /&gt;
==View results from above==&lt;br /&gt;
 oc get machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) -o yaml | tee /tmp/$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S).yaml&lt;br /&gt;
&lt;br /&gt;
==Update on node only==&lt;br /&gt;
 VOLUME=abjorklund-01-h4sxm-worker-0-rkk87-root&lt;br /&gt;
 os volume set --size 40 $VOLUME --os-volume-api-version 3.42&lt;br /&gt;
 dnf install cloud-utils-growpart xfsprogs&lt;br /&gt;
 ssh core@worker&lt;br /&gt;
 growpart /dev/sda 4&lt;br /&gt;
 xfs_growfs /&lt;br /&gt;
&lt;br /&gt;
=increase ram on worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;memoryMiB&amp;quot; : 24576}}}}}}&#039;&lt;br /&gt;
=Change flavor of worker node=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;template&amp;quot;: {&amp;quot;spec&amp;quot;: {&amp;quot;providerSpec&amp;quot;: {&amp;quot;value&amp;quot;: {&amp;quot;flavor&amp;quot; : &amp;quot;hm.4x16&amp;quot;}}}}}}&#039;&lt;br /&gt;
&lt;br /&gt;
=set number of worker nodes=&lt;br /&gt;
 oc patch machinesets -n openshift-machine-api $(oc get machinesets -n openshift-machine-api -o json | jq -r &#039;.items[] | select(.spec.template.metadata.labels.&amp;quot;machine.openshift.io/cluster-api-machine-role&amp;quot; == &amp;quot;worker&amp;quot;)| .metadata.name&#039;) --type merge -p &#039;{&amp;quot;spec&amp;quot;: {&amp;quot;replicas&amp;quot; : 2}}&#039;&lt;br /&gt;
&lt;br /&gt;
=clusteroperator=&lt;br /&gt;
ClusterOperator is the Custom Resource object which holds the current state of an operator. Clusteroperator is resposible for core, systemwide functions like dns and so on.&lt;br /&gt;
 oc get clusteroperators&lt;br /&gt;
 oc get co&lt;br /&gt;
 oc get clusteroperators -o custom-columns=NAME:.metadata.name,ANNOTATIONS:.metadata.annotations&lt;br /&gt;
&lt;br /&gt;
=ignition=&lt;br /&gt;
Retrieve rendered ignition data.&lt;br /&gt;
 curl https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $NF}&#039;):22623/config/master&lt;br /&gt;
 curl -v https://api-int.$(grep ^search /etc/resolv.conf | awk &#039;{print $2}&#039;):22623/config/worker&lt;br /&gt;
&lt;br /&gt;
=rockylinux container names=&lt;br /&gt;
 ubi (&amp;quot;Standard&amp;quot;): OpenSSL, microdnf, and utilities like gzip and vi&lt;br /&gt;
 ubi-minimal (&amp;quot;Minimal&amp;quot;): Minimized binaries and minimal yum stack.&lt;br /&gt;
 ubi-init (&amp;quot;Multi-service&amp;quot;): Less than standard but more than minimal, plus systemd.&lt;br /&gt;
 ubi-micro (&amp;quot;Micro&amp;quot;): Most minimal image without even a package manager.&lt;br /&gt;
=create a job/pod/script=&lt;br /&gt;
&lt;br /&gt;
==Create config map of script==&lt;br /&gt;
Notice that I have to escape $. Since I give date in a here document. Where $ is being expanded.&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup.sh&lt;br /&gt;
 data:&lt;br /&gt;
   dns-lookup.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # Verify if dns resolution works and how fast.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       for DNS in \$(awk &#039;/^nameserver / {print \$2}&#039; /etc/resolv.conf) 10.2.0.10 ; do&lt;br /&gt;
         echo \$(date &#039;+%F %H:%M:%S %Z&#039;) \$DNS \$(host -v -t A ibm.se 2&amp;gt;&amp;amp;1 | tail -3 )&lt;br /&gt;
       done&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==create job==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: batch/v1&lt;br /&gt;
 kind: Job&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dns-lookup&lt;br /&gt;
 spec:&lt;br /&gt;
   template:&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: dns-lookup&lt;br /&gt;
 #          image: rockylinux/rockylinux:9&lt;br /&gt;
           image: halfface/rockylinux-toolbox:v2&lt;br /&gt;
           command: [&amp;quot;/script/dns-lookup.sh&amp;quot;]&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: script&lt;br /&gt;
               mountPath: &amp;quot;/script&amp;quot;&lt;br /&gt;
 #          securityContext:&lt;br /&gt;
 #            runAsUser: 0&lt;br /&gt;
 #            privileged: true&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: script&lt;br /&gt;
           configMap:&lt;br /&gt;
             name: dns-lookup.sh&lt;br /&gt;
             defaultMode: 0755&lt;br /&gt;
       restartPolicy: Never&lt;br /&gt;
       activeDeadlineSeconds: 1209600&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
=terminal fix=&lt;br /&gt;
No line wraps&lt;br /&gt;
 tput rmam&lt;br /&gt;
=list operatorhub/catalogsources=&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace&lt;br /&gt;
 oc get catalogsources -n openshift-marketplace -o custom-columns=NAME:.metadata.name,DISPLAY:.spec.displayName,STATE:.status.connectionState.lastObservedState,TYPE:.spec.sourceType,PUBLISHER:.spec.publisher,IMAGE:.spec.image&lt;br /&gt;
&lt;br /&gt;
=remove catalogsources=&lt;br /&gt;
 oc get catalogsources.operators.coreos.com -n openshift-marketplace -l company=cambio --no-headers -o custom-columns=:.metadata.name | while read i ; do echo oc get catalogsources $i -n openshift-marketplace -o yaml \&amp;gt;oc_get_catalogsources.$(oc_api_url).$i.$(date_file).yaml ; echo oc delete catalogsource -n openshift-marketplace $i ; done&lt;br /&gt;
&lt;br /&gt;
=which changes will occure=&lt;br /&gt;
 . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&lt;br /&gt;
=SYSTEM_RESERVED=&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: machineconfiguration.openshift.io/v1&lt;br /&gt;
 kind: KubeletConfig&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: dynamic-node &lt;br /&gt;
 spec:&lt;br /&gt;
   autoSizingReserved: true &lt;br /&gt;
   machineConfigPoolSelector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       pools.operator.machineconfiguration.openshift.io/worker: &amp;quot;&amp;quot; &lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
Which changes will occur.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;hostname ; . /etc/node-sizing-enabled.env ; NODE_SIZES_ENV=/tmp/node-sizing.env /usr/local/sbin/dynamic-system-reserved-calc.sh true ${SYSTEM_RESERVED_MEMORY} ${SYSTEM_RESERVED_CPU} ${SYSTEM_RESERVED_ES} ; sdiff /etc/node-sizing.env /tmp/node-sizing.env&#039; 2&amp;gt;/dev/null&lt;br /&gt;
==which processes is it complaining about==&lt;br /&gt;
 systemd-cgls /system.slice | grep -o &#039;[^─]*\.service&#039; | cat -v | sed &#039;s/^\^\[\[0m//g&#039; | while read i ; do echo -e &amp;quot;$(systemctl show -p MemoryCurrent $i | awk -F = &#039;{print $2}&#039;)\t$i&amp;quot; ; done | column -t -s $&#039;\t&#039; | sort -n&lt;br /&gt;
&lt;br /&gt;
=CNI=&lt;br /&gt;
 oc get networks cluster -o &#039;custom-columns=NETWORKTYPE:.spec.networkType&#039;&lt;br /&gt;
Cni from install&lt;br /&gt;
 echo -e &amp;quot;$(oc --request-timeout=5 get -n kube-system cm/cluster-config-v1 -o json | jq -r &#039;.&amp;quot;data&amp;quot;.&amp;quot;install-config&amp;quot;&#039;)&amp;quot; | python -c &#039;import sys, yaml, json; json.dump(yaml.safe_load(sys.stdin), sys.stdout, indent=4)&#039; | jq -r .networking.networkType&lt;br /&gt;
=autoscale.=&lt;br /&gt;
https://docs.openshift.com/container-platform/4.12/machine_management/applying-autoscaling.html&lt;br /&gt;
==ClusterAutoscaler==&lt;br /&gt;
 # The two below has to be configured.&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1&lt;br /&gt;
 kind: ClusterAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   logVerbosity: 4&lt;br /&gt;
   podPriorityThreshold: -10&lt;br /&gt;
   resourceLimits:&lt;br /&gt;
     cores:&lt;br /&gt;
       max: 128&lt;br /&gt;
       min: 0&lt;br /&gt;
     maxNodesTotal: 24&lt;br /&gt;
     memory:&lt;br /&gt;
       max: 256&lt;br /&gt;
       min: 0&lt;br /&gt;
   scaleDown:&lt;br /&gt;
     delayAfterAdd: 10m&lt;br /&gt;
     delayAfterDelete: 5m&lt;br /&gt;
     delayAfterFailure: 30s&lt;br /&gt;
     enabled: true&lt;br /&gt;
     unneededTime: 5m&lt;br /&gt;
     utilizationThreshold: &amp;quot;0.4&amp;quot;&lt;br /&gt;
==MachineAutoscaler==&lt;br /&gt;
 apiVersion: autoscaling.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineAutoscaler&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   maxReplicas: 12&lt;br /&gt;
   minReplicas: 0&lt;br /&gt;
   scaleTargetRef:&lt;br /&gt;
     apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
     kind: MachineSet&lt;br /&gt;
     name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
==Machineset example where machine is labeled and tainted.==&lt;br /&gt;
 apiVersion: machine.openshift.io/v1beta1&lt;br /&gt;
 kind: MachineSet&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     autoscaling.openshift.io/machineautoscaler: openshift-machine-api/abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/cpu: &amp;quot;4&amp;quot;&lt;br /&gt;
     capacity.cluster-autoscaler.kubernetes.io/memory: &amp;quot;17179869184&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-max-size: &amp;quot;12&amp;quot;&lt;br /&gt;
     machine.openshift.io/cluster-api-autoscaler-node-group-min-size: &amp;quot;0&amp;quot;&lt;br /&gt;
     machine.openshift.io/memoryMb: &amp;quot;16384&amp;quot;&lt;br /&gt;
     machine.openshift.io/vCPU: &amp;quot;4&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
     machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
   name: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   namespace: openshift-machine-api&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
       machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         machine.openshift.io/cluster-api-cluster: abjorklund-01-4rp8x&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-role: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machine-type: worker&lt;br /&gt;
         machine.openshift.io/cluster-api-machineset: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
     spec:&lt;br /&gt;
       metadata:&lt;br /&gt;
         labels:&lt;br /&gt;
           stress: stress&lt;br /&gt;
       providerSpec:&lt;br /&gt;
         value:&lt;br /&gt;
           apiVersion: machine.openshift.io/v1alpha1&lt;br /&gt;
           cloudName: openstack&lt;br /&gt;
           cloudsSecret:&lt;br /&gt;
             name: openstack-cloud-credentials&lt;br /&gt;
             namespace: openshift-machine-api&lt;br /&gt;
           flavor: hm.4x16&lt;br /&gt;
           image: &amp;quot;&amp;quot;&lt;br /&gt;
           kind: OpenstackProviderSpec&lt;br /&gt;
           metadata:&lt;br /&gt;
             creationTimestamp: null&lt;br /&gt;
           networks:&lt;br /&gt;
           - subnets:&lt;br /&gt;
             - filter:&lt;br /&gt;
                 name: abjorklund-01-4rp8x-nodes&lt;br /&gt;
                 tags: openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           rootVolume:&lt;br /&gt;
             diskSize: 64&lt;br /&gt;
             sourceUUID: abjorklund-01-4rp8x-rhcos&lt;br /&gt;
             volumeType: ssd&lt;br /&gt;
           securityGroups:&lt;br /&gt;
           - name: abjorklund-01-4rp8x-worker&lt;br /&gt;
           - uuid: 1de812c6-ed8b-4212-a486-ca283dbe1444&lt;br /&gt;
           serverGroupName: abjorklund-01-4rp8x-worker-1&lt;br /&gt;
           serverMetadata:&lt;br /&gt;
             Name: abjorklund-01-4rp8x-worker&lt;br /&gt;
             openshiftClusterID: abjorklund-01-4rp8x&lt;br /&gt;
           tags:&lt;br /&gt;
           - openshiftClusterID=abjorklund-01-4rp8x&lt;br /&gt;
           userDataSecret:&lt;br /&gt;
             name: worker-user-data&lt;br /&gt;
       taints:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
&lt;br /&gt;
==autoscaler does not scale down==&lt;br /&gt;
 oc logs -l cluster-autoscaler=default -n openshift-machine-api --tail=-1 --timestamps=true&lt;br /&gt;
==Add dynamic load to cluster. deployment== &lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations:&lt;br /&gt;
     deployment.kubernetes.io/revision: &amp;quot;7&amp;quot;&lt;br /&gt;
   labels:&lt;br /&gt;
     app: stress&lt;br /&gt;
   name: stress&lt;br /&gt;
   namespace: stress&lt;br /&gt;
 spec:&lt;br /&gt;
   progressDeadlineSeconds: 600&lt;br /&gt;
   replicas: 0&lt;br /&gt;
   revisionHistoryLimit: 10&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: stress&lt;br /&gt;
   strategy:&lt;br /&gt;
     rollingUpdate:&lt;br /&gt;
       maxSurge: 25%&lt;br /&gt;
       maxUnavailable: 25%&lt;br /&gt;
     type: RollingUpdate&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       annotations:&lt;br /&gt;
         kubectl.kubernetes.io/restartedAt: &amp;quot;2025-01-24T09:52:22+01:00&amp;quot;&lt;br /&gt;
       creationTimestamp: null&lt;br /&gt;
       labels:&lt;br /&gt;
         app: stress&lt;br /&gt;
     spec:&lt;br /&gt;
       containers:&lt;br /&gt;
       - command:&lt;br /&gt;
         - /mnt/bin/stress.sh&lt;br /&gt;
         image: halfface/rockylinux-toolbox:v3&lt;br /&gt;
         imagePullPolicy: IfNotPresent&lt;br /&gt;
         livenessProbe:&lt;br /&gt;
           exec:&lt;br /&gt;
             command:&lt;br /&gt;
             - bash&lt;br /&gt;
             - -c&lt;br /&gt;
             - ps uxawww | grep -q [s]tress &amp;amp;&amp;amp; echo 0 || echo 1&lt;br /&gt;
           failureThreshold: 3&lt;br /&gt;
           periodSeconds: 10&lt;br /&gt;
           successThreshold: 1&lt;br /&gt;
           timeoutSeconds: 1&lt;br /&gt;
         name: stress&lt;br /&gt;
         resources:&lt;br /&gt;
           requests:&lt;br /&gt;
             cpu: 700m&lt;br /&gt;
             memory: 300Mi&lt;br /&gt;
         terminationMessagePath: /dev/termination-log&lt;br /&gt;
         terminationMessagePolicy: File&lt;br /&gt;
         volumeMounts:&lt;br /&gt;
         - mountPath: /mnt/bin/&lt;br /&gt;
           name: stress&lt;br /&gt;
       dnsPolicy: ClusterFirst&lt;br /&gt;
       nodeSelector:&lt;br /&gt;
         stress: stress&lt;br /&gt;
       restartPolicy: Always&lt;br /&gt;
       schedulerName: default-scheduler&lt;br /&gt;
       terminationGracePeriodSeconds: 30&lt;br /&gt;
       tolerations:&lt;br /&gt;
       - effect: NoExecute&lt;br /&gt;
         key: stress&lt;br /&gt;
         value: stress&lt;br /&gt;
       volumes:&lt;br /&gt;
       - configMap:&lt;br /&gt;
           defaultMode: 493&lt;br /&gt;
           name: stress.sh&lt;br /&gt;
         name: stress&lt;br /&gt;
==configmap==&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   stress.sh: |&lt;br /&gt;
     #!/bin/bash&lt;br /&gt;
     # stress pod.&lt;br /&gt;
     while true ; do&lt;br /&gt;
       echo $(date &#039;+%F %H:%M:%S %Z&#039;) $( stress -m 1 --vm-bytes 1000M --vm-keep -t 300s )&lt;br /&gt;
       sleep 5&lt;br /&gt;
     done&lt;br /&gt;
 kind: ConfigMap&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: stress.sh&lt;br /&gt;
   namespace: stress&lt;br /&gt;
&lt;br /&gt;
=change dns server for domain=&lt;br /&gt;
 oc edit dns.operator/default&lt;br /&gt;
 apiVersion: operator.openshift.io/v1&lt;br /&gt;
 kind: DNS&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: default&lt;br /&gt;
 spec:&lt;br /&gt;
   servers:&lt;br /&gt;
   - name: halffce-server&lt;br /&gt;
     zones:&lt;br /&gt;
     - halfface.se&lt;br /&gt;
     forwardPlugin:&lt;br /&gt;
       policy: Random&lt;br /&gt;
       upstreams: 10.111.222.2&lt;br /&gt;
 # View config.&lt;br /&gt;
 oc get configmap/dns-default -n openshift-dns -o yaml&lt;br /&gt;
&lt;br /&gt;
=coredns=&lt;br /&gt;
 # tail logs.&lt;br /&gt;
 oc get events -A --sort-by=.metadata.creationTimestamp&lt;br /&gt;
 # Change debug level.&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Debug&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class denial error&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Trace&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class all&lt;br /&gt;
}&lt;br /&gt;
 oc patch dnses.operator.openshift.io/default -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;logLevel&amp;quot;:&amp;quot;Normal&amp;quot;}}&#039; --type=merge&lt;br /&gt;
Sets&lt;br /&gt;
log . {&lt;br /&gt;
class error&lt;br /&gt;
}&lt;br /&gt;
==Get log files for analyze==&lt;br /&gt;
 oc get pods -l dns.operator.openshift.io/daemonset-dns=default  -o custom-columns=POD:.metadata.name,NODE:.spec.nodeName --no-headers -n openshift-dns | while read i j ; do oc logs $i --tail=-1 -c dns --timestamps=true -n openshift-dns &amp;gt; /tmp/oc_logs_$j.$i.$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;).$(date +%F_%H-%M-%S) ; done&lt;br /&gt;
&lt;br /&gt;
=get instance dns name=&lt;br /&gt;
 oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;&lt;br /&gt;
=Read values provided by coredns /metrics=&lt;br /&gt;
 oc exec -it -n openshift-dns $(oc get pods -l dns.operator.openshift.io/daemonset-dns=default --no-headers -n openshift-dns| head -1) -- curl -s http://localhost:9153/metrics&lt;br /&gt;
=coredns default logformat=&lt;br /&gt;
 # Default format&lt;br /&gt;
 {remote}:{port} - {&amp;gt;id} &amp;quot;{type} {class} {name} {proto} {size} {&amp;gt;do} {&amp;gt;bufsize}&amp;quot; {rcode} {&amp;gt;rflags} {rsize} {duration}&lt;br /&gt;
 # Values explained&lt;br /&gt;
 {port}: client’s port&lt;br /&gt;
 {remote}: client’s IP address, for IPv6 addresses these are enclosed in brackets: [::1]&lt;br /&gt;
 {&amp;gt;id}: query ID&lt;br /&gt;
 {type}: qtype of the request&lt;br /&gt;
 {class}: qclass of the request&lt;br /&gt;
 {name}: qname of the request&lt;br /&gt;
 {proto}: protocol used (tcp or udp)&lt;br /&gt;
 {size}: request size in bytes&lt;br /&gt;
 {&amp;gt;do}: is the EDNS0 DO (DNSSEC OK) bit set in the query&lt;br /&gt;
 {&amp;gt;bufsize}: the EDNS0 buffer size advertised in the query&lt;br /&gt;
 {rcode}: response RCODE&lt;br /&gt;
 {&amp;gt;rflags}: response flags, each set flag will be displayed, e.g. “aa, tc”. This includes the qr bit as well&lt;br /&gt;
 {rsize}: raw (uncompressed), response size (a client may receive a smaller response)&lt;br /&gt;
 {duration}: response duration&lt;br /&gt;
=Confirm that coredns hosts are possible to resolve=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 grep match /etc/coredns/Corefile | uniq | sed &#039;s/\[//g;s/\]//g;s/^ *match //g;s/\.\*/test/g;s/^\^//g&#039; | while read i ; do echo $(dig +short ${i}.) ${i}. ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Create lets encrypt certificates on dns domain in route53 which is managed by certmanager.=&lt;br /&gt;
#Create a domain in route 53.&lt;br /&gt;
#Create a user with a token for &amp;quot;Application running outside AWS&amp;quot;&lt;br /&gt;
==Fill in below values to be able to update config below.==&lt;br /&gt;
 Hosted_Zone_id:    &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
 Access_key:        &amp;lt;Access_key&amp;gt;&lt;br /&gt;
 Secret_access_key: &amp;lt;Secret_access_key&amp;gt;&lt;br /&gt;
 DNS_Domain:        &amp;lt;DNS_Domain&amp;gt;&lt;br /&gt;
 DNS_shortname:     &amp;lt;DNS_shortname&amp;gt;&lt;br /&gt;
==Attach the following policy to your newly created user.==&lt;br /&gt;
(Populate all &amp;lt;Values&amp;gt; below.)&lt;br /&gt;
 {&lt;br /&gt;
     &amp;quot;Version&amp;quot;: &amp;quot;2023-11-22&amp;quot;,&lt;br /&gt;
     &amp;quot;Statement&amp;quot;: [&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:GetChange&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::change/*&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ChangeResourceRecordSets&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;arn:aws:route53:::hostedzone/&amp;lt;Hosted_Zone_id&amp;gt;&amp;quot;&lt;br /&gt;
         },&lt;br /&gt;
         {&lt;br /&gt;
             &amp;quot;Effect&amp;quot;: &amp;quot;Allow&amp;quot;,&lt;br /&gt;
             &amp;quot;Action&amp;quot;: &amp;quot;route53:ListHostedZonesByName&amp;quot;,&lt;br /&gt;
             &amp;quot;Resource&amp;quot;: &amp;quot;*&amp;quot;&lt;br /&gt;
         }&lt;br /&gt;
     ]&lt;br /&gt;
 }&lt;br /&gt;
==Create namespace==&lt;br /&gt;
 oc create namespace cert-manager&lt;br /&gt;
==Install cert-manager community version via graphical fluff.==&lt;br /&gt;
==Create secret that includes &amp;lt;Secret_access_key&amp;gt;.==&lt;br /&gt;
 oc create secret generic route53-secret --from-literal=secret-access-key=&amp;quot;&amp;lt;Secret_access_key&amp;gt;&amp;quot; -n cert-manager&lt;br /&gt;
==Create ClusterIssuer for letsencrypt which uses route53 to show that you own dns.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: ClusterIssuer&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: letsencrypt-prod-dns&lt;br /&gt;
   namespace: cert-manager&lt;br /&gt;
 spec:&lt;br /&gt;
   acme:&lt;br /&gt;
     server: https://acme-v02.api.letsencrypt.org/directory&lt;br /&gt;
     email: support@company.se&lt;br /&gt;
     # Name of a secret used to store the ACME account private key&lt;br /&gt;
     privateKeySecretRef:&lt;br /&gt;
       name: &amp;lt;DNS_shortname&amp;gt;-issuer-account-key&lt;br /&gt;
     solvers:&lt;br /&gt;
       - selector:&lt;br /&gt;
           dnsZones:&lt;br /&gt;
            - &amp;quot;&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
         dns01:&lt;br /&gt;
           route53:&lt;br /&gt;
             accessKeyID: &amp;lt;Access_key&amp;gt;&lt;br /&gt;
             secretAccessKeySecretRef:&lt;br /&gt;
               name: route53-secret&lt;br /&gt;
               key: secret-access-key&lt;br /&gt;
             hostedZoneID: &amp;lt;Hosted_Zone_id&amp;gt;&lt;br /&gt;
             region: &#039;us-east-1&#039;&lt;br /&gt;
 EOF&lt;br /&gt;
&lt;br /&gt;
==Create api certificate.==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: cert-api&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
      - &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-api-cert&lt;br /&gt;
   commonName: &amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use api certificate.==&lt;br /&gt;
 oc patch apiserver cluster --type=merge -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;servingCerts&amp;quot;: {&amp;quot;namedCertificates&amp;quot;: [{&amp;quot;names&amp;quot;: [&amp;quot;api.&amp;lt;DNS_Domain&amp;gt;&amp;quot;], &amp;quot;servingCertificate&amp;quot;: {&amp;quot;name&amp;quot;: &amp;quot;le-api-cert&amp;quot;}}]}}}&#039;&lt;br /&gt;
&lt;br /&gt;
==Create ingress certificate==&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: cert-manager.io/v1&lt;br /&gt;
 kind: Certificate&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: le-wildcard-apps-certificate&lt;br /&gt;
   namespace: openshift-ingress&lt;br /&gt;
 spec:&lt;br /&gt;
   issuerRef:&lt;br /&gt;
     name: letsencrypt-prod-dns&lt;br /&gt;
     kind: ClusterIssuer&lt;br /&gt;
   dnsNames:&lt;br /&gt;
     - &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
   secretName: le-wildcard-apps-certificate&lt;br /&gt;
   commonName: &amp;quot;*.apps.&amp;lt;DNS_Domain&amp;gt;&amp;quot;&lt;br /&gt;
 EOF&lt;br /&gt;
==Start to use ingress certificate.==&lt;br /&gt;
 oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;defaultCertificate&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;le-wildcard-apps-certificate&amp;quot;}}}&#039;&lt;br /&gt;
=resolv.conf=&lt;br /&gt;
 ndots 5. This means that the DNS client will automatically consider a domain name to be fully qualified (which will allow it to skip the search path iteration) if it has five or more dots.&lt;br /&gt;
=bind to external login sources ldap ad=&lt;br /&gt;
 oc get authentications.operator.openshift.io cluster -o yaml&lt;br /&gt;
=get machine name and creation time=&lt;br /&gt;
 oc get machines -o=custom-columns=&#039;NAME:.metadata.name,CREATIONTIMESTAMP:.metadata.creationTimestamp,TYPE:.spec.providerSpec.value.flavor,STATUS:.status.phase&#039; -n openshift-machine-api&lt;br /&gt;
&lt;br /&gt;
=setup nfs server=&lt;br /&gt;
nfs export shared between pods.&lt;br /&gt;
==Create server==&lt;br /&gt;
 openstack server create --flavor gp.1x2 --availability-zone europe-se-1a --image rocky-8-x86_64 --boot-from-volume 30 --network abjorklund-01-bmc7w-openshift --security-group ssh_allow --key-name abjorklund_ed25519 abjorklund_$(date_file)&lt;br /&gt;
 openstack volume create --size 50 --type ssd --description &amp;quot;nfs storage block device 0&amp;quot; nfs_storage_abjorklund-01&lt;br /&gt;
 openstack server add volume e93d2db1-6d95-4364-a236-0bd1b9255e90 28adbdb9-c88d-4397-9a79-b13c505016a8 --device /dev/vdb&lt;br /&gt;
==install nfs dependencis==&lt;br /&gt;
 dnf -y install cloud-utils-growpart nfs-utils iptables-utils epel-release vim-enhanced&lt;br /&gt;
==How to grow filesystem.==&lt;br /&gt;
 partx growpart&lt;br /&gt;
 os volume set --size 60 nfs_storage_abjorklund-01 --os-volume-api-version 3.42&lt;br /&gt;
==Create partion and disk.==&lt;br /&gt;
 gdisk /dev/sdb&lt;br /&gt;
 mkfs.ext4 /dev/sdb1&lt;br /&gt;
 find /dev/ -ls | grep sdb | grep by-uuid&lt;br /&gt;
==Mount drive. /etc/fstab==&lt;br /&gt;
 UUID=66998126-9f18-44ce-a462-827c870a57bd /netstorage                       ext4     defaults        0 0&lt;br /&gt;
 mkdir /netstorage&lt;br /&gt;
 mount /netstorage/&lt;br /&gt;
 mkdir /netstorage/abjorklund-01&lt;br /&gt;
 chmod 777 /netstorage/abjorklund-01&lt;br /&gt;
==export drive==&lt;br /&gt;
systemctl enable nfs-server.service --now&lt;br /&gt;
 /etc/exports&lt;br /&gt;
 /netstorage/abjorklund-01 10.1.0.0/16(rw,root_squash)&lt;br /&gt;
 exportfs -rav&lt;br /&gt;
&lt;br /&gt;
==setup deployment==&lt;br /&gt;
 # deployment.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: apps/v1&lt;br /&gt;
 kind: Deployment&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   labels:&lt;br /&gt;
     app: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   replicas: 1&lt;br /&gt;
   strategy:&lt;br /&gt;
     type: Recreate&lt;br /&gt;
   selector:&lt;br /&gt;
     matchLabels:&lt;br /&gt;
       app: nfs-client-provisioner&lt;br /&gt;
   template:&lt;br /&gt;
     metadata:&lt;br /&gt;
       labels:&lt;br /&gt;
         app: nfs-client-provisioner&lt;br /&gt;
     spec:&lt;br /&gt;
       affinity:&lt;br /&gt;
         nodeAffinity:&lt;br /&gt;
           requiredDuringSchedulingIgnoredDuringExecution:&lt;br /&gt;
             nodeSelectorTerms:&lt;br /&gt;
               - matchExpressions:&lt;br /&gt;
                   - key: node-role.kubernetes.io/worker&lt;br /&gt;
                     operator: Exists&lt;br /&gt;
       serviceAccountName: nfs-client-provisioner&lt;br /&gt;
       securityContext:&lt;br /&gt;
         supplementalGroups:&lt;br /&gt;
           - 65534&lt;br /&gt;
           - 1261150637&lt;br /&gt;
       containers:&lt;br /&gt;
         - name: nfs-client-provisioner&lt;br /&gt;
           image: gcr.io/k8s-staging-sig-storage/nfs-subdir-external-provisioner:v4.0.0&lt;br /&gt;
           volumeMounts:&lt;br /&gt;
             - name: nfs-client-root&lt;br /&gt;
               mountPath: /persistentvolumes&lt;br /&gt;
           env:&lt;br /&gt;
             - name: PROVISIONER_NAME&lt;br /&gt;
               value: auto-nfs-storage&lt;br /&gt;
             - name: NFS_SERVER&lt;br /&gt;
               value: 10.1.0.48&lt;br /&gt;
             - name: NFS_PATH&lt;br /&gt;
               value: &amp;quot;/netstorage/abjorklund-01&amp;quot;&lt;br /&gt;
       volumes:&lt;br /&gt;
         - name: nfs-client-root&lt;br /&gt;
           nfs:&lt;br /&gt;
             server: 10.1.0.48&lt;br /&gt;
             path: /netstorage/abjorklund-01&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: run-nfs-client-provisioner&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: ClusterRole&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-clusterrole.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: ClusterRole&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner-runner&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumes&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;delete&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;persistentvolumeclaims&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;update&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;storage.k8s.io&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;storageclasses&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;]&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;events&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-rolebinding.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: RoleBinding&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 subjects:&lt;br /&gt;
   - kind: ServiceAccount&lt;br /&gt;
     name: nfs-client-provisioner&lt;br /&gt;
     # replace with namespace where provisioner is deployed&lt;br /&gt;
     namespace: default&lt;br /&gt;
 roleRef:&lt;br /&gt;
   kind: Role&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   apiGroup: rbac.authorization.k8s.io&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-role.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: Role&lt;br /&gt;
 apiVersion: rbac.authorization.k8s.io/v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: leader-locking-nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 rules:&lt;br /&gt;
   - apiGroups: [&amp;quot;&amp;quot;]&lt;br /&gt;
     resources: [&amp;quot;endpoints&amp;quot;]&lt;br /&gt;
     verbs: [&amp;quot;get&amp;quot;, &amp;quot;list&amp;quot;, &amp;quot;watch&amp;quot;, &amp;quot;create&amp;quot;, &amp;quot;update&amp;quot;, &amp;quot;patch&amp;quot;]&lt;br /&gt;
 EOF&lt;br /&gt;
 # nfs-sa.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 kind: ServiceAccount&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: nfs-client-provisioner&lt;br /&gt;
   # replace with namespace where provisioner is deployed&lt;br /&gt;
   namespace: default&lt;br /&gt;
 EOF&lt;br /&gt;
 # storageclass.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 apiVersion: storage.k8s.io/v1&lt;br /&gt;
 kind: StorageClass&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: managed-nfs-storage&lt;br /&gt;
 provisioner: auto-nfs-storage # or choose another name, must match deployment&#039;s env PROVISIONER_NAME&#039;&lt;br /&gt;
 parameters:&lt;br /&gt;
   onDelete: delete&lt;br /&gt;
 EOF&lt;br /&gt;
 # test-claim.yaml&lt;br /&gt;
 cat &amp;lt;&amp;lt;EOF | oc apply -f -&lt;br /&gt;
 kind: PersistentVolumeClaim&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 metadata:&lt;br /&gt;
   name: test-claim&lt;br /&gt;
   namespace: default&lt;br /&gt;
 spec:&lt;br /&gt;
   storageClassName: managed-nfs-storage&lt;br /&gt;
   accessModes:&lt;br /&gt;
     - ReadWriteMany&lt;br /&gt;
   resources:&lt;br /&gt;
     requests:&lt;br /&gt;
       storage: 1Mi&lt;br /&gt;
 EOF&lt;br /&gt;
=set nfs csi driver=&lt;br /&gt;
https://github.com/kubernetes-csi/csi-driver-nfs&lt;br /&gt;
&lt;br /&gt;
=dns=&lt;br /&gt;
 https://access.redhat.com/solutions/3804501&lt;br /&gt;
==confirm upstream dns works==&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nTCP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +tcp +short; echo; done ; done&lt;br /&gt;
 for UPSTREAM_DNS_IP in 10.46.201.1 10.46.201.2 10.46.201.3 ; do UPSTREAM_DNS_PORT=53 ; echo -e &amp;quot;\nUDP\n&amp;quot;; for dnspod in `oc get pods -n openshift-dns -o name --no-headers -l dns.operator.openshift.io/daemonset-dns=default`; do echo &amp;quot;Pod $dnspod&amp;quot;; oc exec -n openshift-dns -c dns $dnspod -- dig @${UPSTREAM_DNS_IP} redhat.com -p ${UPSTREAM_DNS_PORT} +notcp +short; echo; done ; done&lt;br /&gt;
&lt;br /&gt;
=image=&lt;br /&gt;
Which images are ok.&lt;br /&gt;
 oc get image.config.openshift.io cluster -o yaml&lt;br /&gt;
=enable sso with keycloak=&lt;br /&gt;
 apiVersion: config.openshift.io/v1&lt;br /&gt;
 kind: OAuth&lt;br /&gt;
 metadata:&lt;br /&gt;
   annotations: {}&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: cluster&lt;br /&gt;
 spec:&lt;br /&gt;
   identityProviders:&lt;br /&gt;
     - mappingMethod: add&lt;br /&gt;
       name: SSO&lt;br /&gt;
       openID:&lt;br /&gt;
         claims:&lt;br /&gt;
           email:&lt;br /&gt;
             - email&lt;br /&gt;
           groups:&lt;br /&gt;
             - groups&lt;br /&gt;
           name:&lt;br /&gt;
             - name&lt;br /&gt;
           preferredUsername:&lt;br /&gt;
             - preferred_username&lt;br /&gt;
         clientID: &amp;lt;Client name in keycloak&amp;gt;&lt;br /&gt;
         clientSecret:&lt;br /&gt;
           name: keycloak-client-secret&lt;br /&gt;
         extraScopes: []&lt;br /&gt;
         issuer: &amp;lt;URL to issuer&amp;gt;&lt;br /&gt;
       type: OpenID&lt;br /&gt;
 ---&lt;br /&gt;
 apiVersion: v1&lt;br /&gt;
 data:&lt;br /&gt;
   clientSecret: &amp;lt;base64 secret&amp;gt;&lt;br /&gt;
 kind: Secret&lt;br /&gt;
 metadata:&lt;br /&gt;
   labels:&lt;br /&gt;
     app.kubernetes.io/instance: sso&lt;br /&gt;
   name: keycloak-client-secret&lt;br /&gt;
   namespace: openshift-config&lt;br /&gt;
&lt;br /&gt;
=keepalive/api/ingress=&lt;br /&gt;
On nodes where nodes server the same ip for api or ingress.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;echo &amp;quot;# unicast_peer&amp;quot; &amp;gt; /etc/keepalived/keepalived.conf&#039;&lt;br /&gt;
Get info about where ingress is running.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;ip a&#039; 2&amp;gt;&amp;amp;1 | tee /tmp/tmp ; grep $(host $(oc whoami --show-server | awk -F &#039;:|/&#039; &#039;{print $4}&#039;) | awk &#039;{print $NF}&#039;) /tmp/tmp&lt;br /&gt;
&lt;br /&gt;
=diff rendered mc=&lt;br /&gt;
 export OLD_RENDERED=rendered-infra-6c7e5fc796264dd32341950aea971807 ; export NEW_RENDERED=rendered-infra-bac1dd431374a5c4c21742e547739c7c ; diff -NrU 5 &amp;lt;(oc get mc ${OLD_RENDERED} -o json) &amp;lt;(oc get mc ${NEW_RENDERED} -o json)&lt;br /&gt;
=secret management=&lt;br /&gt;
List secrets of they type tls.&lt;br /&gt;
 get secrets --field-selector type=kubernetes.io/tls&lt;br /&gt;
=ocm=&lt;br /&gt;
==ocm install==&lt;br /&gt;
 (cd /usr/local/bin/ ; sudo curl -vLsk https://github.com/openshift-online/ocm-cli/releases/download/v0.1.72/ocm-linux-amd64 -o ocm ; sudo chmod 755 ocm)&lt;br /&gt;
==ocm search examples==&lt;br /&gt;
 ocm list clusters --parameter search=&amp;quot;name like &#039;da0d9ade-d649-4948-8bc6-744a1fcb0960&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/clusters_mgmt/v1/clusters --parameter search=&amp;quot;name like &#039;0047ccf6-134b-4bff-99e0-5f2d6532a3ea&#039;&amp;quot;&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter size=1000 | jq -r &#039;.items[]| .display_name +&amp;quot;\t&amp;quot;+ .status +&amp;quot;\t&amp;quot;+ .cluster_id +&amp;quot;\t&amp;quot;+ .created_at&#039; | grep -v Archived | column_tab&lt;br /&gt;
Search for two states.&lt;br /&gt;
 ocm get /api/accounts_mgmt/v1/subscriptions/ --parameter search=&amp;quot;status like &#039;Active&#039; or status like &#039;Stale&#039;&amp;quot; --parameter size=1000&lt;br /&gt;
&lt;br /&gt;
=PodDisruptionBudget=&lt;br /&gt;
API object that specifies the minimum number of replicas that must be up at a time.&lt;br /&gt;
=pod placement=&lt;br /&gt;
Does it look sane which pods run on worker nodes. Search for pods on worker nodes and look for the same pods on all nodes.&lt;br /&gt;
 oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/worker,!node-role.kubernetes.io/infra&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | while read NODE ; do oc get pods -A -o wide --no-headers --field-selector &amp;quot;spec.nodeName=$NODE&amp;quot; | while read NAMESPACE POD REST ; do echo &#039;#&#039; $NAMESPACE ${POD%-*} ; oc get pods -n $NAMESPACE -o wide | grep ${POD%-*} ; done ; done | less -ISRM&lt;br /&gt;
Are any user pods running outside worker nodes?&lt;br /&gt;
 oc get project --no-headers  -o=custom-columns=&#039;NAME:.metadata.name&#039; | grep -v ^openshift- | while read NAMESPACE ; do echo &#039;*&#039; $NAMESPACE ; oc get pods -o wide -n $NAMESPACE ; done&lt;br /&gt;
=wait=&lt;br /&gt;
Wait for kafka getting ready.&lt;br /&gt;
 kubectl wait kafka/my-cluster --for=condition=Ready --timeout=300s -n kafka&lt;br /&gt;
=list configured ssh public keys=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINECONFIG ; do echo &#039;*&#039; &amp;quot;${MACHINECONFIG}&amp;quot; ; oc get machineconfig &amp;quot;${MACHINECONFIG}&amp;quot; -o json | jq -r &#039;.spec.config.passwd.users[].sshAuthorizedKeys[]&#039;; done&lt;br /&gt;
=Add key for ssh login=&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
With a save.&lt;br /&gt;
 oc get machineconfig --no-headers -o custom-columns=&amp;quot;:metadata.name&amp;quot; | grep -E &#039;^99-.*-ssh$&#039; | while read MACHINE_CONFIG_SSH ; do echo &#039;*&#039; $MACHINE_CONFIG_SSH ; oc_script_log oc get machineconfig $MACHINE_CONFIG_SSH -o yaml &amp;lt;/dev/null ; oc patch machineconfig $MACHINE_CONFIG_SSH --type=json --patch=&amp;quot;[{\&amp;quot;op\&amp;quot;:\&amp;quot;add\&amp;quot;, \&amp;quot;path\&amp;quot;:\&amp;quot;/spec/config/passwd/users/0/sshAuthorizedKeys/-\&amp;quot;, \&amp;quot;value\&amp;quot;:\&amp;quot;$(cat $HOME/.ssh/id_ed25519.pub)\&amp;quot;}]&amp;quot; ; done&lt;br /&gt;
&lt;br /&gt;
=readable output from df.=&lt;br /&gt;
 df -lh | grep -Ev &#039;^overlay|^tmpfs|^shm|^nsfs|^cgroup|^devtmpfs&#039;&lt;br /&gt;
=give me openstack credentials=&lt;br /&gt;
 oc get secret -n kube-system openstack-credentials -o json | jq -r &#039;.data.&amp;quot;clouds.yaml&amp;quot; | @base64d&#039;&lt;br /&gt;
=extract content of container=&lt;br /&gt;
 CONT_ID=$(docker create nginx:latest)&lt;br /&gt;
 docker export ${CONT_ID} -o nginx.tar.gz&lt;br /&gt;
&lt;br /&gt;
=shut down openshift=&lt;br /&gt;
Stolen with pride: https://docs.openshift.com/container-platform/4.12/backup_and_restore/graceful-cluster-shutdown.html&lt;br /&gt;
 # Etcd bacup.&lt;br /&gt;
 # Do we use proxy.&lt;br /&gt;
 oc get proxy cluster -o yaml&lt;br /&gt;
 # Make an etcd backup.&lt;br /&gt;
 oc debug --as-root node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) -- chroot /host sh -c &#039;/usr/local/bin/cluster-backup.sh /home/core/assets/backup&#039;&lt;br /&gt;
 # Copy files locally.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; Copying ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;cat $ETCD_BACKUP | gzip -9&amp;quot; | zcat &amp;gt; ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # Confirm files are ok.&lt;br /&gt;
 MASTER=node/$(oc get nodes --no-headers --selector=&#039;node-role.kubernetes.io/master&#039; -o=custom-columns=&#039;NAME:.metadata.name&#039; | head -1) ; oc debug $MASTER -- chroot /host sh -c &#039;ls /home/core/assets/backup/*&#039; 2&amp;gt;/dev/null | while read ETCD_BACKUP ; do echo &#039;*&#039; md5sum ${ETCD_BACKUP##*/} ; oc debug $MASTER -- chroot /host sh -c &amp;quot;md5sum $ETCD_BACKUP&amp;quot; 2&amp;gt;/dev/null ; md5sum ${ETCD_BACKUP##*/} ; done&lt;br /&gt;
 # When does certificate run out.&lt;br /&gt;
 oc -n openshift-kube-apiserver-operator get secret kube-apiserver-to-kubelet-signer -o jsonpath=&#039;{.metadata.annotations.auth\.openshift\.io/certificate-not-after}{&amp;quot;\n&amp;quot;}&#039;&lt;br /&gt;
 # kubelet client/server certificate expiration.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;openssl x509 -in /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate; openssl x509 -in /var/lib/kubelet/pki/kubelet-server-current.pem -noout -enddate&#039;&lt;br /&gt;
 # If certs expire while being shut down. Then we manually have to approve csr:s when cluster comes up.&lt;br /&gt;
 # oc get csr -o name | xargs oc adm certificate approve&lt;br /&gt;
 # Shutdown all nodes.&lt;br /&gt;
 oc get nodes -o name | xargs -I {} oc debug {} -- chroot /host sh -c &#039;shutdown -h 1&#039;&lt;br /&gt;
 # Now nodes can stay dead until reviving.&lt;br /&gt;
 # To start up use command similar to this which is from openstack.&lt;br /&gt;
 openstack server list -f value | grep SHUTOFF | awk &#039;{print $2}&#039; | xargs openstack server start&lt;br /&gt;
&lt;br /&gt;
=statefulset=&lt;br /&gt;
 StatefulSet is a Kubernetes controller designed to manage stateful applications that require stable network identities and persistent storage. It handles the deployment, scaling, and management of pods in an ordered and predictable manner, making it ideal for databases, distributed systems, and other applications where state preservation is critical.&lt;br /&gt;
=oc diff=&lt;br /&gt;
Se which changes would be made&lt;br /&gt;
 kubectl diff -f &amp;lt;manifest&amp;gt;.yaml&lt;br /&gt;
=taint=&lt;br /&gt;
Remove taint from node.&lt;br /&gt;
 kubectl taint node control-plane0.novalocal control-plane1.novalocal control-plane2.novalocal node.cloudprovider.kubernetes.io/uninitialized-&lt;br /&gt;
=list nodes with taints=&lt;br /&gt;
 oc get nodes -o custom-columns=NAME:.metadata.name,TAINTS:.spec.taints&lt;br /&gt;
&lt;br /&gt;
=Sealed secrets=&lt;br /&gt;
==create sealed secret==&lt;br /&gt;
 kubeseal --controller-namespace=kube-system --format yaml --namespace openshift-config &amp;lt;ldap-secret.yaml &amp;gt; ldap-secret-sealed.yaml&lt;br /&gt;
==get secret that you want to unencrypt==&lt;br /&gt;
 oc get sealedsecrets -n openshift-config ldap-secret -o yaml &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret&lt;br /&gt;
==Unencrypt sealed secrets==&lt;br /&gt;
 kubeseal --recovery-private-key &amp;lt;private_key_file&amp;gt; --recovery-unseal &amp;lt; sealedsecrets_-n_openshift-config_ldap-secret &amp;gt; sealedsecrets_-n_openshift-config_ldap-secret.unsealed&lt;br /&gt;
==Get private keys from from Sealed secrets==&lt;br /&gt;
 oc get secret -n kube-system -l sealedsecrets.bitnami.com/sealed-secrets-key -o json | jq -r &#039;.items[].data.&amp;quot;tls.key&amp;quot;&#039; | while read LINE ; do echo $LINE | base64 -d &amp;gt; $(echo &amp;quot;${LINE}&amp;quot; | cut -c -100) ; done&lt;br /&gt;
&lt;br /&gt;
=imagetag=&lt;br /&gt;
ImageTag represents a single tag within an image stream and includes the spec, the status history, and the currently referenced image (if any) of the provided tag&lt;br /&gt;
 &amp;quot;alertname&amp;quot;: &amp;quot;SamplesImagestreamImportFailing&amp;quot;,&lt;br /&gt;
 &amp;quot;namespace&amp;quot;: &amp;quot;openshift-cluster-samples-operator&amp;quot;,&lt;br /&gt;
 # Remove import fail&lt;br /&gt;
 oc -n openshift get imagetag | grep &amp;quot;ImportFailed&amp;quot; | awk -e &#039;{ print $1 }&#039; | xargs -r oc -n openshift tag -d&lt;br /&gt;
 oc delete pod -l name=cluster-samples-operator -n openshift-cluster-samples-operator&lt;br /&gt;
&lt;br /&gt;
=custom-column examples=&lt;br /&gt;
 oc get machine -n openshift-machine-api -o custom-columns=MACHINE:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp --no-headers&lt;br /&gt;
=/etc/hosts=&lt;br /&gt;
 BASE_URL=$(oc get DNS cluster -o=jsonpath=&#039;{.spec.baseDomain}&#039;)&lt;br /&gt;
 cat &amp;lt;&amp;lt; EOF&lt;br /&gt;
 $( host api.${BASE_URL} | awk &#039;{print $NF}&#039;)   api.${BASE_URL}&lt;br /&gt;
 $( host oauth-openshift.apps.${BASE_URL} | awk &#039;{print $NF}&#039;)   oauth-openshift.apps.${BASE_URL}&lt;br /&gt;
 EOF&lt;br /&gt;
=--field-selector: examples=&lt;br /&gt;
List pods on node.&lt;br /&gt;
 kubectl get pods --all-namespaces -o wide --field-selector spec.nodeName=&amp;lt;node-name&amp;gt;&lt;br /&gt;
List running pods &lt;br /&gt;
 oc get pods --field-selector status.phase==Running&lt;br /&gt;
List not running pods &lt;br /&gt;
 oc get pods --field-selector status.phase!=Running&lt;br /&gt;
=node is not ready. What could cause it=&lt;br /&gt;
 oc logs -n openshift-machine-config-operator -l k8s-app=machine-config-controller&lt;br /&gt;
=Copy file from pod to your machine=&lt;br /&gt;
 kubectl cp -n kafka $(oc get kafka -n kafka --no-headers -o custom-columns=:.metadata.name)-kafka-0:/opt/kafka/libs/kafka-tools-3.9.0.jar /temp/kafka-tools-3.9.0.jar&lt;br /&gt;
=category=&lt;br /&gt;
 oc get crd -o jsonpath=&#039;{range .items[?(@.spec.names.categories)]}{.metadata.name}{&amp;quot;\t&amp;quot;}{.spec.names.categories}{&amp;quot;\n&amp;quot;}{end}&#039; | awk -F &#039;&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq | while read i ; do echo &#039;*&#039; $i oc get $i -A ; done&lt;br /&gt;
 * cluster-api oc get cluster-api -A&lt;br /&gt;
 * coreoperators oc get coreoperators -A&lt;br /&gt;
 * olm oc get olm -A&lt;br /&gt;
 * prometheus-operator oc get prometheus-operator -A&lt;br /&gt;
=noobaa=&lt;br /&gt;
==recreate noobaa==&lt;br /&gt;
 # Recreate noobaa. https://access.redhat.com/solutions/5948631&lt;br /&gt;
 oc patch -n openshift-storage noobaa noobaa --type=&#039;merge&#039; -p &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;cleanupPolicy&amp;quot;:{&amp;quot;allowNoobaaDeletion&amp;quot;:true}}}&#039;&lt;br /&gt;
 oc delete -n openshift-storage noobaas.noobaa.io  --all&lt;br /&gt;
 # possibly run this command if hanging.&lt;br /&gt;
 oc patch -n openshift-storage noobaas/noobaa --type=merge -p &#039;{&amp;quot;metadata&amp;quot;: {&amp;quot;finalizers&amp;quot;:null}}&#039;&lt;br /&gt;
 # confirm working.&lt;br /&gt;
 oc get pv,deployment,pods,sts -n openshift-storage|grep noobaa&lt;br /&gt;
&lt;br /&gt;
=hdd to ssd convertion=&lt;br /&gt;
 ceph osd crush rm-device-class osd.&amp;lt;id&amp;gt;&lt;br /&gt;
 ceph osd crush set-device-class ssd osd.&amp;lt;id&amp;gt;&lt;br /&gt;
ROTA 1 means spinning platter&lt;br /&gt;
 oc get nodes -l cluster.ocs.openshift.io/openshift-storage=&amp;quot;&amp;quot; --no-headers -o custom-columns=:.metadata.name | xargs -I % oc debug node/% -- chroot /host sh -c &amp;quot;lsblk -d -o NAME,ROTA,MODEL&amp;quot; 2&amp;gt;/dev/null | grep -Ev &#039;^loop|^sr0|^nbd|^rbd&#039; ; oc exec -n openshift-storage $(oc get pods -n openshift-storage -o name -l app=rook-ceph-operator) -it -- bash -c &amp;quot;export CEPH_ARGS=&#039;-c /var/lib/rook/openshift-storage/openshift-storage.config&#039;; exec ceph osd tree&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=lease=&lt;br /&gt;
I way of distributing resouces. In the case of nodes report back within time defined.&lt;br /&gt;
 oc get leases -o custom-columns=NAMESPACE:.metadata.name,NAME:.metadata.name,HOLDER:.spec.holderIdentity,LEASEDURATION:.spec.leaseDurationSeconds,RENEWTIME:.spec.renewTime -A&lt;br /&gt;
=download oc for windows=&lt;br /&gt;
 https://mirror.openshift.com/pub/openshift-v4/clients/oc/latest/&lt;br /&gt;
==missing commands==&lt;br /&gt;
 ps_ls(){&lt;br /&gt;
   echo &amp;quot;PID STATE COMMAND&amp;quot;&lt;br /&gt;
   for pid in /proc/[0-9]*; do&lt;br /&gt;
     [ -d &amp;quot;$pid&amp;quot; ] || continue&lt;br /&gt;
     pid_num=$(basename &amp;quot;$pid&amp;quot;)&lt;br /&gt;
     cmd=$(cat &amp;quot;$pid/cmdline&amp;quot; 2&amp;gt;/dev/null | tr &#039;\0&#039; &#039; &#039;)&lt;br /&gt;
     state=$(cat &amp;quot;$pid/stat&amp;quot; 2&amp;gt;/dev/null | cut -d&#039; &#039; -f3)&lt;br /&gt;
     [ -n &amp;quot;$cmd&amp;quot; ] &amp;amp;&amp;amp; printf &amp;quot;%-8s %-5s %s\n&amp;quot; &amp;quot;$pid_num&amp;quot; &amp;quot;$state&amp;quot; &amp;quot;$cmd&amp;quot;&lt;br /&gt;
   done&lt;br /&gt;
 }&lt;br /&gt;
=Create pod for testing read and write to pvc=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: PersistentVolumeClaim&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pvc&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  accessModes:&lt;br /&gt;
    - ReadWriteMany&lt;br /&gt;
  resources:&lt;br /&gt;
    requests:&lt;br /&gt;
      storage: 1Gi&lt;br /&gt;
  storageClassName: ocs-storagecluster-cephfs&lt;br /&gt;
---&lt;br /&gt;
apiVersion: v1&lt;br /&gt;
kind: Pod&lt;br /&gt;
metadata:&lt;br /&gt;
  name: odf-simple-test-pod&lt;br /&gt;
  namespace: default&lt;br /&gt;
spec:&lt;br /&gt;
  containers:&lt;br /&gt;
  - name: test-container&lt;br /&gt;
    image: registry.redhat.io/ubi8/ubi:latest&lt;br /&gt;
    command: [&amp;quot;/bin/bash&amp;quot;]&lt;br /&gt;
    args:&lt;br /&gt;
    - -c&lt;br /&gt;
    - |&lt;br /&gt;
      echo &amp;quot;Starting simple ODF PVC test...&amp;quot;&lt;br /&gt;
      TEST_FILE=&amp;quot;/mnt/test/simple-test.txt&amp;quot;&lt;br /&gt;
      &lt;br /&gt;
      while true ; do&lt;br /&gt;
        DATE=$(TZ=Europe/Stockholm date &#039;+%F %H:%M:%S %Z&#039;)&lt;br /&gt;
        # Write test&lt;br /&gt;
        echo &amp;quot;${DATE}&amp;quot; &amp;gt; $TEST_FILE&lt;br /&gt;
        # Read test&lt;br /&gt;
        READ_RESULT=$(timeout 1 cat $TEST_FILE 2&amp;gt;/dev/null)&lt;br /&gt;
        if [ &amp;quot;$READ_RESULT&amp;quot; = &amp;quot;${DATE}&amp;quot; ]; then&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test PASSED&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
          echo &amp;quot;${DATE} PVC Read/Write test FAILED&amp;quot;&lt;br /&gt;
          exit 1&lt;br /&gt;
        fi&lt;br /&gt;
        sleep 1&lt;br /&gt;
      done&lt;br /&gt;
    volumeMounts:&lt;br /&gt;
    - name: test-volume&lt;br /&gt;
      mountPath: /mnt/test&lt;br /&gt;
    readinessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 5&lt;br /&gt;
      periodSeconds: 5&lt;br /&gt;
    livenessProbe:&lt;br /&gt;
      exec:&lt;br /&gt;
        command: [&amp;quot;true&amp;quot;]&lt;br /&gt;
      initialDelaySeconds: 10&lt;br /&gt;
      periodSeconds: 10&lt;br /&gt;
  volumes:&lt;br /&gt;
  - name: test-volume&lt;br /&gt;
    persistentVolumeClaim:&lt;br /&gt;
      claimName: odf-simple-test-pvc&lt;br /&gt;
  restartPolicy: Never&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=PrometheusDuplicateTimestamps=&lt;br /&gt;
https://access.redhat.com/solutions/7101689&lt;br /&gt;
 # Save yaml that you want to edit.&lt;br /&gt;
 oc get configmap cluster-monitoring-config -n openshift-monitoring -o json | jq -r &#039;.data.&amp;quot;config.yaml&amp;quot;&#039; | yq -e &#039;.prometheusK8s.logLevel = &amp;quot;debug&amp;quot;&#039; &amp;gt; config.yaml&lt;br /&gt;
 # Upload the same &lt;br /&gt;
 oc create configmap cluster-monitoring-config -n openshift-monitoring --from-file=config.yaml --dry-run=client -o yaml | kubectl apply -f -&lt;br /&gt;
 # If above fails it may be caused by argocd managing the manifest. Disable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner-&lt;br /&gt;
 # Command above should do the same as below command.&lt;br /&gt;
 argocd app set openshift-gitops/&amp;lt;argo-app&amp;gt; --sync-policy=none&lt;br /&gt;
 # Find trouble&lt;br /&gt;
 oc logs -n openshift-monitoring prometheus-k8s-1 --tail=-1 | grep &amp;quot;Duplicate sample for timestam&amp;quot; | awk -F &#039; msg=&amp;quot;Duplicate sample for timestamp&amp;quot;&#039; &#039;{print $2}&#039; | sort | uniq -c&lt;br /&gt;
     49  series=&amp;quot;kube_persistentvolumeclaim_access_mode{namespace=\&amp;quot;rjh-mh-test\&amp;quot;,persistentvolumeclaim=\&amp;quot;postgres-1\&amp;quot;,access_mode=\&amp;quot;ReadWriteOnce\&amp;quot;}&amp;quot;&lt;br /&gt;
 # Enable sync&lt;br /&gt;
 oc label application &amp;lt;argo-app&amp;gt; -n openshift-gitops owner=rjh&lt;br /&gt;
 # If above does not start sync.&lt;br /&gt;
 argocd app set &amp;lt;argo-app&amp;gt; --sync-policy=automated --auto-prune --self-heal&lt;br /&gt;
=serverGroupName/server_groups=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Look at machinegroup on machineset and machine&lt;br /&gt;
oc get machinesets -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUP:.spec.template.spec.providerSpec.value.serverGroupName&lt;br /&gt;
oc get machine -n openshift-machine-api -o custom-columns=NAME:.metadata.name,SERVERGROUPNAME:.spec.providerSpec.value.serverGroupName,CREATIONTIME:.metadata.creationTimestamp&lt;br /&gt;
# Patch machineset to suitable machinegroup&lt;br /&gt;
oc patch --namespace openshift-machine-api machineset &amp;lt;machineset&amp;gt; --type=merge --patch &#039;{&amp;quot;spec&amp;quot;:{&amp;quot;template&amp;quot;:{&amp;quot;spec&amp;quot;:{&amp;quot;providerSpec&amp;quot;:{&amp;quot;value&amp;quot;:{&amp;quot;serverGroupName&amp;quot;:&amp;quot;&amp;lt;server-group&amp;gt;&amp;quot;}}}}}}&#039;&lt;br /&gt;
# List servergroups.&lt;br /&gt;
openstack server group list&lt;br /&gt;
# Create servergroup with soft-affinity&lt;br /&gt;
openstack server group create --policy soft-anti-affinity &amp;lt;server_group_name&amp;gt;&lt;br /&gt;
# look at openstack what server group is.&lt;br /&gt;
openstack server list -f value -c ID | while read ID ; do openstack server show $ID -f json | jq -r &#039;.|[.name,.server_groups[]]|@tsv&#039; ; done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16559</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16559"/>
		<updated>2026-02-25T12:59:49Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Hockey */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Jeep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Fool=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mogly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=King=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Crest=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Kiwi=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=knight=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=sheep=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=laptop=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=grass cutter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=lamp=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lion=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=I love you=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lynx=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Wizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Suricat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dagger=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
=Superman=&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Supergirl=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Eagle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16558</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16558"/>
		<updated>2026-02-25T12:54:24Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Giljotine */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gun=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hedgehog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Helikopter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Halv Liter=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Hockey=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
	<entry>
		<id>https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16557</id>
		<title>Ascii</title>
		<link rel="alternate" type="text/html" href="https://halfface.se/wiki/index.php?title=Ascii&amp;diff=16557"/>
		<updated>2026-02-25T12:52:21Z</updated>

		<summary type="html">&lt;p&gt;Ekaanbj: /* Mr Gadget */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Stolen with pride from https://www.ascii-art.de/ascii/&lt;br /&gt;
=Ferdinad=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                       |\              _____ &lt;br /&gt;
              |\       J \       _.--&#039;       `-.__&lt;br /&gt;
               \`.      \ \--.-&#039;&amp;quot;                 `-.-.__&lt;br /&gt;
                \ `-. .&#039; \ `.__.`.                   \   `-.&lt;br /&gt;
                 `.  J |  `.      )                   `     `.&lt;br /&gt;
                   `-. /\ | )-.__.&amp;lt;_   __                     \&lt;br /&gt;
                    \\/  \|&amp;gt;-    &#039;  `.&#039;.&#039;)                     \&lt;br /&gt;
                     `\   /  \   -._.-&#039; /                       \&lt;br /&gt;
                      || |  /\   `-.__.&#039;                         \&lt;br /&gt;
                      || | |  |                                   \&lt;br /&gt;
                      &#039;&#039; |-&#039;-&#039;/                                    \&lt;br /&gt;
                .  .-.&#039; _.\&#039;&#039;                                       `.&lt;br /&gt;
              ||  (   /.-.|`-._      /  .                             L&lt;br /&gt;
               \\  \  (_.&#039;   /||    /_.&#039;-&#039;                             L&lt;br /&gt;
                    \      .&#039;//__.-&#039;  &amp;gt;_`.                             J&lt;br /&gt;
                     `.__.&#039;-&#039;         | `-`-.                           J&lt;br /&gt;
                     /_/\              \     \                   _       L&lt;br /&gt;
                    ||| /-             |`-    \   .            .&#039; `-     J&lt;br /&gt;
                   | || F/             )       \  | /     |   J     \     L&lt;br /&gt;
                    \ L.&#039;//           / \      J   L|     F   J      \-.  |&lt;br /&gt;
                   _  \/ //        .-&#039;|  \      \  \|    /   J       |    J&lt;br /&gt;
        _        .-()-|  /  ____.-&amp;lt;_(/` .&#039;`-.    \  |   J.-&#039; F        F  \ F__.--&amp;quot;&amp;quot;&amp;quot;-.&lt;br /&gt;
 `.    / `._  _ _) V/// .  (_.(        /.--.\`-   \ /   F    F            `.  _.---. J&lt;br /&gt;
 `.\  /  &#039;  \|\||\\///.&#039;   (   \      /&#039;    `--._  |   |     \      J L     \&amp;quot;   _.&#039;.&#039;&lt;br /&gt;
 `.\\_F .&#039;&#039;./\ -./)/.&#039;/ _   `.__`-.--&#039;          `.-|   /      \      Y      | .-&#039; `)&lt;br /&gt;
  `.(/`.(\||/)\\-&#039;/ .&#039;)/)       &amp;quot;&amp;quot;                `)  / `-..-&amp;quot;&amp;quot;`.     `.    || /  \&lt;br /&gt;
 .-&#039;| /\\\()&#039;_|/-&#039;/&#039;()-&#039;-&amp;gt;                         F J-._J_      `..    \_.&#039; \ |   )&lt;br /&gt;
  .&#039;``\\\//\\/).&#039;/\\/)\\&amp;quot;                       _.&#039;  | .&#039;  \_.-.  J____.)     `.  (&lt;br /&gt;
 /   ___-(`.|//-(\|_/-`-&#039;                     .&#039; &#039;   | (__./    )-&#039;             `--.\&lt;br /&gt;
     __\|/`-()-&amp;lt;(/()-&amp;lt;                     .-&#039; `. ___|    (__.-&#039;&lt;br /&gt;
     `-()(.&#039;|_)-&amp;lt;\_)-&#039;                    &amp;lt;___.-|    F&lt;br /&gt;
      |/\)    \_ \                              | .-&#039;&lt;br /&gt;
                 `\                              &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Haircut=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                  |&lt;br /&gt;
                         |/                       |&lt;br /&gt;
        ,,,,,           ,+                       /|&lt;br /&gt;
       /    \         () |                       ||&lt;br /&gt;
       \  C &#039;\       /|_()                       ||&lt;br /&gt;
        )   _|     .&#039;___/,,,//                   ||&lt;br /&gt;
      .&#039;=. (____E.&#039; /   /    \                   ||&lt;br /&gt;
     |  \)`-\  _F_.&#039;    \ c  `\                  ||&lt;br /&gt;
     \   \   !&#039;__/       )   _|                  ||&lt;br /&gt;
      \   \,&#039; /         /`._(                    ||&lt;br /&gt;
      |`.   .&#039;         /  \  \                   ||&lt;br /&gt;
      \  `-&#039; |    .-.  |  |   \                E ||&lt;br /&gt;
       &amp;gt;====[]    |  \ |__|   |             O OE ||&lt;br /&gt;
      / |_/  |    |___)|  `.__j____          \|E ||&lt;br /&gt;
      \_     |     || __`.________ `.        |&amp;quot;&amp;quot;|\|&lt;br /&gt;
       \     |\    |||           \///_      _|__|_|&lt;br /&gt;
        \ __ | \   ||`&amp;quot;&amp;quot;\\&amp;quot;&amp;quot;&amp;quot;&amp;quot;//&amp;quot;&#039;    \`.   \     |&lt;br /&gt;
        |[__]|  \  ||.---\\__//---.    | |   \____|&lt;br /&gt;
        ||__|/  /   \|____________|\   |/         |&lt;br /&gt;
        |    | /           || ||  /|   |          |&lt;br /&gt;
   -----|    |/------------||-||-/`|   |----------|&lt;br /&gt;
       /|    |             || ||/`-|___|          |&lt;br /&gt;
      /\|    |             || \\._ [____]        h|&lt;br /&gt;
     /`.|____|             ||  \\ `-/  &#039;`._      j|&lt;br /&gt;
     `=.\____/             ||   \\__`-.____)     w|&lt;br /&gt;
         )  &#039;`--.       _.-||-._ `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;         |&lt;br /&gt;
         `=&#039;====&#039;    ,-&#039;  &#039;  `  `-.               |&lt;br /&gt;
                     `-.________.-&#039;               |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Batman=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
             .  .&lt;br /&gt;
             |\_|\&lt;br /&gt;
             | a_a\&lt;br /&gt;
             | | &amp;quot;]&lt;br /&gt;
         ____| &#039;-\___&lt;br /&gt;
        /.----.___.-&#039;\&lt;br /&gt;
       //        _    \&lt;br /&gt;
      //   .-. (~v~) /|&lt;br /&gt;
     |&#039;|  /\:  .--  / \&lt;br /&gt;
    // |-/  \_/____/\/~|&lt;br /&gt;
   |/  \ |  []_|_|_] \ |&lt;br /&gt;
   | \  | \ |___   _\ ]_}&lt;br /&gt;
   | |  &#039;-&#039; /   &#039;.&#039;  |&lt;br /&gt;
   | |     /    /|:  |&lt;br /&gt;
   | |     |   / |:  /\&lt;br /&gt;
   | |     /  /  |  /  \&lt;br /&gt;
   | |    |  /  /  |    \&lt;br /&gt;
   \ |    |/\/  |/|/\    \&lt;br /&gt;
    \|\ |\|  |  | / /\/\__\&lt;br /&gt;
     \ \| | /   | |__&lt;br /&gt;
          / |   |____)&lt;br /&gt;
          |_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Skull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            _,.---,---.,_&lt;br /&gt;
                        ,;~&#039;             &#039;~;,&lt;br /&gt;
                      ,;                     ;,&lt;br /&gt;
                     ;                         ;&lt;br /&gt;
                    ,&#039;                          &#039;&lt;br /&gt;
                   ,;                           ;,&lt;br /&gt;
                   ; ;      .           .      ; :&lt;br /&gt;
                   | ;   ______       ______   ; |&lt;br /&gt;
                   |  &#039;/~&amp;quot;     ~&amp;quot; . &amp;quot;~     &amp;quot;~\&#039;  |&lt;br /&gt;
                   |  ~  ,-~~~^~, | ,~^~~~-,  ~  |&lt;br /&gt;
                    |   |        }:{        |   |&lt;br /&gt;
                    |   l       / | \       !   |&lt;br /&gt;
                    .~  (__,.--&amp;quot; .^. &amp;quot;--.,__)  ~.&lt;br /&gt;
                    |    ----;&#039; / | \ `;----    |&lt;br /&gt;
                     \__.       \/^\/       .__/&lt;br /&gt;
                      V| \                 / |V&lt;br /&gt;
                       | |T~\___!___!___/~T| |&lt;br /&gt;
                       | |`IIII_I_I_I_IIII&#039;| |&lt;br /&gt;
                       |  \,III I I I III,/  |&lt;br /&gt;
                        \   `~~~~~~~~~~&#039;    /&lt;br /&gt;
                          \   .       .   /&lt;br /&gt;
                            \.    ^    ./&lt;br /&gt;
                              ^~~~^~~~^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Castle=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ._-_.&lt;br /&gt;
                                |_-_(&lt;br /&gt;
                                I&lt;br /&gt;
                               /_\ ___&lt;br /&gt;
                       ._-_.   |,|/   \&lt;br /&gt;
                       |_-_(   | /_____\       ._-_.&lt;br /&gt;
                       I        \| u  -| _     |_-_(&lt;br /&gt;
                      / \    -_-_-_-_--|/ \    I&lt;br /&gt;
                     /___\   \._._._./-|___\  / \&lt;br /&gt;
                     |_u |    |_   _| -| u_| /___\&lt;br /&gt;
                     |_-_-_-_-_-  U_| -|  _| | u_|&lt;br /&gt;
                     |_\._._._./   _|-_-_-_-_-_-_|&lt;br /&gt;
                      \_|-   -|    _|    ..   -|_|&lt;br /&gt;
                       \|-   U|    _| U  ++  U-|/&lt;br /&gt;
                        |U   -|  U _|   ____  -|&lt;br /&gt;
                        |- _ -|    _|  /|-|-\ -|&lt;br /&gt;
                        |-/#\-|    _|  |-|-|| -|&lt;br /&gt;
                    ,___|_MEB_|-----&#039;__I|-|-I__|__,&lt;br /&gt;
                 ._/ /                 \____/      \,&lt;br /&gt;
                /  \ \                  \```\        \,&lt;br /&gt;
               (__   _\                 |&#039;&#039;&#039;|         L_,&lt;br /&gt;
               /   ./ /                  \```\       /  _\&lt;br /&gt;
              |   /  /                   |&#039;&#039;&#039;|       \,   |&lt;br /&gt;
              /  (                       \```\       /  _/ \&lt;br /&gt;
             /_                           |&#039;&#039;&#039;|           _,|&lt;br /&gt;
            |                                                \&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=kentaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                       (_______&lt;br /&gt;
                                    -.__\     __\&lt;br /&gt;
                                   _)        /  \&lt;br /&gt;
                                    \_ _    ( &amp;quot;(&amp;quot;&lt;br /&gt;
                                     _&amp;gt;_     \_-/&lt;br /&gt;
                                        )/ ,-&#039; (-.&lt;br /&gt;
                                         )/ _ - - )&lt;br /&gt;
                                         /,&#039;| _)_)|&lt;br /&gt;
                          (_____        //  |   /||&lt;br /&gt;
                        .___\   \----._//___/ &#039;( \\&lt;br /&gt;
                         _&amp;gt;    /    __//    &#039;,,,\ )\&lt;br /&gt;
                        _)   /|    /,-/          )&#039;\|&lt;br /&gt;
                        \   ( |     ,            |&lt;br /&gt;
                        /_,\(  \     \-.__\  (_, /&lt;br /&gt;
                       (    &#039;   \    |  |  ) |\ /&lt;br /&gt;
                                _) _/ _/  /, )/ )&lt;br /&gt;
                               _) &amp;lt;\ (     ) |) |&lt;br /&gt;
                                 ) \)_\_   / / \(&lt;br /&gt;
                                 /_,\ \_\   )| /_\&lt;br /&gt;
                                   )_\     /_,) )_\&lt;br /&gt;
                                            |_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=bull=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          /|                        /|&lt;br /&gt;
                          | \           __ _ _     / ;&lt;br /&gt;
                    ___    \ \   _.-&amp;quot;-&amp;quot; `~&amp;quot;\  `&amp;quot;--&#039; /&lt;br /&gt;
                _.-&#039;   &amp;quot;&amp;quot;-._\ &amp;quot;&amp;quot;   ._,&amp;quot;  ; &amp;quot;\&amp;quot;--._./&lt;br /&gt;
            _.-&#039;       \./    &amp;quot;-&amp;quot;&amp;quot;&amp;quot;, )  ~&amp;quot;  |&lt;br /&gt;
           / ,- .&#039;          ,     &#039;  `o.  ;  )&lt;br /&gt;
           \ ;/       &#039;                 ;   /&lt;br /&gt;
            |/        &#039;      |      \   &#039;   |&lt;br /&gt;
            /        |             J.&amp;quot;\  ,  |&lt;br /&gt;
           &amp;quot;         :       \   .&#039;  : | ,. _)&lt;br /&gt;
           |         |     /     f |  |`--&amp;quot;--&#039;&lt;br /&gt;
            \_        \    \    / _/  |&lt;br /&gt;
             \ &amp;quot;-._  _.|   (   j/; -&#039;/&lt;br /&gt;
              \  | &amp;quot;/  (   |   /,    |&lt;br /&gt;
               | \  |  /\  |\_///   /&lt;br /&gt;
               \ /   \ | \  \  /   /&lt;br /&gt;
                ||    \ \|  |  |  |&lt;br /&gt;
                ||     \ \  |  | /&lt;br /&gt;
                |\      |_|/   ||&lt;br /&gt;
                L \       ||   ||&lt;br /&gt;
                `&amp;quot;&#039;       |\   |\&lt;br /&gt;
                          ( \. \ `.&lt;br /&gt;
                          |_ _\|_ _\&lt;br /&gt;
                            &amp;quot;    &amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Deer=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     /|       |\&lt;br /&gt;
                  `__\\       //__&#039;&lt;br /&gt;
                     ||      ||&lt;br /&gt;
                   \__`\     |&#039;__/&lt;br /&gt;
                     `_\\   //_&#039;&lt;br /&gt;
                     _.,:---;,._&lt;br /&gt;
                     \_:     :_/&lt;br /&gt;
                       |@. .@|&lt;br /&gt;
                       |     |&lt;br /&gt;
                       ,\.-./ \&lt;br /&gt;
                       ;;`-&#039;   `---__________-----.-.&lt;br /&gt;
                       ;;;                         \_\&lt;br /&gt;
                       &#039;;;;                         |&lt;br /&gt;
                        ;    |                      ;&lt;br /&gt;
                         \   \     \        |      /&lt;br /&gt;
                          \_, \    /        \     |\&lt;br /&gt;
                            |&#039;;|  |,,,,,,,,/ \    \ \_&lt;br /&gt;
                            |  |  |           \   /   |&lt;br /&gt;
                            \  \  |           |  / \  |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             | || |           | |   | |&lt;br /&gt;
                             |_||_|           |_|   |_|&lt;br /&gt;
                            /_//_/           /_/   /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            .       .&lt;br /&gt;
                           / `.   .&#039; \&lt;br /&gt;
                   .---.  &amp;lt;    &amp;gt; &amp;lt;    &amp;gt;  .---.&lt;br /&gt;
                   |    \  \ - ~ ~ - /  /    |&lt;br /&gt;
                    ~-..-~             ~-..-~&lt;br /&gt;
                \~~~\.&#039;                    `./~~~/&lt;br /&gt;
                 \__/                        \__/&lt;br /&gt;
                  /                  .-    .  \&lt;br /&gt;
           _._ _.-    .-~ ~-.       /       }   \/~~~/&lt;br /&gt;
       _.-&#039;q  }~     /       }     {        ;    \__/&lt;br /&gt;
      {&#039;__,  /      (       /      {       /      `. ,~~|   .     .&lt;br /&gt;
       `&#039;&#039;&#039;&#039;=&#039;~~-.__(      /_      |      /- _      `..-&#039;   \\   //&lt;br /&gt;
                   / \   =/  ~~--~~{    ./|    ~-.     `-..__\\_//_.-&#039;&lt;br /&gt;
                  {   \  +\         \  =\ (        ~ - . _ _ _..---~&lt;br /&gt;
                  |  | {   }         \   \_\&lt;br /&gt;
                 &#039;---.o___,&#039;       .o___,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dinosaur=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            __.--&#039;~~~~~`--.&lt;br /&gt;
         ..       __.    .-~               ~-.&lt;br /&gt;
         ((\     /   `}.~                     `.&lt;br /&gt;
          \\\  .{     }               /     \   \&lt;br /&gt;
      (\   \\~~       }              |       }   \&lt;br /&gt;
       \`.-~ -@~     }  ,-,.         |       )    \&lt;br /&gt;
       (___     ) _}  (    :        |    / /      `._&lt;br /&gt;
        `----._-~.     _\ \ |_       \   / /-.__     `._&lt;br /&gt;
               ~~----~~  \ \| ~~--~~~(  + /     ~-._    ~-._&lt;br /&gt;
                         /  /         \  \          ~--.,___~_-_.&lt;br /&gt;
                      __/  /          _\  )&lt;br /&gt;
                    .&amp;lt;___.&#039;         .&amp;lt;___/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                    _&lt;br /&gt;
                                 ,:&#039;/   _..._&lt;br /&gt;
                                // ( `&amp;quot;&amp;quot;-.._.&#039;&lt;br /&gt;
                                \| /    6\___&lt;br /&gt;
                                |     6      4&lt;br /&gt;
                                |            /&lt;br /&gt;
                                \_       .--&#039;&lt;br /&gt;
                                (_&#039;---&#039;`)&lt;br /&gt;
                                / `&#039;---`()&lt;br /&gt;
                              ,&#039;        |&lt;br /&gt;
              ,            .&#039;`          |&lt;br /&gt;
              )\       _.-&#039;             ;&lt;br /&gt;
             / |    .&#039;`   _            /&lt;br /&gt;
           /` /   .&#039;       &#039;.        , |&lt;br /&gt;
          /  /   /           \   ;   | |&lt;br /&gt;
          |  \  |            |  .|   | |&lt;br /&gt;
           \  `&amp;quot;|           /.-&#039; |   | |&lt;br /&gt;
            &#039;-..-\       _.;.._  |   |.;-.&lt;br /&gt;
                  \    &amp;lt;`.._  )) |  .;-. ))&lt;br /&gt;
                  (__.  `  ))-&#039;  \_    ))&#039;&lt;br /&gt;
                      `&#039;--&amp;quot;`      `&amp;quot;&amp;quot;&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Boss=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
            .-.   &lt;br /&gt;
           /   7,       `\,&#039;)/,&lt;br /&gt;
          (     \\     =/= )))&lt;br /&gt;
           )     \\    &amp;lt; .  D/&lt;br /&gt;
          (       \\   `e_  /&lt;br /&gt;
           \       \\_  __\ \___ &lt;br /&gt;
            )      / 7//   ~    `\&lt;br /&gt;
           /       |( / )   )  ,  \&lt;br /&gt;
          (        &#039; `\(_  (_&#039;  \  \&lt;br /&gt;
           \        \__/ \      (\  )&lt;br /&gt;
            )             ))     \\ |&lt;br /&gt;
                         /( (     )\|&lt;br /&gt;
                        (  \_ /   &#039;( \&lt;br /&gt;
                        |    (    |&#039;\/\&lt;br /&gt;
                        |    |    |&lt;br /&gt;
                        |    |   /&lt;br /&gt;
                        ( ` /( ,(&lt;br /&gt;
                        |  (  )  \&lt;br /&gt;
                        |   ) \   |&lt;br /&gt;
                        |  /   \  |&lt;br /&gt;
                        | /     \ |&lt;br /&gt;
                        /(       )\&lt;br /&gt;
                       / /       \ \&lt;br /&gt;
                      /_/         \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dragonfly=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          .-.&lt;br /&gt;
                         ()I()&lt;br /&gt;
                    &amp;quot;==.__:-:__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==.__/~|~\__.==&amp;quot;&lt;br /&gt;
                   &amp;quot;==._(  Y  )_.==&amp;quot;&lt;br /&gt;
        .-&#039;~~&amp;quot;&amp;quot;~=--...,__\/|\/__,...--=~&amp;quot;&amp;quot;~~&#039;-.&lt;br /&gt;
       (               ..=\=/=..               )&lt;br /&gt;
        `&#039;-.        ,.-&amp;quot;`;/=\ ;&amp;quot;-.,_        .-&#039;`&lt;br /&gt;
            `~&amp;quot;-=-~` .-~` |=| `~-. `~-=-&amp;quot;~`&lt;br /&gt;
                 .-~`    /|=|\    `~-.&lt;br /&gt;
              .~`       / |=| \       `~.&lt;br /&gt;
          .-~`        .&#039;  |=|  `.        `~-.&lt;br /&gt;
        (`     _,.-=&amp;quot;`    |=|    `&amp;quot;=-.,_     `)&lt;br /&gt;
         `~&amp;quot;~&amp;quot;`           |=|           `&amp;quot;~&amp;quot;~`&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          |=|&lt;br /&gt;
                          /=\&lt;br /&gt;
                          \=/&lt;br /&gt;
                           ^&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Tuttancanon=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        ___..--------..___&lt;br /&gt;
                    _.-&#039;::   &#039;::::::&#039;   ::&#039;-._&lt;br /&gt;
                _.-&#039;::   ::    &#039;::&#039;    ::   ::&#039;-._&lt;br /&gt;
            _.-&#039;::   ::   ::    ::    ::   ::   ::&#039;-._&lt;br /&gt;
         .-&#039;::   ::   ::   ::   ::   ::   ::   ::   ::&#039;-.&lt;br /&gt;
        /:::\::   ::   ::   ::  ::  ::   ::   ::   ::/:::\&lt;br /&gt;
       /     \::   ::   ::   :: :: ::   ::   ::   ::/     \&lt;br /&gt;
      /:::::::\::   ::   ::  :: :: ::  ::   ::   ::/:::::::\&lt;br /&gt;
      |        \::   ::  ::  :: :: ::  ::  ::   ::/        |&lt;br /&gt;
     /::::::::::\::   ::                  ::   ::/::::::::::\&lt;br /&gt;
    /            \::                          ::/            \&lt;br /&gt;
    |:::::::::::.-\   .&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;.   /-.:::::::::::|&lt;br /&gt;
   /           // \\.&#039; .-==-.        .-==-. &#039;.// \\           \&lt;br /&gt;
   |:::::::::::||.-| .&#039;      &#039;.    .&#039;      &#039;. |-.||:::::::::::|&lt;br /&gt;
  /            |||&#039;|   _.&#039;&#039;&#039;.  \  /  .&#039;&#039;&#039;._   |&#039;|||            \&lt;br /&gt;
  |::::::::::::|||_|.-&#039; :(*):&#039;.|  |.&#039;:(*): &#039;-.|_|||::::::::::::|&lt;br /&gt;
 /             |\_.|`&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039; |  | &#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;`|._/|             \&lt;br /&gt;
 |:::::::::::::\(O)|           |  |           |(O)/:::::::::::::|&lt;br /&gt;
 |              `-&#039;|          .&#039;  &#039;.          |`-&#039;              |&lt;br /&gt;
 /:::::::::::::::::\         (  __  )         /:::::::::::::::::\&lt;br /&gt;
/                   \         .&#039;  &#039;.         /                   \&lt;br /&gt;
|::::::::::::::::::::\      _.--..--._      /::::::::::::::::::::|&lt;br /&gt;
|                     &#039;    &#039;.---..---.&#039;    &#039;                     |&lt;br /&gt;
|::::::::::::::::::::::&#039;.    &#039;-....-&#039;    .&#039;::::::::::::::::::::::|&lt;br /&gt;
|                        &#039;.            .&#039;                        |&lt;br /&gt;
&#039;-:::::::::::::::::::::::&#039; &#039;.________.&#039; &#039;:::::::::::::::::::::::-&#039;&lt;br /&gt;
  /&#039;-.                   |  &#039;--------&#039;  |                   .-&#039;\&lt;br /&gt;
 /    &#039;::::::::::::::::::|  |-._\\_.-|  |::::::::::::::::::&#039;    \&lt;br /&gt;
 |     \                 |  |-._//_.-|  |                 /     |&lt;br /&gt;
 |_..--|:::::::::::::::::|  |-._\\_.-|  |:::::::::::::::::|--.._|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |._|-._//_.-|_.|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|-.|-._\\_.-|.-|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;|-._//_.-|&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;|-._\\_.-|&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|                |&amp;lt;&amp;gt;&#039;-._//_.-&#039;&amp;lt;&amp;gt;|                |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|::::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|::::::::::::::::|&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;\                |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|                /&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;:::::::::::::::|&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|:::::::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;.            |&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;|            .&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 |&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&#039;::::::::::&#039;&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&#039;::::::::::&#039;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;|&lt;br /&gt;
 \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;&amp;lt;/&lt;br /&gt;
  \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;/&lt;br /&gt;
   \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;/&lt;br /&gt;
    \&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;./&lt;br /&gt;
     &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&#039;&lt;br /&gt;
       &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
          &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
             &#039;.&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;&amp;gt;.&amp;lt;.&#039;&lt;br /&gt;
                &#039;&#039;==============================&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Elephant=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                _,--._      _,.--&#039;&#039;&#039;&#039;&#039;&#039;&#039;---..._&lt;br /&gt;
              ,&#039;     _`&#039;&#039;-&#039;&#039;                   `-._&lt;br /&gt;
             /      /     `.                       `.&lt;br /&gt;
            / ,_.  |        \                        \&lt;br /&gt;
           /  `-&#039;  |    _,-&#039;&#039;                         \&lt;br /&gt;
           |        \,-&#039; /      \                   `. \&lt;br /&gt;
           | ,&#039;)   ;    /                 /         |/\ \&lt;br /&gt;
       _,.-&#039;_,&#039;\,-:_;;.|       \\         |        / | \ :&lt;br /&gt;
      `&#039;-&#039;&#039; \  \       |       | \       /         |/   |;&lt;br /&gt;
             \  \      |      /          |        / |  ;;&lt;br /&gt;
              `. \      \     |__        \        |/  ::&lt;br /&gt;
                \ :     |     /  `&#039;&#039;----&#039;&#039;`.     / |   \\&lt;br /&gt;
                | ;     ,\    |             \    | |   ;;&lt;br /&gt;
               / /      \|    |             |    | |&lt;br /&gt;
              /,&#039;       ||    |             |    | |&lt;br /&gt;
                        ;|    |             |    | |&lt;br /&gt;
                       &#039;,_;-,__\           ,&#039;;-,__\.\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Escavator=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                     .-.&lt;br /&gt;
                                                    /   \&lt;br /&gt;
                                     _____.....-----|(o) |&lt;br /&gt;
                               _..--&#039;          _..--|  .&#039;&#039;&lt;br /&gt;
                             .&#039;  o      _..--&#039;&#039;     |  | |&lt;br /&gt;
                            /  _/_..--&#039;&#039;            |  | |&lt;br /&gt;
                   ________/  / /                   |  | |&lt;br /&gt;
                  | _  ____\ / /                    |  | |&lt;br /&gt;
 _.-----._________|| ||    \\ /                     |  | |&lt;br /&gt;
|=================||=||_____\\                      |__|-&#039;&lt;br /&gt;
|                 ||_||_____//                      (o\ |&lt;br /&gt;
|_________________|_________/                        |-\|&lt;br /&gt;
 `-------------._______.----&#039;                        /  `.&lt;br /&gt;
    .,.,.,.,.,.,.,.,.,.,.,.,.,                      /     \&lt;br /&gt;
   ((O) o o o o ======= o o(O))                 ._.&#039;      /&lt;br /&gt;
    `-.,.,.,.,.,.,.,.,.,.,.,-&#039;                   `.......&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Bobcat=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ______________&lt;br /&gt;
        /.----------..-&#039;&lt;br /&gt;
     -. ||           \\&lt;br /&gt;
 .----&#039;-||-.          \\&lt;br /&gt;
 |o _   || |           \\&lt;br /&gt;
 | [_]  || |_...-----.._\\&lt;br /&gt;
 | [_]  ||.&#039;            `-._ _&lt;br /&gt;
 | [_]  &#039;.O)_...-----....._ `.\&lt;br /&gt;
 / [_]o .&#039; _ _&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;&#039;_ _ `. `.     __&lt;br /&gt;
|______/.&#039;  _  `.---.&#039;  _  `.\  `._./  \&lt;br /&gt;
|&#039;&#039;&#039;&#039;&#039;/, .&#039; _ &#039;. . , .&#039; _ &#039;. .`. .o&#039;|   \&lt;br /&gt;
`---..|; : (_) : ;-; : (_) : ;-&#039;`--.|    \&lt;br /&gt;
       &#039; &#039;. _ .&#039; &#039; &#039; &#039;. _ .&#039; &#039;      /     \&lt;br /&gt;
        `._ _ _,&#039;   `._ _ _,&#039;       `._____\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Angel=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                         ,_  .--.&lt;br /&gt;
                   , ,   _)\/    ;--.&lt;br /&gt;
           . &#039; .    \_\-&#039;   |  .&#039;    \&lt;br /&gt;
          -= * =-   (.-,   /  /       |&lt;br /&gt;
           &#039; .\&#039;    ).  ))/ .&#039;   _/\ /&lt;br /&gt;
               \_   \_  /( /     \ /(&lt;br /&gt;
               /_\ .--&#039;   `-.    //  \&lt;br /&gt;
               ||\/        , &#039;._//    |&lt;br /&gt;
               ||/ /`(_ (_,;`-._/     /&lt;br /&gt;
               \_.&#039;   )   /`\       .&#039;&lt;br /&gt;
                    .&#039; .  |  ;.   /`&lt;br /&gt;
                   /      |\(  `.(&lt;br /&gt;
                  |   |/  | `    `&lt;br /&gt;
                  |   |  /&lt;br /&gt;
                  |   |.&#039;&lt;br /&gt;
               __/&#039;  /&lt;br /&gt;
           _ .&#039;  _.-`&lt;br /&gt;
        _.` `.-;`/&lt;br /&gt;
       /_.-&#039;` / /&lt;br /&gt;
             | /&lt;br /&gt;
            ( /&lt;br /&gt;
           /_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Flamino=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    ___&lt;br /&gt;
  ,&#039;   `.&lt;br /&gt;
 /_. _,. \&lt;br /&gt;
( /(&#039;   \ :&lt;br /&gt;
 \\|    / ;&lt;br /&gt;
  `&#039;   / /&lt;br /&gt;
      / /&lt;br /&gt;
     : :&lt;br /&gt;
     | :    _______&lt;br /&gt;
     :  \ ,&#039;       `-._&lt;br /&gt;
     &#039;   /    .  .  .  \&lt;br /&gt;
      : `&#039; ;  ;  ;  ; , :&lt;br /&gt;
       \`./  /  /  / ; ;;&lt;br /&gt;
        `. `&#039;../__/ / ,.\&lt;br /&gt;
           `&#039;-.____;-&#039;`\\\&lt;br /&gt;
               \ //   / &#039;|&lt;br /&gt;
                ::\&lt;br /&gt;
                ||\\&lt;br /&gt;
                || \\&lt;br /&gt;
                ||  ))&lt;br /&gt;
                || //&lt;br /&gt;
                ||//&lt;br /&gt;
                ||/&lt;br /&gt;
                ||&lt;br /&gt;
               /||&lt;br /&gt;
               `||-&lt;br /&gt;
             __,&#039;; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Mr Gadget=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     _..__&lt;br /&gt;
                                   .&#039; I   &#039;.&lt;br /&gt;
                                   |.-&amp;quot;&amp;quot;&amp;quot;-.|&lt;br /&gt;
                                  _;.-&amp;quot;&amp;quot;&amp;quot;-.;_&lt;br /&gt;
                              _.-&#039; _..-.-.._ &#039;-._&lt;br /&gt;
                             &#039;;--.-(_o_I_o_)-.--;&#039;&lt;br /&gt;
                              `. | |  | |  | | .`&lt;br /&gt;
                                `-\|  | |  |/-&#039;&lt;br /&gt;
                                   |  | |  |&lt;br /&gt;
                                   |  \_/  |&lt;br /&gt;
                                _.&#039;; ._._. ;&#039;._&lt;br /&gt;
                           _.-&#039;`; | \  -  / | ;&#039;-.&lt;br /&gt;
                         .&#039; :  /  |  |   |  |  \  &#039;.&lt;br /&gt;
                        /   : /__ \  \___/  / __\ : `.&lt;br /&gt;
                       /    |   /  &#039;._/_\_.&#039;  \   :   `\&lt;br /&gt;
                      /     .  `---;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039;-----`  .     \&lt;br /&gt;
                     /      |      |()    ()      |      \&lt;br /&gt;
                    /      /|      |              |\      \&lt;br /&gt;
                   /      / |      |()    ()      | \      \&lt;br /&gt;
                   |    &amp;lt;jgs\_,,___|_.....____,,__/  `&amp;gt;     |&lt;br /&gt;
                   \     \  | ][     |   |    ][  |  /     /&lt;br /&gt;
                    \     \ ;=&amp;quot;&amp;quot;=====&#039;&amp;quot;&amp;quot;&amp;quot;&#039;====&amp;quot;&amp;quot;==; /     /&lt;br /&gt;
                     |/`\  \/      |()    ()      \/  /`\|&lt;br /&gt;
                      |_/.-&#039;;      |              |`-.\_|&lt;br /&gt;
                        /   |      ;              :   \&lt;br /&gt;
                        |__.|      |              |.__|&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            |      :              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            ;      |              |&lt;br /&gt;
                            ;      |              ;&lt;br /&gt;
                            |      :              |&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            |      |              ;&lt;br /&gt;
                            &#039;-._   ;           _.-&#039;&lt;br /&gt;
                                `;&amp;quot;--.....--&amp;quot;;`&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 |    | |    |&lt;br /&gt;
                                 T----T T----T&lt;br /&gt;
                            _..._L____J L____J _..._&lt;br /&gt;
                          .` &amp;quot;-. `%   | |    %` .-&amp;quot; `.&lt;br /&gt;
                         /      \    .: :.     /      \&lt;br /&gt;
                         &#039;-..___|_..=:` `-:=.._|___..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Lizard=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                          &lt;br /&gt;
                         )/_&lt;br /&gt;
               _.--..---&amp;quot;-,--c_&lt;br /&gt;
          \L..&#039;           ._O__)_&lt;br /&gt;
  ,-.     _.+  _  \..--( /&lt;br /&gt;
    `\.-&#039;&#039;__.-&#039; \ (     \_      &lt;br /&gt;
      `&#039;&#039;&#039;       `\__   /\&lt;br /&gt;
                  &#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=World=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
           _.-,=_&amp;quot;&amp;quot;&amp;quot;--,_&lt;br /&gt;
        .-&amp;quot; =/7&amp;quot;   _  .T &amp;quot;=.&lt;br /&gt;
      ,/7  &amp;quot; &amp;quot;  ,//)`d       `.&lt;br /&gt;
    ,/ &amp;quot;      4 ,i-/           `.&lt;br /&gt;
   /         _)&amp;quot;_sm  =,=T&amp;quot;D      \&lt;br /&gt;
  /         (_/&amp;quot;_`;\/gjo D-O      \&lt;br /&gt;
 /         ,d&amp;quot;&amp;quot;&amp;quot;O-_.._.)  P.___    \&lt;br /&gt;
,        ,&amp;quot;            \\  bi- `\| Y.&lt;br /&gt;
|       .d              b\  P&#039;   V  |&lt;br /&gt;
|\      &#039;O               O!&amp;quot;,       |&lt;br /&gt;
|L.       \__.=_           7        |&lt;br /&gt;
&#039;  D.           )         /         &#039;&lt;br /&gt;
 \ T             \       |         /&lt;br /&gt;
  \D             /       7 /      /&lt;br /&gt;
   \             \     ,&amp;quot; /&amp;quot;     /&lt;br /&gt;
    `.            \   7&#039;       ,&#039;&lt;br /&gt;
      &amp;quot;-_          `&amp;quot;&#039;      ,-&#039;&lt;br /&gt;
         &amp;quot;-._           _.-&amp;quot;&lt;br /&gt;
             &amp;quot;&amp;quot;&amp;quot;&amp;quot;---&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Gnu=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                _,-----.&lt;br /&gt;
                  _,------.__,-&#039;        `.  .            .&lt;br /&gt;
               .-&#039;                        `//__          \\&lt;br /&gt;
              |                           ((___`-_____    ))&lt;br /&gt;
              |                            \_____)     \`=:&#039;&lt;br /&gt;
              |                               `=|      |=,&#039;&lt;br /&gt;
             /                                  | O   (|&lt;br /&gt;
            /  /\                               |      |&lt;br /&gt;
           /  /  \    .                          \     |&lt;br /&gt;
          |  /   /|  / `--.   ___            __,,-.    |&lt;br /&gt;
          | /   //  /      `-&#039;   \  ,_    /&#039;&#039;     |  o o|&lt;br /&gt;
         / |   | |  |             \ \ `.  |        ``--&#039;&lt;br /&gt;
         mmm   | |  |              \ \ |  |&lt;br /&gt;
               | |\ |              |  ||  |&lt;br /&gt;
               | | ||              / / `. )&lt;br /&gt;
                \ \ \\            / /   | |&lt;br /&gt;
                 |_| ||          / /    | |&lt;br /&gt;
                     |_\         \_|    |  \&lt;br /&gt;
                                         \__\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Duck=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                   ___&lt;br /&gt;
                               ,-&amp;quot;&amp;quot;   `.&lt;br /&gt;
                             ,&#039;  _   e )`-._&lt;br /&gt;
                            /  ,&#039; `-._&amp;lt;.===-&#039;&lt;br /&gt;
                           /  /&lt;br /&gt;
                          /  ;&lt;br /&gt;
              _          /   ;&lt;br /&gt;
 (`._    _.-&amp;quot;&amp;quot; &amp;quot;&amp;quot;--..__,&#039;    |&lt;br /&gt;
 &amp;lt;_  `-&amp;quot;&amp;quot;                     \&lt;br /&gt;
  &amp;lt;`-                          :&lt;br /&gt;
   (__   &amp;lt;__.                  ;&lt;br /&gt;
     `-.   &#039;-.__.      _.&#039;    /&lt;br /&gt;
        \      `-.__,-&#039;    _,&#039;&lt;br /&gt;
         `._    ,    /__,-&#039;&lt;br /&gt;
            &amp;quot;&amp;quot;._\__,&#039;&amp;lt; &amp;lt;____&lt;br /&gt;
                 | |  `----.`.&lt;br /&gt;
                 | |        \ `.&lt;br /&gt;
                 ; |___      \-``&lt;br /&gt;
                 \   --&amp;lt;&lt;br /&gt;
                  `.`.&amp;lt;&lt;br /&gt;
                    `-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Dog=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                            ()._&lt;br /&gt;
                 _.--.     (##)_`-.&lt;br /&gt;
                /   . ``u  (##), ` `.&lt;br /&gt;
                \__)   _/  (##),--.  \&lt;br /&gt;
                  | --&#039;     ()&#039;    \  \&lt;br /&gt;
                  /   |             | |&lt;br /&gt;
                ,&#039;     \          _,&#039; /&lt;br /&gt;
              ,&#039;       |        ,;--//&lt;br /&gt;
             / ___\  |/      ___V__{(_&lt;br /&gt;
            | &#039;   \| ||    ,&#039;-===- `,&#039;|&lt;br /&gt;
          __|  ,&#039; /| ||   |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|-L|&lt;br /&gt;
        ,`__. &amp;lt; _)))_)))  |________|,&#039;&lt;br /&gt;
       (,&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=Giljotine=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.___________________.&lt;br /&gt;
|`._______________,&#039;|&lt;br /&gt;
| |               | |&lt;br /&gt;
| |_______________| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_   _        || |&lt;br /&gt;
| || &amp;quot;&amp;quot;--._._    || |&lt;br /&gt;
| ||       `-.   || |&lt;br /&gt;
| ||          `. || |&lt;br /&gt;
| ||            \|| |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||             || |&lt;br /&gt;
| ||_____________|| |&lt;br /&gt;
| |/     ,--.    \| |&lt;br /&gt;
| |-(_)-(    )-(_)| |&lt;br /&gt;
| |      `--&#039;     | |&lt;br /&gt;
|===================|&lt;br /&gt;
|                   |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  +-&#039;~`---------------------------------/\--&lt;br /&gt;
 ||&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot; \\\\\\  \/~)&lt;br /&gt;
 ||                                  \\\\\\  \/_&lt;br /&gt;
  |~~~~~~~~-________________-_________________\ ~--_&lt;br /&gt;
  !---------|_________       ------~~~~~(--   )--~~&lt;br /&gt;
                      \ /~~~~\~~\   )--- \_ /(&lt;br /&gt;
                       ||     |  | \   ()   \\&lt;br /&gt;
                       \\____/_ / ()\        \\&lt;br /&gt;
                        `~~~~~~~~~-. \        \\&lt;br /&gt;
                                    \ \  &amp;lt;($)&amp;gt; \\&lt;br /&gt;
                                     \ \        \\&lt;br /&gt;
                                      \ \        \\&lt;br /&gt;
                                       \ \        \\&lt;br /&gt;
                                        \ \  ()    \|&lt;br /&gt;
                                        _\_\__====~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         (      )&lt;br /&gt;
         ))    ((&lt;br /&gt;
        //      \\&lt;br /&gt;
       | \\____// |&lt;br /&gt;
      \~/ ~    ~\/~~/&lt;br /&gt;
       (|    _/o  ~~&lt;br /&gt;
        /  /     ,|&lt;br /&gt;
       (~~~)__.-\ |&lt;br /&gt;
        ``~~    | |&lt;br /&gt;
         |      | |&lt;br /&gt;
         |        |&lt;br /&gt;
        /          \&lt;br /&gt;
       `\          /&#039;&lt;br /&gt;
         `\_    _/&#039;&lt;br /&gt;
            ~~~~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                     \ / \/ \/ / ,&lt;br /&gt;
                                   \ /  \/ \/  \/  / ,&lt;br /&gt;
                                 \ \ \/ \/ \/ \ \/ \/ /&lt;br /&gt;
                               .\  \/  \/ \/ \/  \/ / / /&lt;br /&gt;
                              &#039;  / / \/  \/ \/ \/  \/ \ \/ \&lt;br /&gt;
                           .&#039;     ) \/ \/ \/ \/  \/  \/ \ / \&lt;br /&gt;
                          /   o    ) \/ \/ \/ \/ \/ \/ \// /&lt;br /&gt;
                        o&#039;_ &#039;,__ .&#039;   ,.,.,.,.,.,.,.,&#039;- &#039;%&lt;br /&gt;
                                 // \\          // \\&lt;br /&gt;
                                &#039;&#039;  &#039;&#039;         &#039;&#039;  &#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                     .- . _&lt;br /&gt;
            .:       `      &amp;quot; - . _&lt;br /&gt;
     \     ::          `            &amp;quot;&amp;quot;--..__                                                . . . :  :  :&lt;br /&gt;
     `\   ::  :&#039;         ` _ _              &amp;quot;&amp;quot;--..__                       ......_._._:.:.: &amp;quot; &amp;quot; &amp;quot; &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
      `\.::  :&#039;                &amp;quot; &amp;quot; &amp;quot; - ----.....___ &amp;quot;&amp;quot;-##.____...:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
       : :  :&#039;                                     &amp;quot;::&amp;quot;:&amp;quot;-----......______&lt;br /&gt;
     .&amp;quot;  &amp;quot;&amp;quot;--..__ .                               .:&#039;.:                   &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-----. . . _ _ _&lt;br /&gt;
    /.&amp;quot;&amp;quot;--.._    &amp;quot;&amp;quot;--..__ :                     .:&#039;. :                                           &amp;quot;  &amp;quot;  &amp;quot;&lt;br /&gt;
   /&#039;   .:   &amp;quot;:-.._      &amp;quot;&amp;quot;--..__             .:&#039;.  :&lt;br /&gt;
    `-._:__.-&amp;quot;     &amp;quot;&amp;quot;-.._        &amp;quot;&amp;quot;--...___..:&#039;.   :&lt;br /&gt;
      .:               /.&amp;quot;&amp;quot;-..__...---&amp;quot;&amp;quot;-.&#039;&amp;quot;-:&amp;quot;--.:_&lt;br /&gt;
                       &amp;quot;      :  POLICE .&#039;    ::&amp;quot;&amp;quot;-.&amp;quot;&amp;quot;;.&lt;br /&gt;
                             :_         :     ::    &amp;quot;:: `-.&lt;br /&gt;
                             :::::.._   &#039;-._ ::      ::    `.&lt;br /&gt;
                             : &amp;quot;&amp;quot;&amp;quot;:::::.._  &amp;quot;&#039;&#039;-._  ::       :&lt;br /&gt;
                             :       &amp;quot;&amp;quot;:::::.._   &amp;quot;&#039;:         :&lt;br /&gt;
                             `.           &amp;quot;&amp;quot;&amp;quot;:::::-:_         :&lt;br /&gt;
                               :.               &amp;quot;&amp;quot;&amp;quot;::::::...   :&lt;br /&gt;
                     ..__..--&amp;quot;&amp;quot; &amp;quot;.      .              &amp;quot;&amp;quot;&amp;quot;::::::&lt;br /&gt;
                        &amp;quot;&amp;quot;--..__  :.--&amp;quot;&amp;quot;                      &amp;quot;:&lt;br /&gt;
                                &amp;quot;&amp;quot;-+:=:_                   (&amp;quot;-:&lt;br /&gt;
                                   :    &amp;quot;&amp;quot;--.._             []&#039;&lt;br /&gt;
                                   :          :&amp;quot;&amp;quot;--..___..--&amp;quot;&lt;br /&gt;
                                   :          :&lt;br /&gt;
                                 &amp;quot;&amp;quot;--..__     :&lt;br /&gt;
                                         &amp;quot;&amp;quot;--.:_&lt;br /&gt;
                                                &amp;quot;&amp;quot;--..__.-grp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|        |  ------------\    ,---.  /------------  |        |&lt;br /&gt;
|        |   ---------.  `-./  &amp;quot;\.-&#039;  .---------   |        |&lt;br /&gt;
|  ,--.  |     --------\   .         /--------     |  ,--.  |&lt;br /&gt;
| ( &amp;gt;&amp;lt; ) |        ------`-.|      .-&#039;------        | ( &amp;gt;&amp;lt; ) |&lt;br /&gt;
|  `--&#039;  |             ---/ `/&amp;quot;\  \---             |  `--&#039;  |&lt;br /&gt;
|      . |                `//_-_\\&#039;              8 |        |&lt;br /&gt;
| : .  ! |                (.&#039;   &#039;,)                | . : . :|&lt;br /&gt;
| ! ! .| |                                         | : | ! .|&lt;br /&gt;
| |_| ;|_|                  .                      |_| !_| !|&lt;br /&gt;
`-&#039; `-^&#039;                     \o                      `-&#039; `-^&#039;&lt;br /&gt;
           \__________________T&amp;gt;_________________/&lt;br /&gt;
           `-=--=--=--=--=--=---=--=--=--=--=--=-&#039;&lt;br /&gt;
            ] _] _] _] _] _] _L] _] _] _] _] _] _&lt;br /&gt;
           `-------------------------------------&#039;&lt;br /&gt;
           `u---u---u---u---u---u---u---u---u---u&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        .---.&lt;br /&gt;
                       /_____\&lt;br /&gt;
                      _HH.H.HH&lt;br /&gt;
       _          _-&amp;quot;&amp;quot; WHHHHHW&amp;quot;&amp;quot;--__&lt;br /&gt;
       \\      _-&amp;quot;   __\VW=WV/__   /&amp;quot;&amp;quot;.&lt;br /&gt;
        \\  _-&amp;quot; \__--&amp;quot;  &amp;quot;-_-&amp;quot;   &amp;quot;&amp;quot;&amp;quot;    &amp;quot;_&lt;br /&gt;
         \\/      _                      &amp;quot;&amp;quot;&lt;br /&gt;
          \\----_/_|     ___      /&amp;quot;\  T&amp;quot;&amp;quot;\====-&lt;br /&gt;
           \\ /&amp;quot;-._     |%|H|    (   &amp;quot;\|) | /  .:)&lt;br /&gt;
            \/     /    |-+-|     \    |_ J .:::-&#039;&lt;br /&gt;
            /     /     |H|%|  _-&#039; &#039;-._  &amp;quot; )/;&amp;quot;&lt;br /&gt;
           /     / \    __    (  \ \   \   &amp;quot;&lt;br /&gt;
          /     /\/ &#039;. /  \   \ \ \ _- \&lt;br /&gt;
          &amp;quot;&#039;-._/  \/  \    &amp;quot;-_ \ -&amp;quot;&amp;quot; _- \&lt;br /&gt;
         _,&#039;\\  \  \/  )      &amp;quot;-, -&amp;quot;&amp;quot;    \&lt;br /&gt;
      _,&#039;_- _ \\ \  \,&#039;          \ \_\_\  \&lt;br /&gt;
    ,&#039;    _-    \_\  \            \ \_\_\  \&lt;br /&gt;
    \_ _-   _- _,&#039; \  \            \ &amp;quot;&amp;quot;&amp;quot;&amp;quot;   )&lt;br /&gt;
     C\_ _- _,&#039;     \  &amp;quot;--------.   L_&amp;quot;&amp;quot;&amp;quot;&amp;quot;_/&lt;br /&gt;
      &amp;quot; \/-&#039;         &amp;quot;-_________|     &#039;&amp;quot;-Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                        .-.-.&lt;br /&gt;
                                       /_____\&lt;br /&gt;
                                      :._|_|_.:&lt;br /&gt;
                                      |/a&amp;gt; a&amp;gt;\|&lt;br /&gt;
                                   _.-:  (    ;._&lt;br /&gt;
                                 ,&#039;::::\  _  /:::`-._&lt;br /&gt;
                                /:::::::`._,&#039;|:::::::`._&lt;br /&gt;
                               /:::::_.--`._,&#039;-.::::::::`.&lt;br /&gt;
                              :`:::;&#039; \  )   (   `&#039;:_:;-&#039; \&lt;br /&gt;
                              |: `&#039;   : \         \ .   ,-.\&lt;br /&gt;
                              |&#039;  --._;.           `:\,&#039; .._\&lt;br /&gt;
                              |:.   -.\:          `;:;&#039;.&#039;    :&lt;br /&gt;
                              :,----..(:._ ._,---.&#039;;&#039;.  `.__.&#039;&lt;br /&gt;
                              /\,---.|:&#039;:..-(\,-,   `.`..-&#039;&lt;br /&gt;
                             /  :.--.&#039;|:&#039;   ;&#039;,:.__.-&#039;&#039;&lt;br /&gt;
                            :   |     |&#039;  ,&#039;,&#039; /:/ /&lt;br /&gt;
                            :   |,&#039;|.-| ,&#039;,&#039;  /:/ /&lt;br /&gt;
                           /:\  : ,&#039;_,:&#039;,&#039;   /:/ /&lt;br /&gt;
                          /  `:._\,&#039;.`.`, -.&#039;;&#039;,&#039;&lt;br /&gt;
                         :`-._`:/ &amp;gt;._&amp;gt;.&#039;   .;\&#039;&lt;br /&gt;
                         |`-._`:,&#039;,/_     ,&#039;&lt;br /&gt;
                         |::::;&#039;,&#039; ; `-&#039;&#039;:&lt;br /&gt;
                         /\:,&#039;,|  :`-..-.;&lt;br /&gt;
                       _,`,&#039;,&#039; ;  ;:::::/&lt;br /&gt;
                     ,&#039;`,&#039;,&#039;.;&#039;:_;`-::&#039;/&lt;br /&gt;
                    &amp;lt;`,&#039;,;::;:-&#039;      /&lt;br /&gt;
                    ,&#039;,&#039;   (  ````  ,&#039;.::::.&lt;br /&gt;
                  ,&#039;.&#039;     /`_.__.-&#039;::::&#039;&lt;br /&gt;
               _,&#039;,&#039;         `:::::::&#039;&lt;br /&gt;
    _______..-`.,&#039;&lt;br /&gt;
  ,&#039; ,----.   ,&#039;&lt;br /&gt;
 &#039;---`----&#039;-&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                   _.------------------.&lt;br /&gt;
                 .&#039;____________________|&lt;br /&gt;
                 //    _||||  | |  | | |&lt;br /&gt;
          ______//_\__j_|||&amp;quot;--&amp;quot; &amp;quot;--&amp;quot; | |  _&lt;br /&gt;
         /-----+-|p  ==,|||__________|_|-|W|&lt;br /&gt;
        _j,====. |b_____|||  _____     | |W|&lt;br /&gt;
       |_) ,---.`.`------&#039;|.&#039;,---.`.___|_|W|&lt;br /&gt;
         `/ .-. \\`======__// .-. \`-----&#039;&amp;quot;&amp;quot;&lt;br /&gt;
          \ `-&#039; / &amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;   \ `-&#039; /&lt;br /&gt;
           `---&#039;             `---&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                  ,;;;;;;,&lt;br /&gt;
                                ,;;;&#039;&amp;quot;&amp;quot;`;;\&lt;br /&gt;
                              ,;;;/  .&#039;`&#039;,;\&lt;br /&gt;
                            ,;;;;/   |    \|_&lt;br /&gt;
                           /;;;;;    \    / .\&lt;br /&gt;
                         ,;;;;;;|     &#039;.  \/_/&lt;br /&gt;
                        /;;;;;;;|       \&lt;br /&gt;
             _,.---._  /;;;;;;;;|        ;   _.---.,_&lt;br /&gt;
           .;;/      `.;;;;;;;;;|         ;&#039;      \;;,&lt;br /&gt;
         .;;;/         `;;;;;;;;;.._    .&#039;         \;;;.&lt;br /&gt;
        /;;;;|          _;-&amp;quot;`       `&amp;quot;-;_          |;;;;\&lt;br /&gt;
       |;;;;;|.---.   .&#039;  __.-&amp;quot;```&amp;quot;-.__  &#039;.   .---.|;;;;;|&lt;br /&gt;
       |;;;;;|     `\/  .&#039;/__\     /__\&#039;.  \/`     |;;;;;|&lt;br /&gt;
       |;;;;;|       |_/ //  \\   //  \\ \_|       |;;;;;|&lt;br /&gt;
       |;;;;;|       |/ |/    || ||    \| \|       |;;;;;|&lt;br /&gt;
        \;;;;|    __ || _  .-.\| |/.-.  _ || __    |;;;;/&lt;br /&gt;
         \jgs|   / _\|/ = /_o_\   /_o_\ = \|/_ \   |;;;/&lt;br /&gt;
          \;;/   |`.-     `   `   `   `     -.`|   \;;/&lt;br /&gt;
         _|;&#039;    \ |    _     _   _     _    | /    &#039;;|_&lt;br /&gt;
        / .\      \\_  ( &#039;--&#039;(     )&#039;--&#039; )  _//      /. \&lt;br /&gt;
        \/_/       \_/|  /_   |   |   _\  |\_/       \_\/&lt;br /&gt;
                      | /|\\  \   /  //|\ |&lt;br /&gt;
                      |  | \&#039;._&#039;-&#039;_.&#039;/ |  |&lt;br /&gt;
                      |  ;  &#039;-.```.-&#039;  ;  |&lt;br /&gt;
                      |   \    ```    /   |&lt;br /&gt;
    __                ;    &#039;.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-.&#039;    ;                __&lt;br /&gt;
   /\ \_         __..--\     `-----&#039;     /--..__         _/ /\&lt;br /&gt;
   \_&#039;/\`&#039;&#039;---&#039;&#039;`..;;;;.&#039;.__,       ,__.&#039;,;;;;..`&#039;&#039;---&#039;&#039;`/\&#039;_/&lt;br /&gt;
        &#039;-.__&#039;&#039;;;;;;;;;;;;,,&#039;._   _.&#039;,,;;;;;;;;;;;&#039;&#039;__.-&#039;&lt;br /&gt;
             ``&#039;&#039;--; ;;;;;;;;..`&amp;quot;`..;;;;;;;; ;--&#039;&#039;``   _&lt;br /&gt;
        .-.       /,;;;;;;;&#039;;;;;;;;;;&#039;;;;;;;;,\    _.-&#039; `\&lt;br /&gt;
      .&#039;  /_     /,;;;;;;&#039;/| ;;;;;;; |\&#039;;;;;;;,\  `\     &#039;-&#039;|&lt;br /&gt;
     /      )   /,;;;;;&#039;,&#039; | ;;;;;;; | &#039;,&#039;;;;;;,\   \   .&#039;-./&lt;br /&gt;
     `&#039;-..-&#039;   /,;;;;&#039;,&#039;   | ;;;;;;; |   &#039;,&#039;;;;;,\   `&amp;quot;`&lt;br /&gt;
              | ;;;&#039;,&#039;     | ;;;;;;; |  ,  &#039;, ;;;&#039;|&lt;br /&gt;
             _\__.-&#039;  .-.  ; ;;;;;;; ;  |&#039;-. &#039;-.__/_&lt;br /&gt;
            / .\     (   )  \&#039;;;;;;&#039;/   |   |    /. \&lt;br /&gt;
            \/_/   (`     `) \&#039;;;;&#039;/    &#039;-._|    \_\/&lt;br /&gt;
                    &#039;-/ \-&#039;   &#039;._.&#039;         `&lt;br /&gt;
                      &amp;quot;&amp;quot;&amp;quot;      /.`\&lt;br /&gt;
                               \|_/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                      .-c.&lt;br /&gt;
                          _ ..,   _  (  &amp;quot;)\&lt;br /&gt;
                         [&#039;&amp;quot; 6&#039;-&#039;&amp;lt;/   &#039;-/ |&lt;br /&gt;
                          ;  ( -=;     /  |&lt;br /&gt;
                          |   \-`   _./   |&lt;br /&gt;
                          )    `&#039;--&#039;     (&lt;br /&gt;
                         /     ..    .-&amp;quot;`&lt;br /&gt;
                     ,-&amp;quot;&#039;    .&#039;  &#039;. /&lt;br /&gt;
            __      /    _.- :     Y&lt;br /&gt;
          .&#039;,-7    ) .-&#039; )  .&#039;     ;&lt;br /&gt;
          [ )&#039;}   &amp;lt; /    |  :      |&lt;br /&gt;
          _&amp;quot;.(.   ( \,   | :        \&lt;br /&gt;
        .&#039;-.  .\.,=&#039;-&#039;  / :         |&lt;br /&gt;
      =;   |  |-&#039;      /  :         |&lt;br /&gt;
          _/--\        |  :         |&lt;br /&gt;
         /_7-&#039;&amp;lt;\       \   :       .(&lt;br /&gt;
      ,L /    |/        \   &#039;.   .&#039;  \&lt;br /&gt;
       &#039;/     /          \    :-;    /&lt;br /&gt;
              \&amp;gt;        __\  /   \  /_&lt;br /&gt;
                       `----&#039;     &#039;-._\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .&lt;br /&gt;
                            / \&lt;br /&gt;
                           _\ /_&lt;br /&gt;
                 .     .  (,&#039;v`.)  .     .&lt;br /&gt;
                 \)   ( )  ,&#039; `.  ( )   (/&lt;br /&gt;
                  \`. / `-&#039;     `-&#039; \ ,&#039;/&lt;br /&gt;
                   : &#039;    _______    &#039; :&lt;br /&gt;
                   |  _,-&#039;  ,-.  `-._  |&lt;br /&gt;
                   |,&#039; ( )__`-&#039;__( ) `.|&lt;br /&gt;
                   (|,-,&#039;-._   _.-`.-.|)&lt;br /&gt;
                   /  /&amp;lt;( o)&amp;gt; &amp;lt;( o)&amp;gt;\  \&lt;br /&gt;
                   :  :     | |     :  :&lt;br /&gt;
                   |  |     ; :     |  |&lt;br /&gt;
                   |  |    (.-.)    |  |&lt;br /&gt;
                   |  |  ,&#039; ___ `.  |  |&lt;br /&gt;
                   ;  |)/ ,&#039;---&#039;. \(|  :&lt;br /&gt;
               _,-/   |/\(       )/\|   \-._&lt;br /&gt;
         _..--&#039;.-(    |   `-&#039;&#039;&#039;-&#039;   |    )-.`--.._&lt;br /&gt;
                  `.  ;`._________,&#039;:  ,&#039;&lt;br /&gt;
                 ,&#039; `/               \&#039;`.&lt;br /&gt;
                      `------.------&#039;&lt;br /&gt;
                             &#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                                o .,&amp;lt;&amp;gt;., o&lt;br /&gt;
                                                                |\/\/\/\/|&lt;br /&gt;
                                                                &#039;========&#039;&lt;br /&gt;
                                                                (_ SSSSSSs&lt;br /&gt;
                                                                )a&#039;`SSSSSs&lt;br /&gt;
                                                               /_   SSSSSS&lt;br /&gt;
                                                               .=## SSSSS&lt;br /&gt;
                                                               .####  SSSSs&lt;br /&gt;
                                                               ###::::SSSSS&lt;br /&gt;
                                                              .;:::&amp;quot;&amp;quot;&amp;quot;&amp;quot;SSS&lt;br /&gt;
                                                             .:;:&#039;  . .  \\&lt;br /&gt;
                                                            .::/  &#039;     .&#039;|&lt;br /&gt;
                                                           .::( .         |&lt;br /&gt;
                                                           :::)           \&lt;br /&gt;
                                                           /\(            /&lt;br /&gt;
                                                          /)            ( |&lt;br /&gt;
                                                        .&#039;  \  .       ./ /&lt;br /&gt;
                                                     _-&#039;    |\  .        |&lt;br /&gt;
                                   _..--..   .  /&amp;quot;---\      | ` |      . |&lt;br /&gt;
           -=====================,&#039; _     \=(*#(7.#####()   |  `/_..   , (&lt;br /&gt;
                       _.-&#039;&#039;``&#039;;&#039;-&#039;&#039;-) ,.  \ &#039;  &#039;+/// |   .&#039;/   \  ``-.) \&lt;br /&gt;
                     ,&#039;  _.-  ((    `-&#039;  `._\    `` \_/_.&#039;  )    /`-._  ) |&lt;br /&gt;
                   ,&#039;\ ,&#039;  _.&#039;.`:-.    \.-&#039;                 /   &amp;lt;_L   )&amp;quot;  |&lt;br /&gt;
                 _/   `._,&#039; ,&#039;)`;  `-&#039;`&#039;                    |     L  /    /&lt;br /&gt;
                / `.   ,&#039; ,|_/ / \                          (    &amp;lt;_-&#039;     \&lt;br /&gt;
                \ / `./  &#039;  / /,&#039; \                        /|`         `. |&lt;br /&gt;
                )\   /`._   ,&#039;`._.-\                       |)            \&#039;&lt;br /&gt;
               /  `.&#039;    )-&#039;.-,&#039; )__)                      |\            `|&lt;br /&gt;
              : /`. `.._(--.`&#039;:`&#039;:/ \                      ) \             \&lt;br /&gt;
              |::::\     ,&#039;/::;-))  /                      ( )`.            |&lt;br /&gt;
              ||:::::  . .::&#039;:  :`-(                       |/    .          |&lt;br /&gt;
              ||::::|  . :|  |==[]=:                       .        -       \&lt;br /&gt;
              |||:::|  : ||  :  |  |                      /\           `     |&lt;br /&gt;
  ___ ___     &#039;|;:::|  | |&#039;   \=[]=|                     /  \                \&lt;br /&gt;
 |   /_  ||``|||:::::  | ;    | |  |                     \_.&#039;\_               `-.&lt;br /&gt;
 :   \_``[]--[]|::::&#039;\_;&#039;     )-&#039;..`._                 .-&#039;\``:: ` .              \&lt;br /&gt;
  \___.&amp;gt;`&#039;&#039;-.||:.__,&#039;         |_______`&amp;gt;              &amp;lt;_____:::.         . . \  _/&lt;br /&gt;
                                                            `+a:f:......jrei&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         .```.   _.&#039;&#039;..&lt;br /&gt;
        ;     ```      ``&#039;.&lt;br /&gt;
        :  d               `.&lt;br /&gt;
        / &amp;gt;,:                \&lt;br /&gt;
       /.&#039;   `&#039;.,             :&lt;br /&gt;
      /&#039;         ;.   .       ;&lt;br /&gt;
     /          ;  \ ;     ; /&lt;br /&gt;
                `..;\:     :&#039;&lt;br /&gt;
               __||   `...,&#039;&lt;br /&gt;
              `-,  )   ||&lt;br /&gt;
               /.^/ ___||&lt;br /&gt;
                   &#039;---,_\&lt;br /&gt;
                      (/ `\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                    .oo.&lt;br /&gt;
                       .\.                                            ..&lt;br /&gt;
                     ,&#039;..&#039;&#039;\                                  ...oooo&#039;&#039;&lt;br /&gt;
                     |  \_/&#039;                          ...oooo&#039;&#039;&#039;&lt;br /&gt;
                     /&#039;&#039;.&#039;\               .   ...oooo&#039;&#039;&#039;&lt;br /&gt;
                    |  | &#039;|           ...o!oo&#039;&#039;&#039;&lt;br /&gt;
                    |  |  |.  ...oooo&#039;&#039;./    &#039;\&lt;br /&gt;
                    |  &#039;\, &#039;&#039;&#039;&#039;\     ./    ./\ &#039;\.&lt;br /&gt;
                  /\ooo&#039;&#039;|&#039;&#039;&#039;&#039;-/ -../    / \&#039;&#039;   &#039;\.&lt;br /&gt;
                 /  &#039;\.  &#039;|.&#039;&#039;\--/-+-+-+-+-+-+-+-+.&#039;&lt;br /&gt;
           ....- \.    \.  &#039;\-&#039;/&#039;,,   /&#039;---/&#039; &#039;&#039;&#039;&lt;br /&gt;
        ././     &#039;&#039;\.-.-.\   &#039;\|   &#039;&#039;,,\--;&lt;br /&gt;
       /-/|             |-&#039;\.  &#039;&amp;gt;       &#039;\\&lt;br /&gt;
      !--!|            /---/&#039; ./&#039;          |&lt;br /&gt;
      !--!!          ./---/&#039; ,/|           |&lt;br /&gt;
    ./&#039;-/&#039;|          |----\  \-|           |&lt;br /&gt;
  ./&#039;--/  |..........|&#039;&#039;&#039;&#039;&#039;&#039;./&#039;|...........|&lt;br /&gt;
 -&#039;-&#039;-&#039;   &#039;/---/\---|&#039;          &#039;/-\--\&#039;&#039;&#039;&#039;&lt;br /&gt;
          /--/&#039;  |--\          ./---\--\&lt;br /&gt;
         |--|     \--\.       ./--/&#039; \--\&lt;br /&gt;
         |--|      |--|     ./--/&#039;    \--\.&lt;br /&gt;
         &#039;\-|      &#039;\-|    /--/&#039;       \--|&lt;br /&gt;
          |..\      |..\  |..\          |..\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                             .I.&lt;br /&gt;
                            / : \&lt;br /&gt;
                            |===|&lt;br /&gt;
                            &amp;gt;._.&amp;lt;&lt;br /&gt;
                        .=-&amp;lt;     &amp;gt;-=.&lt;br /&gt;
                       /.&#039;`(`-+-&#039;)&#039;`.\&lt;br /&gt;
                     _/`.__/  :  \__.&#039;\_&lt;br /&gt;
                    ( `._/\`. : .&#039;/\_.&#039; )&lt;br /&gt;
                     &amp;gt;-(_) \ `:&#039; / (_)-&amp;lt;&lt;br /&gt;
                     | |  / \___/ \  | |&lt;br /&gt;
                     )^( | .&#039; : `. | )^(&lt;br /&gt;
                    |  _\|`-._:_.-&#039;| \  |&lt;br /&gt;
                    &amp;quot;-&amp;lt;\)| :  |  : |  &amp;quot;-&amp;quot;&lt;br /&gt;
                      (\\| : / \ : |&lt;br /&gt;
                        \\-:-| |-:-&#039;)&lt;br /&gt;
                         \\:_/ \_:_/&lt;br /&gt;
                         |\\_| |_:_|&lt;br /&gt;
                         (;\\/ \__;)&lt;br /&gt;
                         |: \\  | :|&lt;br /&gt;
                         \: /\\ \ :/&lt;br /&gt;
                         |==| \\|==|&lt;br /&gt;
                        /v-&#039;(  \\`-v\&lt;br /&gt;
                       // .-&#039;   \\. \\&lt;br /&gt;
                       `-&#039;       \\`-&#039;&lt;br /&gt;
                                  \|&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  ,-&#039;&#039;&#039;&#039;-.&lt;br /&gt;
 (.  ,.   L        ___...__&lt;br /&gt;
 /7} ,-`  `&#039;-==&#039;&#039;``        &#039;&#039;._&lt;br /&gt;
//{                           &#039;`.&lt;br /&gt;
\_,X ,                         : )&lt;br /&gt;
    7                          ;`&lt;br /&gt;
    :                  ,       /&lt;br /&gt;
     \_,                \     ;&lt;br /&gt;
       Y   L_    __..--&#039;:`.    L&lt;br /&gt;
       |  /| ````       ;  y  J&lt;br /&gt;
       [ j J            / / L ;&lt;br /&gt;
       | |Y \          /_J  | |&lt;br /&gt;
       L_J/_)         /_)   L_J&lt;br /&gt;
      /_)                  /_)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   .-----------------------===------------------------.&lt;br /&gt;
  :o  ______________________________________________  o:&lt;br /&gt;
  ;   :                                            :   ;&lt;br /&gt;
  `.  `.                                          .&#039;  .&#039;&lt;br /&gt;
   :   :                                          :   :&lt;br /&gt;
   `.  `.                                        .&#039;  .&#039;&lt;br /&gt;
    :   :                                        :   :&lt;br /&gt;
    `.  `.                                      .&#039;  .&#039;&lt;br /&gt;
     :   :                                      :   :&lt;br /&gt;
     `.  `.                                    .&#039;  .&#039;&lt;br /&gt;
      :   :                                    :   :&lt;br /&gt;
      `.  `.                                  .&#039;  .&#039;&lt;br /&gt;
       :   :__________________________________:   :&lt;br /&gt;
       `.                                        .&#039;&lt;br /&gt;
        &#039;-------------|  |-----|  |--------------&#039;&lt;br /&gt;
       .&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;|  |&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;.&lt;br /&gt;
       |  ()          &#039;-----------&#039;      o   ()  |&lt;br /&gt;
       |   ___________________________________   |&lt;br /&gt;
       |  :__|__|__|__|__|__|__|__|__|__|__|__:  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|__|_|  |&lt;br /&gt;
       |  |__|_|__|__|__|__|__|__|__|__|__|___|  |&lt;br /&gt;
       |  |___|__|__|__|__|__|__|__|__|__|____|  |&lt;br /&gt;
       |  |____|__|__|__|__|__|__|___|__|__|__|  |&lt;br /&gt;
       |  :___|__|___________________|__|__|__:  |&lt;br /&gt;
       |                                         |&lt;br /&gt;
       |             .-------------.             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |_____________|             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             |             |             |&lt;br /&gt;
       |             &#039;.___________.&#039;             |&lt;br /&gt;
       |                   ___                   |&lt;br /&gt;
       &#039;-----------------------------------------&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  ---.      .---&lt;br /&gt;
                      &#039;.  .&#039;&lt;br /&gt;
                       &#039;.&#039;&lt;br /&gt;
                       /&lt;br /&gt;
                      /&lt;br /&gt;
                     /&lt;br /&gt;
                    /&lt;br /&gt;
                   /&lt;br /&gt;
                  /&lt;br /&gt;
                 /&lt;br /&gt;
                /&lt;br /&gt;
              .&#039;.&lt;br /&gt;
            .&#039;   \&lt;br /&gt;
          .&#039;     |&lt;br /&gt;
        .&#039;       \&lt;br /&gt;
   ..--/_________|.--.&lt;br /&gt;
  // &#039;----------&#039;//  \\&lt;br /&gt;
  ||&#039;=:=&#039;=:=&#039;=:=&#039;||()||&lt;br /&gt;
  \\_&#039;--&#039;&#039;--&#039;&#039;--&#039;\\__//&lt;br /&gt;
   `--&#039;           `--`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                  .    |    ,&lt;br /&gt;
                   \ _---_ /&lt;br /&gt;
                -_ .&#039;     `. _-&lt;br /&gt;
               __ :  .---.  : __&lt;br /&gt;
                  :  \   /  :&lt;br /&gt;
                -&amp;quot; `. | | .&#039; &amp;quot;-&lt;br /&gt;
                   / |`-&#039;| \&lt;br /&gt;
                  &#039;  ]&amp;quot;-_[  `&lt;br /&gt;
                     ]&amp;quot;-_[&lt;br /&gt;
                      &amp;quot;*&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,.&lt;br /&gt;
                    ,_&amp;gt; `.   ,&#039;;&lt;br /&gt;
                ,-`&#039;      `&#039;   &#039;`&#039;._&lt;br /&gt;
             ,,-) ---._   |   .---&#039;&#039;`-),.&lt;br /&gt;
           ,&#039;      `.  \  ;  /   _,&#039;     `,&lt;br /&gt;
        ,--&#039; ____       \   &#039;  ,&#039;    ___  `-,&lt;br /&gt;
       _&amp;gt;   /--. `-.              .-&#039;.--\   \__&lt;br /&gt;
      &#039;-,  (    `.  `.,`~ \~&#039;-. ,&#039; ,&#039;    )    _\&lt;br /&gt;
      _&amp;gt;    \     \ ,&#039;  &#039;) )   `. /     /    &amp;lt;,.&lt;br /&gt;
   ,-&#039;   _,  \    ,&#039;    ( /      `.    /        `-,&lt;br /&gt;
   `-.,-&#039;     `.,&#039;       `         `.,&#039;  `\    ,-&#039;&lt;br /&gt;
    ,&#039;       _  /   ,,,      ,,,     \     `-. `-._&lt;br /&gt;
   /-,     ,&#039;  ;   &#039; _ \    / _ `     ; `.     `(`-\&lt;br /&gt;
    /-,        ;    (o)      (o)      ;          `&#039;`,&lt;br /&gt;
  ,~-&#039;  ,-&#039;    \     &#039;        `      /     \      &amp;lt;_&lt;br /&gt;
  /-. ,&#039;        \                   /       \     ,-&#039;&lt;br /&gt;
    &#039;`,     ,&#039;   `-/             \-&#039; `.      `-. &amp;lt;&lt;br /&gt;
     /_    /      /   (_     _)   \    \          `,&lt;br /&gt;
       `-._;  ,&#039; |  .::.`-.-&#039; :..  |       `-.    _\&lt;br /&gt;
         _/       \  `:: ,^. :.:&#039; / `.        \,-&#039;&lt;br /&gt;
       &#039;`.   ,-&#039;  /`-..-&#039;-.-`-..-&#039;\            `-.&lt;br /&gt;
         &amp;gt;_ /     ;  (\/( &#039; )\/)  ;     `-.    _&amp;lt;&lt;br /&gt;
         ,-&#039;      `.  \`-^^^-&#039;/  ,&#039;        \ _&amp;lt;&lt;br /&gt;
          `-,  ,&#039;   `. `&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&#039; ,&#039;   `-.   &amp;lt;`&#039;&lt;br /&gt;
            &#039;)        `._.,,_.&#039;        \ ,-&#039;&lt;br /&gt;
             &#039;._        &#039;`&#039;`&#039;   \       &amp;lt;&lt;br /&gt;
                &amp;gt;   ,&#039;       ,   `-.   &amp;lt;`&#039;&lt;br /&gt;
                 `,/          \      ,-`&lt;br /&gt;
                  `,   ,&#039; |   /     /&lt;br /&gt;
                   &#039;; /   ;        (&lt;br /&gt;
                    _)|   `       (&lt;br /&gt;
                    `&#039;)         .-&#039;&lt;br /&gt;
                      &amp;lt;_   \   /&lt;br /&gt;
                        \   /\(&lt;br /&gt;
                         `;/  `&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                        __,,,__&lt;br /&gt;
                ,-&amp;quot;&amp;quot;-,-&amp;quot;       &amp;quot;-,-&amp;quot;&amp;quot;-,&lt;br /&gt;
               /,-&#039; , .-&#039;-.7.-&#039;-. , &#039;-,\&lt;br /&gt;
               \(    /  _     _  \    )/&lt;br /&gt;
                &#039;-,  { (0)   (0) }  ,-&#039;&lt;br /&gt;
                 /    &amp;gt;  .---.  &amp;lt;    \&lt;br /&gt;
                |/ .-&#039;   \___/   &#039;-. \|&lt;br /&gt;
                {, /  ,_       _,  \ ,}&lt;br /&gt;
                \ {,    \     /    ,} /&lt;br /&gt;
                 &#039;,\.    &#039;---&#039;    ./,&#039;&lt;br /&gt;
             _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._     _.-&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;&amp;quot;-._&lt;br /&gt;
           .&#039;            `._.`            &#039;.&lt;br /&gt;
         _/_               _                \&lt;br /&gt;
      .&#039;`   `\            | |                \&lt;br /&gt;
     /        |           | |                 ;&lt;br /&gt;
     |        /           |_|                 |&lt;br /&gt;
     \  ;&#039;---&#039;    _    ___  _  _  ___         ;&lt;br /&gt;
      &#039;. ;       | |  /   \| || ||  _|     _ ;&lt;br /&gt;
        `-\      | |_ | | || |/ /|  _|   .&#039; `,&lt;br /&gt;
           `\    |___|\___/ \__/ |___|  |     \&lt;br /&gt;
             \            _ _           \     |&lt;br /&gt;
              `\         | | |         /`   _/&lt;br /&gt;
    ,-&amp;quot;&amp;quot;-.    .&#039;`\       | | |       /`-,-&#039;` .-&amp;quot;&amp;quot;-,&lt;br /&gt;
   /      `\.&#039;    `\     \___/     /`    &#039;./`      \&lt;br /&gt;
  ;  .--.   \       &#039;\           /&#039;       /   .--.  ;&lt;br /&gt;
  | (    \   |,       &#039;\       /&#039;        |   /    ) |&lt;br /&gt;
   \ ;    }             ;\   /;         `   {    ; /&lt;br /&gt;
    `;\   \         _.-&#039;  \ /  `-._         /   /;`&lt;br /&gt;
      \ \__.&#039;   _.-&#039;       Y       `-._    &#039;.__//&lt;br /&gt;
       &#039;.___,.-&#039;                       `-.,___.&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     ,  ,&lt;br /&gt;
    (\ &amp;quot;\&lt;br /&gt;
    ,--;.)._&lt;br /&gt;
   ).,-._ . &amp;quot;&amp;quot;-,_&lt;br /&gt;
  /.&#039;&amp;quot;.- &amp;quot; 8 o . &amp;quot;;_                             &lt;br /&gt;
  `L_ ,-)) o . 8.o .&amp;quot;&amp;quot;-.---...,,--------.._   _&amp;quot;&amp;quot;;&lt;br /&gt;
   &amp;quot;&amp;quot;&amp;quot;  &amp;quot;)) 8 . . 8 . 8   8  8  8  8. 8 8 ._&amp;quot;&amp;quot;._;&lt;br /&gt;
         &amp;quot;;. .8 .8  .8  8  8  8  8 . 8. 8 .&amp;quot;.&amp;quot;&amp;quot;&lt;br /&gt;
            ;.. 8 ; .  8. 8  8  8 . } 8 . 8 :&lt;br /&gt;
             ;.. 8 ; 8. 8  8  8  8 (  . 8 . :&lt;br /&gt;
               ;. 8 \ .   .......;;;  8 . 8 :&lt;br /&gt;
                ;o  ;&amp;quot;\\\\```````( o(  8   .;&lt;br /&gt;
                : o:  ;           :. : . 8 (&lt;br /&gt;
                :o ; ;             &amp;quot;; &amp;quot;;. o :&lt;br /&gt;
                ; o; ;               &amp;quot;; ;&amp;quot;;..\&lt;br /&gt;
                ;.; .:                )./  ;. ;&lt;br /&gt;
               _).&amp;lt; .;              _;./  _;./&lt;br /&gt;
             ;&amp;quot;__/--&amp;quot;             ((__7  ((_J&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
              o&lt;br /&gt;
                   O       /`-.__&lt;br /&gt;
                          /  \ &#039;^|&lt;br /&gt;
             o           T    l  *&lt;br /&gt;
                        _|-..-|_&lt;br /&gt;
                 O    (^ &#039;----&#039; `)&lt;br /&gt;
                       `\-....-/^&lt;br /&gt;
             O       o  ) &amp;quot;/ &amp;quot; (&lt;br /&gt;
                       _( (-)  )_&lt;br /&gt;
                   O  /\ )    (  /\&lt;br /&gt;
                     /  \(    ) |  \&lt;br /&gt;
                 o  o    \)  ( /    \&lt;br /&gt;
                   /     |(  )|      \&lt;br /&gt;
                  /    o \ \( /       \&lt;br /&gt;
            __.--&#039;   O    \_ /   .._   \&lt;br /&gt;
           //|)\      ,   (_)   /(((\^)&#039;\&lt;br /&gt;
              |       | O         )  `  |&lt;br /&gt;
              |      / o___      /      /&lt;br /&gt;
             /  _.-&#039;&#039;^^__O_^^&#039;&#039;-._     /&lt;br /&gt;
           .&#039;  /  -&#039;&#039;^^    ^^&#039;&#039;-  \--&#039;^&lt;br /&gt;
         .&#039;   .`.  `&#039;&#039;&#039;----&#039;&#039;&#039;^  .`. \&lt;br /&gt;
       .&#039;    /   `&#039;--..____..--&#039;^   \ \&lt;br /&gt;
      /  _.-/                        \ \&lt;br /&gt;
  .::&#039;_/^   |                        |  `.&lt;br /&gt;
         .-&#039;|                        |    `-.&lt;br /&gt;
   _.--&#039;`   \                        /       `-.&lt;br /&gt;
  /          \                      /           `-._&lt;br /&gt;
  `&#039;---..__   `.                  .´_.._   __       \&lt;br /&gt;
           ``&#039;&#039;&#039;`.              .&#039;      `&#039;^  `&#039;&#039;---&#039;^&lt;br /&gt;
                  `-..______..-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                      ,&#039;&#039;&#039;&#039;&#039;-._&lt;br /&gt;
                     ;  ,.  &amp;lt;&amp;gt; `-._ &lt;br /&gt;
                     ;  \&#039;   _,--&#039;&amp;quot;&lt;br /&gt;
                    ;      (&lt;br /&gt;
                    ; ,   ` \&lt;br /&gt;
                    ;, ,     \&lt;br /&gt;
                   ;    |    |&lt;br /&gt;
                   ; |, |    |\&lt;br /&gt;
                  ;  |  |    | \&lt;br /&gt;
                  |.-\ ,\    |\ :&lt;br /&gt;
                  |.- `. `-. | ||&lt;br /&gt;
                  :.-   `-. \ &#039;;;&lt;br /&gt;
                   .- ,   \;;|&lt;br /&gt;
                   ;   ,  |  ,\&lt;br /&gt;
                   ; ,    ;    \&lt;br /&gt;
                  ;    , /`.  , )&lt;br /&gt;
               __,;,   ,&#039;   \  ,|&lt;br /&gt;
         _,--&#039;&#039;__,|   /      \  :&lt;br /&gt;
       ,&#039;_,-&#039;&#039;    | ,/        | :&lt;br /&gt;
      / /         | ;         ; |&lt;br /&gt;
     | |      __,-| |--..__,--| |---.--....___&lt;br /&gt;
___,-| |----&#039;&#039;    / |         `._`-.          `----&lt;br /&gt;
      \ \        `&amp;quot;&amp;quot;&amp;quot;             &amp;quot;&amp;quot;&amp;quot;      --&lt;br /&gt;
       `.`.                 --&#039;&lt;br /&gt;
         `.`-._        _,             ,-     __,-&lt;br /&gt;
            `-.`.&lt;br /&gt;
   --&#039;         `;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                ,-.&lt;br /&gt;
                               (&amp;quot;O_)&lt;br /&gt;
                              / `-/&lt;br /&gt;
                             /-. /&lt;br /&gt;
                            /   )&lt;br /&gt;
                           /   /  &lt;br /&gt;
              _           /-. /&lt;br /&gt;
             (_)&amp;quot;-._     /   )&lt;br /&gt;
               &amp;quot;-._ &amp;quot;-&#039;&amp;quot;&amp;quot;( )/    &lt;br /&gt;
                   &amp;quot;-/&amp;quot;-._&amp;quot; `. &lt;br /&gt;
                    /     &amp;quot;-.&#039;._&lt;br /&gt;
                   /\       /-._&amp;quot;-._&lt;br /&gt;
    _,---...__    /  ) _,-&amp;quot;/    &amp;quot;-(_)&lt;br /&gt;
___&amp;lt;__(|) _   &amp;quot;&amp;quot;-/  / /   /&lt;br /&gt;
 &#039;  `----&#039; &amp;quot;&amp;quot;-.   \/ /   /&lt;br /&gt;
               )  ] /   /&lt;br /&gt;
       ____..-&#039;   //   /                       )&lt;br /&gt;
   ,-&amp;quot;&amp;quot;      __.,&#039;/   /   ___                 /,&lt;br /&gt;
  /    ,--&amp;quot;&amp;quot;/  / /   /,-&amp;quot;&amp;quot;   &amp;quot;&amp;quot;&amp;quot;-.          ,&#039;/&lt;br /&gt;
 [    (    /  / /   /  ,.---,_   `._   _,-&#039;,&#039;&lt;br /&gt;
  \    `-./  / /   /  /       `-._  &amp;quot;&amp;quot;&amp;quot; ,-&#039;&lt;br /&gt;
   `-._  /  / /   /_,&#039;            &amp;quot;&amp;quot;--&amp;quot;&lt;br /&gt;
       &amp;quot;/  / /   /&amp;quot;         &lt;br /&gt;
       /  / /   /&lt;br /&gt;
      /  / /   /&lt;br /&gt;
     /  |,&#039;   /  &lt;br /&gt;
    :   /    /&lt;br /&gt;
    [  /   ,&#039;&lt;br /&gt;
    | /  ,&#039;&lt;br /&gt;
    |/,-&#039;&lt;br /&gt;
    P&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
               .=.,&lt;br /&gt;
              ;c =\&lt;br /&gt;
            __|  _/&lt;br /&gt;
          .&#039;-&#039;-._/-&#039;-._&lt;br /&gt;
         /..   ____    \&lt;br /&gt;
        /&#039; _  [&amp;lt;_-&amp;gt;] )  \&lt;br /&gt;
       (  / \--\_&amp;gt;/-/&#039;._ )&lt;br /&gt;
        \-;_/\__;__/ _/ _/&lt;br /&gt;
         &#039;._}|==o==\{_\/&lt;br /&gt;
          /  /-._.--\  \_&lt;br /&gt;
         // /   /|   \ \ \&lt;br /&gt;
        / | |   | \;  |  \ \&lt;br /&gt;
       / /  | :/   \: \   \_\&lt;br /&gt;
      /  |  /.&#039;|   /: |    \ \&lt;br /&gt;
      |  |  |--| . |--|     \_\&lt;br /&gt;
      / _/   \ | : | /___--._) \&lt;br /&gt;
     |_(---&#039;-| &amp;gt;-&#039;-| |       &#039;-&#039;&lt;br /&gt;
            /_/     \_\&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                                                   ,                       &lt;br /&gt;
                                                   ;\                      &lt;br /&gt;
                                                   : &amp;quot;-.                   &lt;br /&gt;
                                                   :    &amp;quot;&amp;quot;--._             &lt;br /&gt;
                                                   ;          &amp;quot;-._         &lt;br /&gt;
                                                   :              &amp;quot;-.      &lt;br /&gt;
                                                    \                `.    &lt;br /&gt;
                                                     `.                `.  &lt;br /&gt;
                                                       &amp;quot;&amp;quot;--._            \ &lt;br /&gt;
                                                             &amp;quot;&amp;quot;--._       ;&lt;br /&gt;
                                                                   `.     :&lt;br /&gt;
                                   .----.                            `.   ;&lt;br /&gt;
                                  /.-J-. \                            ;`. ;&lt;br /&gt;
                                 :/ / \ `-;                           ;  ;:&lt;br /&gt;
                                 ;_/ _.&amp;quot;-+:     ,                     : / ;&lt;br /&gt;
                                 :   -=  =;\    ;\                    ;&#039; / &lt;br /&gt;
                                 ;&amp;quot;\     ,: `--&#039;  ;                 .&#039;  :  &lt;br /&gt;
                                 :  t  -= &#039;&amp;quot;-._  (      ___       .&#039;    ;  &lt;br /&gt;
                                  ; :&amp;quot;-._/`-.   `-&amp;quot;+ .-&amp;quot;   `.__.-&amp;quot;      ;  &lt;br /&gt;
                                .-:  \ :-.____..--:-&amp;quot;                   ;  &lt;br /&gt;
                            __.^-:_j  `;J:\_   _.&#039;                      :  &lt;br /&gt;
                      _.--&amp;quot;&amp;quot; : /    &amp;quot;-,l &amp;quot;-;&amp;quot;&amp;quot;&amp;quot;                          ; &lt;br /&gt;
                _.--&amp;quot;&amp;quot;       :&#039;      -&#039;     `. ___                       ; &lt;br /&gt;
            _.-&amp;quot;.-&amp;quot;        .&#039;    /      :     \   &amp;quot;&amp;quot;&amp;quot;--..__.-&#039;          :  &lt;br /&gt;
           /  .&#039;     _.-&amp;quot; /     :       ; .   :\                        ;  &lt;br /&gt;
          / .&#039;    .-&amp;quot;     j     :      /  /\    \                      /   &lt;br /&gt;
         / /    .&#039;       / t--&#039;  `....&#039;  /  \    \                    /    &lt;br /&gt;
        / :    /        /  :   :        /    `.   &amp;quot;-.                :     &lt;br /&gt;
       :  ;   /        /    ;/ ; `.    / :     `.    `.              ;     &lt;br /&gt;
        \ :  /        :   :/:  ;   ;  :   \      \     \           .&#039;      &lt;br /&gt;
         ;.\/         :   j :  :   :  ;    &amp;quot;-._   `.    `.      .-&amp;quot;        &lt;br /&gt;
         : `.       .-;  /-.;  ;   ;  :`.   .&#039; &amp;quot;-.__j+.   `._.-&amp;quot;           &lt;br /&gt;
         ;`. `.    : :  :   :    .--&amp;quot;&amp;quot; t &amp;quot;-(           `.   \              &lt;br /&gt;
        /   &amp;quot;-.`.   \;  ;   ;`.-&amp;quot; .--&amp;quot;&amp;quot;.^.  `.           `.-&amp;quot;\             &lt;br /&gt;
       :\        `. :__:   :`. .-T__.-&amp;quot;.-:    \           : _ &amp;quot;-._         &lt;br /&gt;
       ; `.   `.   \;  `\  :  Y-&amp;quot;  _.-&amp;quot;   \    ;          ;: &amp;quot;-._/         &lt;br /&gt;
       :   &amp;quot;-.  `.  \  : ; ; /   .&#039;/       ;   :          :;   U           &lt;br /&gt;
        &amp;quot;-._      `. \ ;j:/ :   / :        :   ;                           &lt;br /&gt;
          / &amp;quot;&amp;quot;--..__`-&amp;quot;&amp;quot;+:-+.\    ;        ;  /                            &lt;br /&gt;
      ,--^-...__    _.-&amp;quot;; `|  &amp;quot;--:        : .&#039;                             &lt;br /&gt;
      ;  _.     _.-&amp;quot;    :  ;     |        ;&amp;quot;                               &lt;br /&gt;
     :.-&amp;quot;.-&amp;quot;_.-&amp;quot;        ;  ;     ;       /                                 &lt;br /&gt;
     J.-&amp;quot;.-&amp;quot; .--&amp;quot;-.  .-&amp;quot;   |    :       /                                  &lt;br /&gt;
   .-&amp;quot;.-&amp;quot;   :      &amp;quot;&amp;quot;      :    |      /                                   &lt;br /&gt;
   : /      :               ;   ;     /                                    &lt;br /&gt;
   ;:   _..-&#039;               |  :     /                                     &lt;br /&gt;
  : ;   \                   :  |    /                                      &lt;br /&gt;
  ; ;    \                   ; ;   :                                       &lt;br /&gt;
 :  ;     ;                  : :    `.                                     &lt;br /&gt;
 ;  :     ;                   ; \ ,   `.                                   &lt;br /&gt;
:    \   /                    :  \;&amp;quot;-.__\                                  &lt;br /&gt;
:     `.:                 /;  ;   \      ;                                 &lt;br /&gt;
 \      &amp;quot;-.              /:   :    \     ;                                 &lt;br /&gt;
  `.       `.           ; ;   :/`.  \    :                                 &lt;br /&gt;
    &amp;quot;-.      `.         ::     ;  `-:\   :                                 &lt;br /&gt;
       &amp;quot;-._    `.     .-&amp;quot;;     |    : \   ;                                &lt;br /&gt;
           &amp;quot;-._  `..-&amp;quot;   :     :    :  \  :__                              &lt;br /&gt;
               &amp;quot;-. `.   .&#039;      ;   |   ;  ) ;                             &lt;br /&gt;
                  &amp;quot;-.J.&#039;        |   |   :    :                             &lt;br /&gt;
                                :   ;    ;   :                             &lt;br /&gt;
                                 ;  ;    :    \                            &lt;br /&gt;
                                 |  :_    ;    ;                           &lt;br /&gt;
                                 : .&#039; \   |   /                            &lt;br /&gt;
                                 ;    /   :_.&#039;                             &lt;br /&gt;
                                 ;   :                                     &lt;br /&gt;
                                 :   ;                                     &lt;br /&gt;
                                  ;  :                                     &lt;br /&gt;
                                  |  ;                                     &lt;br /&gt;
                                  :_/                                      &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
                               /T /I&lt;br /&gt;
                              / |/ | .-~/&lt;br /&gt;
                          T\ Y  I  |/  /  _&lt;br /&gt;
         /T               | \I  |  I  Y.-~/&lt;br /&gt;
        I l   /I       T\ |  |  l  |  T  /&lt;br /&gt;
     T\ |  \ Y l  /T   | \I  l   \ `  l Y&lt;br /&gt;
 __  | \l   \l  \I l __l  l   \   `  _. |&lt;br /&gt;
 \ ~-l  `\   `\  \  \\ ~\  \   `. .-~   |&lt;br /&gt;
  \   ~-. &amp;quot;-.  `  \  ^._ ^. &amp;quot;-.  /  \   |&lt;br /&gt;
.--~-._  ~-  `  _  ~-_.-&amp;quot;-.&amp;quot; ._ /._ .&amp;quot; ./&lt;br /&gt;
 &amp;gt;--.  ~-.   ._  ~&amp;gt;-&amp;quot;    &amp;quot;\\   7   7   ]&lt;br /&gt;
^.___~&amp;quot;--._    ~-{  .-~ .  `\ Y . /    |&lt;br /&gt;
 &amp;lt;__ ~&amp;quot;-.  ~       /_/   \   \I  Y   : |&lt;br /&gt;
   ^-.__           ~(_/   \   &amp;gt;._:   | l______&lt;br /&gt;
       ^--.,___.-~&amp;quot;  /_/   !  `-.~&amp;quot;--l_ /     ~&amp;quot;-.&lt;br /&gt;
              (_/ .  ~(   /&#039;     &amp;quot;~&amp;quot;--,Y   -=b-. _)&lt;br /&gt;
               (_/ .  \  :           / l      c&amp;quot;~o \&lt;br /&gt;
                \ /    `.    .     .^   \_.-~&amp;quot;~--.  )&lt;br /&gt;
                 (_/ .   `  /     /       !       )/&lt;br /&gt;
                  / / _.   &#039;.   .&#039;:      /        &#039;&lt;br /&gt;
                  ~(_/ .   /    _  `  .-&amp;lt;_&lt;br /&gt;
                    /_/ . &#039; .-~&amp;quot; `.  / \  \          ,z=.&lt;br /&gt;
                    ~( /   &#039;  :   | K   &amp;quot;-.~-.______//&lt;br /&gt;
                      &amp;quot;-,.    l   I/ \_    __{---&amp;gt;._(==.&lt;br /&gt;
                       //(     \  &amp;lt;    ~&amp;quot;~&amp;quot;     //&lt;br /&gt;
                      /&#039; /\     \  \     ,v=.  ((&lt;br /&gt;
                    .^. / /\     &amp;quot;  }__ //===-  `&lt;br /&gt;
                   / / &#039; &#039;  &amp;quot;-.,__ {---(==-&lt;br /&gt;
                 .^ &#039;       :  T  ~&amp;quot;   ll       &lt;br /&gt;
                / .  .  . : | :!        \\&lt;br /&gt;
               (_/  /   | | j-&amp;quot;          ~^&lt;br /&gt;
                 ~-&amp;lt;_(_.^-~&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
         ,--._______,-. &lt;br /&gt;
       ,&#039;,&#039;  ,    .  ,_`-. &lt;br /&gt;
      / /  ,&#039; , _` ``. |  )       `-.. &lt;br /&gt;
     (,&#039;;&#039;&amp;quot;&amp;quot;`/ &#039;&amp;quot;`-._ ` \/ ______    \\ &lt;br /&gt;
       : ,o.-`- ,o.  )\` -&#039;      `---.)) &lt;br /&gt;
       : , d8b ^-.   &#039;|   `.      `    `. &lt;br /&gt;
       |/ __:_     `. |  ,  `       `    \ &lt;br /&gt;
       | ( ,-.`-.    ;&#039;  ;   `       :    ; &lt;br /&gt;
       | |  ,   `.      /     ;      :    \ &lt;br /&gt;
       ;-&#039;`:::._,`.__),&#039;             :     ; &lt;br /&gt;
      / ,  `-   `--                  ;     | &lt;br /&gt;
     /  \                   `       ,      | &lt;br /&gt;
    (    `     :              :    ,\      | &lt;br /&gt;
     \   `.    :     :        :  ,&#039;  \    : &lt;br /&gt;
      \    `|-- `     \ ,&#039;    ,-&#039;     :-.-&#039;; &lt;br /&gt;
      :     |`--.______;     |        :    : &lt;br /&gt;
       :    /           |    |         |   \ &lt;br /&gt;
       |    ;           ;    ;        /     ; &lt;br /&gt;
     _/--&#039; |           :`-- /         \_:_:_| &lt;br /&gt;
   ,&#039;,&#039;,&#039;  |           |___ \ &lt;br /&gt;
   `^._,--&#039;           / , , .) &lt;br /&gt;
                      `-._,-&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ekaanbj</name></author>
	</entry>
</feed>