JESUS PALOMINO
    • Create new note
    • Create a note from template
      • Sharing URL Link copied
      • /edit
      • View mode
        • Edit mode
        • View mode
        • Book mode
        • Slide mode
        Edit mode View mode Book mode Slide mode
      • Customize slides
      • Note Permission
      • Read
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Write
        • Only me
        • Signed-in users
        • Everyone
        Only me Signed-in users Everyone
      • Engagement control Commenting, Suggest edit, Emoji Reply
    • Invite by email
      Invitee

      This note has no invitees

    • Publish Note

      Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

      Your note will be visible on your profile and discoverable by anyone.
      Your note is now live.
      This note is visible on your profile and discoverable online.
      Everyone on the web can find and read all notes of this public team.
      See published notes
      Unpublish note
      Please check the box to agree to the Community Guidelines.
      View profile
    • Commenting
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
      • Everyone
    • Suggest edit
      Permission
      Disabled Forbidden Owners Signed-in users Everyone
    • Enable
    • Permission
      • Forbidden
      • Owners
      • Signed-in users
    • Emoji Reply
    • Enable
    • Versions and GitHub Sync
    • Note settings
    • Note Insights New
    • Engagement control
    • Make a copy
    • Transfer ownership
    • Delete this note
    • Save as template
    • Insert from template
    • Import from
      • Dropbox
      • Google Drive
      • Gist
      • Clipboard
    • Export to
      • Dropbox
      • Google Drive
      • Gist
    • Download
      • Markdown
      • HTML
      • Raw HTML
Menu Note settings Note Insights Versions and GitHub Sync Sharing URL Create Help
Create Create new note Create a note from template
Menu
Options
Engagement control Make a copy Transfer ownership Delete this note
Import from
Dropbox Google Drive Gist Clipboard
Export to
Dropbox Google Drive Gist
Download
Markdown HTML Raw HTML
Back
Sharing URL Link copied
/edit
View mode
  • Edit mode
  • View mode
  • Book mode
  • Slide mode
Edit mode View mode Book mode Slide mode
Customize slides
Note Permission
Read
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Write
Only me
  • Only me
  • Signed-in users
  • Everyone
