Categories: Szuflandia

Zarządzanie pakietami (apt i pochodne)

Swego czasu prowadziłem prezentację z zakresu użytkowania Debianowego systemu zarządzania pakietami jakim jest apt-get. Oto ona.

W poniższej prezentacji postaram się przybliżyć działanie programu apt – jednego z najpopularniejszych managerów pakietów jakim dysponuje środowisko OpenSource. apt (z ang. Advanced Packaging Tool) jest domyślnym zarządcą pakietów w systemie Ubuntu Linux. Dzięki niemu, wydajac jedną komendę jesteśmy w stanie zainstalować każdy z 20 tysięcy(!) programów dostępnych w repozytoriach Ubuntu.

Spis treści

Wstęp

Apt jest nakładką na zarządce pakietów dpkg, do korzystania z którego ze względu na szerokie zastosowania apt`a nie jesteśmy praktycznie wcale zobowiązani korzystać. Dzięki repozytoriom, w którym znajduje się jak wspomniałem wyżej ok. 20 000 różnych programów możemy założyć z dużą dozą prawdopodobieństwa, że program jaki nas interesuje będzie się znajdował w jedym z nich.

Pakiety (paczki)

Najprościej rzecz ujmując pakiet to skompilowany i spakowany program, którego instalacja trwa kilka sekund. Zasadniczo cała opracja polega na pobraniu źródeł programu przez danego developera, skonfigurowaniu go, skompilowaniu (które jest procesem o wiele dłuzszym) na własnym komputerze oraz spakowaniu tak przygotowanego programu w paczkę. Tak przygotowany pakiet jest oczywiście sprawdzany przez opiekunów danego projektu, dzięki czemu jest wolny od błędów.
Większość systemów korzysta (jeśli w ogóle) z jednego z dwóch typów pakietów:

  • deb – pakiety opracowane przez twórów Debiana. Wykorzystuje je m.in. Ubuntu.
  • rpm – system paczek opracowany dla RedHata. Wykorzystywany przez Fedorę, Mandrivę, Auroksa i wiele innych.
  • tgz

Repozytoria

Repozytoria to serwery, na których gromadzone są pakiety. Dodanie danego repozytorium do pliku sources.list pozwala nam ściągnąć każdy ze znajdujących się w nim programów. Do czynienia mamy z repozytoriami oficjalnymi (markowanymi przez Ubuntu), oraz nieoficjalnymi (repozytoria poszczególnych programów bądź grup developerskich, jak również osób które mają dostęp do szybkich i pojemnych serwerów na których udostępniają wybrane programy).
Ponadto w jednym repozytorium mogą (i często właśnie tak jest) znajdować się pakiety dla różnych wersji danej dystrybucji. I tak dla Ubuntu mamy w oficjalnych repozytoriach pakiety oznaczone “horay”, “breezy”, oraz “dapper” – odpowiednio dla wersji 5.04, 5.10 oraz 6.06.
Trzecia “zmienna” jaka jest istotna do zdefiniowania repozytorium przez plik sources.list to sekcje. Pakiety zostały posortowane w pewne działy, dzięki którym łatwiej jest je zidentyfikować. Dla Debiana są to m. in. stable, main, contrib oraz non-free (z zaznaczeniem, że non-free oznacza niewolne a nie jak mogłoby się zdawać niedarmowe – znajdują się tam takie programy jak np. wirtualna maszyna Java),a w Ubuntu main, restricted, universe oraz multiverse To od nas zależy które sekcje wybierzemy. Więcej informacji n/t sekcji znajduje się poniżej, w rozdziale sources.list.

Zależności

W programach pisanych na systemy rodziny Windows® każdy stanowi jednolitą całość. Program to nie jeden plik, ale cały zestaw plików, bibliotek i modułów. Takie biblioteki. Każda firma musi rzecz jasna napisać własne, bo źródła innych nie są wolne, nie ma do nich dostępu. 3 firmy piszą 3 biblioteki. W każdej z nich programiści popełniają błędy, bo nikt nie jest idealny. Ale każdy skupia się na swojej bibliotece i bez pomocy innych, obiektywnych programistów czy testerów nie jest w stanie odkryć wszystkich błędów jakie popełnił podczas pisania. W środowisku OpenSource jest odwrotnie. Programiści, pisząc swoje programy wykorzystują biblioteki które są wolnodostępne. Te biblioteki są współdzielone między równymi programami. Takie biblioteki czy nawet programy które wykorzystuje konkretna aplikacja, są nazywane zależnościami. Dzięki temu np. program Gimp (linuksowy odpowiednik Adobe® Photoshop™) zajmuje… 2,7 MiB!
Każda biblioteka jest współtworzona przez wielu programistów, którzy dodają własne poprawki i ulepszenia z każdą kolejną wersja.
Dzięki temu biblioteki takie są coraz szybsze, sprawniejsze, pozbawione błędów i bardziej funkcjonalne.

dpkg

Jak nadmieniłem – apt, który jest nakładką na program dpkg jest na tyle funkcjonalny, że praktycznie uwalnia nas od korzystania z samego dpkg. Jeśli zajdzie taka potrzeba – opiszę szczegółowo wykorzystanie tego programu.

apt a apt-get

apt sam w sobie jest nadal w fazie rozwoju i implementacji. Równolegle rozpoczęto rozwój modułu apt oznaczonego apt-get. Nim też będziemy się zajmować, ponieważ podręcznik programu apt wygląda tak:

NAME
       apt - Advanced Package Tool

SYNOPSIS
       apt

DESCRIPTION
       APT  is  a  management system for software packages.  It is still under
       development; the snazzy front ends are not yet available.  In the mean‐
       time, please see apt-get(8).

OPTIONS
       None.

FILES
       None.

SEE ALSO
       apt-cache(8), apt-get(8), apt.conf(5), sources.list(5)

Konfiguracja apt’a

Konfiguracja programu odbywa się za pomocą pliku /etc/apt/sources.list o którym wspomniałem na początku. To jedyny plik który musimy wyedytować aby zmienić konfigurację apt

sources.list

Na początek chciałbym przedstawić swój plik sources.list. Można go śmiało zapisać w katalogu /ect/apt (pakiety dotyczą ubuntu oraz kubuntu). Do tego można użyć komendy:

sudo mv ~/sources.list /etc/apt/sources.list

Z założeniem, że zapisaliśmy nowy plik o treści, która znajduje się poniżej w katalogu domowym.

deb http://pl.archive.ubuntu.com/ubuntu dapper main restricted
deb-src http://pl.archive.ubuntu.com/ubuntu dapper main restricted

deb http://pl.archive.ubuntu.com/ubuntu dapper-updates main restricted
deb-src http://pl.archive.ubuntu.com/ubuntu dapper-updates main restricted

deb http://security.ubuntu.com/ubuntu dapper-security main restricted
deb-src http://security.ubuntu.com/ubuntu dapper-security main restricted

deb http://security.ubuntu.com/ubuntu dapper-security universe
deb-src http://security.ubuntu.com/ubuntu dapper-security universe

deb http://archive.ubuntu.com/ubuntu dapper universe multiverse
deb-src http://archive.ubuntu.com/ubuntu dapper universe multiverse

deb http://archive.ubuntu.com/ubuntu dapper-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu dapper-backports main restricted universe multiverse

deb http://kubuntu.org/packages/kde-latest dapper main
deb http://kubuntu.org/packages/amarok-latest dapper main
deb http://kubuntu.org/packages/koffice-latest dapper main
deb http://packages.freecontrib.org/ubuntu/plf dapper free non-free
deb-src http://packages.freecontrib.org/ubuntu/plf dapper free non-free

deb http://wine.budgetdedicated.com/apt dapper main
deb-src http://wine.budgetdedicated.com/apt dapper main

deb http://xgl.compiz.info/ dapper main
deb-src http://xgl.compiz.info/ dapper main

deb http://www.beerorkid.com/compiz/ dapper main

deb http://mirror2.ubuntulinux.nl/ dapper-seveas all
deb http://antesis.freecontrib.org/mirrors/ubuntu/plf/ dapper free non-free

deb http://www.kadu.net/download/binary/ubuntu/repo dapper main
deb-src http://www.kadu.net/download/binary/ubuntu/repo dapper main

deb http://morgoth.free.fr/ubuntu dapper-backports main
deb-src http://morgoth.free.fr/ubuntu dapper-backports main

deb http://deb.svx.pl dapper main universe multiverse
deb-src http://deb.svx.pl dapper main universe multiverse

Plik zamieściłem również na serwerze – jest dostępny do pobrania pod adresem http://files.ludwikc.net/trash/linux/sources.list. Więcej repozytoriów można znaleźć w tym wątku na forum ubuntu.pl.

W powyższym przykładzie podane są jedynie repozytoria oparte o protokół http. Należy jednak pamiętać, że program apt-get świetnie radzi sobie również z protokołami ftp czy ssh!

Wprawdzie więcej na temat tego pliku wiedzieć nam nie trzeba, ale należy się słowo komentarza. Pierwsza “kolumna” zaznacza jakiego typu jest pakiet. deb to paczki skompilowane, a deb-src to źródła tychże. Po adresie serwera repozytoriów należy koniecznie podać wersję systemu (p. niżej), a następnie sekcję poprzez sekcję należy rozumieć grupy pakietów, które są dobierane wg tabeli:

Wolne oprogramowanie Zamknięte oprogramowanie
Wspierane main restricted
Niewspierane universe multiverse

Dzięki takiemu podziałowi możemy dokładnie wybrać pakiety z których będziemy korzystać. Przykładowo ograniczając plikowi sources.list dostęp do repozytoriów do sekcji main i universe mamy 100% pewność, że nasz system jest w 100% OpenSource i w 100% legalny.

Przyjęto następującą metodę podawania wersji systemu:

Wersja Nazwa Tłumaczenie Skrót
4.10 Warty Warthog Piegowaty Guziec warthog
5.04 Hoary Hedgehog Sędziwy Jeż horay
5.10 Breezy Badger Serdeczny Borsuk breezy
6.06 Dapper Drake Wytworny Kaczor dapper
6.10 Edgy Eft Przebiegła Traszka edgy

Owy skrót jest bardzo ważny, ponieważ wraz z kolejnymi wersjami systemu mogą np. zmienić się pewne elementy systemu lub ich położenie, którego podanie jest wymagane do prawidłowego przeprowadzenia procesu instalacji.

Użytkowanie

Polecenie apt-get jest dostępne jedynie z konta roota lub dla uprawnionych użytkowników poprzez sudo. Zdecydowanie najczęściej wykorzystywanymi poleceniami programu jest komenda install, remove oraz update.

Aktualizacja

Polecenie służy do aktualizacji repozytoriów, po zamianie zawartości pliku sources.list. . Sprawdzana jest lista repozytoriów, możliwość połączenia się z nimi oraz klucze gpg.

Instalacja

Instalacja oprogramowania w systemie Ubuntu jest najprostszą z możliwych. Sprowadza się ona do wydania jednego polecenia:

apt-get install nazwa_pakietu

W ten sposób mamy dostęp do wspomnianych wyżej dwudziestu tysięcy pakietów.

apt-get za każdym razem wyświetla informację o pakietach jakie są wymagane, aktualizowane oraz sugerowane (te ostatnie nie zostaną pobrane jednak twórcy programu lub paczki zaznaczyli, że te są pomocne w użytkowaniu, choć nie są wymagane do prawidłowego funkcjonowania aplikacji).

root@ludwikc-desktop:/home/ludwikc# apt-get install gaim
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności... Gotowe
Zostaną zainstalowane następujące dodatkowe pakiety:
  gaim-data libgtkspell0 liblaunchpad-integration0
Sugerowane pakiety:
  gnome-panel evolution-data-server libzephyr3
Zostaną zainstalowane następujące NOWE pakiety:
  gaim gaim-data libgtkspell0 liblaunchpad-integration0
0 aktualizowanych, 4 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych.
Konieczne pobranie 1473kB archiwów.
Po rozpakowaniu zostanie dodatkowo użyte 13,0MB miejsca na dysku.
Czy chcesz kontynuować [T/n]? n
Przerwane.
root@ludwikc-desktop:/home/ludwikc#

Na koniec podsumowania zostaje wyświetlone potwierdzenie chęci przeprowadzenia instalacji, na które trzeba odpowiedzieć klawiszem t lub n. Pytanie to jest wyświetlane jednak tylko w przypadku, gdy oprócz żądanego pakietu wymagane jest pobranie zależności badź aktualizacji innych pakietów. W momencie gdy wybieramy aplikację, która takowych nie wymaga instalacja przebiega automatycznie do samego końca.

root@ludwikc-desktop:/home/ludwikc# apt-get install wmfishtime
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności... Gotowe
Zostaną zainstalowane następujące NOWE pakiety:
  wmfishtime
0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych.
Konieczne pobranie 16,5kB archiwów.
Po rozpakowaniu zostanie dodatkowo użyte 102kB miejsca na dysku.
Pob: 1 http://archive.ubuntu.com dapper/universe wmfishtime 1:1.24-4 [16,5kB]
Pobrano 16,5kB w 5s (2941B/s)
Zaznaczenie poprzednio niezaznaczonego pakietu wmfishtime.
(Odczytywanie bazy danych ... 85526 plików i katalogów obecnie zainstalowanych.)
Rozpakowanie wmfishtime (z .../wmfishtime_1%3a1.24-4_i386.deb) ...
Konfigurowanie wmfishtime (1.24-4) ...
root@ludwikc-desktop:/home/ludwikc#

Od tego momentu program wmfishtime jest dostępny w systemie. Bardzo proszę o przyznanie racji osobom, które utrzymują, że instalacja oprogramowania pod linuksem jest trudna 🙂

Usuwanie

Proszę też takim osobom zaznaczyć, że odinstalowywanie jest jeszcze trudniejsze. Oto przykład:

root@ludwikc-desktop:/home/ludwikc# apt-get remove wmfishtime
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności... Gotowe
Następujące pakiety zostaną USUNIĘTE:
  wmfishtime
0 aktualizowanych, 0 nowo instalowanych, 1 usuwanych i 45 nieaktualizowanych.
Konieczne pobranie 0B archiwów.
Po rozpakowaniu zostanie zwolnione 102kB miejsca na dysku.
Czy chcesz kontynuować [T/n]? T
(Odczytywanie bazy danych ... 85536 plików i katalogów obecnie zainstalowanych.)
Usuwanie wmfishtime ...
root@ludwikc-desktop:/home/ludwikc#

I po pakiecie…
Ważna informacja: zależności nie są usuwane wraz z pakietem, nawet jeśli są wykorzystywane tylko przez usuwany pakiet! Jeśli chcemy usunąć zależności, musimy byc pewni, że nie są one wykorzystywane przez inne pakiety. Do usunięcia takich pakietów (a właściwie ich odnalezienia) przydaje sie narzędzie deborphan. Jak je znaleźć? Patrz apt-cache 🙂

Dodatkowe opcje

Każde z poleceń ma dodatkowe opcje. np.

  • -d – tylko pobranie pliku, bez instalacji
root@ludwikc-desktop:/home/ludwikc# apt-get -d install wmfishtime
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności... Gotowe
Zostaną zainstalowane następujące NOWE pakiety:
  wmfishtime
0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych.
Konieczne pobranie 16,5kB archiwów.
Po rozpakowaniu zostanie dodatkowo użyte 102kB miejsca na dysku.

Ukończono pobieranie w trybie samego pobierania
root@ludwikc-desktop:/home/ludwikc#
  • -s – symulacja instalacji
root@ludwikc-desktop:/home/ludwikc# apt-get -s install wmfishtime
Czytanie list pakietów... Gotowe
Budowanie drzewa zależności... Gotowe
Zostaną zainstalowane następujące NOWE pakiety:
  wmfishtime
0 aktualizowanych, 1 nowo instalowanych, 0 usuwanych i 45 nieaktualizowanych.
Inst wmfishtime (1:1.24-4 Ubuntu:6.06/dapper)
Conf wmfishtime (1:1.24-4 Ubuntu:6.06/dapper)
root@ludwikc-desktop:/home/ludwikc#

Dwie ostatnie linijki (Inst – instalacja, Conf – konfiguracja) potwierdzają, że instalacja przebiegnie bez błędów.

  • –reinstall – usunięcie i ponowna instalacja pakietu znajdującego się juz w systemie.

Inne możliwości

apt-cache

Oprócz apt-get program apt posiada więcej wbudowanych funkcji, jaknp. bardzo przydatne apt-cache (czyt. apt-kesz), ktore na podstawie wykonanego wcześniej apt-gaet update pozwala na odczytywanie z pamięci takich informacji jak np. podsumowanie pakietu lub wyszukiwanie go spośród listy repozytoriów.

Informacje o pakiecie

Na przykładzie programu GRUB:

root@ludwikc-desktop:/home/ludwikc# apt-cache show grub
Package: grub
Priority: optional
Section: admin
Installed-Size: 748
Maintainer: Grub Maintainers <pkg-grub-devel@lists.alioth.debian.org>
Architecture: i386
Version: 0.97-1ubuntu9
Depends: libc6 (>= 2.3.4-1), libncurses5 (>= 5.4-5)
Suggests: grub-doc, grubconf
Filename: pool/main/g/grub/grub_0.97-1ubuntu9_i386.deb
Size: 362200
MD5sum: b331cdd615a96933db0dc34042cb0964
Description: GRand Unified Bootloader
 GRUB is a GPLed bootloader intended to unify bootloading across x86
 operating systems.  In addition to loading the Linux kernel,
 it implements the Multiboot standard, which allows for flexible loading
 of multiple boot images (needed for modular kernels such as the GNU Hurd).
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu

root@ludwikc-desktop:/home/ludwikc#

W kolejności wiersze oznaczają:

  • nazwę pakietu
  • priorytet
  • sekcję
  • rozmiar po zainstalowaniu
  • właściciela pakietu
  • architekurę pod jaką został zoptymalizowany
  • wersję
  • zależności
  • pliki zalecane do instalacji
  • ścieżkę na serwerze repozytorium
  • rozmiar paczki
  • sumę MD5
  • opis pakietu
  • adres pod którym można zgłaszać błędy
  • system, pod jaki został przygotowany dany pakiet

Statystyki repozytoriów

Pocecenie apt-cache stats pozwala na przejrzenie statystyk naszych repozytoriów:

root@ludwikc-desktop:/home/ludwikc# apt-cache stats
Liczba nazw pakietów : 24259 (970k)
  Zwykłych pakietów: 18854
  Czysto wirtualnych pakietów: 358
  Pojedynczych pakietów wirtualnych: 1047
  Mieszanych pakietów wirtualnych: 201
  Brakujących: 3799
W sumie różnych wersji: 20974 (1007k)
W sumie zależności: 149842 (4196k)
W sumie zależności wersja/plik: 22137 (354k)
W sumie mapowań zapewnień: 3543 (70,9k)
W sumie dopasowanych napisów: 174 (2246)
Sumaryczny rozmiar obszaru zależności od wersji: 679k
Sumaryczny rozmiar niewykorzystanego miejsca: 92,2k
Całkowity rozmiar: 6692k
root@ludwikc-desktop:/home/ludwikc#

W nawiasach podano podano liczbę tzw. pakietów wirtualnych. Ich powstanie wiązało się z tym, że dany pakiet był znany pod różnymi nazwami, więc aby uniknąć problemów z ich wyszukiwaniem postanowiono utworzyć “aliasy”, które są dzisiaj pakietami wirtualnymi.

Podsumowanie

Możemy przejrzeć krótkie podsumowanie plików znajdujących się w repozytoriach. Służy do tego polecenie

apt-cache dump

(czyt. damp).
Uwaga: Wcześniej wyświetliliśmy ilość pakietów znajdujacych się w repozytoriach. Wykonanie polecenia dump może być czasochłonne, a do tego nie bedziemy w stanie wszystkoiego odczytać. W związku z tym trzy podpowiedzi:

Jeśli chcemy wyświetlać listę “stronami” (lista jest bardzo długa!) należy polecenie dump wpuścić w potok less

apt-cache dump | less

Zapisanie listy w pliku odbywa się poprzez polecenie

apt-cache dump >> mojalista.txt

Możemy też w dowolnym momencie przerwać wykonywanie polecenia poprzez uzycie skrótu klawiaturowego

Ctrl+C

(Skrót ten działa zawsze w konsoli, niezależnie od wykonywanego polecenia!)

Zależności

Sprawdzenie zależności umożliwia polecenie depends

apt-cache depends nazwa pakietu

Wyszukiwanie

apt-cache ma dwie funkcje wyszukiwania. Pierwszą jest poszukiwanie wyrażenia w całości podsumowania pliku, a druga to sprawdzanie początków nazw paczek

apt-cache search wyrażenie

Należy jednak zwrocić uwagę, że to polecenie poszukuje ciągu znaków “wyrażenie” we wszystkich polach informacji o danym pakiecie, dlatego w komunikacie zwrotnym mogą znaleźć się paczki pozornie zupełnie z poszukiwanym ciągiem znaków nie związane. Daje nam ono jednak szanse na odnalezie programów związanych z danym tematem, np: usenet (czyt. juznet) – czyli grupami dyskusyjnymi.

apt-cache pkgnames począt

To polecenie wyszukuje nazwy pakietów wg ciągu znaków podanego jako argument polecenia. Przykładowe począt może stanowić ciąg dla wyszukiwania początek-nazwy-pakietu lub początkowe-nauczanie ale nie nauczanie-początkowe!

Aktualizacja systemu UbuntuLinux

Dzięki programowi apt możemy bezboleśnie, w kilku krokach przeprowadzić aktualizacje całego systemu. Sprowadza się to do wydania kolejno komend:

apt-get update
apt-get upgrade
apt-get dist-upgrade

Całość trwa jakiś czas, ponieważ z reguły potrzebne jest pobranie bardzo wielu pakietów. Mój rekord aktualizacji Ubunutu (z wersji breezy do dapper) to 10 godzin, bez używania płytki CD. Przy używaniu płyty czas ten skraca się do godziny.
Ze wszystkim można sobie poradzić i do wszystkiego mamy wolny dostęp – możemy aktualizować system przez godzinę lub 10. Wszystko zależy od nas.
A jak mówi dewiza jednego z linuksowych portali: Przywróć radość użytkowaniu komputerów. Używaj Linuksa!

[tags]ubuntu, linux, apt, howto[/tags]

Ludwik C. Siadlak

Bloger, vloger i podcaster. Z zawodu trener nowoczesnych technologii i skutecznej komunikacji. Do tego motocyklista, honorowy obywatel New Britain w CT, USA. Na tym blogu piszę o skutecznej komunikacji, poprawianiu swoich umiejętności interpersonalnych, ale przede wszystkim o praktycznych scenariuszach przejmowania władzy nad światem.

View Comments

  • Dobre. Przydałoby się jeszcze tylko pokrótce opisać bardzo wygodne ustrojstwo, jakim jest apt-file oraz funkcję autoremove, która pojawiła się całkiem niedawno ;)

  • Przydalby sie opis jak zapuscic aktualizacje z plyty CD z nowym ubuntu

    bo samo wpisanie plytki do list zrodel nic nie daje

  • W twoim howto przydałoby się jeszcze opisać apt-cdrom, aptitude (lepiej sprawdza zależności niż apt), oraz wajig (nakładka na apta i dpkg - wygodniejsza bo łatwiej zapamiętać komendy).

    PS: zmieniłem adres bloga więc przydałoby się żebyś go uaktualnił w swoim blogrollu
    PS2: spamkarma nie generuje ci obrazków dla captchy

  • Dzięki za uwagi. Uaktualnie wkrótce oryginalny wpis w wiki, prezentację tutaj zamieszczoną pozostawię jednak bez zmian, żeby w przyszłości wiedzieć co pominąłem ;-)
    Zastanawiam się nad analogicznym opisaniem pacmana, bo z apt'em juz nie mam do czynienia na codzien.

Share
Published by
Ludwik C. Siadlak

Recent Posts

Betify France – Découvrez la Meilleure Plateforme de Paris en Ligne_1

Table of Contents Betify France - Découvrez la Meilleure Plateforme de Paris en Ligne Exploration…

3 hours ago

The direction to go Internet casino: Step-by-Step Package Out of InnovecsGaming

PostsApp pick:How much time It needs to help you Discharge an on-line Local casinoStep 2:…

3 days ago

Non-GamStop Live Broker Sites 2025

To learn more in the such or other finest United kingdom casinos maybe not on…

4 days ago

1WIN casino lugar formal: app, login, 1win bet

Él casino de 1win os ofrecerá streaming totalmente sobre avispado de determinados eventos así­ como…

4 days ago

resmi bir çevrimiçi kumarhanesinin bonuslar ile avantajları.

Sertifikasyon; Kumar kaynağı en önemli koşullarından tek olan dürüstlük ve güvenlik. sanal kumar platformu bonusları…

4 days ago

Çevrimiçi casinolar için ayrıcalıklar ile slotlar Geliştirilmesi: tanınmış geliştiriciler

En iyi online casinolar kodlama tedarikçilerine özel dikkat edin. Bu soru fazlaca ayrıntıları dikkate almak…

4 days ago