بایگانی دسته: آموزش

k8s

https://kodekloud.com/courses/kubernetes-for-the-absolute-beginners-hands-on/

https://kodekloud.com/wp-content/uploads/2021/10/KubernetesForBeginners-MumshadMannambeth-2.pdf

k8s overview

k8s architecture
Components

When you install Kubernetes on a System, you are actually installing the following
components. An API Server. An ETCD service. A kubelet service. A Container Runtime,
Controllers and Schedulers.
The API server acts as the front-end for kubernetes. The users, management devices,
Command line interfaces all talk to the API server to interact with the kubernetes
cluster.
Next is the ETCD key store. ETCD is a distributed reliable key-value store used by
kubernetes to store all data used to manage the cluster. Think of it this way, when you
have multiple nodes and multiple masters in your cluster, etcd stores all that
information on all the nodes in the cluster in a distributed manner. ETCD is
responsible for implementing locks within the cluster to ensure there are no conflicts
between the Masters.
The scheduler is responsible for distributing work or containers across multiple
nodes. It looks for newly created containers and assigns them to Nodes.
28
The controllers are the brain behind orchestration. They are responsible for noticing
and responding when nodes, containers or endpoints goes down. The controllers
makes decisions to bring up new containers in such cases.
The container runtime is the underlying software that is used to run containers. In our
case it happens to be Docker.
And finally kubelet is the agent that runs on each node in the cluster. The agent is
responsible for making sure that the containers are running on the nodes as
expected

kubectl run hello-minikube
kubectl cluster-info
kubectl get nodes

k8s concepts

pods
kubectl run nginx --image nginx
kubectl get pods
install kubectl

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/#install-kubectl-binary-with-curl-on-linux

https://minikube.sigs.k8s.io/docs/start

 minikube start --driver virtualbox
saeb@acer ~> minikube status
minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured
saeb@acer ~> kubectl get nodes
NAME       STATUS     ROLES           AGE   VERSION
minikube   NotReady   control-plane   22h   v1.28.3
saeb@acer ~> 
kubectl get po -A
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0
kubectl expose deployment hello-minikube --type=NodePort --port=8080
kubectl get services hello-minikube
minikube service hello-minikube

Alternatively, use kubectl to forward the port:

kubectl port-forward service/hello-minikube 7080:8080
demo pods
kubectl run nginx --image=nginx
kubectl get pods
kubectl get pods -o wide
kubectl describe pods nginx
پسندها(0)شاکی(0)

اضافه کردن ادمین به گروهی که ادمینش لفت داده در ماتریک

من لیست اعضا رو میگیرم

curl --location 'https://m.favagostar.ir/_synapse/admin/v1/rooms/!VmURoRTnPcdplqUBbB:m.favagostar.ir/members' \
--header 'Authorization: Bearer syt_c2FlYg_asdasdasdasd1mCKi5'

این قسمت مهم نیست ولی توی قسمت تست پست من یوزر نفر اول رو ذخیره میکنم

pm.environment.set("already_in_group_user",pm.response.json().members[0])

بعد توکن اون یوزر رو میگیرم

curl --location --request POST 'https://m.favagostar.ir/_synapse/admin/v1/users/@mahsa:m.fava-gostar.ir/login' \
--header 'Authorization: Bearer syt_c2FlYg_sadad_1mCKi5' \
--data ''

باز اگه postman دارید توی تست میتونید توکن رو ذخیره کنید

pm.environment.set("token_already_in_group_user",pm.response.json().access_token)

توکن ادمین سابق گروه رو هم میگیرم

curl --location --request POST 'https://m.favagostar.ir/_synapse/admin/v1/users/@kasra:m.favagostar.ir/login' \
--header 'Authorization: Bearer syt_c2FlYg_dfgdfgdfgdgdfg_1mCKi5' \
--data ''

حالا اگه postman هم داریم توکن رو ذخیره میکنیم

pm.environment.set("token_admin_user_who_left_group",pm.response.json().access_token)

حالا ادمین سابق رو باز دعوت میکنیم گروه

