Acum este Vin Noi 16, 2018 9:24 am

[Shell Scripting]Rezolvare erori librării.

Dacă ai un script pentru client sau server, îl poți împărtăși aici cu toți.
Avatar utilizator
 
Mesaje: 4821
Membru din: Mar Mar 08, 2011 3:47 pm
Localitate: Gaia
Like-uri oferite: 86 times
Like-uri primite: 166 times

[Shell Scripting]Rezolvare erori librării.

de hacktor_ » Joi Iul 21, 2016 2:39 am

Salut!

Am scris un set de script-uri în shell pentru FreeBSD pentru un proiect în desfășurare. Aveam nevoie de aceste soluții, iar fiindcă proiectul era în testare, am făcut compartimentare și un set de script-uri pentru instalarea serverfiles și mai multe :)

Mă gândeam să fac release la o parte din proiect. Acest script este unul dintre ele.

Enjoy :)
Code: Select All Code
#!/bin/sh

######
# Nume script: fix_libs
# Autor: hacktor
# Versiune FreeBSD optima: 10.* (în special 10.3)
######
# LANSAT CU LICENTA MIT: http://choosealicense.com/licenses/mit/
# INSPIRAT DE AICI: http://just4metin.ro/post292058.html#p292058
######
# MIT License
#
# Copyright (c) 2016 hacktor

# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
###
# Acest script face parte din async2dev/serverfiles-deployment.
# A fost separat de script-ul parinte ca sa serveasca pe post de remediere rapida
# a lipsei librariilor pentru Metin2.
###
# Depinde, in special, de versiunile FreeBSD 10+ (sorry, comanda 'cut' cu numar
# de caractere fix). Este putin probabil sa mai fie FreeBSD sub versiunea 7.
######

######
# Definim câteva variabile globale în acest script.
# - TEMP_DIR => folosind comanda mktemp, facem un folder random in /tmp
# - LOGS_DIR => folderul unde sunt scrise log-urile.
# - BSD_VERSION => preluam versiunea FreeBSD (10.3, 11.0,...)
# - PORTS_DIR => folderul unde sunt port-urile.
###
declare -r TEMP_DIR=$(mktemp -d -t hacktor)
declare -r LOGS_DIR="/var/log/hacktor"
declare -r BSD_VERSION=$(freebsd-version | cut -c 1-12)
declare -r PORTS_DIR="/usr/ports"

######
# Cateva functii personale pentru output mai frumos.
###
function writeln
{
  local output=$1
  local style=${2:-"0"}
  local logfile=${3:-"${LOGS_DIR}/libs_fix.script.log"}

  echo -e "\e[${style}m $output \e[0m" | tee --append $logfile
}

function writenewln
{
  local style="0"

  writeln "\n" "$style"
}

function error
{
  local output=$1
  local style="41;30"
  local logfile="${PROJECT_DIRECTORY}/libs_fix.error.log"

  writeln "$output" "$style" "$logfile"
}

function qapla
{
  local output=$1
  local style="42;30"

  writeln "$output" "$style"
}

function notice
{
  local output=$1
  local style="46;30"

  writeln "$output" "$style"
}

function program_header
{
  notice "fix_libs  Copyright (C) 2016  hacktor"
  notice "This program comes with ABSOLUTELY NO WARRANTY."
  notice "This is free software, and you are welcome to redistribute it"
  notice "under certain conditions."
}

: '
  Aceasta este functia principala a script-ului.

  In aceasta functie se va verifica daca "pkg" este instalat si poate fi folosit.
  Daca e astfel, atunci instaleaza pachetul "misc/compat7x".
  In caz contrar, se va compila pachetul din /usr/ports.

  Pe urma, se vor face symlink-uri la fisierele: libz, libmd, libssl, libc.
  Initial, aceste symlink-uri se efectueaza in folderul /usr/lib.

  Se face efectuarea arhitecturii sistemului de operare.
  Daca este instalat FreeBSD 64-bit (amd64), atunci se verifica pentru existenta
  librariilor 32-bit (/usr/lib32). Daca acest folder este inexistent, atunci se
  va descarca de pe serverul FreeBSD arhiva.

  Descarcarea are loc in folderul $TEMP_DIR, definit mai sus.
  Dupa descarcare, se dezarhiveaza acea arhiva.
  Dupa dezarhivare, se continua cu symlink-urile pentru /usr/lib32.

  >hacktor_
'
function main
{
  program_header
  writeln "Creare symlink..." "0"

  if [ -f /usr/local/sbin/pkg ]; then
    pkg install misc/compat7x
  else
    cd "${PORTS_DIR}/misc/compat7x"
    make -DBATCH install clean
  fi

  local libdir="/usr/lib"

  ln -sfF "${libdir}/libz.so.2" "${libdir}/libz.so.4"
  ln -sfF "${libdir}/libmd.so" "${libdir}/libmd.so.4"
  ln -sfF "${libdir}/libssl.so.7" "${libdir}/libssl.so.6"
  ln -sfF "${libdir}/libc.so" "${libdir}/libc.so.5"

  ln -sfF "/libexec/ld-elf.so.1" "/libexec/ld-elf.so.d"

  if [ $(uname -p) = "amd64" ]; then
    if [ ! -d "/usr/lib32" ]; then
      local libdir_compat="/usr/lib32"

      fetch "ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/${BSD_VERSION}/lib32.txz" -output="${TEMP_DIR}/lib32.txz"
      tar -xpJf "${TEMP_DIR}/lib32.txz" --directory /
    fi

    ln -sfF "${libdir_compat}/libz.so.2" "${libdir_compat}/libz.so.4"
    ln -sfF "${libdir_compat}/libmd.so" "${libdir_compat}/libmd.so.4"
    ln -sfF "${libdir_compat}/libssl.so.7" "${libdir_compat}/libssl.so.6"
    ln -sfF "${libdir_compat}/libc.so" "${libdir_compat}/libc.so.5"

    ln -sfF "/libexec/ld-elf32.so.1" "/libexec/ld-elf32.so.d"
  fi

  qapla "Job finalizat."
}

main "$@"
exit $?



Instalare:
  • Faceți un fișier nou pe server în /root numit "fix_libs.sh"
    • Recomandare: faceți fișierul în /usr/bin numit "fix_libs" (fără extensie)
  • Executați script-ul: sh fix_libs.sh
    • Opțional: dacă ați făcut fișierul în /usr/bin, atunci efectuați următorii pași:
      • Atribuiți permisiunea de executare: chmod +x fix_libs
      • Executați fișierul simplu: fix_libs

Conform licenței MIT, aveți următoarele:
  • DREPTURI:
    • Folosire comercială
    • Distribuire
    • Modificări
    • Folosire privată
  • CONDIȚII:
    • Păstrarea licenței și al copyright-ului
  • INTERZICERI:
    • Răspundere penală a autorului în caz de daune

Detalii despre licență: http://choosealicense.com/licenses/mit/ (țineți cursorul deasupra fiecărei bulinuțe pentru detalii).

Sper că vă ajută cu ceva :)
>hacktor_
Imagine

Înapoi la Script-uri

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator