Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  network-setup.sh

  Sprache: Shell
 

#!/bin/bash

# Copyright 2019 Google Inc. All rights reserved.

# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at

#     http://www.apache.org/licenses/LICENSE-2.0

# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

if [[ "$OSTYPE" != "linux-gnu" ]]; then
 echo "error: must be running linux"
 exit 1
fi

# escalate to superuser
if [ "$UID" -ne 0 ]; then
 exec sudo bash "$0"
fi

cleanup() {
 echo "Starting up network-manager..."
 service network-manager start
 if [ $? != 0 ]; then
  echo "error: failed to start network-manager"
  exit 1
 fi

 echo "Starting up networking..."
 service networking start
 if [ $? != 0 ]; then
  echo "error: failed to start networking"
  exit 1
 fi
 if [ ! -z "$1" ]; then
  exit $1
 fi
}

sleep_time=0.1
max_attempts=100
DEFAULTNET=$1
if [ "$DEFAULTNET" == "" ]; then
 warn_no_default_network=0
 warn_disconnect_rockpi=0
 attempts=0
 while true; do
  NETLIST=`ip link | grep "state UP" | sed 's/[0-9]*: \([^:]*\):.*/\1/'`
  if [[ "${NETLIST}" == "" ]]; then
   if [[ $warn_no_default_network -eq 0 ]]; then
    echo "error: couldn't detect any connected default network"
    warn_no_default_network=1
   fi
   continue
  elif [ `echo "${NETLIST}" | wc -l` -eq 1 ]; then
   DEFAULTNET=${NETLIST}
   break
  elif [ `echo "${NETLIST}" | wc -l` -ne 1 ]; then
   if [[ $warn_disconnect_rockpi -eq 0 ]]; then
    echo "Please disconnect the network cable from the Rock Pi"
    warn_disconnect_rockpi=1
   fi
   if [[ ${attempts} -gt ${max_attempts} ]]; then
    echo -e "\nerror: detected multiple connected networks, please tell me what to do:"
    count=1
    for net in ${NETLIST}; do
     echo "${count}) $net"
     let count+=1
    done
    read -p "Enter the number of your default network connection: " num_default
    count=1
    for net in ${NETLIST}; do
     if [ ${count} -eq ${num_default} ]; then
      echo "Setting default to: ${net}"
      DEFAULTNET=${net}
     fi
     let count+=1
    done
    warn_no_default_network=0
    break
   fi
   echo -ne "\r"
   printf "Manual configuration in %.1f seconds..." "$(( max_attempts-attempts ))e-1"
   sleep $sleep_time
  fi
  let attempts+=1
 done
fi
echo "Found default network at ${DEFAULTNET}"

if [ "${ROCKNET}" == "" ]; then
 echo "Please reconnect network cable from Rock Pi to PC's spare network port"
 attempts=0
 while true; do
  NETLIST=`ip link | grep "state UP" | grep -v $DEFAULTNET | sed 's/[0-9]*: \([^:]*\):.*/\1/' | awk 'NF'`
  networks=`echo "$NETLIST" | wc -l`
  if [[ "${NETLIST}" == "" ]]; then
   networks=0
  fi
  if [ $networks -eq 1 ]; then
   ROCKNET=${NETLIST}
   break
  elif [ $networks -gt 1 ]; then
   if [[ ${attempts} -gt ${max_attempts} ]]; then
    echo -e "\nerror: detected multiple connected networks, please tell me what to do:"
    count=1
    for net in ${NETLIST}; do
     echo "${count}) $net"
     let count+=1
    done
    read -p "Enter the number of your rock pi network connection: " num_rockpi
    count=1
    for net in ${NETLIST}; do
     if [ ${count} -eq ${num_rockpi} ]; then
      echo "Setting rock pi to: ${net}"
      ROCKNET=${net}
     fi
     let count+=1
    done
    break
   fi
   echo -ne "\r"
   printf "Manual configuration in %.1f seconds..." "$(( max_attempts-attempts ))e-1"
   let attempts+=1
  fi
  sleep $sleep_time
 done
fi
echo "Found Rock Pi network at ${ROCKNET}"
sudo ifconfig ${ROCKNET} down

echo "Downloading dnsmasq..."
apt-get install -d -y dnsmasq >/dev/null

echo "Shutting down network-manager to prevent interference..."
service network-manager stop
if [ $? != 0 ]; then
 echo "error: failed to stop network-manager"
 cleanup 1
fi

echo "Shutting down networking to prevent interference..."
service networking stop
if [ $? != 0 ]; then
 echo "error: failed to stop networking"
 cleanup 1
fi

echo "Installing dnsmasq..."
apt-get install dnsmasq >/dev/null

echo "Enabling dnsmasq daemon..."
cat /etc/default/dnsmasq | grep "ENABLED" >/dev/null
if [ $? == 0 ]; then
 sed -i 's/.*ENABLED.*/ENABLED=1/' /etc/default/dnsmasq
else
 echo "ENABLED=1" >> /etc/default/dnsmasq
fi

echo "Configuring dnsmasq for Rock Pi network..."
cat >/etc/dnsmasq.d/${ROCKNET}.conf << EOF
interface=${ROCKNET}
bind-interfaces
except-interface=lo
dhcp-authoritative
leasefile-ro
port=0
dhcp-range=192.168.0.100,192.168.0.199
EOF