curl --location 'https://m.favagostar.ir/_matrix/client/v3/rooms/!VmURoRTnPcdplqUBbB:m.favagostar.ir/invite' \
--header 'Content-Type: text/plain' \
--header 'Authorization: Bearer syt_dddd_sdfsdfsdfsdf_1XsrRs' \
--data-raw '{
    
   "user_id": "@kasra:m.favagostar.ir"

}'

حالا یوزری که میخوایم ادمین جدید گروه بشه رو با توکن ادمین سابق میاریم گروه

curl --location 'https://m.favagostar.ir/_matrix/client/v3/rooms/!VmURoRTnPcdplqUBbB:m.favagostar.ir/invite' \
--header 'Content-Type: text/plain' \
--header 'Authorization: Bearer syt_group_admin_token_1XsrRs' \
--data-raw '{
    "user_id": "@fgostar:m.favagostar.ir"
}'

بعد ادمین جدید رو جوین میکنیم

curl --location --request POST 'https://m.favagostar.ir/_matrix/client/v3/rooms/!VmURoRTnPcdplqUBbB:m.favagostar.ir/join' \
--header 'Authorization: Bearer syt_a2FzcmE_fsfsdfsdfsdf_0GBsmR' \
--data ''

بعد دسترسی ادمین جدید رو ست میکنم

curl --location 'https://m.favagostar.ir/_synapse/admin/v1/rooms/!VmURoRTnPcdplqUBbB:m.favagostar.ir/make_room_admin' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer syt_c2FlYg_dfgdgdfgdfg_1mCKi5' \
--data-raw '{
    "user_id": "@fgostar:m.favagostar.ir"
}'

ادمین قبلی گروه رو ترک کنه

curl --location --request POST 'https://m.fava-gostar.ir/_matrix/client/v3/rooms/!VmURoRTnPcdplqUBbB:m.fava-gostar.ir/leave' \
--header 'Authorization: Bearer syt_asfsfsdfs_0GBsmR' \
--data ''
پسندها(0)شاکی(0)

دانلود ایمیج‌های داکر روی سرور های ایران بدون استفاده از وی پی ان

  • اول یک سرور پروکسی ساکس به هر نحوی که میتونید بیارید بالا. یه ساکس بدون فیلتر مثلا با کامند ssh -D 2080 به یک سرور بدون تحریم وصل شیم
  • آخرین نسخه https://github.com/xjasonlyu/tun2socks/releases رو دانلود کنیم.
  • مشابه توضیحات https://github.com/xjasonlyu/tun2socks/wiki/Examples دستورای زیر رو پیش بریم. eth0 نام کارت شبکه کنونی ما هست. برای شما ممکنه فرق داشته باشه. آدرس 44.205.64.79 آدرس کنونی داکرهاب هست که من curl -v https://index.docker.io زدم و آدرس آی پی رو برداشتم.
ip tuntap add mode tun dev tun0
ip addr add 198.18.0.1/15 dev tun0
ip link set dev tun0 up
ip r add 44.205.64.79 via 198.18.0.1 dev tun0
  • حالا tun2socks رو که از قبل دانلود و آنزیپ کردیم رو اجرا میکنیم. آی پی و پورت مربوط به سرور ساکسمون میشه
tun2socks -device tun0 -proxy socks5://127.0.0.1:2080 -interface eth0
پسندها(1)شاکی(0)

افزایش و کاهش حجم پارتیشن‌های lvm

اشتباه به جای این‌که پارتیشن /var رو صد گیگ کنم، پارتیشن /home رو صدگیگ کردم.

حالا برای درست کردنش اول ssh زدم به سرور

cd /tmp
exec sudo su
lsof /home
kill pid هرچی بالا بود
umount /home

میخوام سایز دایرکتوری home رو بکنم 12 گیگ

lvreduce --resizefs -L 12G /dev/mapper/apps--w01--vg-home 

و همه حجم آزاد شده رو بدم به /var

lvextend -r -l +100%FREE /dev/mapper/apps--w01--vg-var