Only me Signed-in users Everyone
Engagement control Commenting, Suggest edit, Emoji Reply
  • Invite by email
    Invitee

    This note has no invitees

  • Publish Note

    Share your work with the world Congratulations! 🎉 Your note is out in the world Publish Note

    Your note will be visible on your profile and discoverable by anyone.
    Your note is now live.
    This note is visible on your profile and discoverable online.
    Everyone on the web can find and read all notes of this public team.
    See published notes
    Unpublish note
    Please check the box to agree to the Community Guidelines.
    View profile
    Engagement control
    Commenting
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    • Everyone
    Suggest edit
    Permission
    Disabled Forbidden Owners Signed-in users Everyone
    Enable
    Permission
    • Forbidden
    • Owners
    • Signed-in users
    Emoji Reply
    Enable
    Import from Dropbox Google Drive Gist Clipboard
       Owned this note    Owned this note      
    Published Linked with GitHub
    • Any changes
      Be notified of any changes
    • Mention me
      Be notified of mention me
    • Unsubscribe
    # COMANDOS TRABAJO ## Atajos `cds`: current build slot `cdi`: indra `search_ada`: para buscar en los ficheros de ADA (ads y adb) `search_idl`: para buscar dentro de los ficheros IDL, como los *.idl3 o *.idl `killall.sh` script que mata toda la cmd `startup.sh` script que levanta `busca_label.sh` buscar una ITC `cleartool describe -long <fichero>` Obtener la informacion asociada a un elemento de clearcase ## Localizacion de ficheros **q_tk_cmd**: ficheros de creación y manejo de elementos de la vista están en -- `wp/cmd/toolkit` -- para ver los **save_data**: `nor@ph2ins23:/daticas/R4.4.1-02_FAT/TECHNICAL/` para ver mi **fichero de usuario**: `nor@ph2ins23:/usuarios/jpabreu` ## Usuarios y credenciales Credenciales para los servidores: usuario=nor, password=goteras Dentro de la cmd: - **R4.4.1** `CMDUSER5:INDRAC` - **R5.1** `CMDUSER4:SUPERV04` - **OTROS** `ALL:ALL` root:Fandango ## Procedimientos tipicos ##### Compilar una vista y moverla a STRING: - `make_itec mod_cmd`: Para compilar desde una vista y generar una libreria lib_mod_cmd.so (Te aparece el directorio donde se guarda al compilar) - `scp [Ruta Compilado] nor@ph2ins23:/usuarios/jpabreu` - `scp nor@ph2ins23:/usuarios/jpabreu/[nombre_libreria] .` - Si dudas de qué librería hace falta compilar para llevar cambios en cierto fichero, puedes hacer un `strings -f <libreria> | grep <fichero>` y comprobar si en efecto es la correcta. Desde el current build slot: - `scp nor@ph2ins63:/usuarios/jpabreu/lib_mod_cmd.so .` - [Reiniciar el String](#reiniciar-el-string) si es necesario ##### Reiniciar el String - `killall.sh` - `starts` - Le das a todo a intro, menos cuando te pida los slots (2 en todo) - Con `tso` podemos monitorizar como va el arranque. Cuando de un error/warning de ada ya ha terminado y le podemos dar a ctrl-c para volver a la shell ##### Acceder a la CMD: Esto se va a hacer desde el servidor 172.30.110.63 con usuario nor - `ssh -XC s67cmda` X para que pueda abrir ventanas, C para que vaya compilado y vaya mas rapido. - `vncviewer localhost` \\\ `vncviewer s67cmda` acceder a la interfaz grafica ##### REBOOT de la maquina (s67cmda) Tarda unos minutos - `reboot` Dara un error si intentamos hacer `vncviewer`, hay un script, se ejecuta tal que: - `/home/nor/x11vnc.sh &` ##### REBOOT de todo el string Para reiniciar todo el string, ir al ph2ins53 y ejecutar `cd /integrationicas/scripts` `./reboot_string.sh itec_hosts_s67_R5.txt` (el txt marca las máquinas del string) Alternativamente, en el s67isaa3, puedes lanzar `reboot_string.sh <itec_hosts.txt> <password>` ## Comandos utiles `tar -xzvf nombre_savedata` Descomprimir savedata `scp [Ruta Origen] [Ruta Destino]` (ejemplo de ruta remota -> nor@ph2ins23:/usuarios/jpabreu) `ssh -XC s67cmda` Conectarse al string s67cmda (donde se esta ejecutando la cmd) ## Conceptos generales build_slot/adap_slot/dmn_slot (normalmente 2/2/2) ## ClearCase `rules`: **ver** las **reglas** de una vista `ct edcs`: **cambiar** las **reglas** de una vista. Cambiamos esas 3 lineas, poniendo el numero de ITC correspondiente: ![](images/2023-12-11-11-58-00.png) `ct lsco -r -cvi`: Ver que ficheros estan en **checkout** `ct mkbrtype NOMBRE_BRANCH`: Para **crear una branch** en un vob, el nombre de la branch suele ser la ITC. Ahora hay que abrir el arbolcc del archivo al que hacer checkout, y darle a checkout en la interfaz. Normalmente unreserved para que en otras vistas se pueda modificar, y las opciones por defecto. `ctdiff nombre_ficero` abre directamente el VTree con las diferencias de la version hecha checkout con la anterior. `arbolcc [nombre_archivo]` ![](images/2023-12-11-12-02-10.png) `ct mklbtype -nc -pbr ITC_XXXXX`: Crear **label** Abrir arbolcc y hacer **attach** a la label. `arbolcc [nombre_archivo]` ![](images/2023-12-11-12-04-38.png) (Otra alternativa) `ct mklabel -nc ITC_XXXXX fichero`: **Attach** via comandos **Resumen** para hacer una **PTR**: Cambiar reglas de la vista con el nombre de la ptr, crear la nueva branch con el nombre de la ptr, crear el label de la ptr, hacer checkout al fichero que vayas a modificar, Attach del label con nombre de la ptr, hacer los cambios y comprobar que todo esté correcto, hacer checkin a la bola de la ptr, mergearlo a la rama de dev **nunca jamás a rel (release)!!!**, attach al label a la nueva bola y hacer checkin a esta. Rellenar Change al acabar la ptr, con Software Info, el texto de lo que has hecho en iTEC Supplier Solution, CMMI ## Sin revisar java -jar TSS_UI.jar -> cds // Estadisticas de cualquier componente de la máquina. make_itec: compilar make_itec nombre_componente(para compilar solo componentes) -> genera el lib_mod_cmd.so make_imas -> compilar iMas cds + vim p_check_external_ntp.sh -> script de ntp vncviewer s67itgc & -> iSim + segundo plano regenerar una vista completa(tarda muchísimo) -> /ip23_cmd_dev_merge/fdp/macros/regenerate_view.sh Si no hay iSim, cambio fichero y ../dmn/m_sup_dmn_subsystem_starter Para parar/encender el demonio/icas, arrancar, parar o instalar el string -> */icas/IS/bin/ISGui -d /tmp/String67_sala64 -r /icas/kickstart/itec_releases/itec_releases_phase2_string_67_rh86 -s /icas/kickstart/strings_def/string_def_ph2ins63_iCAS_PhaseII_String_67_R5 -e &* Idealmente, asegurarse de que el último parámetro coincida con la versión que se va a instalar, para que las variables de entorno del string se definan correctamente: */icas/kickstart/strings_def/string_def_ph2ins63_iCAS_PhaseII_String_67_R4* o */icas/kickstart/strings_def/string_def_ph2ins63_iCAS_PhaseII_String_67_R5* Para parar y encender el icas de mi máquina (El demonio) -> systemctl status icas.service systemctl stop|start icas.service tail - f | cat -> ver la salida de los ficheros. tso -> ver el estado actual y como arranca la cmd vim nombre_fichero -> ver o editar un fichero(para editarlo debe estar checkout) scp -> copia segura de una máquina a otra rm -rf -> borrar directorio con elementos dentro y de forma recursiva cp -> copia normal(archivo a un ficheor por ejemplo) zcat se puede usar para ver el contenido en bruto de los collects Lo hemos usado en ocasiones para buscar un PID y ver que proceso correspondia a dicho PID. La forma de verlo es -> zcat *.prc.gz | cut -d ' ' -f 1,2,3,4,5- | egrep -i "PID" La cabecera del fichero es -> Date Time PID User PR PPID THRD S VmSize VmLck VmRSS VmData VmStk VmExe VmLib CPU SysT UsrT PCT AccumT RKB WKB RKBC WKBC RSYS WSYS CNCL MajF MinF Command zcat s15fdpa1-20230426.prc.gz | cut -d ' ' -f 1,2,3,4,5- | egrep -i "8993" iSim conectado? -> indra_ph2[4/-/- root@s67cmda3:/icas/dmn] netstat -putan | grep sim tcp 0 0 0.0.0.0:65001 0.0.0.0:* LISTEN 110172/m_cms_sim_ga generate?core?txt.sh en un $ADA_BASE es donde esta el directorio del ada base para levantar la cmd rapido, cat arguments_file.txt y ver que el kickstart esta false,. Luego cd kickstart qickselect ip2_cms_dev_1 -> vista de 4.4.1 que utilizar para cotillear Para hacer las graficas (comando antiguo): ~~`/usuarios/integration/icas_collttis/collttis_V0.15.0_df.ph_V0.0.3_new/project_release/ICAS_5_1/collttis --prcall --all -f itec_hosts.txt -d . --from 20240215:10:20:00-20240215:10:30:00`~~ (actualizado): `/integrationicas/icas_collttis/collttis_V0.16.0_df.ph_V0.0.3/project_release/ICAS_4_4_2/collttis` `/integrationicas/icas_collttis/collttis_V0.15.0_df.ph_V0.0.3_new/project_release/ICAS_5_2/collttis` En un save data, en la carpeta collects. Se pueden leer los gz con zcat Normalmente en el de proesos *prc.gz zcat *.prc.gz | cut -d ' ' -f 1,2,3,4,5- | egrep -i "PID" Para ver el IOWait, es la columna wait. Nos metemos en la cmda, df -h, se ve que la particion de icas es la sda3. ls /var/log/collect en el so, hay muchos. En el save data solo se llevan los de el dia. Si se necesita info de otro dia hay que pedirlo. Ver particion de icas en extra/current hardware information. (para verlo desde el save data) en este fichero se ve tambien por ejemplo opciones con las que se ha arrancado la maquina. El uptime tambien se ve aqui. El NTP tambien se ve aqui Que se necesita para las graficas. Saber dia y horas que queremos sacar. parametros: --prcall importante para generar de todos los procesos no solo lo de icas /usuarios/kymaguchi/ken/collttis/collttis --icas-4-4-1 --prcall --all -f itec_hosts.txt -d . --from 20231219:00:00:00-20231219:10:30:00 itec_hosts.txt en la carpeta extra. nos lo copiamos y borramos todas menos la que nos interesa. En extra/cmd_files/ ORB son los procesos iCAS Los Q_DDD estan en el FDP echo "export MW_ORB_COMM_STACK_SIZE=150000000" > CMD echo "export LD_PRELOAD=/icas/current_build_slot/auto-mnemonics_on.so" >> CMD #Disable drag and drop until we figure it out how to solve CMD D&D crashes echo "gsettings set org.gnome.settings-daemon.peripherals.mouse drag-threshold 2000" >> CMD echo "exec -a CMD spd_app_proc \$*" >> CMD chmod a+x CMD Compilar un fichero de gtkada en el sevidor de desarrollo gmk simple.adb (necesita un linker como simple.linker.conf y los .lib que te pida) ## Si te cargas el dmn indra_ph2[1/1/1 nor@s67cmda3:/icas] rm dmn indra_ph2[-/1/1 nor@s67cmda3:/icas] ln -s /icas/dmn_slot_5 dmn indra_ph2[5/1/1 nor@s67cmda3:/icas/dmn] systemctl stop icas.service indra_ph2[5/1/1 nor@s67cmda3:/icas/dmn] systemctl start icas.service indra_ph2[5/-/- nor@s67cmda3:/icas/dmn] pss dmn nor 21535 1 0 12:41 ? 00:00:00 /bin/sh ./init.dmnsupervisor start nor 21537 1 0 12:41 ? 00:00:00 ./m_sup_dmn -exercise=1 indra_ph2[5/-/- nor@s67cmda3:/icas/dmn] starts ls -lrt *gtk* ver las librerias de gtk Tutorial para entender clearcase: https://www.youtube.com/playlist?list=PLfGYZdZpR9Jmcaavga2KdLqn9iewXR7ji En algunos sitios en vez de `vncviewer` hay que utilizar `vnc.sh` para conectarse a las maquinas Hacer restart (reiniciar) a una maquina: `reboot` desde esa maquina ### Instalacion de una adap ejemplo de lo que he tenido que hacer en el string, en icas/install/A he buscado una adap que cumpliera las condiciones, en este caso me interesaba la parte de los subsystem groups. Paloma ha elegido `adap_gen_R4.4.1-04_R441_03_03_MUN_T1_V1_subsystem_groups.cmd.txt_s46941` Ahora lo que hacemos es ir a `/icas/kickstart/quickselects]` e intentar buscar `grep "*R4.4.1-04_R441_03_03_MUN_T1_V1*" *` que no ha funcionado esta vez luego hizo `vim quickselects_R4.4.1-04` Con `vim itec_releases/itec_releases_phase2_string_67` se ven las versiones en las que esta el string. Aqui, en el final pegamos la definicion de la version que queramos instalar, definida en `vim quickselects_R4.4.1-04`. vim string_def_ph2ins63_iCAS_PhaseII_String_67_R4 ```sh (IS R4.3.2-01) [S6x Sala 64 indra_ph2 nor@ph2ins63:/icas/kickstart/strings_def] grep iCAS_PhaseII_String_67_R4_TRACKERS */* ``` ```sh (IS R4.3.2-01) [S6x Sala 64 indra_ph2 nor@ph2ins63:/icas/kickstart/strings_def] vim -d different_configurations_strings/string_def_ph2ins63_iCAS_PhaseII_String_67_R4_TRACKERS_NO_TCF string_def_ph2ins63_iCAS_PhaseII_String_67_R4 ``` Ahora para instalar lo que hacemos es ir al bin del IS `cd /icas/IS/bin/` ```sh (IS R4.3.2-01) [S6x Sala 64 indra_ph2 nor@ph2ins63:/icas/IS/bin] ./ISGui -h Install Server GUI for iCAS Version R4.4.1-01, Copyright (C) 2013-2023, Deutsche Flugsicherung GmbH. Usage: ISGui [options] basic options, with defaults in [ ]: -d Distribution Service Socket [/tmp/SOISD] -r Release Definition File [/icas/kickstart/itec_releases] -s String Definition File [/icas/kickstart/itec_strings_def] -L Logfile directory [/icas/IS/log] -e extended mode; enables modifications of string and release definition -h print this help text -v print version information and exit. -X Start the application as any user. ``` `pss ISD` para ver el de nuestro string R4 no trackers ```shell! /icas/IS/bin/ISGui -d /tmp/String67_sala64 -r /icas/kickstart/itec_releases/itec_releases_phase2_string_67 -s /icas/kickstart/strings_def/different_configurations_strings/string_def_ph2ins63_iCAS_PhaseII_String_67_R4_TRACKERS_NO_TCF -e ``` R5 ```shell! /icas/IS/bin/ISGui -d /tmp/String67_sala64 -r /icas/kickstart/itec_releases/itec_releases_phase2_string_67 -s /icas/kickstart/strings_def/string_def_ph2ins63_iCAS_PhaseII_String_67_R5 -e ``` en -d lo que hayamos visto en el pss (/tmp/String67_sala64) y luego lo otro que nos interes Una vez dentro se ve esto ![](images/![Alt%20text](image.png).png) podemos ver en monitor el estado de las maquinas A la derecha seleccionamos la release que nos interesa: ![](images/2024-02-06-16-52-03.png) Luego puedes seleccionar diferentes formas de instalar. Seleccionas en software directory y en adaption los slots que quieras (deberian ser el mismo en ambos). Background install lo hace sin molestar a los que este en otros slots. Destructive los tira pero es mas rapido. Si haces el destructive deberias seleccionar en advanced settings el kickstart override (solo se selecciona cuando se arranca de 0). Luego le das a start y ya va saliendo un log de como va -------------------- para hacer overload a una maquina utilizar el comando `stress`. Es posible que haya que descargarse el paquete y pasarlo mediante scp a la maquina. ### Coding ispection de un fichero escribes m_ada_review_file.sh y tabular por si estuviera en otro sitio en otro server `/COTS/AutoAndTools/ada_review_code-V3.65-gnat-7.0.2_just/ada_review_code/bin/m_ada_review_file.sh nombre_fichero.ada` tambien existe una pagina para hacer las justificaciones, de donde podemos sacar que incidencia solucionar con cada excepcion: http://172.30.223.165/REPOSITORY/CODING_STDS/iTEC_R4.4.1/R4.4.1-TIME_11_01_2024/full/ADA/csi_statistics.xml http://172.30.223.165/general/php/access_login.php ### Hacer una build - Asegurarse que esta todo compilado. Para ello: crs -n - Si los Flows están sin compilar no pasa nada, el drf también suele dar problemas y en la mayoría de ocasiones podemos ignorarlo también. - Para hacer la build: `make_builds.sh itec $nombre_De_la_build all yes` (en nuestro caso CR_1382_CMD_TESTING)`/ip2_4_4_1_CMS/fdp/macros/macros_clear/make_builds.sh itec CR_1382_CMD_TESTING "FDP CMD CMS FDO DMN XCN IMAS CORRP XML_SCEN" yes` - La palabra itec siempre hay que ponerla por el proyecto. El all es para generar todos los bl. Y el yes es para que se copie la build en el servidor, que es necesario para luego poder instalarla. - Luego comando: bfdp - En el /p1itec/builds/nombre_de_la_vista ejecutar: ll \*/tmp/\*\\.bl* - Los ficheros que salgan son los que hay que guardarse para construir la build y poder instalar. (IS R4.3.2-01) [S6x Sala 64 indra_ph2 nor@ph2ins63:/icas] find -type f -name "*CR_1382_CMD_TESTING*\.bl*" ./install/X/xml_scen_CR_1382_CMD_TESTING.bl_s10850_v1 ./install/X/xcn_CR_1382_CMD_TESTING.bl_s49481_v1 ./install/I/imas_CR_1382_CMD_TESTING.bl_s27915_v1 ./install/C/cms_CR_1382_CMD_TESTING.bl_s39150_v1 ./install/C/corrp_CR_1382_CMD_TESTING.bl_s15185_v1 ./install/C/cmd_CR_1382_CMD_TESTING.bl_s45159_v1 ./install/D/dmn_CR_1382_CMD_TESTING.bl_s21229_v1 ./install/F/fdo_CR_1382_CMD_TESTING.bl_s03533_v1 ./install/F/fdp_CR_1382_CMD_TESTING.bl_s42382_v1 Ahora los sustituimos en la build que queremos modificar en `(IS R4.3.2-01) [S6x Sala 64 indra_ph2 nor@ph2ins63:/icas/kickstart] vim itec_releases/itec_releases_phase2_string_67 ` ```sh BUILD_NAME : CR_1382_CMD_TESTING DESCRIPTION : CR_1382_CMD_TESTING_testing_strings BUILDS : \ imas_CR_1382_CMD_TESTING.bl_s27915_v1 \ cmd_CR_1382_CMD_TESTING.bl_s45159_v1 \ corrp_CR_1382_CMD_TESTING.bl_s15185_v1 \ cms_CR_1382_CMD_TESTING.bl_s39150_v1 \ dmn_CR_1382_CMD_TESTING.bl_s21229_v1 \ fdp_CR_1382_CMD_TESTING.bl_s42382_v1 \ fdo_CR_1382_CMD_TESTING.bl_s03533_v1 \ xcn_CR_1382_CMD_TESTING.bl_s49481_v1 \ drf_R4.4.1-04.bl_s38914_v1 \ icwp_CWP_02.A07_20240117_04_FAT.bl_s56227_v1 \ icwp_icas_components_R4.4.1-04.bl_s06356_v1 \ icwp_CWP_02.A07_20240117_04_FAT_tools.bl_s09116_v1 \ corrp_tools_R4.4.1-04.bl_s13196_v1 \ corrp_ttm_tool_tcl_8_6_patch.bl_s61787_v1 \ cms_tools_R4.4.1-04.bl_s21564_v1 \ xml_scen_CR_1382_CMD_TESTING.bl_s10850_v1 \ fdp_tools_R4.4.1-04.bl_s54197_v3 \ drf_saphira_R4.4.1-04.bl_s55053_v1 \ fdp_saphira_R4.4.1-04.bl_s37337_v1 \ corrp_saphira_R4.4.1-04.bl_s15124_v1 \ conf_patch_ITC161223_testing_enviroments_R441.bl_s04157_v1 \ fpl_checker_R4.4.1-04.bl_s15995_v5 \ atg_iSIM_v04.12_R4.4.1_20231222_r145743_147593.bl_s51615_v1 \ epp_iSIM_v04.12_R4.4.1_20231222_r145743_147593.bl_s38603_v1 \ pp_iSIM_v04.12_R4.4.1_20231222_r145743_147593.bl_s20260_v1 \ smp_iSIM_v04.12_R4.4.1_20231222_r145743_147593.bl_s05646_v1 \ isar_iSAR_V1.3.08_RH7.9.bl_s32704_v1 \ fls_R4.4.1-04.bl_s63505_v3 \ adap_gen_R4.4.1-04_R441_03_03_KRH_V1.bl_s25251_v3 \ adap_icwp_CCT_KRH_R441_CWP_02.A07_20240117_04_FAT_R4.4.1-04.bl_s45127_v1 \ conf_patch_krh_atsm_R4.bl_s11743_v11 \ sw_configuration_R4.2_GTK3_14_15.gnat_7.1.2_CMD_FDO_for_ESS_accesibility_at_RH7.4.bl_s47572_v1 \ atg_ESSI_FUNC_R4.4.1-04.bl_s32622_v2 \ cmd_ESSI_FUNC_R4.4.1-04.bl_s54782_v2 \ cms_ESSI_FUNC_R4.4.1-04.bl_s31358_v2 \ corrp_ESSI_FUNC_R4.4.1-04.bl_s22778_v2 \ ess_manager_ESSI_FUNC_R4.4.1-04.bl_s27297_v2 \ fdo_ESSI_FUNC_R4.4.1-04.bl_s20680_v2 \ fdp_ESSI_FUNC_R4.4.1-04.bl_s58702_v2 \ icwp_ESSI_FUNC_R4.4.1-04.bl_s18188_v2 \ isar_ESSI_FUNC_R4.4.1-04.bl_s48473_v2 \ rfw_ESSI_FUNC_R4.4.1-04.bl_s45969_v2 \ icwp_CWP_02.A07_20240117_04_FAT_dp_rules_set_DelivDfsDpRules.bl_s04930_v1 \ icwp_CWP_02.A07_20240117_04_FAT_ep_rules_set_DelivDfsEpRules.bl_s62562_v1 \ conf_patch_load_finished_install.bl_s61365_v1 \ conf_patch_isim_mute_sessions.bl_s36994_v2 \ conf_patch_CWP_V2A06_capture_and_replay.bl_s29575_v1 END ``` ahi estan modificados los nuestros Luego ya instalas normal ### Hacer overload de una maquina `ll CMS_PLS_TECH.cfg` desde el cds de la maquina, es un enlace simbolico al correspondiente. Ahi lo importante es que hay una lista con los vip, que tiene thresholds diferentes. Yo bajo el tiempo y quito el gzip de los vip, y asi se hace un gzip de / en /tmp/borrar y ya esta. ``` tar -czf /tmp/borrar / ``` ### Añadir/quitar maquinas Mirar en el Current Build Slot el fichero `itec_hosts.txt`. ## Cambiar id de una maquina Cambiar el id de una maquina sirve para, por ejemplo, que se pinte en otro lado. Esto puede ser util para probar diferentes configuraciones o si no se tienen suficientes maquinas para paliar esto. Primero se cambia el `itec_hosts.txt` del cds de las maquinas que esten conectadas, cambiendo el ultimo numero, el cual es el ID. Luego tambien en `SUP_SUBSYSTEM_ID` del cds y del dmm (slot del demonio) Tambien hay que hacer un stop icas y relanzarlo para que se actualicen los cambios. ## Encontrar los qddd Los qddd se encuentran en el fdp en el `ddd` ## Traza Puede haber trazas de diferente tipo, de normal usamos warning ```ada Q_LIB_LOG.P_TRACE_ERROR (V_CATEGORY => Q_LIB_LOG.E_WARNING, V_UNIT => "P_OPEN_WINDOW", V_TEXT_DATA => "Contenido de la traza"); ``` ## VER TABLA TLS ./tls_tool.sh ## Para conectarse a ip2server86 desde foticlient desde ip2server3: `ssh -XC jpabreu@ip2server86` luego `su nor` como simepre para acceder como nor y ver las vistas que nos interesan dfs: 4.4.1 lvnl:5.x ## Version matrix Nos han instalado una version que no han incluido en el itec_releases del s67. Por lo tanto el version matrix se ha generado mal. Esto lo que porvoca es que no se pueda reiniciar desde la CMD porque el sistema entiende que las versiones no son compatibles, porque tiene una version que no encuentra en el version matrix. El version matrix esta en cualquier maquina en el directorio: `vim /icas/CMS_VERSIONS_MATRIX.xml`. Para arreglarlo, lo que tenemos que hacer es ir a nuestro itec_releases y agregar la version que han instalado. Despues hay que instalar una version para que se regenere el version matrix, puede ser en cold o en warm. Si no, podemos instalar desde el cmmc (hay que hacerle chmod +x), es la opcion 13 para hacer el restart: 67623 [05/04/2024 10:42:29] ll cmmc* 67624 [05/04/2024 10:42:40] vim cmmc_test.sh 67625 [05/04/2024 10:43:37] ls *.mib 67626 [05/04/2024 10:43:43] vim CMS_ICAS_MIB.mib 67627 [05/04/2024 10:49:08] ll *.oid 67628 [05/04/2024 10:49:16] vim CMS_ICAS_MIB.oid 67629 [05/04/2024 10:50:44] chmod +x cmmc_test.sh 67630 [05/04/2024 10:50:48] ./cmmc_test.sh 67631 [05/04/2024 11:00:44] ./cmmc_test.sh 67632 [05/04/2024 11:04:21] bash -x cmmc_test.sh 67633 [05/04/2024 11:05:49] h ## Fichero profile cmd En el cds `profile_cmd.xml` tiene la configuracion de, por ejemplo la disposicion de las CWPs o de los fdos en la cmd. ## Servicios y eventos de un modulo Para saber que servicios y eventos tiene un modulo, en el current_build_slot ejecutar: java -jar CLR.jar lib_mod_cms_rsm.so Con cualquier componente que lleve iMAS. ## Compilar y que salgan los warnings `make_itec -f mod_cmd` `gnatmake -sf <nombre_fichero>` ## Para trazas, convertir enum en un string function F_GET_ENUM_AS_STRING ( V_ENUM : T_ENUM_TYPE ) return STRING; q_cmd_gen_conv_string.ads En el string itga -> shutdown.sh ln -s build_slot_5 curent_build_slot itgb -> shutdown.sh ln -s build_slot_5 curent_build_slot itga core itgb visual generar ejercicios de sim itgc hmi del isim ( lo que vamos a usar ) Cambio de slot en iSIM En ATG /icas -> unlink current_build_slot ln -s build_slot_X current_build_slot cds shutdown.sh startup.sh En EEP /icas -> unlink current_build_slot ln -s build_slot_X current_build_slot cds shutdown.sh (y lanzar x11 para poder conectarse por VNC si se quiere) En SMP /icas -> unlink current_build_slot ln -s build_slot_X current_build_slot cds shutdown.sh (y lanzar x11 para poder conectarse por VNC) ATG - s11itga EPP - s11itgb SMP - s11itgc Para el itgb y el itgc.. el itgc es la parte grafica del simulador y el itgb es para crear los usuarios y los escenarios. como root init 3 init 5 Y despues como nor en /home/nor ejecutar el script para levantar el vnc. ## Cambios en el change ![image](https://hackmd.io/_uploads/BkvCMHIGC.png) ![image](https://hackmd.io/_uploads/rykGmB8G0.png) ![image](https://hackmd.io/_uploads/ryrbmrUMR.png) ![image](https://hackmd.io/_uploads/SyFh7SLMR.png) ![image](https://hackmd.io/_uploads/ByKTQH8MR.png) ![image](https://hackmd.io/_uploads/H1Od4S8zC.png) ![image](https://hackmd.io/_uploads/SyWLVBUGC.png) ## Estados posibles - <div style="color:red">Rojo - catastrophically failing</div> - <div style="background:black; color:white">blanco - offline</div> - <div style="color:orange">naranja - offline maintenance (solo para fdps)</div> - <div style="color:#CCCC00">amarillo - online available</div> - <div style="color:green">verde - online in use</div> - <div style="color:#777777">gris - unknown</div> ## cosas sueltas en el fichero `/icas/current_build_slot/adap/subsystem_instances.cms.txt` se puede ver la info de las subsystem instances. Nombre tecnico (technical name) y el de adaptacion. ``` 17 => record Identity_Name = CWP-011 Class_Indicator = CWP Operation_Mode = AVAILABLE Subsystem_Group => record Identity = WEST Reference = 18 Working_Position => record Identity = TRUP Reference = 88 ``` Identity name es el que usamos nostros, Identity son los nombres que salen en las cajas (vienen por adaptacion). Si tenemos su numero de instancia (cds/itec_hosts.txt), nos vamos al fichero de antes y contamos desde el primero de ese tipo n posiciones (pueden saltarse numeros en los nombres, no fiarse). ## Lanzar GTK_INSPECTOR Podemos lanzar el starts con la variable de entorno de debug activada. Para que se pueda activar, primero hay que modificar los settings de genome para que nos permita utilizar el inspector. `gsettings set org.gtk.Settings.Debug enable-inspector-keybinding true` `GTK_DEBUG=interactive starts` Tras esto, dentro de la CMD: `Control+Shift+I` / `Control+Shift+D` Puede ser que a veces no se cambie, o que parezca que si pero no. Jugar haciendolo tambien en la consola de dentro de la CMD. Para ver si se ha hecho el cambio: `gsettings get org.gtk.Settings.Debug enable-inspector-keybinding` Tambien parece ser que dentro del cds se hace diferente a fuera, seguramente por que pilla la version de gtk del so en vez de la del so? Otro comando que hace lo mismo: `dconf write /org/gtk/Settings/Debug/enable-inspector-keybinding true` Es posible que haya que hacerlo desde la ruta absoluta (/icas/build_slot_x) en vez desde el cds revisar https://askubuntu.com/questions/916334/ubuntu-16-04-glib-gio-message-using-the-memory-gsettings-backend-your-settin Otras veces lo que ha servido ha sido meter la variable de entorno en el startup.sh ## ESS Es un entorno de pruebas automatizadas. Para activarlo, hay que modificar la variable ESS_MODE en el fichero `environment_configuration`. En este otro fichero hay mas variables de entorno importantes. ```bash ## ESS MODE ## ENABLED ==> Startups ESS Agents ## ATK ==> Startups ESS Agents and configure Subystem GTKADA accesibility ## DISABLED ==> Default mode. Does not start any ESS Agent ## export ESS_MODE=DISABLED ``` Luego, hay un script que crea una carpeta llamada os_libs y le mete las librerias concreatas que necesita. Es posible que esto con el cambio de RH8.6 no se necesite mas. El parche de ess tambien modifica ## Poner una CWP en operational CWP en amarillo = Online not operational. Basta con asignarle un sector para que se ponga en verde. Para que funcione, hay que ir al `startup.sh` de la CMD y asegurarse de que las variables de consolidación estén así: ``` # Set consolidation variables # export CMD_FDO=INACTIVEFDO export CMD_CWP=INACTIVECWP #export CMD_FDO=ACTIVEFDO #export CMD_CWP=ACTIVECWP ``` Ya en la CMD: Airspace > Sector Plan > Modify > Consolidation, seleccionar cualquier fila de la tabla y cambiar la CWP asignada en Executive y Planner por la deseada. Luego, Save Consolidation > Apply Sector Plan. # BASURA POST-GSUS De vez en cuando puede saltar un error como este: ``` tail: inotify cannot be used, reverting to polling: Too many open files ``` El error sale porque hay demasiados procesos gio ejecutándose. Para arreglarlo, hacer `pkill gio` Fichero para ver las builds instaladas en cada slot de la máquina: `/icas/CONFIG_FILE_build_slot_?` Comando para cambiar la ruta del pixbuf: `%s/\/it\/sbx\/wave\/x86_64-linux\/gdk-pixbuf-2.42.2-gtk-3.24\/install\/lib\//\/icas\/current_build_slot\//g` La ruta del fichero es `/icas/current_build_slot/gdk-pixbuf-2.0/2.10.0/loaders.cache` En un savedata: `extra/ism_output_D2.txt` contiene los eventos que llegan y salen de diferentes componentes. ## Arreglo de las CWPs en 5.2 Desde el cds de la cwp: ``` scp nor@ph2ins63:/usuarios/jsevillam/startup_icwp.sh . cd adap/sdd_data/cct/default/generics ln -s ICWP_ADM_EDP_PM_CCT_WINDOW_4K.CFG ICWP_ADM_EDP_PM_CCT_WINDOW.CFG cd ../cwr/default/ ln -s ICWP_ADM_EDP_PM_CCT_DIRF_SETTINGS_4K.CFG ICWP_ADM_EDP_PM_CCT_DIRF_SETTINGS.CFG ``` ## ITC coding inspections: `ITC#158813` -> [4.4.1 / 4.4.2 / 4.4.2.1] `ITC#180412` -> [5.2] ## IT Request P.ej., para cuando haces un reboot y no levanta la máquina. ![image](https://hackmd.io/_uploads/SkSqhVLOJg.png) ## GTK [OS / GTK VERSION / GTKADA VERSION] RH7.9 / 3.14.15 / 17.2 RH8.6 / 3.22.30 / 23.2 Checkear versión del OS: `cat /etc/os-release` Checkear versión del GTK: `gtk-launch --version` Repositorios: [GTK] https://gitlab.gnome.org/GNOME/gtk/ [GTKADA] https://github.com/AdaCore/gtkada Cuando alguna ITC (por ejemplo, un crash de CMD) se debe a un bug de GTK, podemos buscar aquí si esa issue está documentada y así justificar que no es cosa nuestra: https://gitlab.gnome.org/GNOME/gtk/-/issues ## Arrancar las FDPs/CORRPs sby Si solo arranca una de las FDPs/CORRPs puede ser por un error de red, que viene mal configurada por instalación. En `cms_installed_networks.cfg`, la OP_SBY_LAN te muestra qué interfaz de red hay que mirar. ``` indra_ph2[5/5/5 nor@s67corb3:/icas/current_build_slot] cat cms_installed_networks.cfg CORE_LAN_1=eth2 CORE_LAN_2=eth3 IMAS_LAN_1=eth0 IMAS_LAN_2=eth1 OP_SBY_LAN=bond2 ``` Haciendo un `ifconfig` podemos ver la ip de la bond2. ``` indra_ph2[5/5/5 nor@s67corb3:/icas/current_build_slot] ifconfig bond2 bond2: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500 inet 10.210.52.4 netmask 255.255.252.0 broadcast 10.210.55.255 ether b4:96:91:b0:4b:a4 txqueuelen 1000 (Ethernet) RX packets 305920 bytes 20980638 (20.0 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 305317 bytes 19428834 (18.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 ``` En `sby_configuration_file` hay que poner como SBY_HOSTNAME la ip de la bond2 que hemos visto en **la otra máquina**. ``` indra_ph2[5/5/5 nor@s67cora3:/icas/current_build_slot] cat sby_configuration_file PORT_FPM_SBY 63021 PORT_CORR_SBY 63022 PORT_RKM_SBY 63023 PORT_FDM_DS_SBY 63024 PORT_FDM_XADM_FP_SBY 63025 PORT_FDM_XCO_TO_SBY 63026 PORT_FDM_WIF_SBY 63027 PORT_PMQ_TO_SBY 63028 PORT_DLS_SBY 63029 PORT_FDM_XAMA_FP_SBY 63030 CONNECTION_ATTEMPS 1 SBY_HOSTNAME 10.210.52.4 ``` ## Labels de los botones de CMD Las labels que aparecen en los botones por adaptación se muestran en este fichero: `adap/interface_groups.cmd.txt` No se pueden cambiar a mano tho :pensive: ## Cambiar el string de RH8.6 a RH7.9 (o viceversa) ![image](https://hackmd.io/_uploads/B1UqgHqlxx.png) ## Asterix y cómo poner en verde las SNETS Los asterix son un tipo de mensajes con un formato definido por Eurocontrol, la organización que regula el tráfico aéreo en Europa. Mediante la `p_sim_asterix`, podemos crear asterix y hacerlos llegar a las CWPs para que se activen las alertas correspondientes. Para activar las SNETS (en una CWP): ``` [3/3/3 nor@s03c001:/icas/current_build_slot] ./p_sim_asterix Multicast address : 239.80.110.4 Local interface : 127.0.0.1 local port : 30008 remote port : 63046 ``` Seleccionar el asterix 4. Hay que rellenar la tabla de la siguiente manera: ``` (R_FSPEC => (R_F1 => TRUE, R_F2 => TRUE, R_F3 => TRUE, R_F4 => TRUE, R_F5 => FALSE, R_F6 => FALSE, R_F7 => TRUE, R_FX => FALSE, R_F8 => FALSE, R_F9 => FALSE, R_F10 => FALSE, R_F11 => FALSE, R_F12 => FALSE, R_F13 => FALSE, R_F14 => FALSE, R_FX1 => FALSE, R_F15 => FALSE, R_F16 => FALSE, R_F17 => FALSE, R_F18 => FALSE, R_F19 => FALSE, R_F20 => FALSE, R_F21 => FALSE, R_FX2 => FALSE), R_010 => (R_SAC => 62, R_SIC => 45), R_000 => (R_MESSAGE_TYPE => E_ALIVE_MESSAGE), R_015 => (R_REP => 2, R_SDPS_ID_LIST => (1 .. 1 => (R_SAC => 98, R_SIC => 83), 2 .. 2 => (R_SAC => 98, R_SIC => 84))), R_020 => (R_TIME_OF_MESSAGE => 0), R_040 => (R_ALERT_ID => 0), R_045 => (R_SPARE_045_002 => 0, R_ALERT_STATUS => 0, R_SPARE_045_001 => 0), R_060 => (R_060_1 => (R_MRVA => FALSE, R_RAMLD => FALSE, R_RAMHD => FALSE, R_MSAW => TRUE, R_APW => TRUE, R_CLAM => FALSE, R_STCA => FALSE, R_FX => TRUE), R_060_2 => (R_AFDA => FALSE, R_RIMCA => FALSE, R_SP1 => FALSE, R_SP2 => FALSE, R_SP3 => FALSE, R_OF => FALSE, R_OL => FALSE, R_FX1 => FALSE)), ``` Signficado de ciertos campos: * **R_010**: SAC/SIC de SNETS info. * **R_015**: SAC/SIC del tracker. * **R_060**: Rellenar siempre el R_FX del campo: R_060_1. Si se pone a FALSE, deja de leer todo lo que venga después. Los SAC/SIC (identificadores de región) se sacan de los siguientes ficheros de adaptación: ![image](https://hackmd.io/_uploads/SJdrDicVeg.png) Una vez relleno, se crea un .bin en cds/log/dumps, se copia al cds y se lanza el mensaje mediante este comando: `./p_sim_asterix <id del udp_config que quieres> <fichero a inyectar> <tiempo entre mensajes>` Es importante fijarse en la multicast address al lanzar la p_sim_asterix. En el `ipconnector_config.xml`, vemos que por defecto se lanza la configuración para ARTAS y FBS. Hay que coger las SAFETY_NETS, tal que así: `./p_sim_asterix SAFETY_NET_1 p_prueba_asterix.bin 100` ## Poner AMLS en verde Desde cualquier máquina del string, `vim ipconnector_config.xml`. Buscar AMLS dentro del fichero, copiar la IP y conectarse por ssh. ``` indra_ph2[2/2/2 nor@s67fdpb3:/icas/current_build_slot] vim ipconnector_config.xml <tcp_config id="AMLS_A TCP Connection" ip="10.210.36.74" port="23330" role="CLIENT" /> <tcp_config id="AMLS_B TCP Connection" ip="10.210.36.74" port="23330" role="CLIENT" /> indra_ph2[2/2/2 nor@s67fdpb3:/icas/current_build_slot] ssh -XC 10.210.36.74 indra_ph2[nor@s67isaa3:~] cdi indra_ph2[nor@s67isaa3:/icas] cd iSAR/ indra_ph2[nor@s67isaa3:/icas/iSAR] ./iSAR ``` Para lanzar el iSAR (iCAS Simulation and Replay). Se abrirá en una nueva ventana, basta con hacer clic derecho al botón AMLS-SIM y hacer Start Process. ![image](https://hackmd.io/_uploads/SyD_O_i8ee.png) ## Activar trazas de debug Trazas de ADA a Debug en iCAS, copia este texto dentro de un fichero en la carpeta log, y el nombre del fichero tienen que ser nombre_componente.cfg: MINIMUM_LOG_LEVEL=DEBUGGER Además este fichero no se elimina entre reinicios de iCAS, si queréis dejar de ver las trazas de debug, tenéis que borrar el fichero. Por cierto las trazas de debug salen en un fichero similar al stderr pero que acaba en *.debug ## Casos extremos BORRAR ENLACE SIMBÓLICO libc.so.6 Si por alguna razón tienes que llegar a este caso, lo primero de todo es estar como root y lo segundo saber a que librería apunta libc.so.6. Una vez borrado este enlace, todo deja de funcionar, todos los comandos. En enlace apunta a la librería que está utilizando linux, sin ella, ni ls ni cd ni nada funciona. Tampoco funciona ssh ni nada, NO CIERRES LA SESIÓN. Para arreglarlo, ejecutar: ``` sln /lib64/libc-2.17.so /lib64/libc.so.6 ``` siendo ```libc-2.17.so``` la librería a la que apuntaba antes el enlace simbólico. Esta información la descubrimos por error, borrando sin querer libc.so.6. Si estás leyendo esto por una razón similar, enhorabuena, eres otro incauto :) ## Lanzar simultáneamente R4 y R5 Se pueden separar las máquinas del string para que corran dos versiones distintas al mismo tiempo. Para ello, hay que asegurarse de la multicast address es distinta en los dos slots distintos que se quieren lanzar, de manera que las máquinas no se vean entre sí. Esto está definido en *cds/STRING_DEFINITION:* ``` MCAST_SUBNET : "65" ``` Este número es el segundo octeto de la dirección IP definida tanto en el *MOMInfo.xml* como en los diferentes ficheros de la DDS (p.ej., *dds_DDS_PERIPHERAL_STATES_ACCESSOR.xml*): ``` <multicast address="239.65.33.20"``` Son muchos ficheros como para cambiarlo a mano, pero si has instalado la versión correctamente, la multicast address ya debería ser distinta en R4 y R5. El último paso es retocar el *itec_hosts.txt* en cada slot para separar el string en dos subsets. De esta manera el dmn de la máquina solo se va a intentar comunicar con las otras allí definidas (es decir, todas las que planees arrancar en una misma versión). ## Poner en marcha ITG y FMTP Links En ATG /icas -> unlink current_build_slot; ln -s build_slot_X current_build_slot cds shutdown.sh startup.sh En EEP /icas -> unlink current_build_slot; ln -s build_slot_X current_build_slot cds shutdown.sh (y lanzar x11 para poder conectarse por VNC si se quiere) En SMP /icas -> unlink current_build_slot; ln -s build_slot_X current_build_slot cds shutdown.sh (y lanzar x11 para poder conectarse por VNC) ATG - s11itga EPP - s11itgb SMP - s11itgc Para el itgb y el itgc.. el itgc es la parte grafica del simulador y el itgb es para crear los usuarios y los escenarios. como root init 3 init 5 Y despues como nor en /home/nor ejecutar el script para levantar el vnc. ## Simulador Etic para Enlaces Esto sirve para congelar los enlaces en ciertos estados específicos. En primer lugar, instalar el etic, esto se puede hacer en cualquier máquina. Recomiendo no hacerla en el fdp. Para instalar: ``` yum install etic ``` Abrir herramienta: ``` etic (espectacular, lo se) ``` Abierta la herramienta, toca darle en la parte superior a: session, new y en la ventana emergente de la izquierda darle a "Communication Partners" Se te abre una ventana, le das al siguiente botón ![image](https://hackmd.io/_uploads/r1cow0iHWe.png) En la nueva ventana tienes que rellenar los campos: -Local ID: se puede encontrar en external_links.cms.txt (cds/adap del fdp). La remote del FDP es la local de aquí. -Remote ID: se puede encontrar en external_links.cms.txt (cds/adap del fdp). La local del FDP es la remote de aquí. -TR: se puede encontrar en FMTPConnectorCfg.xml del fdp. Asociado al link. -TI: se puede encontrar en FMTPConnectorCfg.xml del fdp. Asociado al link. -TS: se puede encontrar en FMTPConnectorCfg.xml del fdp. Asociado al link. Remote Address: Normalmente la IP bond0 del fdp. Local Address: Ip de la máquina donde instales, importante que la IP esté incluída en el FMTPConnectorCfg.xml del fdp como cliente autorizado. El itga tiene que estar caído para que funcione. Tal y como está el string, recomiendo hacer todo esto desde el propio itga, porque ya están incluidas las IPs en el FMTPConnectorCfg.xml. ¿Qué sigue sin ir? Bueno pues lo siento, a llorar a otra parte. ## Event Reports Todos los tipos de ER están definidos en `cms/sup/spv/q_spv_sys_message.ads`. ## Probar sin impresoras disponibles En el s67 somos unos pobres desgraciados sin impresoras. Si fueran necesarias para poder probar algo, te puedes ir al código y comentar las líneas que borran el fichero temporal donde se almacena el texto. Por ejemplo, en `wp/cmd/application/q_cmd_print_services.adb` : ``` C_CONFIGURATION_FILE_NAME : constant Q_FILE_NAME.BOUNDED_STRING := Q_FILE_NAME.TO_BOUNDED_STRING (".configurationfile.txt"); [...] -- Delete file ADA.TEXT_IO.DELETE (FILE => V_CONFIGURATION_FILE); ``` Así puedes compilar la librería de CMD, pulsar el botón de Print y comprobar qué se estaría imprimiendo en el fichero dentro del cds.

    Import from clipboard

    Paste your markdown or webpage here...

    Advanced permission required

    Your current role can only read. Ask the system administrator to acquire write and comment permission.

    This team is disabled

    Sorry, this team is disabled. You can't edit this note.

    This note is locked

    Sorry, only owner can edit this note.

    Reach the limit

    Sorry, you've reached the max length this note can be.
    Please reduce the content or divide it to more notes, thank you!

    Import from Gist

    Import from Snippet

    or

    Export to Snippet

    Are you sure?

    Do you really want to delete this note?
    All users will lose their connection.

    Create a note from template

    Create a note from template

    Oops...
    This template has been removed or transferred.
    Upgrade
    All
    • All
    • Team
    No template.

    Create a template

    Upgrade

    Delete template

    Do you really want to delete this template?
    Turn this template into a regular note and keep its content, versions, and comments.

    This page need refresh

    You have an incompatible client version.
    Refresh to update.
    New version available!
    See releases notes here
    Refresh to enjoy new features.
    Your user state has changed.
    Refresh to load new user state.

    Sign in

    Forgot password

    or

    By clicking below, you agree to our terms of service.

    Sign in via Facebook Sign in via Twitter Sign in via GitHub Sign in via Dropbox Sign in with Wallet
    Wallet ( )
    Connect another wallet

    New to HackMD? Sign up

    Help

    • English
    • 中文
    • Français
    • Deutsch
    • 日本語
    • Español
    • Català
    • Ελληνικά
    • Português
    • italiano
    • Türkçe
    • Русский
    • Nederlands
    • hrvatski jezik
    • język polski
    • Українська
    • हिन्दी
    • svenska
    • Esperanto
    • dansk

    Documents

    Help & Tutorial

    How to use Book mode

    Slide Example

    API Docs

    Edit in VSCode

    Install browser extension

    Contacts

    Feedback

    Discord

    Send us email

    Resources

    Releases

    Pricing

    Blog

    Policy

    Terms

    Privacy

    Cheatsheet

    Syntax Example Reference
    # Header Header 基本排版
    - Unordered List
    • Unordered List
    1. Ordered List
    1. Ordered List
    - [ ] Todo List
    • Todo List
    > Blockquote
    Blockquote
    **Bold font** Bold font
    *Italics font* Italics font
    ~~Strikethrough~~ Strikethrough
    19^th^ 19th
    H~2~O H2O
    ++Inserted text++ Inserted text
    ==Marked text== Marked text
    [link text](https:// "title") Link
    ![image alt](https:// "title") Image
    `Code` Code 在筆記中貼入程式碼
    ```javascript
    var i = 0;
    ```
    var i = 0;
    :smile: :smile: Emoji list
    {%youtube youtube_id %} Externals
    $L^aT_eX$ LaTeX
    :::info
    This is a alert area.
    :::

    This is a alert area.

    Versions and GitHub Sync
    Get Full History Access

    • Edit version name
    • Delete

    revision author avatar     named on  

    More Less

    Note content is identical to the latest version.
    Compare
      Choose a version
      No search result
      Version not found
    Sign in to link this note to GitHub
    Learn more
    This note is not linked with GitHub
     

    Feedback

    Submission failed, please try again

    Thanks for your support.

    On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?

    Please give us some advice and help us improve HackMD.

     

    Thanks for your feedback

    Remove version name

    Do you want to remove this version name and description?

    Transfer ownership

    Transfer to
      Warning: is a public team. If you transfer note to this team, everyone on the web can find and read this note.

        Link with GitHub

        Please authorize HackMD on GitHub
        • Please sign in to GitHub and install the HackMD app on your GitHub repo.
        • HackMD links with GitHub through a GitHub App. You can choose which repo to install our App.
        Learn more  Sign in to GitHub

        Push the note to GitHub Push to GitHub Pull a file from GitHub

          Authorize again
         

        Choose which file to push to

        Select repo
        Refresh Authorize more repos
        Select branch
        Select file
        Select branch
        Choose version(s) to push
        • Save a new version and push
        • Choose from existing versions
        Include title and tags
        Available push count

        Pull from GitHub

         
        File from GitHub
        File from HackMD

        GitHub Link Settings

        File linked

        Linked by
        File path
        Last synced branch
        Available push count

        Danger Zone

        Unlink
        You will no longer receive notification when GitHub file changes after unlink.

        Syncing

        Push failed

        Push successfully