IT News: Digital Camera, OS, Laptop, Smartphone, Smart TV, Sound...

The Author's Project by Valeri N.Kravchuk
Сайт проверен Dr.Web
Меню сайта
  • Главная страница
  • Информация о сайте
  • Дневник
  • Каталог файлов
  • Обратная связь
  • Каталог сайтов
  • FAQ
  • Доска объявлений
  • Форум
  • Фотоальбом
  • Категории раздела
    Автомобильные гаджеты, ремонт... [144]
    Безопасность IT [404]
    Блоки питания, Power Banks, зарядки... [512]
    Видеорегистраторы [188]
    Гаджеты для спорта и здоровья... [191]
    Гаджеты, аксессуары... [627]
    Измерительная техника, инструменты [446]
    Накопители данных [233]
    Нетбуки, Ноутбуки, Ультрабуки [691]
    Мультиварки, блендеры и не только... [164]
    Планшеты [764]
    Радар-детекторы [26]
    Роботы-пылесосы [40]
    Своими руками [366]
    Сети, сетевые технологии, оборудование... [273]
    Смартфоны [4963]
    Фотокамеры, объективы, искусство фотографии.. [541]
    Умный дом [53]
    Электронные книги [102]
    CB, LPD, PMR- связь... [170]
    DECT, IP-телефоны [18]
    Drones, boats, cars... [109]
    electric cars [35]
    GPS-навигаторы, трекеры... [51]
    Linux и не только [3983]
    mini computers и не только... [412]
    News IT, Это интересно, ликбез... [1121]
    Smart TV, UltraHD, приставки, проекторы... [416]
    Smart Watch [269]
    Sound: наушники, плееры, усилители... [619]
    Windows 10... [301]
    Windows 11 [37]
    Погода

  • Метеорадар БРЕСТ
  • Погода в Бресте от www.yr.no

    Яндекс.Погода БРЕСТ

  • Интересные ссылки

    COMPIZOMANIA

    Наш опрос
    Оцените мой сайт
    Всего ответов: 1347
    Статистика
    Анализ веб сайтов

    Яндекс.Метрика

    Рейтинг@Mail.ru Яндекс цитирования

    Russian America Top. Рейтинг ресурсов Русской Америки.

    eXTReMe Tracker

    Правильный CSS!


    Онлайн всего: 127
    Гостей: 127
    Пользователей: 0
    Locations of visitors to this page
    Форма входа
    Главная » 2014 » Сентябрь » 2 » Cubietruck. Уютный, домашний сервер
    19:17
    Cubietruck. Уютный, домашний сервер

    Cubietruck. Уютный, домашний сервер


    Недавно купил вот такую красоту.
    Поигрался с Android на ней и решил сделать домашний сервер на замену RaspberryPI.

    *Картинка не моя… если разберу хлам — сделаю свою.

    От автора, т.е. меня:
    Не судите строго, это моя первая статья.
    Буду рад конструктивной критике и помощи от более скиллованых пользователей!
    Заранее Спасибо!


    Ну чтож, начнем пожалуй!

    1. Введение
    2. Установка Системы
      • Установка системы в NAND
      • Установка системы на SD
      • Перенос системы в SATA
      • Перенос системы в NAND
    3. Первое включение
      • Смена порта SSH
      • Настройка сети
      • Установка часового пояса
      • Автоматическое монтирование раздела HDD
    4. Настройка сервера
      • Установка Nginx + php5-fpm + mysql
      • Установка торрент клиента Transmission
      • Установка Samba
    5. Удаленное управление Ajenti/Webmin

    1. Введение


    Основной задачей была замена малинки на что-то более шустрое и с нормальной скоростью доступа к жесткому диску, т.к. основное предназначение сего сервера — это файлопомойка, медиасервер, торрентокачалка.
    Остановался на Cubietruck, она-же Cubieboard3.
    Характеристики уже проскакивали на хабре habrahabr.ru/post/186576/
    В дополнение я купил 1Тб SATA HDD Hitachi 7K1000
    Т.к. на хабре не видел полного руководства по настройке данного девайса, решил сделать свой гайд с го и гейшами.

     

    2. Установка системы


    Для CubieTruck'а существует несколько разных дистрибутивов.
    Я сегодня буду рассматривать установку и настройку Cubian.

    Установка системы в NAND


    Мне лично такой вариант установки не очень нравится, т.к. NAND имеет ограниченное количество циклов записи/перезаписи, а если у вас будет стоять SQL сервер, то эти циклы очень быстро закончатся. ИМХО!
    Скачиваете необходимый образ здесь

    Если вы вользователь Linux, то:


    Берете отсюда LinuxSuite (есть 32 и 64-битные версии)
    Запускаете Livesuite

    $ ~/Bin/LiveSuit/LiveSuit.sh
    

    Выбирате образ для заливки


    Переводите устройство в режим EFL
    1. Зажимаете кнопку EFL


    2. Втыкаете miniusb кабель в плату и ждете запрос от Livesuite.
    ВНИМАНИЕ: многие USB порты не дадут нужного питания плате, поэтому перед тем как нажать «Да» — подключите плату к блоку питания (рекомендуется 5В не менее 3А)
    3. Жмете «Да»


    Дожидаетесь пока образ полностью зальется на ваше устройство.


    Теперь можете отключать устройство от ПК и запускать отдельно ))
     

    Если вы пользователь Windows, то:


    — берете отсюда PhoenixSuite.

    Запускаете PhoenixSuite:


    Выбирате образ для заливки


    Переводите устройство в режим EFL
    1. Зажимаете кнопку EFL

     


    2. Втыкаете miniusb кабель в плату и ждете запрос от Livesuite.
    ВНИМАНИЕ: многие USB порты не дадут нужного питания плате, поэтому перед тем как нажать «Да» — подключите плату к блоку питания (рекомендуется 5В не менее 3А)
    3. Жмете «Да»

    Ждете пока образ полностью зальется на ваше устройство.
    Теперь можете отключать устройство от ПК и запускать отдельно.
     

    Установка системы на SD карту


    Скачиваем необходимый образ отсюда:
    Я для примера буду пользоваться дистрибутивом Cubian.
    Если у вас Linux:
    Разархивируйте скачанный архив.
    Запишите образ на вашу SD карту

    dd if=путь_к_образу of=/dev/ваша_sd_карта bs=4096; sync
    


    Например:

    dd if=/home/pupkin/Cubian-base-r5-a20-ct.img of=/dev/sdb1 bs=4096; sync
    


    По окончании можете вытащить карту и установить её в ваш Cubietruck.

    Если вы пользователь Windows:
    — Скачиваете Image writer, github.com/downloads/openSUSE/kiwi/ImageWriter.exe или cubieplayer.github.io/Cubian/tools/;
    — Разархивируйте полученный файл;
    — Переименуйте файл из img в raw (программа находит только такое расширение).
    — Запишите образ на вашу SD карту:
     

    Перенос системы на SATA диск


    Для переноса системы из NAND раздела на SATA диск вам потребуется выполнить несколько команд:
    логинимся под рутом

    sudo su - root
    


    создаем папки для монтирования разделов

    mkdir /tmp/1 /tmp/target
    


    монтируем NAND раздел

    mount /dev/nandb /tmp/1
    


    форматируем SATA раздел в ext4

    mkfs.ext4 /dev/sda1
    


    монтируем SATA раздел

    mount /dev/sda1 /tmp/target
    


    Перемещаем систему

    (cd /tmp/1; tar --backup -c *) |tar -C /tmp/target -xv
    


    Изменяем настройки загрузки

    mount /dev/nanda /mnt/
    nano /mnt/uEnv.txt
    


    (Замените root=/dev/sda1)
    В итоге, файл должен выглядеть так:

    cat /mnt/uEnv.txt
    root=/dev/sda1
    extraargs=console=tty0 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x720p50 rootwait panic=10 rootfstype=ext4 rootflags=discard
    


    Синхронизируем наши изменения

    sync
    


    Отмонтируем раздел

    umount /mnt
    


    и ребут!

    reboot
    
    

    Перенос системы с SD карты в NAND раздел


    После копирования образа и загрузки с SD карты вы можете перенести вашу систему в NAND раздел с помощью одной простой комманды:

    sudo ~/nandinstall/install.sh
    
    

    Если в вашем дистрибутиве нет такого скрипта вы можете его скачать и установить:

    apt-get install cubian-nandinstall && sudo cubian-nandinstall
    
    

    3. Первое включение


    Итак зайдя в свой домашний роутер, я увидел, что мой кубик получил адрес 192.168.0.108
    Подключаемся к нему. Если вы подключаетесь с Linux машины, то открываем терминал и пишем
     

    ssh -p 36000 192.168.0.108 -l cubie
    


    Где 36000, порт для SSH соединения. В целях безопасности выбран нестандартный порт, как его поменять написано здесь. cubie — это логин пользователя, пароль тоже cubie
    После чего должно пройти соединение и появиться сообщение о добавлении ключа SSH соединения в базу данных ключей. Оно появляется только один раз, при добавлении новой комбинации ключ+устройство. Пишем yes.
    Если подключаемся с Windows машины, то выбираем SSH клиент по вашему вкусу, в большинстве случаев это Putty.

    Подключаемся и первым делом меняем пароль пользователя:

    sudo passwd cubie
    


    И создаем пользователя root, который по умолчанию отсутствовал в целях безопасности, но нам он потом будет нужен, так что создадим его сейчас:

    sudo passwd root
    

     

    Смена порта подключения SSH


    Если вас не устраивает порт 36000 для SSH доступа, можно сменить его на стандартный порт 22:
    Открываем файл /etc/ssh/sshd_config

    sudo nano /etc/ssh/sshd_config
    


    Находим строчку

    Port 36000
    


    Меняем на

    Port 22
    


    Теперь кубик доступен так:

    ssh cubie@192.168.0.108
    
    
    Настройка сети


    По умолчанию настройки хранятся в файле /etc/network/interfaces.
    Посмотрим что у нас:

    sudo cat /etc/network/interfaces
    


    Видим конфигурацию сети по умолчанию

    auto eth0
    allow-hotplug eth0
    iface eth0 inet dhcp
    


    auto eth0 подразумевает автоконфигурирование интерфейса при загрузке
    allow-hotplug eth0 и iface eth0 inet dhcp подразумевает, что когда ядро Linux определит физический интерфейс eth0, строка allow-hotplug поднимет его, а строка iface присвоит ему адрес по DHCP.
    Внимание! Такая конфигурация настраивает сетевой адрес по DHCP если кабель подключен при загрузке. Если же кабель при загрузке не был подключен, то загрузка блокируется на одну минуту для ожидания таймаута DHCP. Таким образом, если вам совершенно не нужна проводная сеть, то закомментируйте или удалите строчку auto eth0 в /etc/network/interfaces, это сэкономит вам время при загрузке.
    Чтобы закомментировать просто добавьте # перед auto eth0, это выглядит так #auto eth0
    Вы все еще сможете поднять и настроить интерфейс вручную, выполнив команду

    ifup eth0
    


    Если вам требуется прописать постоянный адрес кубику, то вот пример конфигурации

    allow-hotplug eth0
    iface eth0 inet static
     address 192.168.1.110
     netmask 255.255.255.0
     gateway 192.168.1.1
     dns-nameservers 192.168.1.1
    

    Хотя я больше склоняюсь к автоматическому присвоению адреса от роутера.

    Настройка wi-fi
    Загрузка модуля

    modprobe bcmdhd
    



    Для того, чтобы wi-fi автомачтиески загружался при старте системы добавьте строку «bcmdhd» в конец файла /etc/modules.

    Примеры команд для использования wi-fi:

    iwlist scan
    iwconfig wlan0 essid "ssid" key xxxx
    iwconfig wlan0
    ifconfig wlan0 up
    dhclient wlan0
    
    
    Установка часового пояса


    Задаем часовой пояс

    dpkg-reconfigure tzdata
    


    Добавляем сервера:

    sudo nano /etc/ntp.conf
    

     

    server 0.debian.pool.ntp.org iburst
    server 1.debian.pool.ntp.org iburst
    server 0.ru.pool.ntp.org iburst
    server 1.ru.pool.ntp.org iburst
    


    — ближайшие сервера можете взять отсюда — www.pool.ntp.org/

    sudo /etc/init.d/ntp start
    
    Автоматическое монтирование раздела HDD


    Статей о монтировании разделов существует уже огромное количество, но т.к. мне это тоже понадобилось, добавлю для полноты картины.

    Создаем папку, куда будет смонтирован HDD

    sudo mkdir /media/files
    


    Даем право доступа на чтение/запись для всех пользователей

    sudo chmod 777 /media/files
    


    Чтобы посмотреть какие разделы у нас на hdd пишем

    sudo fdisk -l
    


    Смотрим в конец и видим примерно следующее

    fdsik -l


    У меня три раздела на HDD, я буду монтировать третий (/dev/sda5)
    Узнаем UUID нашего раздела:

    sudo blkid
    


    Пример вывода:

    blkid
    /dev/nanda: SEC_TYPE="msdos" LABEL="Volumn" TYPE="vfat"
    /dev/nandb: UUID="fc870bf6-cf02-4f17-aab6-a2ee56137668" TYPE="ext4"
    /dev/sda1: UUID="df0f786f-4b74-4710-a128-412b81a6bece" TYPE="ext4"
    /dev/sda5: UUID="4dc5f707-d7fa-4a48-ad32-efddb23cbf97" TYPE="ext4"
    


    Нам нужна строчка /dev/sda5, копируем все что в кавычках

    4dc5f707-d7fa-4a48-ad32-efddb23cbf97
    


    Помните у вас эта строчка будет иной!
    Далее открываем /etc/fstab:

    sudo nano /etc/fstab
    


    Добавляем в самый конец:

    UUID=4dc5f707-d7fa-4a48-ad32-efddb23cbf97 /media/files ext4 defaults,acl,user,user_xattr,errors=remount-ro
    


    * аттрибуты выставляете по своему вкусу
    Записи разделяем либо пробелом, либо табуляцией
    Перезагружаемся:

    sudo reboot
    


    После перезагрузки проверяем

    mount
    
    mount
    /dev/root on / type ext4 (rw,relatime,discard,data=ordered)
    devtmpfs on /dev type devtmpfs (rw,relatime,size=934508k,nr_inodes=137526,mode=755)
    tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=186924k,mode=755)
    tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)
    proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
    sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
    tmpfs on /run/shm type tmpfs (rw,nosuid,nodev,noexec,relatime,size=373840k)
    devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
    tmpfs on /tmp type tmpfs (rw,relatime)
    tmpfs on /var/tmp type tmpfs (rw,relatime)
    /dev/sda5 on /media/files type ext4 (rw,nosuid,nodev,noexec,relatime,errors=remount-ro,data=ordered)


    Видим, что третий раздел смонтирован в нужную папку.
     

    4. Настройка сервера


    Ну и так как у меня кубик все-же это сервер — настраиваем samba, nginx, transmission.
    Вы можете воспользоватся скриптом github.com/igorpecovnik/Debian-micro-home-server

    sudo apt-get -y install git
    cd ~
    git clone https://github.com/igorpecovnik/Debian-micro-home-server
    chmod +x ./Debian-micro-home-server/install.sh
    cd ./Debian-micro-home-server
    sudo ./install.sh
    


    Или установить только то что нужно

    Установка Nginx + php5-fpm + mysql


    Устанавливаем nginx:

    sudo apt-get install nginx
    


    Запускаем

    sudo /etc/init.d/nginx start
    


    Открываем браузер, пишем адрес кубика.
    Видим следующую надпись

    Welcome to nginx!

    Сервер запущен
    Для примера анши сайты будут хранится на уже примонтированном жестком диске.
    Для этого нужно поправить конфиг nginx

    sudo nano /etc/nginx/sites-available/default
    


    Находим строчку

    root /usr/share/nginx/www
    


    Меняем на

    root /media/files/www
    


    Сохраняем, закрываем редкатор
    Не забываем дать доступ пользователю nginx'a к папке:

    sudo chown www-data -R /media/files/www/
    sudo chmod 0755 -R /media/files/www/
    


    Перезапускаем nginx

    sudo /etc/init.d/nginx restart
    


    или

    sudo service nginx restart
    


    Для статичных сайтов этого, в принципе, достаточно.
    Если вам необходимо php скрипты — продолжаем редактировать /etc/nginx/sites-available/default
    Находим в файле строку:

    index index.html index.htm
    


    Через пробел добавляем

    index.php
    


    Теперь включим возможность обработки php.

    Находим блок
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     #
     #location ~ \.php$ {
     # fastcgi_split_path_info ^(.+\.php)(/.+)$;
     # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
     #
     # # With php5-cgi alone:
     # fastcgi_pass 127.0.0.1:9000;
     # # With php5-fpm:
     # fastcgi_pass unix:/var/run/php5-fpm.sock;
     # fastcgi_index index.php;
     # include fastcgi_params;
     #}

     

    Меняем на
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
     #
     location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
     #
     # # With php5-cgi alone:
     # fastcgi_pass 127.0.0.1:9000;
     # # With php5-fpm:
     fastcgi_pass unix:/var/run/php5-fpm.sock;
     fastcgi_index index.php;
     include fastcgi_params;
     }


    Устанавливаем mysql

    sudo apt-get -y install mysql-client mysql-server openssl libsasl2-modules
    


    Устанавливаем php5-fpm и модули

    sudo apt-get install -y php5-fpm
    sudo apt-get install -y php5-mysql php5-curl php5-gd php5-intl
     php-pear php5-imagick php5-imap php5-mcrypt php5-memcache 
    php5-memcached php5-ming php5-ps php5-pspell php5-recode
     php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl memcached
    
    sudo apt-get install -y php-apc
    sudo apt-get install -y fcgiwrap
    

     

    Установка торрент клиента Transmission


    Установка Transmission-daemon

    sudo apt-get install transmission-daemon
    


    После завершения установки сервис автоматически запускается с настройками по умолчанию, остановим его

    sudo /etc/init.d/transmission-daemon stop
    


    или

    service transmission-daemon stop
    


    Теперь отредактируем конфиг

    sudo nano /etc/transmission-daemon/settings.json
    


    Все параметры рассматривать не будем, самые основные

    "download-dir": "/var/lib/transmission-daemon/downloads"
    


    Путь к закачиваемым файлам
    Меняем на свой, например:

    "download-dir": "/mnt/hdd"
    


    P.s. Надеюсь у вас по этому пути уже смонтирован жесткий диск

    Разрешаем форвардинг, не забывая включить UPnP в своем роутере

    "port-forwarding-enabled": false,
    


    Меняем на

    "port-forwarding-enabled": true
    


    Если хотим заходить в веб интерфейс по паролю, оставляем:

    "rpc-enabled": true
    


    иначе меняем на:

    "rpc-enabled": false
    
    

    Удаляем все, что в кавычках, пишем вместо этого желаемый пароль. Пароль при запуске демона зашифруется.

    "rpc-password": "{f40c259f547fb2b99f7faa1e27d6e9b31905e9c1DcVjhWHD"
    


    Например:

    "rpc-password": "cubietruck"
    
    

    Порт, на который вешаем web интерфейс

    "rpc-port": 9091
    
    

    Имя пользователя:

    "rpc-username": "transmission"
    


    меняем на свое понравившееся:

    "rpc-username": "pupkin"
    
    

    Оставляем, если хотим, чтобы к веб интерфейсу был доступ только с локальной машины:

    "rpc-whitelist-enabled": true
    


    иначе меняем

    "rpc-whitelist-enabled": false
    
    

    Сохраняем конфиг

    Запускаем сервис

    sudo /etc/init.d/transmission-daemon start
    


    или

    service transmission-daemon start
    
    

    Теперь проверим запустился ли сервис и веб интерфейс, открываем в браузере адрес

    http://ip_вашего_кубика:9091


    Если видим приглашение ввести логин и пароль, значит transmission работает.
     

    Установка Samba

    sudo apt-get install samba samba-common-bin
    


    Так как мой кубик находится в домашней сети, я решил не устанавливать пароль на доступ к папкам, а просто настроил публичный шаринг для всей сети.
    Для этого открываем файл smb.conf:

    sudo nano /etc/samba/smb.conf
    
    

    Вместо всего имеющегося содержимого пишем:

    [global]
    workgroup = WORKGROUP
    guest ok = yes
    netbios name = cubieT
    security = share
    browseable = yes
    
    [files]
    path = /media/files
    writeable = yes
    browseable = yes
    

    <

    Сохраняем. Перезапускаем Samba:

    sudo /etc/init.d/samba restart
    
    

    С этого момента в вашей сети появилось новое устройство cubieT, которое имеет папку files.
    В ней Вы можете создать любые файлы, которые будут доступны для просмотра во всей сети с помощью браузера.
     

    5. Удаленное управление Ajenti/Webmin


    Webmin лидер на рынке свободного серверного ПО для администрирования, имеет множество подключаемых модулей на любой вкус.
    Рассмотрим его установку
    Добавим репозиторий Webmin в список репозиториев

    sudo nano /etc/apt/sources.list
    
    

    Вставляем в конец списка следующие строки

    deb http://download.webmin.com/download/repository sarge contrib
    deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
    


    Сохраняем, выходим из редактора.
    Добавляем ключ репозитория в список ключей, для этого нужно быть под рутом.
    Включаем суперюзера, переходим в домашнюю папку root, скачиваем ключ, устанавливаем.

    sudo su
    cd /root
    wget http://www.webmin.com/jcameron-key.asc
    apt-key add jcameron-key.asc
    
    

    Обновляем список пакетов, устанавливаем webmin

    sudo apt-get update && apt-get install webmin
    


    Все зависимости установятся автоматически.

    Открываем браузер, пишем

    https://ip_вашего_кубика:10000


    Браузер ругается и предлагает покинуть сайт, но мы добавляем сайт в доверенную зону и входим.
    Пробуем сначала войти пользователем cubie, если не получается, то рутом.

    Можно отключить шифрование (https):
    Открываем файл конфигурации webmin

    sudo nano /etc/webmin/miniserv.conf
    


    находим строчку

    ssl=1
    


    1 меняем на 0
    Перезапускаем webmin

    sudo /etc/init.d/webmin restart
    


    Теперь webmin работает по адресу

    http://ip_вашего_кубика:10000
    


    Если вас не устраивает webmin, можете попробовать ajenti. Тем более, что никаких дополнительных движений делать не нужно, ajenti уже установлен в Cubian, нужно лишь обновить систему и он заработает.
    После обновления системы будет доступен по адресу

    http://ip_вашего_кубика:8000
    


    ***В планах разобраться с возможностями GPIO, т.к. на малинке был организован небольшой логгер данных с датчиков DHT22 и DS18B20.

     

    http://habrahabr.ru/post/225371/

    Категория: Linux и не только | Просмотров: 752 | Добавил: laptop | Рейтинг: 4.5/2
    Всего комментариев: 0
    Добавлять комментарии могут только зарегистрированные пользователи.
    [ Регистрация | Вход ]
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк слабее льва и тигра, но в цирке волк не выступает!
    Волк - единственный из зверей, который может пойти в бой на более сильного противника.
    Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...

    Праздники сегодня

    Поиск
    Календарь
    Архив записей
    Друзья сайта
  • Официальный блог
  • JEEP - the best! Mercedes - the best! Автомобильный портал города Бреста: технические характеристики с фото, авторынок, автоспорт...
    Наша кнопка
    IT новости с моего лаптопа...

    Внимание!
    Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.
    Copyright Valeri N.Kravchuk © 2007-2024