به قول عرفان می‌گه که وقتی یه حرکت خیلی بزرگ میزنی ری استارت کن ببین بالا میاد یا نه.

پسندها(0)شاکی(0)

شناسایی حجم اضافه شده به پارتیشن یا هارد اضافه شده به سیستم بدون نیاز به ری استارت

بعضی وقتا درخواست میدی به ماشین مجازیت حجم اضافه کنن. حالا دو حالت داره یا یه هارد کنونیت رو اکستند میکنند یا یه هارد جدید اضافه میکنن (از نظر ماشین مجازیت) اگه ماشینت رو ری استارت کنی خود به خود تغییرات رو میشناسه. اگه نخوای ری استارت کنی باید کار زیر رو بکنی

اگه هارد جدید اضافه کنن

با دستور زیر هاست ها رو لیست می‌کنی

ls /sys/class/scsi_host

و با دستور زیر می‌گی که حاجی اسکن کن. به جای host0 اسم هاستات رو که لیست شده می‌نویسی

sudo echo "- - -" > /sys/class/scsi_host/host0/scan

اگه یه هاردت رو اکستند کرده باشن

با دستور زیر میگید که حاجی اسکن کن

اون قسمت 1\:0\:0\:0 ممکنه چند تا باشن به همه همین‌کار کنید

echo 1>/sys/class/scsi_device/1\:0\:0\:0/device/rescan

بعد با cfdisk یا fdisk می‌تونید پارتیشن جدید بسازید.

هرچی آموزش توی نت دیدم از کامند d توی cfdisk استفاده می‌کرد که من جراتش رو ندارم. لذا به جای اکستند پارتیشن، پارتیشن جدید میسازم

بعد فرمتش می‌کنم

mkfs.ext4 /dev/sda3

پارتیشن جدید رو به physical volume ها اضافه می‌کنم

pvcreate /dev/sda3

بعد pv رو به volume group اضافه می‌کنم. با دستور vgs می‌تونید اسم vg رو ببینید. مال من بود debian-vg و pv رو به vg اضافه می‌کنید.

vgextend debian-vg /dev/sda3

بعد هم حجم رو به هر logical volume که می‌خواید اضافه کنید. با دستور lvs می‌تونید اسم lv ها رو ببینید. می‌تونید مقدار حجمی که قراره اضافه شه رو بگید -L+238G یا کل حجم رو یک جا بدید مثل زیر

lvextend -r -l +100%FREE /dev/debian-vg/lv-var 

شاید نیاز باشه دستور زیر رو هم بزنید که پارتیشن حجم جدید رو بگیره

resize2fs /dev/debian-vg/lv-var 
پسندها(0)شاکی(0)

بش اسکریپت آب خوردی

#!/usr/bin/bash
while true 
do
    zenity --question --no-wrap  --text="آب خوردی؟" --ok-label="ها" --cancel-label="دو دقه واسا"
    status=$?
    while [ $status -eq 1 ]
    do
        sleep 3m
        zenity --question --no-wrap  --text="آب خوردی؟" --ok-label="ها" --cancel-label="دو دقه واسا"
        status=$?
    done
    sleep 30m;
done
cat /home/saeb/.config/autostart/sbs.saeb.water.desktop 
[Desktop Entry]
Name=DrinkWater
GenericName=Drink water
Comment=Some description about your script
Exec=/home/saeb/.local/bin/drinkwater.bash
Terminal=true
Type=Application
X-GNOME-Autostart-enabled=true
پسندها(1)شاکی(0)

نمایش ترجمه ها توی افزونه وردپرس

سر این قضیه همیشه بخ فنا میرم. همیشه پنج دقیقه یه افزونه ساده وردپرسی مینویسم و تمام رو درگیر کار کردن ترجمه شم.

صائب یادت باشه برایی ترجمه ها نشون داده شن باید این اکشن رو اضافه کنی.

add_action( 'init', 'wpdocs_load_textdomain1' );
 
