Tech C**P
14 subscribers
161 photos
9 videos
59 files
304 links
مدرس و برنامه نویس پایتون و لینوکس @alirezastack
Download Telegram
tarfile is a python library to read and write gzip`/`bz2 compressed files.

How to read a gzip compressed tar archive and display some member information:

import tarfile
tar = tarfile.open("sample.tar.gz", "r:gz")
for tarinfo in tar:
print tarinfo.name, "is", tarinfo.size, "bytes in size and is",
if tarinfo.isreg():
print "a regular file."
elif tarinfo.isdir():
print "a directory."
else:
print "something else."
tar.close()


Create a compressed file:

with tarfile.open(dst, "w:gz") as tar:
print("Archiving " + src + " into " + dst)
tar.add(src, arcname = os.path.basename(src))

NOTE: the flag of w:gz opens the destination in write mode. Used to create a new tar file.

#python #tarfile #tar #bz2 #gzip
Linux in Docker: Wheezy: "ps: command not found"

Solution:

RUN apt-get update && apt-get install -y procps


#docker #linux #ps #command_not_found #procps
How to go to the previous working directory in terminal?

cd -

#linux #cd #last_working_directory
How do you delete all text above a certain line?

dgg

Will delete everything from your current line to the top of the file.

#vim #delete #dgg
How to check expiration time of a PEM certificate using openssl?

$ openssl x509 -enddate -noout -in file.pem
notAfter=Sep 3 02:23:50 2018 GMT

#openssl #expiration_date
Today I had a problem on nginX. I don't know where to start! :|

Fair enough, this is my nginx stanza:

location /geo {
add_header 'Access-Control-Allow-Origin' '*';
if ( $arg_callback ) {
echo_before_body '$arg_callback(';
echo_after_body ');';
}

proxy_pass https://api.example.com/geo;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
}

NOTE: each part of nginX block is called stanza. I bet you didn't know about this one! :D

echo_before_body command will prepend something to the response which will be returned from nginX.

echo_after_body will append something to the response.

proxy_pass will proxy your requests to a backend server.

$arg_callback will get value of parameter callback in URL. So for example if you use $arg_type, you will get the value of type argument which is provided in URL: https://sample.com?type=SOMETHING

So far so good. The problem was that when I give call the URL with callback parameter https://api.example.com/geo?callback=test. It
generates /geo/geo URL instead of /geo. To circumvent the issue I used $request_uri in proxy_pass section proxy_pass https:// api.fax.plus$request_uri;. The route should be OK now, but there is one big problem here now that responses are returned in binary format instead of JSON. I removed Upgrade & Connection & proxy_http_version lines and it worked like a charm!

Don't ask me! I don't know what are Upgrade and Connection headers.

The output is like the below response for a URL similar to https://api.example.com/geo?callback=test:

test(
{
"username": "alireza",
"password": "123456"
}
)

#nginx #stanza #proxy_pass #echo_before_body #echo_after_body
Did you know you can test bash scripts line by line? Well, bash -x is here to help:

$ bash -x your_script.sh
+ a=10
+ echo 10
10


The content of the bash script is:

#!/bin/bash

a=10
echo $a

#bash #sh #shell #scripting #debug #debugging
How to ignore a specific partition in Icinga2 monitoring server?

Sometimes a specific partition has been mounted on many servers. Now if you monitor disk partitions on Icinga2 and a warning message appears on that specific partition you will get notifications as many as your servers.

Icinga2 uses Snmp Storage Check in order to get disk partitions and their data. The command is located in /etc/icinga2/conf.d/ commands/snmp-storage.conf. (Its name maybe different in your case)

This command will use check_snmp_storage.pl nagios plugin, the overall structure of it is similar to:

object CheckCommand "snmp-storage" {
import "snmp-manubulon-command"

command = [ ManubulonPluginDir + "/check_snmp_storage.pl" ]

arguments += {
"-m" = "$snmp_storage_name$"
"-f" = {
set_if = "$snmp_perf$"
}
"-w" = 87
"-c" = 95
"-H" = "$address$"
"-m" = "^Cached|^Shared|^Swap|^/run|^Physical|^Memory|^Virtual|^/dev|^/sys|^/mnt/remote_folder"
"-e" = ""
}

vars.snmp_perf = true
}

-m parameter will ignore partitions. Here we have provided many partitions like /sys or /mnt/remote_folder. These partitions will be ignored all over. Add your desired partitions to this section.

To read more about this Perl plug-in head over to the below link:
- https://nagios.manubulon.com/snmp_storage.html

#monitoring #icinga2 #snmp #storage #snmp_storage
Hello Docker geeks :)

If you run a container and attach to that container you would see its stin, stout or stderr outputs. If you press CTRL+C while you're attached to the container the container will get stopped. In order to detach from the container you can use key sequence CTRL+ p + CTRL+q.

One of the reasons that CTRL+C stops the container is that this key combination sends SIGKILL signal to the container. There is a
parameter called --sig-proxy that is true by default which makes CTRL+C to send SIGINT. You can detach from a container and leave it running using the CTRL-p CTRL-q key sequence.

If you set --sig-proxy to false then CTRL+C would not kill the running container:

docker attach YOUR_CONTAINER_ID --sig-proxy=false

NOTE: you can get container id by issuing docker ps command.

#docker #attach #detach #sig_proxy #sequence_key #SIGINT #SIGKILL
اهداف زندگی شبیه ماهی اند

اگه یک ماهی کوچیک بخوای میتونی تو قسمت های کم عمق بمونی،

اما اگه ماهی بزرگ رو بخوای باید به جاهای عمیق تری بری...
Array and loop in bash script

To define an array you can use a structure like below, be careful that we don't use comma in between:

dbs=( 'test1' 'test2' 'test3' )


Now to loop over the array elements use for:

for your_db in ${dbs[@]}
do
echo $your_db
done

This is it!

#bash #scripting #for #loop #array
آیا این جهالت نیست که :
انسان ساعت‌های شیرین امروز را
فدای روزهای آینده کند ...؟!
How to check python code correctness? pychecker is the man! :)

- https://pychecker.sourceforge.net/

It's usage:

pychecker [options] file1.py file2.py ...

Read more about the provided options in the provided link.

#python #pychecker #compiler