SMsoft – informatica e dintorni

varie su OSX, GNU/Linux e l'Open Source

Avvio di scripts al boot di MAC OSX

L’avvio di scripts al boot su OSX viene gestito da script .plist da creare nella cartella si sistema /Library/LaunchDaemons/.

Segue una breve guida per avviare automaticamente uno script che imposta una regola nel firewall (vedi precedente articolo).

Diventiamo root ed accediamo alla cartella LaunchDaemons. Digitiamo:

sudo su

e poi inseriamo la password; digitiamo poi:

cd /Library/LaunchDaemons/

la cartella potrebbe già contenere qualche file plist.
Creiamo il nostro file che chiameremo com.apple.ipfw.plist. Io uso il fidato vim, ma potete utilizzare l’editor che preferite:

vi com.apple.ipfw.plist

scriviamo all’interno del file quanto segue:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
      <string>com.apple.ipfw</string>
  <key>ProgramArguments</key>
  <array>
    <string>/sbin/ipfw</string>
    <string>add</string>
    <string>10</string>
    <string>fwd</string>
    <string>localhost,8080</string>
    <string>tcp</string>
    <string>from</string>
    <string>me</string>
    <string>to</string>
    <string>me</string>
    <string>80</string>
  </array>
        <key>RunAtLoad</key>
        <true></true>
        <key>ServiceDescription</key>
          <string>IP filter rules</string>
        <key>StandardErrorPath</key>
          <string>/var/log/ipfw.log</string>
        <key>StandardOutPath</key>
          <string>/var/log/ipfw.log</string>
        <key>UserName</key>
          <string>root</string>
        <key>GroupName</key>
          <string>wheel</string>
  </dict>
</plist>

Per testare il funzionamento dello script, basterà digitare:

launchctl start com.apple.ipfw

dove com.apple.ipfw è il valore che avete indicato nella “Key” Label del file .plist.
Per verificare che il servizio sia stato lanciato, basterà digitare:

launchctl list |grep com.apple.ipfw

e per controllare che la regola sia stata effettivamente aggiunta nel firewall, basterà digitare:

ipfw list

Nota: per la creazione dei file per launchd, consiglio anche di provare il client grafico Lingon.

enjoy

Impostare variabili d’ambiente per un utente o per tutti gli utenti su GNU/Linux

Le variabili d’ambiente (Environment variable) servono per dichiarare delle informazioni (es il path di ricerca, oppure la JAVA_HOME, etc) su una postazione Linux based.
Ci sono dei file in particolare che il sistema legge all’avvio, rendendo “d’ambiente” (ovvero pubbliche, utilizzabili, disponibili) delle variabili.
In particolare in /etc/profile oppure /etc/bash.bashrc si possono inserire le variabili d’ambiente che dovranno essere disponibili per tutti gli utenti del sistema, mentre in ~/.bash_profile oppure in ~/.profile si possono inserire delle variabili specifiche per l’utente (ricordo che ~/ identifica la directory base dell’utente corrente).
Ricordo infine che alcune distribuzioni hanno il file ~/.profile che richiama ~/.bashrc e solo in questo caso bisognerà utilizzare quest’ultimo per indicare le variabili d’ambiente.
Per finire, dopo aver individuato il file a cui applicare le modifiche, potremo creare una variabile d’ambiente aggiungendo una riga come segue:

export JAVA_HOME="/usr/share/java"

A questo punto bisognerà effettuare un logout e poi il login per avere le variabili impostate, oppure rileggere il file modificato con il comando source. Dopo aver effettuato il login, si potranno verificare le variabili d’ambiente create digitando il comando:

export

Girare le richieste che vengono da un IP verso un altro IP con iptables

Segue un semplice script in bash che utilizza iptables per creare una sorta di “ponte” tra due macchine. Questo può servire se una delle due macchine non riesce a connettersi direttamente con la seconda, ma potrebbe utilizzare una terza macchina (quella in cui eseguiremo lo script) come “ponte” per  raggiungerla. Ipotizziamo che l’IP della prima sia 10.109.7.180, che l’IP della seconda sia 10.109.11.13 e che vogliamo giare le richieste provenienti dalla porta 8080 della prima macchina verso la porta 8080 della seconda macchina, lo script sarà:

#!/bin/sh
echo 1 >/proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 10.109.7.180/32 -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth0 -j DNAT --to \
10.109.11.13:8080
iptables -A FORWARD -p tcp -d 10.109.11.13 --dport 8080 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW --dport 8080 -i eth0 -j ACCEPT

Rinominare i file da maiuscolo a minuscolo con la bash

Mi è capitato di ritrovarmi con tutti i files di una cartella (e relative sottocartelle) con i nomi in maiuscolo, mentre dovevano essere in minuscolo. Questo è successo dopo il ripristino da DVD di un precedente backup. Grazie alla bash (sia su Linux che su OSX) ho rinominato i files in un attimo. Lo script da lanciare (tutto sulla stessa riga) è il seguente:

for FILE in `find ./ -type f`; do FILELOWER=`echo $FILE |
tr A-Z a-z`; mv -f $FILE $FILELOWER; done

Mi preme aggiungere che la stessa operazione può essere fatta, sempre via bash, in tanti altri modi.

Page optimized by WP Minify WordPress Plugin