function wpdocs_load_textdomain1() {
    load_plugin_textdomain( 'gf-iran-mobile', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' ); 
}

اولین ارگومان load_plugin_textdomain باید اسمی باشه که به تکست دومینت دادی.

باز سال دیگه یه ساعت درگیر اینی از الان میدونم

پسندها(0)شاکی(0)

مشاهده دسترسی های یه کاربر تو اوراکل

select dbms_metadata.get_granted_ddl( 'SYSTEM_GRANT', 'N_HSE' ) from dual;
select dbms_metadata.get_granted_ddl( 'OBJECT_GRANT', 'N_HSE' ) from dual;
select dbms_metadata.get_granted_ddl( 'ROLE_GRANT', 'N_HSE') from dual;

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS;
SELECT * FROM USER_ROLE_PRIVS;
پسندها(0)شاکی(0)

محدود کردن فرم گراویتی‌فرمز به کد ملی‌های مشخص شده

خوب من دیروز می‌بایست یه فرم ثبت نام تحویل می‌دادم که فقط اشخاصی حق داشتند پرش کنند که از قبل ثبت‌نام کرده بودن. وقت قالب فرزند یا افزونه هم نداشتم

برای این‌کار من یه فیلد متنی قرار دادم. شما اگه میخواید ولیدیت کد ملی هم داشته باشید می‌تونید فیلد کد ملی گراویتی فرمز فارسی رو قرار بدید.

کد فرم و کد فیلد رو درنظر داشته باشید بعدن لازمشون داریم.

اومدم از

قسمت نمایش

قسمت ویرایشگر پوسته

از بالا سمت چپ قالب فعالم رو انتخاب کردم

بالا سمت چپ سمت چپ فایل توابع پوسته functions.php رو انتخاب کردم

و کد زیر رو کپی کردم.

try {
	function validate_code( $result, $value, $form, $field){
		$g3=array('1234567890', '1234567898', '2345678909' )
		if (in_array($value,$g3) ){}
		else {
			$result['is_valid'] = false;
			$result['message'] = "شما در این گروه نیستید";
			}
	return $result;
		}
	add_filter( 'gform_field_validation_4_35', 'validate_code', 10, 4 );
	}
catch (Exception $e) {var_dump($e);}

داخلش یه آرایه هست از کد ملی ها. البته من سه هزارتا کد ملی داشتم.

$g3=array('1234567890', '1234567898', '2345678909' )

پایین هم برای add_filter به ترتیب شماره فرمم و شماره فیلدم رو قرار دادم. اون ده و چهار آخر خط هم مال اولویت فیلتر هستن فک کنم.

add_filter( 'gform_field_validation_4_35', 'validate_code', 10, 4 );

حالا اگه کد ملی توی لیست نباشه خطا می‌گیریم

چند تا نکته:

  1. وقتی قالبتون رو به روز کنید فانکشنتون پاک میشه!
  2. برای نگه داشتن فانکشنتون بعد از به روز شدن قالب خیلی راحت یه قالب فرزند درست کنید. من فقط برای یک روز نیازش داشتم به همین خاطر بهم اهمیتی نداشت.
  3. ساختن فایل افزونه حتی از ساختن قالب فرزند هم ساده تره.

پسندها(1)شاکی(0)

kvm qemu libvirt

sudo pacman -S libvirt nftables
 ✘  ~  cat br10.xml 
<network>
  <name>br10</name>
  <uuid>4c2ce191-a0e3-4916-842e-a7cdc2012332</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='br10' stp='on' delay='0'/>
  <mac address='52:54:00:5f:d2:40'/>
  <ip address='172.18.0.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='172.18.0.100' end='172.18.0.200'/>
    </dhcp>
  </ip>
</network>
sudo virsh net-define br10.xml
sudo virsh net-list --all
 sudo virsh net-start br10
 sudo virt-install --name debian11 --memory 2048 --disk size=4 --cdrom Downloads/debian-11.0.0-amd64-netinst.iso --network bridge=br10
sudo virsh start debian11

پسندها(0)شاکی(0)