echo "Configuring udev rules..."
cat >/etc/udev/rules.d/82-${ROCKNET}.rules <<EOF
ACTION=="add", SUBSYSTEM=="net", KERNEL=="${ROCKNET}", ENV{NM_UNMANAGED}="1"
EOF

echo "Configuring network interface..."
cat >/etc/network/interfaces.d/${ROCKNET}.conf <<EOF
auto ${ROCKNET}
iface ${ROCKNET} inet static
 address 192.168.0.1
 netmask 255.255.255.0
EOF

echo "Enabling IP forwarding..."
echo 1 >/proc/sys/net/ipv4/ip_forward

echo "Creating IP tables rules script..."
cat > /usr/local/sbin/iptables-rockpi.sh << EOF
#!/bin/bash
/sbin/iptables -A FORWARD -i ${ROCKNET} -o ${DEFAULTNET} -m state --state RELATED,ESTABLISHED -j ACCEPT
/sbin/iptables -A FORWARD -i ${ROCKNET} -o ${DEFAULTNET} -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o ${DEFAULTNET} -j MASQUERADE
EOF
sudo chown root:root /usr/local/sbin/iptables-rockpi.sh
sudo chmod 750 /usr/local/sbin/iptables-rockpi.sh

echo "Creating IP tables rules service..."
cat > /etc/systemd/system/iptables-rockpi.service << EOF
[Unit]
Description=iptables rockpi service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/iptables-rockpi.sh
RemainAfterExit=true
StandardOutput=journal

[Install]
WantedBy=multi-user.target
EOF

echo "Reloading systemd manager configuration..."
sudo systemctl daemon-reload

echo "Start IP tables rules service..."
sudo systemctl enable iptables-rockpi
sudo systemctl start iptables-rockpi

cleanup

echo "Restarting dnsmasq service..."
service dnsmasq restart
if [ $? != 0 ]; then
 echo "error: failed to restart dnsmasq"
 exit 1
fi

# Verify the Rock Pi was configured correctly
ip link show ${ROCKNET} >/dev/null
if [ $? != 0 ]; then
 echo "error: wasn't able to successfully configure connection to Rock Pi"
 exit 1
fi

echo "Searching for Rock Pi's IP address..."
while true; do
 rockip=`cat /proc/net/arp | grep ${ROCKNET} | grep -v 00:00:00:00:00:00 | cut -d" " -f1`
 if [[ ${#rockip} -ge 7 ]] && [[ ${#rockip} -le 15 ]]; then
  break
 fi
 sleep 0.1
done

echo "Writing Rock Pi configuration to ~/.ssh/config..."
USER_HOME=$(getent passwd $SUDO_USER | cut -d: -f6)
grep -w "Host rock01" $USER_HOME/.ssh/config > /dev/null 2>&1
if [ $? != 0 ]; then
 cat >>$USER_HOME/.ssh/config << EOF
Host rock01
    HostName ${rockip}
    User vsoc-01
    IdentityFile ~/.ssh/rock01_key
    LocalForward 6520 127.0.0.1:6520
    LocalForward 6444 127.0.0.1:6444
EOF
else
 sed -i '/Host rock01/{n;s/.*/    HostName '${rockip}'/}' $USER_HOME/.ssh/config
fi
grep -w "Host rockpi01" $USER_HOME/.ssh/config > /dev/null 2>&1
if [ $? != 0 ]; then
 cat >>$USER_HOME/.ssh/config << EOF
Host rockpi01
    HostName ${rockip}
    User vsoc-01
    IdentityFile ~/.ssh/rock01_key
EOF
else
 sed -i '/Host rockpi01/{n;s/.*/    HostName '${rockip}'/}' $USER_HOME/.ssh/config
fi

sudo chown $SUDO_USER:`id -ng $SUDO_USER` $USER_HOME/.ssh/config
sudo chmod 600 $USER_HOME/.ssh/config

echo "Creating ssh key..."
sudo -u $SUDO_USER echo "n" | sudo -u $SUDO_USER ssh-keygen -q -t rsa -b 4096 -f $USER_HOME/.ssh/rock01_key -N '' >/dev/null 2>&1
tmpfile=`mktemp`
echo "echo cuttlefish" > "$tmpfile"
chmod a+x "$tmpfile"
chown $SUDO_USER "$tmpfile"
sudo SSH_ASKPASS="${tmpfile}" DISPLAY=:0 su $SUDO_USER -c "setsid -w ssh-copy-id -i ${USER_HOME}/.ssh/rock01_key -o StrictHostKeyChecking=no vsoc-01@${rockip} >/dev/null 2>&1"
if [ $? != 0 ]; then
 sed -i "/${rockip}/d" ${USER_HOME}/.ssh/known_hosts
 sudo SSH_ASKPASS="${tmpfile}" DISPLAY=:0 su $SUDO_USER -c "setsid -w ssh-copy-id -i ${USER_HOME}/.ssh/rock01_key -o StrictHostKeyChecking=no vsoc-01@${rockip} >/dev/null 2>&1"
 if [ $? != 0 ]; then
  echo "error: wasn't able to connect to Rock Pi over ssh"
  exit 1
 fi
fi

echo "Successfully configured!"
echo "  Host: 192.168.0.1"
echo "RockPi: ${rockip}"
echo "SSH Alias: rock01 (auto port-forwarding)"
echo "SSH Alias: rockpi01 (no port-forwarding)"

Messung V0.5 in Prozent
C=91 H=95 G=92

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-06-27) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik