Skip to content
Snippets Groups Projects
Commit 6498a151 authored by Lukáš Krupčík's avatar Lukáš Krupčík
Browse files

Rocky

parent 66024c46
No related branches found
No related tags found
No related merge requests found
Bootstrap: docker
From: rockylinux:8.7
%post
yum -y update && yum -y upgrade
# CentOS repo
yum -y install bash-completion pigz tmux
yum -y groupinstall "Development Tools"
# MPI support
yum -y install numactl-devel
yum -y install perf perftest nano vim mc symlinks telnet net-tools ipmitool smartmontools wget openssh-ldap sssd tmux lsof strace psmisc tcsh libffi-devel libfabric time samba ksh zsh libsecret-devel libcap-devel libxslt docbook-style-xsl nfs-utils.x86_64 nfs4-acl-tools bind-utils tcl tcl-devel python2 python2-devel python36 python36-devel python2-pip python3-pip lua
#X11
yum -y install libXdmcp libXfont2 libXxf86misc libxkbfile libXtst libX11-devel mesa-libGLU mesa-dri-drivers mesa-filesystem xkeyboard-config xorg-x11-server-utils xorg-x11-xauth xorg-x11-xinit xorg-x11-xkb-utils motif motif-devel gtk3
cd /tmp
# UCX
wget https://github.com/openucx/ucx/archive/refs/tags/v1.14.0.tar.gz #https://github.com/openucx/ucx/archive/v1.11.2.tar.gz
tar xvf v1.14.0.tar.gz && cd ucx-1.14.0
./autogen.sh
./configure --prefix=/usr/local
make -j 64
make install
# OpenMPI
wget https://github.com/open-mpi/ompi/archive/refs/tags/v4.1.2.tar.gz
tar xvf openmpi-4.1.2.tar.gz && cd openmpi-4.1.2
./configure --prefix=/usr/local --with-ucx=/usr/local
make -j 64
make install
# pip
pip2 install setuptools numpy scipy pandas wheel --upgrade
pip3 install setuptools numpy scipy pandas wheel --upgrade
# lua
dnf install -y http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/lua-posix-33.3.1-9.el8.x86_64.rpm
dnf install -y http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/lua-filesystem-1.6.3-7.el8.x86_64.rpm
dnf install -y http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/lua-devel-5.3.4-12.el8.x86_64.rpm
# Lmod
wget https://github.com/TACC/Lmod/archive/8.5.tar.gz
tar xvf 8.5.tar.gz
cd Lmod-8.5
./configure --prefix=/opt/apps
make install
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
Bootstrap: docker
From: rockylinux:9.1
%post
yum -y update && yum -y upgrade
# CentOS repo
yum -y install bash-completion pigz tmux
yum -y groupinstall "Development Tools"
# MPI support
yum -y install numactl-devel
yum -y install perf perftest nano vim mc symlinks telnet net-tools ipmitool smartmontools wget sssd tmux lsof strace psmisc tcsh libffi-devel libfabric time samba ksh zsh libsecret-devel libcap-devel libxslt docbook-style-xsl nfs-utils.x86_64 nfs4-acl-tools bind-utils tcl tcl-devel lua python-pip
#X11
yum -y install libXdmcp libXfont2 libxkbfile libXtst libX11-devel mesa-libGLU mesa-dri-drivers mesa-filesystem xkeyboard-config xorg-x11-server-utils xorg-x11-xauth xorg-x11-xinit motif motif-devel gtk3
# pip
pip install setuptools numpy scipy pandas wheel --upgrade
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
Bootstrap: docker
From: centos:9
%post
yum -y update && yum -y upgrade
# CentOS repo
yum -y install bash-completion pigz tmux
yum -y groupinstall "Development Tools"
# MPI support
yum -y install numactl-devel
yum -y install perf perftest nano vim mc symlinks telnet net-tools ipmitool smartmontools wget openssh-ldap sssd tmux lsof strace psmisc tcsh libffi-devel libfabric time samba ksh zsh libsecret-devel libcap-devel libxslt docbook-style-xsl nfs-utils.x86_64 nfs4-acl-tools bind-utils tcl tcl-devel python2 python2-devel python36 python36-devel python2-pip python3-pip lua
#X11
yum -y install libXdmcp libXfont2 libXxf86misc libxkbfile libXtst libX11-devel mesa-libGLU mesa-dri-drivers mesa-filesystem xkeyboard-config xorg-x11-server-utils xorg-x11-xauth xorg-x11-xinit xorg-x11-xkb-utils motif motif-devel gtk3
cd /tmp
# UCX
wget https://github.com/openucx/ucx/archive/v1.11.2.tar.gz
tar xvf v1..11.2.tar.gz && cd ucx-1.11.2
./autogen.sh
./configure --prefix=/usr/local
make -j 64
make install
# OpenMPI
wget https://github.com/open-mpi/ompi/archive/refs/tags/v4.1.2.tar.gz
tar xvf openmpi-4.1.2.tar.gz && cd openmpi-4.1.2
./configure --prefix=/usr/local --with-ucx=/usr/local
make -j 64
make install
# pip
pip2 install setuptools numpy scipy pandas wheel --upgrade
pip3 install setuptools numpy scipy pandas wheel --upgrade
# lua
#wget http://centos.mirror.srv.magticom.ge/8/PowerTools/x86_64/os/Packages/lua-posix-33.3.1-9.el8.x86_64.rpm
#wget http://centos.mirror.srv.magticom.ge/8/PowerTools/x86_64/os/Packages/lua-devel-5.3.4-10.el8.x86_64.rpm
#wget http://centos.mirror.srv.magticom.ge/8/PowerTools/x86_64/os/Packages/lua-filesystem-1.6.3-7.el8.x86_64.rpm
#rpm -ihv lua-posix-33.3.1-9.el8.x86_64.rpm
#rpm -ihv lua-devel-5.3.4-10.el8.x86_64.rpm
#rpm -ihv lua-filesystem-1.6.3-7.el8.x86_64.rpm
# Lmod
wget https://github.com/TACC/Lmod/archive/8.5.tar.gz
tar xvf 8.5.tar.gz
cd Lmod-8.5
./configure --prefix=/opt/apps
make install
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
%environment
source /opt/apps/lmod/8.5/init/profile
clearMT
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export -f ml
export -f module
export -f clearMT
SINGULARITY_BIN_PATH=/apps/all/Singularity/3.8.7/bin
APPTAINER_BIN_PATH=/apps/all/apptainer/1.1.5/bin
IMAGE_PATH=/apps/all/OS
MODULEFILE_PATH=/apps/modules
USER_IMAGE=easybuild
EBROOTSQUASHFSMINTOOLS=/apps/all/squashfs-tools/4.3
PATH=$PATH:/apps/all/Singularity/3.8.7/bin:/apps/all/squashfs-tools/4.3/bin
PATH=$PATH:/apps/all/apptainer/1.1.5/bin:/apps/all/squashfs-tools/4.3/bin
......@@ -6,7 +6,7 @@ yum -y update && yum -y upgrade
# CentOS repo
yum -y groupinstall "Development Tools"
yum -y install python gcc gcc-c++ gcc-gfortran make wget vim mc procps tcl pkg-config lua tolua++ lua-posix lua-logging lua-sql lua-socket lua-filesystem lua-sec lua-json lua-term
yum -y install python gcc gcc-c++ gcc-gfortran make wget vim mc procps tcl pkg-config lua tolua++ lua-posix lua-sql lua-socket lua-filesystem lua-sec lua-json lua-term
# Fedora repo
yum -y install bash-completion pigz tmux
......@@ -20,12 +20,12 @@ cd /tmp
#make -j 16
#make install
wget https://github.com/TACC/Lmod/archive/7.7.7.tar.gz
tar xvf 7.7.7.tar.gz
cd Lmod-7.7.7
wget https://github.com/TACC/Lmod/archive/8.5.tar.gz
tar xvf 8.5.tar.gz
cd Lmod-8.5
./configure --prefix=/opt/apps
make install
ln -s /apps/all/Lmod/7.7.7/lmod/etc /opt/apps/lmod/etc
ln -s /apps/all/Lmod/8.5/lmod/etc /opt/apps/lmod/etc
# pip
curl -s -O https://bootstrap.pypa.io/get-pip.py
......@@ -33,7 +33,7 @@ python get-pip.py
pip install setuptools --upgrade
%environment
source /opt/apps/lmod/7.7.7/init/profile
source /opt/apps/lmod/8.5/init/profile
export LMOD_PACKAGE_PATH=/opt/apps/lmod/
if [ "$(id -u)" -ne 0 ]; then
......
Bootstrap: docker
From: rockylinux:8.7
%post
yum -y update && yum -y upgrade
# CentOS repo
yum -y install bash-completion pigz tmux
yum -y groupinstall "Development Tools"
# MPI support
yum -y install numactl-devel
yum -y install perf perftest nano vim mc symlinks telnet net-tools ipmitool smartmontools wget openssh-ldap sssd tmux lsof strace psmisc tcsh libffi-devel libfabric time samba ksh zsh libsecret-devel libcap-devel libxslt docbook-style-xsl nfs-utils.x86_64 nfs4-acl-tools bind-utils tcl tcl-devel python2 python2-devel python36 python36-devel python2-pip python3-pip lua
#X11
yum -y install libXdmcp libXfont2 libXxf86misc libxkbfile libXtst libX11-devel mesa-libGLU mesa-dri-drivers mesa-filesystem xkeyboard-config xorg-x11-server-utils xorg-x11-xauth xorg-x11-xinit xorg-x11-xkb-utils motif motif-devel gtk3
cd /tmp
# UCX
wget https://github.com/openucx/ucx/archive/refs/tags/v1.14.0.tar.gz #https://github.com/openucx/ucx/archive/v1.11.2.tar.gz
tar xvf v1.14.0.tar.gz && cd ucx-1.14.0
./autogen.sh
./configure --prefix=/usr/local
make -j 64
make install
# OpenMPI
wget https://github.com/open-mpi/ompi/archive/refs/tags/v4.1.2.tar.gz
tar xvf openmpi-4.1.2.tar.gz && cd openmpi-4.1.2
./configure --prefix=/usr/local --with-ucx=/usr/local
make -j 64
make install
# pip
pip2 install setuptools numpy scipy pandas wheel --upgrade
pip3 install setuptools numpy scipy pandas wheel --upgrade
# lua
dnf install -y http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/lua-posix-33.3.1-9.el8.x86_64.rpm
dnf install -y http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/lua-filesystem-1.6.3-7.el8.x86_64.rpm
dnf install -y http://mirror.centos.org/centos/8-stream/PowerTools/x86_64/os/Packages/lua-devel-5.3.4-12.el8.x86_64.rpm
# Lmod
wget https://github.com/TACC/Lmod/archive/8.5.tar.gz
tar xvf 8.5.tar.gz
cd Lmod-8.5
./configure --prefix=/opt/apps
make install
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
Bootstrap: docker
From: rockylinux:9.1
%post
yum -y update && yum -y upgrade
# CentOS repo
yum -y install bash-completion pigz tmux
yum -y groupinstall "Development Tools"
# MPI support
yum -y install numactl-devel
yum -y install perf perftest nano vim mc symlinks telnet net-tools ipmitool smartmontools wget sssd tmux lsof strace psmisc tcsh libffi-devel libfabric time samba ksh zsh libsecret-devel libcap-devel libxslt docbook-style-xsl nfs-utils.x86_64 nfs4-acl-tools bind-utils tcl tcl-devel lua python-pip
#X11
yum -y install libXdmcp libXfont2 libxkbfile libXtst libX11-devel mesa-libGLU mesa-dri-drivers mesa-filesystem xkeyboard-config xorg-x11-server-utils xorg-x11-xauth xorg-x11-xinit motif motif-devel gtk3
# pip
pip install setuptools numpy scipy pandas wheel --upgrade
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
......@@ -4,66 +4,7 @@ From: ubuntu:latest
%post
apt -y update && apt -y upgrade
apt -y install tzdata && apt -y install python curl wget gcc g++ make vim mc libncurses-dev rsync tclsh lua5.2 liblua5.2 gfortran ssh libnuma-dev autoconf autogen
curl -s -O https://bootstrap.pypa.io/get-pip.py
python get-pip.py
pip install setuptools python-graph-core python-graph-dot tabulate numpy scipy pandas wheel --upgrade
wget https://github.com/luarocks/luarocks/archive/v2.4.2.tar.gz
tar xvf v2.4.2.tar.gz
cd luarocks-2.4.2
./configure
make build
make install
mkdir ~/.luarocks
echo "fs_use_modules = false" > ~/.luarocks/config.lua
luarocks install luaposix
luarocks install luafilesystem
LUAROCKS_PREFIX=/usr/local
export LUA_PATH="$LUAROCKS_PREFIX/share/lua/5.1/?.lua;$LUAROCKS_PREFIX/share/lua/5.1/?/init.lua;;"
export LUA_CPATH="$LUAROCKS_PREFIX/lib/lua/5.1/?.so;;"
echo "# !/bin/bash" > /bin/logger
echo "exit 0" >> /bin/logger
chmod +x /bin/logger
# Lmod
wget https://github.com/TACC/Lmod/archive/7.7.7.tar.gz
tar xvf 7.7.7.tar.gz
cd Lmod-7.7.7
./configure --prefix=/opt/apps
make install
# UCX
wget https://github.com/openucx/ucx/archive/v1.6.1.tar.gz
tar xvf v1.6.1.tar.gz && cd ucx-1.6.1
./autogen.sh
./configure --prefix=/usr/local
make -j 36
make install
# OpenMPI
wget https://www.open-mpi.org/software/ompi/v3.1/downloads/openmpi-3.1.4.tar.gz
tar xvf openmpi-3.1.4.tar.gz && cd openmpi-3.1.4
./configure --prefix=/usr/local --with-ucx=/usr/local
make -j 16
make install
# APPS and SCRATCH
mkdir /apps
mkdir /scratch
apt -y install tzdata && apt -y install curl wget gcc g++ make vim mc libncurses-dev rsync tclsh gfortran ssh libnuma-dev autoconf autogen
cd /bin
rm sh && ln -s /bin/bash sh
%environment
source /opt/apps/lmod/7.7.7/init/profile
clearMT
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
export -f ml
export -f module
export -f clearMT
export OMPI_MCA_btl_tcp_if_include=10.33.4.0/24
export OMPI_MCA_orte_base_help_aggregate=0
export OMPI_MCA_btl_openib_if_include=mlx5_0
#!/bin/bash
#
# Copyright (C) 2017-2020 IT4Innovations
# Copyright (C) 2017-2023 IT4Innovations
# Lukas Krupcik, lukas.krupcik@vsb.cz
#
# if without any parameters
if [[ $# -eq 0 ]]; then
printf "\e[31m
./install.sh\e[0m ... create and build singularity image
./install.sh\e[0m ... create and build apptainer image
-\e[33mi\e[0m OS (\e[33mCentOS\e[0m, \e[33mUbuntu\e[0m)
-\e[33mv\e[0m Version OS (CentOS 7, CentOS 8, Ubuntu latest, Ubuntu 18, Debian latest, Fedora latest)
-\e[33mo\e[0m OpenMPI module
Example:
\e[33m ./install.sh -i CentOS -v 7777777\e[0m
\e[33m ./install.sh -i CentOS -v 7\e[0m
"
echo ""
exit 0
......@@ -44,15 +44,15 @@ printf "\033c"
TEST_CONFIG="TRUE"
# test empty value
if [ -z "$SINGULARITY_BIN_PATH" ] || [ -z "$IMAGE_PATH" ] || [ -z "$MODULEFILE_PATH" ] || [ -z "$USER_IMAGE" ]; then
if [ -z "$APPTAINER_BIN_PATH" ] || [ -z "$IMAGE_PATH" ] || [ -z "$MODULEFILE_PATH" ] || [ -z "$USER_IMAGE" ]; then
TEST_CONFIG="FALSE"
echo "CONFIG test empty value ERROR"
fi
# test other value
if [ ! -d "$SINGULARITY_BIN_PATH" ]; then
if [ ! -d "$APPTAINER_BIN_PATH" ]; then
TEST_CONFIG="FALSE"
echo "CONFIG test SINGULARITY BIN PATH ERROR"
echo "CONFIG test APPTAINER BIN PATH ERROR"
fi
if [ ! -d "$IMAGE_PATH" ]; then
......@@ -79,9 +79,9 @@ else
fi
if [ -z "$IMAGE" ]; then
echo -e "Please, specify singularity image (-i \e[31mCentOS\e[0m, \e[31mUbuntu\e[0m, \e[31mDebian\e[0m, \e[31mFedora\e[0m,)"
echo -e "Please, specify apptainer image (-i \e[31mCentOS\e[0m, \e[31mUbuntu\e[0m, \e[31mDebian\e[0m, \e[31mFedora\e[0m, \e[31mRocky\e[0m)"
exit 1
elif [ "$IMAGE" == "CentOS" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Ubuntu" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Fedora" ]; then
elif [ "$IMAGE" == "CentOS" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Ubuntu" ] || [ "$IMAGE" == "Debian" ] || [ "$IMAGE" == "Fedora" ] || [ "$IMAGE" == "Rocky" ]; then
echo -e "Image .................................. [\e[32mOK\e[0m]"
else
echo -e "Image .................................. [\e[31mERROR\e[0m]"
......@@ -90,9 +90,9 @@ else
fi
if [ -z "$VERSION" ]; then
echo -e "Please, specify OS version (-v CentOS \e[31m7\e[0m, CentOS \e[31m8\e[0m, Ubuntu \e[31mlatest\e[0m, Debian \e[31mlatest\e[0m), Fedora \e[31mlatest\e[0m))"
echo -e "Please, specify OS version (-v CentOS \e[31m7\e[0m, CentOS \e[31m8\e[0m, Ubuntu \e[31mlatest\e[0m, Debian \e[31mlatest\e[0m), Fedora \e[31mlatest\e[0m), Rocky \e[31mlatest\e[0m))"
exit 1
elif ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "7" ]) || ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "8" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "18" ]) || ([ "$IMAGE" == "Debian" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Fedora" ] && [ "$VERSION" == "latest" ]); then
elif ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "7" ]) || ([ "$IMAGE" == "CentOS" ] && [ "$VERSION" == "8" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Ubuntu" ] && [ "$VERSION" == "18" ]) || ([ "$IMAGE" == "Debian" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Fedora" ] && [ "$VERSION" == "latest" ]) || ([ "$IMAGE" == "Rocky" ] && [ "$VERSION" == "8" ]) || ([ "$IMAGE" == "Rocky" ] && [ "$VERSION" == "9" ]); then
echo -e "Version ................................ [\e[32mOK\e[0m]"
else
echo -e "Version ................................ [\e[31mERROR\e[0m]"
......@@ -118,7 +118,7 @@ else
echo -e "ROOT ................................... [\e[32mOK\e[0m]"
fi
echo -e "\e[32mCreate & Build singularity image\e[0m ($IMAGE-$VERSION-$TYPE)"
echo -e "\e[32mCreate & Build apptainer image\e[0m ($IMAGE-$VERSION-$TYPE)"
if [ "$IMAGE" == "CentOS" ]; then
if [ "$VERSION" == "8" ]; then
......@@ -126,6 +126,15 @@ if [ "$IMAGE" == "CentOS" ]; then
else
BOOTSTRAP="CENTOS7LATEST"
fi
elif [ "$IMAGE" == "Rocky" ]; then
if [ "$VERSION" == "8" ]; then
BOOTSTRAP="ROCKY8LATEST"
elif [ "$VERSION" == "9" ]; then
BOOTSTRAP="ROCKY9LATEST"
else
echo "ERROR version ubuntu"
exit 1
fi
elif [ "$IMAGE" == "Ubuntu" ]; then
if [ "$VERSION" == "latest" ]; then
BOOTSTRAP="UBUNTULATEST"
......@@ -147,10 +156,10 @@ if [ -f image.sif ]; then
rm image.sif || exit 1
fi
echo "$SINGULARITY_BIN_PATH"
export PATH="$PATH:$SINGULARITY_BIN_PATH"
echo "$APPTAINER_BIN_PATH"
export PATH="$PATH:$APPTAINER_BIN_PATH"
singularity build image.sif "$BOOTSTRAP" || CHECK_STATUS="FALSE" && CHECK_STATUS="TRUE"
apptainer build image.sif "$BOOTSTRAP" || CHECK_STATUS="FALSE" && CHECK_STATUS="TRUE"
CHECK_STATUS="TRUE"
......
......@@ -22,6 +22,15 @@ if [ "$IMAGE" == "CentOS" ]; then
echo "Unsupported OS Version"
exit 1
fi
elif [ "$IMAGE" == "Rocky" ]; then
if [ "$VERSION" == "8" ]; then
PATH="./rocky/8"
elif [ "$VERSION" == "9" ]; then
PATH="./rocky/9"
else
echo "Unsupported OS Version"
exit 1
fi
elif [ "$IMAGE" == "Ubuntu" ]; then
PATH="./ubuntu/template"
elif [ "$IMAGE" == "Debian" ]; then
......@@ -35,7 +44,7 @@ fi
/bin/cat "$PATH" > "$NAME"
echo "conflict(\"Singularity\")" >> "$NAME"
echo "conflict(\"apptainer\")" >> "$NAME"
echo "" >> "$NAME"
if [ ! -z $OMPI ]; then
echo "if not isloaded(\"OpenMPI/3.1.4-GCC-8.3.0-2.32\") then" >> "$NAME"
......@@ -43,15 +52,15 @@ if [ ! -z $OMPI ]; then
echo "end" >> "$NAME"
echo "" >> "$NAME"
fi
echo "if not isloaded(\"Singularity\") then" >> "$NAME"
echo " load(\"Singularity\")" >> "$NAME"
echo "if not isloaded(\"apptainer\") then" >> "$NAME"
echo " load(\"apptainer\")" >> "$NAME"
echo "end" >> "$NAME"
echo "" >> "$NAME"
echo "if not isloaded(\"Singularity-wrappers\") then" >> "$NAME"
echo " load(\"Singularity-wrappers\")" >> "$NAME"
echo "if not isloaded(\"apptainer-wrappers\") then" >> "$NAME"
echo " load(\"apptainer-wrappers\")" >> "$NAME"
echo "end" >> "$NAME"
echo "" >> "$NAME"
echo "add_property(\"state\", \"singularity\")" >> "$NAME"
echo "add_property(\"state\", \"apptainer\")" >> "$NAME"
echo "" >> "$NAME"
echo "set_alias(\"image-update\",\". image-update\")" >> "$NAME"
echo "setenv(\"IMAGE_ROOT\", \"/apps/all/OS/$IMAGE/$VERSION2\")" >> "$NAME"
......
help([[
Description
===========
Rocky 8
More information
================
- Homepage:
]])
whatis([[Description:
Rocky 8
]])
whatis([[Homepage: ]])
help([[
Description
===========
Rocky 9
More information
================
- Homepage:
]])
whatis([[Description:
Rocky 9
]])
whatis([[Homepage: ]])
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment