Useful when we need to add cron entry using shell script
cron.sh
crontab -l > /tmp/cron.bak
echo "* * * * * /opt/backup.sh" >> /tmp/cron.bak
crontab /tmp/cron.bak

Useful when we need to add cron entry using shell script
cron.sh
crontab -l > /tmp/cron.bak
echo "* * * * * /opt/backup.sh" >> /tmp/cron.bak
crontab /tmp/cron.bak
Docker
Jenkins
Kubernetes
Terraform
Ansible
General questions
AWS questions
Linux questions
wsl -l
wsl --set-default Ubuntu
wsl --set-default-version 2
wsl -l -v
wsl --set-version Ubuntu 2
create /etc/wsl.conf
[automount]
options = "metadata"
update /etc/kong/kong.conf
smtp_mock=off
smtp_host=email-smtp.eu-west-1.amazonaws.com
smtp_port=465
smtp_username=${KONG_SMTP_USER}
smtp_password=${KONG_SMTP_PASSWORD}
smtp_ssl=on
smtp_domain=example.com
smtp_admin_emails=team1@example.com
admin_emails_from =Team1 <team1@example.com>
portal_invite_email=Team1 <team1@example.com>
portal_access_request_email=Team1 <team1@example.com>
portal_approved_email=on
portal_emails_from=Team1 <team1@example.com>
portal_emails_reply_to=Team1 <team1@example.com>
Note : team1@example.com should verified in AWS and It’s should be below format
Team1 <team1@example.com>
Why?
– Optimize size
– less surface attack
FROM rust:slim-buster AS build
WORKDIR /opt
COPY . .
RUN rustup target add x86_64-unknown-linux-musl
RUN cargo build --target x86_64-unknown-linux-musl --release
FROM alpine:3.15.0
WORKDIR /opt
COPY --from=build /opt/target/x86_64-unknown-linux-musl/release .
EXPOSE 7878
CMD ["/opt/simple-rust-webserver"]
docker build -t rust-web-alpine -f alpine.Dockerfile .
docker run -d -p 7878:7878 rust-web-alpine
[root@lp-test-1 simple-rust-webserver]# docker images | grep rust-web-alpine
rust-web-alpine latest 7dd00663078c 9 minutes ago 9.4MB
main.rs
use std::net::{TcpStream, TcpListener};
use std::io::{Read, Write};
use std::thread;
fn handle_read(mut stream: &TcpStream) {
let mut buf = [0u8 ;4096];
match stream.read(&mut buf) {
Ok(_) => {
let req_str = String::from_utf8_lossy(&buf);
println!("{}", req_str);
},
Err(e) => println!("Unable to read stream: {}", e),
}
}
fn handle_write(mut stream: TcpStream) {
let response = b"HTTP/1.1 200 OK\r\nContent-Type: text/html; charset=UTF-8\r\n\r\n<html><body>hola rust</body></html>\r\n";
match stream.write(response) {
Ok(_) => println!("Response sent"),
Err(e) => println!("Failed sending response: {}", e),
}
}
fn handle_client(stream: TcpStream) {
handle_read(&stream);
handle_write(stream);
}
fn main() {
let listener = TcpListener::bind("0.0.0.0:7878").unwrap();
println!("Listening for connections on port {}", 7878);
for stream in listener.incoming() {
match stream {
Ok(stream) => {
thread::spawn(|| {
handle_client(stream)
});
}
Err(e) => {
println!("Unable to connect: {}", e);
}
}
}
}
More : https://users.rust-lang.org/t/building-executable-for-alpine-linux/13568
import smtplib
email_user = '<aws-ses-user>'
email_password = '<aws-ses-password>'
sent_from = '"test" <test@example.com>' #This should be verified
to = ['test2@example.com']
subject = 'test'
body = 'test'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
try:
smtp_server = smtplib.SMTP_SSL('email-smtp.ap-south-1.amazonaws.com', 465)
smtp_server.ehlo()
smtp_server.login(email_user, email_password)
smtp_server.sendmail(sent_from, to, email_text)
smtp_server.close()
print ("Email sent successfully!")
except Exception as ex:
print ("Something went wrong….",ex)
Issues and error messages:
Manage Jenkins > Configure system > search “E-mail Notification”
gmail smtp server: smtp.gmail.com
port : 587 need TLS
Note: Allow google Less Secure App(should be turned on).
email.Jenkinsfile
pipeline
{
agent { label 'worker1' }
stages{
stage('send-email'){
steps{
script
{
emailext subject: 'Test email subject', body: 'Test email body', to: 'abc@gmail.com'
}
sh "echo hola"
}
}
}
}
openssl req \
-new \
-newkey rsa:4096 \
-days 365 \
-nodes \
-x509 \
-subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
-keyout www.example.com.key \
-out www.example.com.cert
more : https://superuser.com/questions/226192/avoid-password-prompt-for-keys-and-prompts-for-dn-information
version: '3'
services:
opensearch-node1:
image: opensearchproject/opensearch:latest
container_name: opensearch-node1
environment:
- discovery.type=single-node
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
volumes:
- /opt/opensearch:/usr/share/opensearch/data
ports:
- 9200:9200
- 9600:9600
opensearch-dashboards:
image: opensearchproject/opensearch-dashboards:latest
container_name: opensearch-dashboards
ports:
- 5601:5601
expose:
- "5601"
environment:
OPENSEARCH_HOSTS: '["https://opensearch-node1:9200"]'
cat server.crt server.key > server.includesprivatekey.pem
https://stackoverflow.com/questions/991758/how-to-get-pem-file-from-key-and-crt-files