# 前提環境
# Raspberry Pi OS (64bit, Debian 13 "trixie" ベース)、Raspberry Pi 4 / 5 を想定
# 64bit 版 OS でない場合は、arm64 向けパッケージおよび多くの機械学習系パッケージが利用できない
# 以下のコマンドは、端末(ターミナル)を開いて実行する

# システムの更新
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt update
sudo apt -y full-upgrade

# Python 仮想環境
# Raspberry Pi OS の Python は PEP 668 により外部管理(externally-managed-environment)である
# システム領域への pip install は行わず、venv による仮想環境を作成して利用する
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install python3-full python3-venv python3-dev build-essential
python3 -m venv ~/venv/main
source ~/venv/main/bin/activate
python -m pip install -U pip setuptools wheel

# conda を使う場合
# 64bit OS では Miniforge(conda-forge 版、aarch64 対応)を使用する
# 端末(ターミナル)を開き、次のコマンドを実行する
cd /tmp
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-aarch64.sh
bash Miniforge3-Linux-aarch64.sh

# APT パッケージによる Python ライブラリの導入
# APT で入る Python パッケージはシステムの Python から利用できる
# 仮想環境から参照する場合は、python3 -m venv --system-site-packages で仮想環境を作成する
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install idle3
sudo apt -y install ipython3
sudo apt -y install python3-qtconsole
sudo apt -y install jupyterlab
sudo apt -y install python3-ipywidgets
sudo apt -y install libpython3-all-dev
sudo apt -y install python3-bleach
sudo apt -y install python3-django
sudo apt -y install python3-flask
sudo apt -y install python3-gdal
sudo apt -y install python3-geopandas
sudo apt -y install python3-h5py
sudo apt -y install python3-html5lib
sudo apt -y install python3-ipykernel
sudo apt -y install python3-matplotlib
sudo apt -y install python3-msgpack
sudo apt -y install python3-numpy
sudo apt -y install python3-opencv
sudo apt -y install python3-overpy
sudo apt -y install python3-pandas
sudo apt -y install python3-protobuf
sudo apt -y install python3-psutil
sudo apt -y install python3-pydot
sudo apt -y install python3-pygame
sudo apt -y install python3-pygraphviz
sudo apt -y install python3-pyproj
sudo apt -y install python3-redis
sudo apt -y install python3-scipy
sudo apt -y install python3-seaborn
sudo apt -y install python3-skimage
sudo apt -y install python3-sklearn
sudo apt -y install python3-sympy
sudo apt -y install python3-yaml

# pip によるパッケージの導入
# 仮想環境を有効化してから実行する
# Raspberry Pi では piwheels により arm 向けビルド済みパッケージが利用できる
# 端末(ターミナル)を開き、次のコマンドを実行する
source ~/venv/main/bin/activate
pip install -U altair
pip install -U distributed
pip install -U pillow
pip install -U gensim
pip install -U cython
pip install -U opencv-python
pip install -U imutils
pip install -U mtcnn
pip install -U pyglet
pip install -U cocos2d
pip install -U folium
pip install -U exifread
pip install -U haversine
pip install -U utm

# dlib と face_recognition
# dlib はソースからのビルドとなるため、事前に依存パッケージを導入する
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install cmake libopenblas-dev liblapack-dev libjpeg-dev
source ~/venv/main/bin/activate
pip install -U dlib
pip install -U face_recognition

# TensorFlow と Keras
# aarch64 向け公式ホイールが提供されている
# 端末(ターミナル)を開き、次のコマンドを実行する
source ~/venv/main/bin/activate
pip install -U tensorflow
pip install -U keras

# PyTorch
# caffe は Debian から削除されているため、PyTorch を使用する
# 端末(ターミナル)を開き、次のコマンドを実行する
source ~/venv/main/bin/activate
pip install -U torch torchvision

# Spyder
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install spyder

# Visual Studio Code
# Raspberry Pi OS のリポジトリに code パッケージが含まれている
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install code

# Java 開発環境
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install default-jdk
sudo apt -y install ant
sudo apt -y install bluej
sudo apt -y install greenfoot
java -version
# Eclipse は Debian のリポジトリに含まれていない
# 使用する場合は https://www.eclipse.org/downloads/ から Linux aarch64 版を入手して展開する

# R
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install r-base r-recommended
# CRAN は arm 向けバイナリを配布していないため、install.packages ではソースからビルドされる
# ビルド時間を短縮する場合は、APT の r-cran-* パッケージを利用する
sudo apt -y install r-cran-dplyr r-cran-ggplot2 r-cran-knitr r-cran-reshape2 r-cran-sp r-cran-terra r-cran-sf
sudo apt -y install gdal-bin libgdal-dev libproj-dev libgeos-dev libudunits2-dev
# rgdal は 2023 年に開発終了しており、後継の sf / terra を使用する
# Bioconductor のパッケージ導入では、廃止された biocLite ではなく BiocManager を使用する
echo 'install.packages("BiocManager", repos="http://cran.rstudio.com/")' | sudo R --vanilla
echo 'BiocManager::install("EBImage")' | sudo R --vanilla
# RStudio Desktop は arm64 Linux 向けの公式ビルドが提供されていない
# R の統合環境が必要な場合は、Visual Studio Code の R 拡張機能を使用する

# GIS
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install qgis
sudo apt -y install gis-data gis-osm

# 3D・グラフィックス
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install blender
sudo apt -y install freecad
sudo apt -y install povray povray-examples
sudo apt -y install inkscape
sudo apt -y install gimp
sudo apt -y install pinta

# Panda3D
# 端末(ターミナル)を開き、次のコマンドを実行する
source ~/venv/main/bin/activate
pip install -U panda3d

# 数値計算・データ処理ツール
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install octave
sudo apt -y install jq
sudo apt -y install sqlitebrowser
sudo apt -y install redis-server redis-tools

# その他のアプリケーション
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install poppler-utils evince
sudo apt -y install filezilla
sudo apt -y install firefox-esr
sudo apt -y install firefox-esr-l10n-ja
sudo apt -y install awscli
sudo apt -y install vlc
sudo apt -y install openshot-qt
sudo apt -y install mousepad
sudo apt -y install gedit gedit-plugins

# VNC クライアント
# Raspberry Pi OS の VNC サーバは、raspi-config の Interface Options から有効化する
# クライアントは https://www.realvnc.com/download/viewer/ から Raspberry Pi 版を入手する
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install remmina remmina-plugin-vnc

# Docker
# Debian の docker パッケージは Docker Engine ではないため、公式スクリプトを使用する
# 端末(ターミナル)を開き、次のコマンドを実行する
curl -fsSL https://get.docker.com -o /tmp/get-docker.sh
sudo sh /tmp/get-docker.sh
sudo usermod -aG docker $USER
sudo apt -y install docker-compose-plugin
# グループ設定を反映するため、いったんログアウトして再ログインする

# GEF (GDB Enhanced Features)
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install gdb
bash -c "$(curl -fsSL https://gef.blah.cat/sh)"

# 開発用ライブラリ
# 端末(ターミナル)を開き、次のコマンドを実行する
sudo apt -y install libxml2-dev libfftw3-dev libfreetype6-dev
sudo apt -y install libnlopt-dev