روزنوشته های یک برنامه نویس

۱۳ مطلب با موضوع «لینوکس» ثبت شده است

 

 

#!/bin/bash

# Ensure required tools are installed
if ! command -v tshark &> /dev/null || ! command -v sox &> /dev/null; then
    echo "Error: tshark and sox are required. Please install them."
    exit 1
fi

# Check arguments
if [ "$#" -ne 2 ]; then
    echo "Usage: $0 <pcap_file> <output_dir>"
    exit 1
fi

PCAP_FILE="$1"
OUTPUT_DIR="$2"
RAW_DIR="$OUTPUT_DIR/raw"
WAV_DIR="$OUTPUT_DIR/wav"

# Create output directories
mkdir -p "$RAW_DIR"
mkdir -p "$WAV_DIR"

# Extract unique 5-tuples for RTP streams (IP:Port pairs)
echo "Identifying RTP streams from $PCAP_FILE..."
tshark -r "$PCAP_FILE" -T fields -e ip.src -e udp.srcport -e ip.dst -e udp.dstport \
    -Y "udp" | sort | uniq > "$RAW_DIR/rtp_streams.txt"

if [ ! -s "$RAW_DIR/rtp_streams.txt" ]; then
    echo "No RTP streams found in the PCAP file."
    exit 1
fi

echo "Extracting RTP streams..."
STREAM_INDEX=0

# Process each 5-tuple
while read -r SRC_IP SRC_PORT DST_IP DST_PORT; do
    RAW_FILE="$RAW_DIR/stream_${STREAM_INDEX}.raw"
    WAV_FILE="$WAV_DIR/stream_${STREAM_INDEX}.wav"

    echo "Processing stream $STREAM_INDEX: $SRC_IP:$SRC_PORT -> $DST_IP:$DST_PORT"
    
    # Extract payload for the specific 5-tuple
    tshark -r "$PCAP_FILE" -Y "ip.src==$SRC_IP && udp.srcport==$SRC_PORT && ip.dst==$DST_IP && udp.dstport==$DST_PORT" \
        -T fields -e rtp.payload | xxd -r -p > "$RAW_FILE"

    # Convert to WAV (assuming G.711 μ-law at 8000 Hz)
    if [ -s "$RAW_FILE" ]; then
        sox -t raw -e mu-law -r 8000 -c 1 "$RAW_FILE" "$WAV_FILE"
        echo "Saved WAV file: $WAV_FILE"
    else
        echo "No RTP packets for this stream. Skipping."
        rm "$RAW_FILE"
    fi

    ((STREAM_INDEX++))
done < "$RAW_DIR/rtp_streams.txt"

echo "Extraction and conversion complete. WAV files are in $WAV_DIR.

 

  • epi log

ZFS on alpine linux

دوشنبه, ۲۳ مهر ۱۴۰۳، ۰۲:۴۲ ب.ظ

# install packages

apk add zfs zfs-lts

# load kernel modules
modprobe zfs
modprobe spl

# enable kernel module
echo zfs >> /etc/modules

# activate services
rc-update add zfs-import boot
rc-update add zfs-mount boot
rc-update add zfs-share boot

zpool status

# create pool with first disk
zpool create zpool /dev/sdb

# add other disks
zpool add zpool /dev/sdc

zpool status

zfs set compression=lz4 zpool

# mount if not mounted
zfs mount zpool

ll /zpool/
zpool list

# expand a disk to avail size
zpool online -e zpool /dev/sdc

 

  • epi log

encrypted BTRFS multi-disk system

دوشنبه, ۲۳ مهر ۱۴۰۳، ۱۰:۰۹ ق.ظ

To set up an encrypted BTRFS multi-disk system in Alpine Linux, follow these steps:

Preparation

  1. Install necessary packages:

apk add btrfs-progs cryptsetup blkid

Encryption Setup

  1. Encrypt each disk partition you want to use:

cryptsetup luksFormat /dev/nvme0n1p2 cryptsetup luksFormat /dev/nvme0n1p3

  1. Open the encrypted partitions:

cryptsetup open /dev/nvme0n1p2 crypt1 cryptsetup open /dev/nvme0n1p3 crypt2

BTRFS Configuration

  1. Create a BTRFS filesystem across the encrypted partitions:

mkfs.btrfs -m raid1 -d raid1 /dev/mapper/crypt1 /dev/mapper/crypt2

  1. Mount the BTRFS filesystem:

mount /dev/mapper/crypt1 /mnt

  1. Create subvolumes:

btrfs subvolume create /mnt/root btrfs subvolume create /mnt/home

  1. Unmount the filesystem:

umount /mnt

  1. Mount the root subvolume:

mount -o subvol=root /dev/mapper/crypt1 /mnt

System Configuration

  1. Edit /etc/crypttab to include both encrypted partitions

  2. Modify /etc/fstab to mount the BTRFS subvolumes

  3. Update /etc/mkinitfs/mkinitfs.conf to include necessary features:

features="ata base cdrom btrfs keymap kms mmc nvme raid scsi usb cryptsetup cryptkey resume"

  1. Create a kernel hook to ensure proper boot setup
  • epi log

D1=/dev/loop6

D2=/dev/loop7


P=$(pwd)
LW=$P/lower-ro  # read only
U=$P/u
AL=$P/all       # writable

mkdir -p $AL $LW $U

mount -o ro $D1 $LW
mount -o rw $D2 $U

UP=$U/upper-rw  # writable
WD=$U/temp

mkdir -p $UP $WD

mount -t overlay -o lowerdir=$LW,upperdir=$UP,workdir=$WD overlay $AL

 

SITE

 

  • epi log

چک کردن ۳۲ یا ۶۴ بیتی بودن یک فایل اجرایی در لینوکس

چهارشنبه, ۲۰ اسفند ۱۳۹۹، ۱۱:۱۴ ق.ظ

od -An -t x1 -j 4 -N 1 bin_file

==> 1:x32  2:x64

منبع

  • epi log

ابزار مانیتور یک پروسس

سه شنبه, ۲۷ اسفند ۱۳۹۸، ۱۰:۵۲ ق.ظ

pidstat از مجموعه ابزار sysstat

مثال: مانیتور دو پروسس هر پنج ثانیه

$ pidstat -h -r -u -v -p 12345,11223 5

 

منبع

  • epi log

تست سرعت دیسک

دوشنبه, ۶ اسفند ۱۳۹۷، ۱۰:۱۴ ق.ظ

Linux:

sync ; time sh -c "dd if=/dev/zero of=testfile bs=8M count=10k  && sync" 2>/dev/stdout  ; rm test file


  • epi log

مدل و تولید کننده هارد دیسک scsi در لینوکس

دوشنبه, ۱۸ دی ۱۳۹۶، ۱۲:۲۶ ب.ظ


cat /sys/class/scsi_device/0\:0\:0\:0/device/model
cat /sys/class/scsi_device/0\:0\:0\:0/device/vendor

  • epi log

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

سه شنبه, ۱۴ شهریور ۱۳۹۶، ۰۳:۳۱ ب.ظ

lsof -n -i:$PORT | grep LISTEN

Linux:
netstat -nap | grep $PORT

Windows(Not tested):
netstat -nap
| findstr %PORT




  • epi log

استریم به صورت RTP

دوشنبه, ۱۳ شهریور ۱۳۹۶، ۰۵:۱۵ ب.ظ

استریم کردن فایل به فرمت rtp: 

ffmpeg -re -i 1.wav -f rtp -payload_type 8 rtp://127.0.0.1:5545


پخش همان rtp:

ffplay  rtp://127.0.0.1:5545


  • epi log